Как я могу отправить некоторые начальные данные боту, прежде чем пользователь начнет общаться с моим ботом? - PullRequest
0 голосов
/ 24 мая 2019

Моя проблема в том, как я могу отправить боту некоторые данные от имени пользователя перед тем, как пользователь начнет общаться.

, поскольку разные клиенты будут иметь разные конечные точки, я хотел бы, чтобы бот сначала получил эту конечную точку и сохранил ее как UserState, а затем использовал эту конечную точку для выполнения вызовов API позже.

Я использую "https://github.com/microsoft/BotFramework-WebChat" этот веб-чат в качестве моей клиентской стороны, он создает прямую линию с использованием секрета, возможно ли добавить в сообщение ниже HTML-файл для отправки некоторых данных?

Спасибо!

<!DOCTYPE html> <html> <body>
    <div id="webchat" role="main"></div>
    <script src="Scripts/Directline.js"></script>
    <script>
        window.WebChat.renderWebChat({
            directLine: window.WebChat.createDirectLine({
                token: 'my secret'
            }),
            locale: 'en-US',
            botAvatarInitials: 'Bot',
            userAvatarInitials: 'ME',
        },
        document.getElementById('webchat'));
    </script> </body> </html>

1 Ответ

1 голос
/ 24 мая 2019

Вы можете добавить пользовательское промежуточное ПО в хранилище Web Chat, которое может отправлять событие, содержащее необходимые данные, боту, когда установлено соединение DirectLine. См. Фрагменты кода ниже.

Веб-чат

const store = window.WebChat.createStore({},
  ({ dispatch }) => next => action => {

    if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
      // Send event to bot with custom data
      dispatch({
        type: 'WEB_CHAT/SEND_EVENT',
        payload: {
          name: 'webchat/join',
          value: { data: { username: 'TJ'}}
        }
      })
    }
    return next(action);
  });        


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

Бот - C # SDK

using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
using  Newtonsoft.Json.Linq;

namespace Microsoft.BotBuilderSamples.Bots
{
    public class EchoBot : ActivityHandler
    {
        protected override async Task OnEventAsync(ITurnContext<IEventActivity> context, CancellationToken cancellationToken)
        {
            if (context.Activity.Name == "webchat/join") {
                var data = JObject.Parse(context.Activity.Value.ToString()).GetValue("data");
                var user = JObject.Parse(data.ToString()).GetValue("username");
                await context.SendActivityAsync($"Hi, {user}!");
            }
        }

    }
}

Более подробную информацию можно получить на Приветственном событии Send Backchannel Пример веб-чата.

Надеюсь, это поможет!

...