在用户开始与我的机器人聊天之前,如何向该机器人发送一些初始数据?

时间:2019-05-24 14:31:02

标签: botframework client-side custom-data-attribute web-chat

我的问题是,在用户开始聊天之前,如何代表用户向机器人发送一些数据。

因为不同的客户端将具有不同的端点,所以我希望bot首先获取该端点并将其保存为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 个答案:

答案 0 :(得分:1)

您可以在Web Chat的商店中添加自定义中间件,当DirectLine连接完成时,该中间件可以将包含必要数据的事件发送到bot。请参见下面的代码段。

网络聊天

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'));

Bot-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}!");
            }
        }

    }
}

有关更多详细信息,请访问this reference file in the TypeScript source code网络聊天示例。

希望这会有所帮助!