2016-04-13 2 views
0

ノードjsとucwaを使用してチャットアプリケーションを作成しようとしています。ノードjsアプリケーションから登録されたlyncユーザーにメッセージを送信したいと思います。これはucwaを使用しています。 ucwa apis.Afterを呼び出すことによってアプリケーションを認証、承認、作成することができます。登録されたlyncユーザーにIMを送信するための助けが必要です。いくつかのコード例を教えてください。チャットアプリケーションノード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

チャット・ポップアップがクライアント・アプリケーションに表示されていますが、messagingInvitationがリモート・パーティによって受け入れられ、messagingModalityがイベント・チャネルで接続されている会話が作成されていることを確認していますか? – ShelbyZ

答えて

1

あなたがイベントを正しく処理しているが、あなたは何が最後のサイクル以降起こっているかどうかを確認するために、イベントの結果を解析していないように見えます。特殊なケースも確実に処理するために、ドキュメント(GettingStarted-Events)を調べることをお勧めします。

あなたのstartMessagingのリクエストはうまく見えますが、実際にはイベントチャンネルから来るイベントを見ないと、あなたが正しく接続されていて、反対側が招待を受け入れていることは分かりません。イベントチャネルにmessagingInvitationが表示されます。これは、受け入れられたかどうかを示すはずです。

JSONスタイルのリクエストではなく、text/plainまたはtext/htmlを送信できるため、sendMessageへのリクエストは正しくありません。メッセージの本文は、送信する書式付きテキスト(un)です。あなたがそれを訂正すれば、メッセージを送ることができるかもしれません。

受信メッセージの処理方法が不明な場合は、messageのドキュメントをもう一度見てください。イベントチャネルでデータを再度処理する必要があります。

関連する問題