Приветственное сообщение не отображается, пока сообщение не будет отправлено боту - PullRequest
1 голос
/ 03 августа 2020

Я пытаюсь отправить приветственное сообщение и спрашиваю имя пользователя. Бот пытается задать пользователю несколько вопросов, а затем помочь ему перенаправить ссылку. Он отлично работает в эмуляторе или онлайн-инструменте тестирования Microsoft, но приветственное сообщение не отображается, если бот интегрирован в приложение ASP. NET.

Я поискал и нашел несколько полезных ссылки, но я все еще не могу решить проблему.

Я пробовал два разных метода, iframes и window.WebChat.renderWebChat, но проблема возникает в обоих случаях, приветственное сообщение не отображается, пока я не отправлю сообщение к боту.

Как обсуждалось в других сообщениях, все решения заканчиваются на topi c, поэтому интеграция чат-бота должна быть реализована в javascript или Node ; Кроме того, чат-боту необходимо отправить настраиваемое событие (в качестве триггера). Однако, хотя мой бот был развернут на персональном сервере windows, я не знаю, как его настроить и установить в параметре directLine.

Как было опубликовано здесь вероятное решение - это следующие коды, но я не могу настроить и установить необходимые параметры для получения токена.

Конечная точка обмена сообщениями: https://xxx.yyy.com/api/messages

<!DOCTYPE html>
<html lang="en-US">
  <head>
    <title>Web Chat: Send welcome event</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script crossorigin="anonymous" 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() {

        //I have no idea how this line of code must be set to achieve the token
        //------------------------------------------------------
        const res = await fetch('https://xxx.yyy.com/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>

Наконец, я должен подчеркнуть, что бот хорошо работает с инструментом онлайн-тестирования и эмулятором, но ошибка возникает при интеграции в приложение asp. net.

Скриншот: слева фото из веб-приложения, справа фото из тестовой среды: введите описание изображения здесь

Изменить (1): Заголовок обновлен, снимок экрана добавлен.

1 Ответ

1 голос
/ 07 августа 2020

В приведенном ниже коде исправлена ​​проблема генерации токена и отправки события для запуска чат-бота внутри веб-приложения.

$.ajax({
            url: 'https://directline.botframework.com/v3/directline/tokens/generate',
            method: "POST",
            headers: {
                "Authorization": "Bearer SECRET GOES HERE"
            },
        }).then(function (response) {
            const { token } = JSON.parse(JSON.stringify(response));
            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('chatBotFrame')
            );

            document.querySelector('#chatBotFrame > *').focus();
        }).catch(function (err) {
            console.error(err);
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...