Бот Получить данные канала - PullRequest
0 голосов
/ 07 февраля 2020

Команда, я разработал бота, используя бот-фреймворк SDK4. Я использую канал Directline для связи с моим ботом. Мое требование основано на данных канала на сообщение «requestWelcomeDialog». Я должен показать приветственное сообщение.

Код от моего клиента-бота:

BotChat.App({
    botConnection: botConnection,
    user: userOption,
    bot: { id: model.botId, name: model.botName },
    resize: 'window',
    speechOptions: speechOptions,
    locale: 'en',
    sendTypingIndicator: true,
}, document.getElementById('BotChatElement'));
PostBotConfiguration();
botConnection
    .postActivity({
        from: user,
        name: 'requestWelcomeDialog',
        type: 'event',
        value: { 'BotType': 'abcd' }
    })
    .subscribe(function (id) {
        setWCScreenChatPosition();
        model.botRender = true;
        console.log('"trigger requestWelcomeDialog" sent');
    });

В приведенном выше коде я посылаю BotType как 'abcd ». Я пытаюсь прочитать это значение из моего бота.

Мой код в боте.

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    Utility util = new Utility();
    try
    {
        foreach (var member in membersAdded)
        {
            if (member.Id != turnContext.Activity.Recipient.Id)
            {
                BotChannelData cdata = new BotChannelData();
                turnContext.Activity.TryGetChannelData(out cdata);
            }
        }
    }
    catch
    {
    }
}

В этом я всегда получаю исключение нулевой ссылки.

Могу ли я узнать что мне в этом не хватает?

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Первая проблема в том, что вы используете Bot Chat. Bot Chat - это веб-чат v3, и он устарел. Вы должны использовать Web Chat v4 в соответствии с инструкциями в репо .

Вторая проблема заключается в том, что вы пытаетесь ответить на пользовательское событие, используя OnMembersAddedAsync, которое вызывается только обновлением беседы. Чтобы узнать, как отправлять и отвечать на приветствия, следуйте инструкциям в этом выпуске и этом образце . Эквивалент C# будет выглядеть так:

if (turnContext.Activity.Name == "webchat/join")
{
    await turnContext.SendActivityAsync("Back Channel Welcome Message!");
}
0 голосов
/ 08 февраля 2020

Если вы используете канал Direct Line, вам следует использовать Web Chat v4. Потому что Web Chat v3 теперь устарел. Вы можете получить код сообщения приветствия от этого официального образца .

<!DOCTYPE html>
<html lang="en-US">
  <head>
    <title>Web Chat: Send welcome event</title>

    <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
    <style>
      html, body { height: 100% }
      body { margin: 0 }

      #webchat {
        height: 100%;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="webchat"></div>
    <script>
      (async function () {

        const res = await fetch('https://webchat-mockbot.azurewebsites.net/directline/token', { method: 'POST' });
        const { token } = await res.json();

       const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
         if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
           dispatch({
             type: 'WEB_CHAT/SEND_EVENT',
             payload: {
               name: 'webchat/join',
               value: { language: window.navigator.language }
             }
           });
         }
         return next(action);
       });

        window.WebChat.renderWebChat({
          directLine: window.WebChat.createDirectLine({ token }),
        store
        }, document.getElementById('webchat'));

        document.querySelector('#webchat > *').focus();
      })().catch(err => console.error(err));
    </script>
  </body>
</html>
...