2016-04-13 5 views
0

Я пытаюсь создать чат-приложение с помощью узла js и ucwa.I хочу отправить сообщение от узла js aplication зарегистрированному пользователю lync. Для этого я использую ucwa.I могу аутентифицировать, разрешать и создавать приложения, вызывая ucwa apis. После этого мне нужна помощь в отправке IM зарегистрированному пользователю lync. Может кто-нибудь, пожалуйста, помогите мне с некоторыми примерами кода?Приложение чата с использованием узла js и UCWA

Я использую код как в UCWA Lync authentication - 500 web ticket is invalid. После этого шага, как отправить IM через узлы js и UCWA?

Ниже мой код:

var app = require('express')(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

io.on('connection', function(socket){ 
    socket.on('chat message', function(msg){ 

    var http = require('request-promise'); 


var lync = {}; 

lync._authorize = function(){ 

    var self = this; 

    var orgDomain = self.urls.user.match(/https:\/\/([\w\d\.]+)/i)[0]; 

    console.log('orgDomain==>'+orgDomain); 

    http.get(self.urls.user).catch(function(err){ 
     if(err.statusCode == 401){ 
      var toParse = err.response.headers['www-authenticate']; 
      var Oauth = toParse.match(/https:\/\/[\d\w\./_-]+/i)[0]; 
     console.log('Oauth==>'+Oauth); 
      var loginPost = { 
       grant_type: 'password', 
       username: self.username, 
       password: self.password 
      }; 

      return http.post(Oauth, {form:loginPost}); 
     } 
    }).then(function(data){ 
     if(data) { 
      var parsed = JSON.parse(data); 
      //setup authorization 
      http = http.defaults({ 
       headers: {Authorization: parsed.token_type + ' ' + parsed.access_token} 
      }); 
      return http.get(self.urls.user); 
     } 
    }).then(function(data){ 
     //check for split-domain scenario 
     var parsed = JSON.parse(data); 
     var domain = parsed._links.self.href.match(/https:\/\/([\w\d\.]+)/i)[0]; 

    console.log('[1] '+orgDomain); 
     console.log('[2] '+domain); 

     if(domain!== orgDomain){ 
      //split domain scenario 
      self.urls.user = self.urls.user.replace(orgDomain, domain); 
      http = http.defaults({ 
       headers: {Authorization: null} 
      }); 

      self._authorize(); 
     } else { //create app 
      var parsed = JSON.parse(data); 
      self.urls.applications = parsed._links.applications.href; 

      var registerApp = { 
       culture : "en-us", 
       endpointId : "2d9dc28d-4673-4035-825c-feb64be28e4e", 
       userAgent : "NodeJs client" 
      }; 
      return http.post(self.urls.applications, {body: registerApp,json:true}); 
     } 
    }).then(function(app){//start message api 

     console.log("inside start message api=>"+app); 

    var parsed = JSON.parse(app); 


    self.urls.startmessege=parsed._embedded.communication._links.startMessaging.href; 


    var startMessage = 

     { 
     "importance":"Normal", 
     "sessionContext":"33dc0ef6-0570-4467-bb7e-49fcbea8e944", 
     "subject":"Task Sample", 
     "telemetryId":null, 
     "to":"sip:[email protected]", 
     "operationId":"5028e824-2268-4b14-9e59-1abad65ff39" 

      }; 


return http.post(self.urls.startmessege, {body: startMessage, json:true}); 


    }).then(function(app){//events api 
     console.log("inside events api=>"+app); 
     var parsed = JSON.parse(app); 
     self.urls.events=parsed._links.events.href; 
     return http.get(self.urls.events); 


}).then(function(app){//events next api 

    console.log("inside events next api=>"+app); 

     var parsed = JSON.parse(app); 
     self.urls.events.next=parsed._links.next.href; 
     return http.get(self.urls.events.next); 


}).then(function(app){//send message api 

     console.log("inside send message api=>"+app); 
     var parsed = JSON.parse(app); 
     self.urls.sendmessage=parsed._embedded.messaging._links.sendMessage.href; 
     self.urls.sendmessage=self.urls.sendmessage+"?OperationContext=5028e824-2268-4b14-9e59-1abad65ff39" 
     var message= 


     { 
     "data":"Hello World", 
     }; 


     return http.post(self.urls.sendmessage, {body: message, json:true}); 

}).then(function(app){ 

    console.log(app); 
}); 

}; 

lync.setup = function(email, password){ 
    var self = this; 
    var hostname = email.split('@'); 
    this.username = email; 
    this.password = password; 

    //discover urls 
    return http.get('http://lyncdiscover.'+hostname[1]) 
     .then(function(d) { 
      var parsed = JSON.parse(d); 
      self.urls = { 
       self: parsed._links.self.href, 
       user: parsed._links.user.href, 
       xframe: parsed._links.xframe.href 
      }; 

     console.log('self.urls.user==>'+self.urls.user); 
     console.log('self.urls.self==>'+self.urls.self); 
     console.log('self.urls.xframe==>'+self.urls.xframe); 

     return self._authorize(); 


     }); 

}; 



//run app 
lync.setup('[email protected]', 'password'); 

    io.emit('chat message', msg); 
    }); 
}); 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 
+0

Stack Overflow предназначен только для ответа на конкретные вопросы и решения конкретных проблем. Было бы лучше, если бы вы предоставили некоторый код или, возможно, ошибку, которая появилась. – GMchris

+0

Добавил код. Может ли кто-нибудь помочь мне? – user3826426

+0

Вы видите, что всплывающее окно чата появляется в клиентском приложении и вы видите, что обмен сообщениями принимается удаленной стороной, и создается цепочка обмена сообщениями. Связь связана с каналом событий? – ShelbyZ

ответ

1

Похоже, что вы правильно обработки событий, но не разбор результатов событий, чтобы увидеть, если что-то произошло после последнего цикла. Я бы предложил просмотреть документацию (GettingStarted-Events), чтобы убедиться, что вы также обрабатываете специальные случаи.

Ваш запрос на startMessaging выглядит отлично, но, не глядя на события, происходящие из канала событий, трудно понять, что вы правильно подключены и что другая сторона приняла приглашение. В канале событий вы увидите messagingInvitation, который должен указать, был ли принят или отклонен/другой сбой.

Ваш запрос sendMessage неверен, поскольку вы не можете отправлять запросы в стиле JSON, а скорее текст/plain или text/html. Если телом сообщения будет текст (un), отформатированный для отправки. Если вы исправите, что вы можете отправить сообщение.

Когда вы получаете исправление и задаетесь вопросом, как обрабатывать полученные сообщения, посмотрите документацию для message, так как вам снова понадобится обработать данные в канале событий.

 Смежные вопросы

  • Нет связанных вопросов^_^