Приложение чата с использованием node js и UCWA

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

Я использую код, как в Аутентификация UCWA Lync — веб-билет 500 недействителен . Как после этого шага отправлять мгновенные сообщения через узел 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');
});

person user3826426    schedule 13.04.2016    source источник
comment
Stack Overflow предназначен только для ответов на конкретные вопросы и решения конкретных проблем. Было бы лучше, если бы вы предоставили код или, возможно, появившуюся ошибку.   -  person GMchris    schedule 13.04.2016
comment
Добавил код. Кто-нибудь может мне помочь?   -  person user3826426    schedule 20.04.2016
comment
Видите ли вы всплывающее окно чата в клиентском приложении, и вы видите, что сообщение messageInvitation принято удаленной стороной, и создается беседа, а messageModality подключен к каналу событий?   -  person ShelbyZ    schedule 20.04.2016
comment
Я вижу, что при нажатии кнопки отправки во всплывающем окне чата на стороне сервера аутентификация пользователя, авторизация и создание приложения происходит в фоновом режиме. После этого не могли бы вы проверить, подходит ли код для отправки запросов на startMessaging, отправки событий и запросов sendMessage? Спасибо.   -  person user3826426    schedule 21.04.2016


Ответы (1)


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

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

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

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

person ShelbyZ    schedule 22.04.2016