Документация, скорее всего, конфликтует, потому что команда MS Teams очень быстро продвигается во внедрении всех функций Botframework.Мы также внесли довольно большие изменения в обработчики активности - лично я не знаю, сделали ли эти конкретные изменения, чтобы бот мог получить Teams ConversationUpdate или он работает из-за чего-то другого.
Эти таблицы должны довольно точно отражать текущее состояние деятельности по каналам.
Я только что протестировал бота Teams, который фиксирует каждое действие по нескольким сценариям, и вот что запускает обработчик действий:
Когда пользователь впервые добавляет бота (1: 1Приветственное сообщение):
- OnConversationUpdate
- OnTurn
- OnMembersAdded
- OnDialog
Когда бот установлен на канал (приветствие группы):
Примечание. Эти должны также срабатывать при добавлении пользователя в команду (а не в канал внутри команды).), где бот уже существует, но я не могу это проверить.
- OnTurn
- OnConversationUpdate
- OnMembersAdded
- OnDialog
Когда бот обменивается сообщениями:
- OnTurn
- OnMessage
- OnDialog
Вот код, который я использовал для проверки этого (из bot.ts
, построенный из Echo Bot Sample ):
import { ActivityHandler, MessageFactory, TurnContext } from 'botbuilder';
export class MyBot extends ActivityHandler {
constructor() {
super();
// See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onTurn(async (turnContext, next) => { await this.sendTeamsMessage('onTurn', turnContext); await next();});
this.onMembersAdded(async (turnContext, next) => { await this.sendTeamsMessage('onMembersAdded', turnContext); await next();});
this.onMembersRemoved(async (turnContext, next) => { await this.sendTeamsMessage('onMembersRemoved', turnContext); await next();});
this.onEvent(async (turnContext, next) => { await this.sendTeamsMessage('onEvent', turnContext); await next();});
this.onConversationUpdate(async (turnContext, next) => { await this.sendTeamsMessage('onConversationUpdate', turnContext); await next();});
this.onMessage(async (turnContext, next) => { await this.sendTeamsMessage('onMessage', turnContext); await next();});
this.onTokenResponseEvent(async (turnContext, next) => { await this.sendTeamsMessage('onTokenResponseEvent', turnContext); await next();});
this.onUnrecognizedActivityType(async (turnContext, next) => { await this.sendTeamsMessage('onUnrecognizedActivityType', turnContext); await next();});
this.onDialog(async (turnContext, next) => { await this.sendTeamsMessage('onDialog', turnContext); await next();});
}
private sendTeamsMessage = async (activityHandlerName: string, turnContext: TurnContext) => {
const message = MessageFactory.text(`**[${activityHandlerName}]** event received`);
await turnContext.sendActivity(message);
console.log(`Sent: ${message.text}`)
}
}
Примечание: await next()
гарантирует, что все утвержденияОбработчики отдельных действий могут вызываться для данного действия вместо остановки после вызова первого (onTurn
).
Отправка приветственного сообщения 1: 1
Примерно такдолжно работать (с Core Bot Sample ):
this.onMembersAdded(async (context) => {
const membersAdded = context.activity.membersAdded;
for (const member of membersAdded) {
if (member.id !== context.activity.recipient.id) {
const welcomeCard = CardFactory.adaptiveCard(WelcomeCard);
await context.sendActivity({ attachments: [welcomeCard] });
}
}
});
Мы работаем над написанием сэмплов с новыми обработчиками активности, но вы можете прочесать через эту ветку Samples , чтобы получить некоторые идеи.Я написал свой на TypeScript, но он работает, и есть примеры в C # .