Как проверить статус участника на MSTEAMS

Чтобы проверить статус участника (онлайн или офлайн) в MSTeams, я хочу получать статус участника по электронной почте.

Я обратился к Bot Builder Microsoft Teams Extensions и написал пример кода, чтобы понять мою идею. :

var teams = require("botbuilder-teams");

bot.dialog('FetchMemberInfo', function (session) {
    var memberEmail = '[email protected]';

    var connector = new teams.TeamsChatConnector({
        appId: process.env.MICROSOFT_APP_ID,
        appPassword: process.env.MICROSOFT_APP_PASSWORD
    });

    connector.fetchMemberInfo(session.message.address.serviceUrl, memberEmail, function (err, result) {
        if (err) {
            session.endDialog('There is some error');
        }
        else {
            var memberStatus = result.member.status;
            session.endDialog('%s', JSON.stringify(result));
        }
    });
});

У меня есть только адрес электронной почты участника, и я хочу получить статус участника. Итак, какое место в моем примере кода нужно обновить, чтобы получить информацию об участнике, включающую статус участника? Я также приветствую любые другие предложения, если они есть.


person user964409    schedule 06.06.2018    source источник


Ответы (2)


API для получения/установки статуса присутствия пользователя пока недоступны. Это есть в дорожной карте API, но на сегодняшний день это невозможно.

person Arun-MSFT    schedule 06.06.2018
comment
Есть ли другой способ определить, находится ли пользователь в сети или нет? Например, пытаться отправить сообщение пользователю и искать ответ, который реагирует на статус пользователя? - person user964409; 07.06.2018

На самом деле, мы можем получить статус пользователя (онлайн/офлайн) через API Skype4Business. Вот пример кода:

var authContext = {
    id: botSetting.identifier,
    username: botSetting.username,
    password: botSetting.password,
    domain: botSetting.domain,
    _links: {},
    /*1 seconds*/
    messageInterval: 1000 * botSetting.messageInterval,
    /*30 seconds*/
    messageTimeout: 1000 * botSetting.messageTimeout,
    /*3 minutes, unit in second*/
    statusUpdateInterval: 1000 * botSetting.statusUpdateInterval,
    AppId: null,
    AppPath: null,
    EndPointId: botSetting.endpointId,
    Culture: botSetting.culture,
    UserAgent: botSetting.userAgent,
    /* default timeout to wait for user to accept message is 5 minutes */
    acceptMessageInvitationTimeout: botSetting.acceptMessageInvitationTimeout * 1000,
    logUnhandleEvent: botSetting.logUnhandleEvent,
    RootAppUrl: null,
    /*default is 30 seconds, unit in second*/
    statusAwarenessInterval: (CONFIG.PROACTIVE_MESSAGE_INTERVAL_IN_SECONDS || 30) * SECOND_TO_MILLISECONDS, //30 seconds
    remindProcessProactiveMsgInterval: 1000 * 60 * CONFIG.PROACTIVE_MESSAGE_REMIND_IN_MINUTES,
    proactive_interval: process.env.PROACTIVE_UPDATE_INTERVAL_IN_MINUTES || 2
};
    
function getUserAvailibility(receiver){
    var url = authContext._embedded.people._links.self.href;
    var requestResourceUrl = stringFormat("{0}{1}/{2}/presence", authContext.BaseUri, 
                                           url, receiver);
    console.log("SkypeForBusinessBot getUserAvailibility " + receiver +
                " with url: " + requestResourceUrl);
    return $q.nfcall(request.get, requestResourceUrl, {
        headers: authContext.headers, json: true });
    }

Примечание: получателем является адрес электронной почты пользователя.

person user964409    schedule 16.07.2018
comment
Звучит многообещающе, спасибо. Какой модуль требуется в скрипте Node.js для этой функциональности? - person Andreas; 17.08.2020
comment
А что, если вам нужно сделать это через Teams вместо S4B, как вы сами указали в вопросе? - person TylerH; 15.10.2020