我的问题是,在用户开始聊天之前,如何代表用户向机器人发送一些数据。
因为不同的客户端将具有不同的端点,所以我希望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>
答案 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网络聊天示例。
希望这会有所帮助!