MS BOT Framework (адаптивные карты): как отправить значение (Stepcontext.Value) с прямой линии - PullRequest
2 голосов
/ 17 апреля 2020

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

<!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 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() {
        // In this demo, we are using Direct Line token from MockBot.
        // Your client code must provide either a secret or a token to talk to your bot.
        // Tokens are more secure. To learn about the differences between secrets and tokens
        // and to understand the risks associated with using secrets, visit https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-direct-line-3-0-authentication?view=azure-bot-service-4.0

        const { token } = { token};

        // We are using a customized store to add hooks to connect event
        const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
 if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
   dispatch({
     type: 'WEB_CHAT/SEND_EVENT',
     payload: { 
                name: 'userInfo',
       value: { fname:'user', lname:'test', pnumber:'0678775453'} 
                }
   });
 }

 return next(action);
        });

        const styleOptions = {
 botAvatarImage:
   '',
 botAvatarInitials: 'Chatbot',
 userAvatarImage: '',
 userAvatarInitials: 'User',
 showNub: true,
 bubbleFromUserNubOffset: 'bottom',
 bubbleFromUserNubSize: 10,
 bubbleFromUserBorderColor: '#0077CC',
 bubbleNubOffset: 'top',
 bubbleNubSize: 0,
 bubbleBorderColor: '#009900',
 sendBoxButtonColor: '#009900',
 hideUploadButton: true,
 hideSendBox : true
        };
        window.WebChat.renderWebChat(
 {
   directLine: window.WebChat.createDirectLine({ token }),
   store,
            styleOptions
 },
 document.getElementById('webchat')
        );

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

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

Тело почтальона

{
    "type": "message",
    "from": {
        "id": "user1"
    },
    "value": 
    {
        "fname":"user",
        "lname":"test",
        "pnumber":"0678787543"
    }
}

1 Ответ

0 голосов
/ 22 апреля 2020

Ты так близко! У вас есть два варианта:

  1. Изменить на WEB_CHAT/SEND_EVENT и включить свойство name:
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
          if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
            dispatch({
              type: 'WEB_CHAT/SEND_EVENT',
              payload: {
                name: 'userInfo',
                value: { fname:'user', lname:'test', pnumber:'0678775453'}
              }
            });
          }

          return next(action);
        });
Используйте WEB_CHAT/SEND_MESSAGE, включите свойство text и измените на channelData:
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
          if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
            dispatch({
              type: 'WEB_CHAT/SEND_MESSAGE',
              payload: {
                text: 'userInfo',
                channelData: { fname:'user', lname:'test', pnumber:'0678775453'}
              }
            });
          }

          return next(action);
        });

===

Обновление

Я вижу, что это прекрасно работает с вашим кодом. Установите точку останова в onTurn / OnTurnAsync, и вы увидите, что когда пользователь подключается, вы получаете:

  1. dialogUpdate для бота
  2. dialogUpdate для пользователя
  3. Событие WebChat с нужными вам пользовательскими данными:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...