Как отправить приветственное сообщение 1: 1? - PullRequest
3 голосов
/ 04 апреля 2019

Я хочу отправить приветственное сообщение, когда пользователь устанавливает мой бот Teams.

Я просмотрел документацию по API команд и получил смешанные сообщения о том, возможно ли это.В разных местах я читал, что мой бот должен получать обновление разговора, когда бот установлен, а также в разных выпусках читал, что я не получу такого события.

Однако существует бот, у которого есть эта функциональность,Hipmunk, если он установлен с закрытой областью действия, отправляет мне сообщение, не вызывая дальнейших провокаций.Как этот бот может сделать это, и как я могу воспроизвести эту функцию?

Спасибо

1 Ответ

6 голосов
/ 05 апреля 2019

Документация, скорее всего, конфликтует, потому что команда 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 # .

...