Бот TEAMS в node.js: «В этом запросе отказано в авторизации» в методе CreateConversation - PullRequest
0 голосов
/ 17 октября 2019

У меня есть бот TEAMS node.js, работающий локально (с ngrok). Я получаю сообщения от клиента TEAMS, и эхо работает

context.sendActivity(`You said '${context.activity.text}'`);

Теперь я хочу отправить этому пользователю сообщение 1to1, но я получаю

Error: Authorization has been denied for this request

при создании разговора.

Мой код:

   var sUserId  = "29:1shb_5I6CkkerBVq4qPqcv5dGwDfkXx11Jbjc1UnGCIv"
   var sServiceUrl = "https://smba.trafficmanager.net/emea/";
   var sTenantId = "942369d2-208e-438b-894c-0d0e1510cf61";
   var credentials = new BotConnector.MicrosoftAppCredentials({
        appId: "xxxxxxx",
        appPassword: "yyyyyyyy"
    });
    var connectorClient = new BotConnector.ConnectorClient(credentials, { baseUri: sServiceUrl });

    const parameters = {
        members: [ { id: sUserId } ],
        isGroup: false,
        channelData:
        {
            tenant: {
                id: sTenantId
            }
        }
    };
    var conversationResource = await connectorClient.conversations.createConversation(parameters);

// I get the error here, next is not executed
    await connectorClient.conversations.sendToConversation(conversationResource.id, {
        type: "message",
        from: { id: "xxxxxxx" },
        recipient: { id: sUserId },
        text: 'This a message from Bot Connector Client (NodeJS)'
    });

appId & appPassword действительны (из файла .env), если они неверны, я не могу получать сообщения от клиента TEAMS

У меня тот же кодсоздать беседу в боте .NET, и это работает для меня:

  var parameters = new ConversationParameters
   {
       Members = new[] { new ChannelAccount(sUserId) },
       ChannelData = new TeamsChannelData
       {
            Tenant = new TenantInfo(sTenantId),
       },
   };

   retValue = await connectorClient.Conversations.CreateConversationAsync(parameters);

Что не так в моем коде node.js?

Спасибо,

Диего

1 Ответ

1 голос
/ 17 октября 2019

Вы доверяли сервису? Это не так, исходя из вашего кода, и это классическая причина 401 в вашем случае.

В файле node.js сделайте следующее:

MicrosoftAppCredentials.trustServiceUrl(serviceUrl);

Если вы хотите большеподробности об этом смотрите в документации о получении 401 при отправке проактивных сообщений здесь

, а также об этом SO-ответе о командах и проактивном обмене сообщениями, в частности о последнем блоке. Упреждающий бот для обмена сообщениями в командах без предварительного упоминания бота

...