Приложение чата с использованием узла js и UCWA
Я пытаюсь создать приложение чата с использованием узлов js и ucwa. Я хочу отправить сообщение от узла js приложению зарегистрированному пользователю lync. Для этого я использую ucwa. Я могу аутентифицировать, авторизовать и создавать приложения, вызывая apc ucwa После этого мне нужна помощь в отправке IM зарегистрированному пользователю Lync. Может кто-нибудь помочь мне с некоторыми примерами кода?
Я использую код, как при аутентификации UCWA Lync - 500 веб-билет недействителен. После этого шага, как отправить 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:lenea@contoso.com",
"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('username@domain.com', 'password');
io.emit('chat message', msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
1 ответ
Похоже, что вы обрабатываете события правильно, но вы не анализируете результаты события, чтобы увидеть, произошло ли что-либо с момента последнего цикла. Я бы посоветовал просмотреть документацию ( GettingStarted-Events), чтобы удостовериться и в особых случаях.
Ваш запрос startMessaging выглядит нормально, но без фактического просмотра событий, поступающих из канала событий, трудно понять, что вы подключены правильно и что другая сторона приняла приглашение. Вы увидите сообщение MessagingInvitation в канале событий, которое должно указывать, был ли принят / отклонен / другой отказ.
Ваш запрос sendMessage неверен, так как вы не можете отправлять запросы в стиле JSON, а просто text/plain или text/html. Где тело сообщения будет (не) отформатированный текст для отправки. Если вы исправите это, вы можете отправить сообщение.
Когда вы исправите это и задаетесь вопросом, как обрабатывать полученные сообщения, взгляните на документацию для сообщения, так как вам снова потребуется обработать данные в канале событий.