Бот Microsoft Teams находит идентификатор отправителя сообщения

#node.js #botframework #microsoft-teams

#node.js #botframework #microsoft-teams

Вопрос:

Мы создали приложение teams, которое можно использовать в групповом чате. Итак, в принципе, любой пользователь может сделать @

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

  const connector = context.adapter.createConnectorClient(context.activity.serviceUrl);
            const response = await connector.conversations.getConversationMembers(context.activity.conversation.id);
            functions.logger.log("conversation members are:", response)
  

Ответ возвращает массив всех пользователей в диалоге с приведенной ниже структурой

 [
  {
    "id": "29:1a-Xb7uPrMwC2XqjMEHCC7ytV2xb2VUCqTA-n_s-k5ZyMCTKIL-ku2XkgbE167D_5ZbmVaqQxJGIQ13vypSqu-A",
    "name": "Neeti Sharma",
    "objectId": "718ab805-860c-43ec-8d4e-4af0c543df75",
    "givenName": "Neeti",
    "surname": "Sharma",
    "email": "xxx@xxxx.xxx",
    "userPrincipalName": "xxxx@xxxx.xxx",
    "tenantId": "xxx-xx-xx-xxxxxx-x",
    "userRole": "user"
  },
  {
    ...
  }
]
  

В приведенном выше ответе не указано, кто является отправителем сообщения в групповом чате. Как нам это найти?

Ответ №1:

Я не уверен в точном синтаксисе для Node (я работаю в основном на C #), но в основном у context.activity объекта есть from свойство (т.Е. context.activity.from ), которое имеет тип ChannelAccount (ссылка на DotNet здесь, но для Node это очень похоже). Это даст вам, по крайней мере, имя и идентификатор объекта. То, что вы используете прямо сейчас, getConversationMembers это то, что выдает вам всех во всем канале, а не только это конкретное сообщение / поток.

Комментарии:

1. позвольте мне попробовать это

2. я могу сделать что-то вроде сопоставления имени с именем результата участника беседы. в идеале мне нужен адрес электронной почты отправителя

3. является ли идентификатор объекта уникальным для каждого отправителя? как будто да, тогда вместо имени я могу сопоставить это.

4. да, объект уникален. AadObjectId — это, по сути, идентификатор пользователя Azure Active Directory. Если вам нужна электронная почта, то да, определенно, вы можете просто сопоставить активность. от к результатам getconversationmembers

Ответ №2:

turnContext.Активность.От.Идентификатор также уникален для каждого пользователя. Вы также можете использовать это свойство. Электронную почту сложно получить при любых других событиях, кроме события MembersAdded.