Бот получает данные канала

Команда, я разработал бота, используя фреймворк 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
    {
    }
}

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

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


person Sriram Tamilarasan    schedule 07.02.2020    source источник
comment
Вы все еще работаете над этим?   -  person Kyle Delaney    schedule 10.02.2020
comment
Да, Кайл, я все еще сталкиваюсь с той же проблемой. :-(   -  person Sriram Tamilarasan    schedule 11.02.2020
comment
Вы читали мой ответ?   -  person Kyle Delaney    schedule 11.02.2020
comment
Вам все еще нужна помощь?   -  person Kyle Delaney    schedule 15.02.2020
comment
Спасибо за продолжение. Я сообщу вам в ближайшее время.   -  person Sriram Tamilarasan    schedule 17.02.2020
comment
Не могли бы вы проголосовать и принять мой ответ?   -  person Kyle Delaney    schedule 18.02.2020


Ответы (2)


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

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

if (turnContext.Activity.Name == "webchat/join")
{
    await turnContext.SendActivityAsync("Back Channel Welcome Message!");
}
person Kyle Delaney    schedule 07.02.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>
person chyonek    schedule 08.02.2020