#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.