2016-04-13 92 views
0

我正在尝试使用节点js和ucwa.I创建一个聊天应用程序,我想从节点js应用程序向注册的lync用户发送消息。为此,我正在使用ucwa.I能够通过调用ucwa apis进行身份验证,授权和创建应用程序。之后,我需要一些帮助,将IM发送给已注册的lync用户。可以帮助我一些代码示例吗?使用节点js和UCWA的聊天应用程序

我使用的代码如UCWA Lync authentication - 500 web ticket is invalid。 这一步之后如何通过节点js和UCWA发送IM?

以下是我的代码:

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

堆栈溢出仅旨在回答具体问题并解决特定问题。如果你提供了一些代码,或者可能出现了一个错误,那将是最好的。 – GMchris

+0

添加了代码。有人请求帮助我吗? – user3826426

+0

您是否看到客户端应用程序中出现聊天弹出窗口,并且您看到消息传递已被远程参与方接受,并且创建了一个消息连接在事件通道中的消息连接? – ShelbyZ

回答

1

看起来你是正确处理事件,但你没有解析事件结果看,如果自上次周期什么事情发生了。我会建议查看文档(GettingStarted-Events)以确保处理特殊情况。

你的请求开始信息看起来很好,但是实际上并没有看到来自事件通道的事件,很难知道你已正确连接并且另一方接受了邀请。您会在事件通道中看到messagingInvitation,该通道应指示是否已接受/拒绝/其他失败。

您对sendMessage的请求不正确,因为您无法发送JSON式请求,而是发送text/plain或text/html。消息的主体将是要发送的(未)格式的文本。如果你确定你可以发送消息。

当您得到修正并想知道如何处理收到的消息时,请查看message的文档,因为您将再次需要处理事件通道中的数据。