c# – Bot框架获取嵌入式聊天控制页面的ServiceUrl
发布时间:2020-12-15 23:38:08 所属栏目:百科 来源:网络整理
导读:我想将聊天控件嵌入到许多网站中,我想获取我嵌入的网站的Url,以便我的机器人可以获得与网站URL匹配的数据.但是,当我嵌入从WebChat生成的iframe时,我总是得到相同的ServiceUrl而且是 https://webchat.botframework.com/,它不是网站的Url,所以如何将聊天控件嵌
我想将聊天控件嵌入到许多网站中,我想获取我嵌入的网站的Url,以便我的机器人可以获得与网站URL匹配的数据.但是,当我嵌入从WebChat生成的iframe时,我总是得到相同的ServiceUrl而且是
https://webchat.botframework.com/,它不是网站的Url,所以如何将聊天控件嵌入到任何网站,我的机器人可以获取网站Url不是WebChat或DirectLine的URL.
这是我尝试过的:Direct-Line chat control 这是我用我发布的机器人测试的结果: 我注意到,当我用Bot框架模拟器测试我的僵尸程序时,它总是返回发件人的确切URL(如果是本地测试,它将返回http://localhost:XXXX/).那我们怎么能这样做呢? 解决方法
我认为实现这一目标的一种方法是使用BackChannel,它增加了机器人与通过WebChat嵌入机器人的页面进行通信的能力.它将允许您:
>将事件发送到承载WebChat实例的页面 第一部分当然是HTML页面,它将包含您放在一起的内容,以及发送/收听事件的逻辑.可以找到具有基本逻辑的样本页面here及以下是具有事件相关代码的图像. 现在,您需要准备机器人来监听和发送事件. Node.js中有一个sample,它显示了如何做到这一点. 在C#中移植它就像监听和发送到Event类型的活动一样简单.该示例代码(使用前面提到的HTML页面的事件): public async Task<HttpResponseMessage> Post([FromBody]Activity activity) { if (activity.Type == ActivityTypes.Event && string.Equals(activity.Name,"buttonClicked",StringComparison.InvariantCultureIgnoreCase)) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); // return our reply to the user Activity reply = activity.CreateReply("I see that you just pushed that button"); await connector.Conversations.ReplyToActivityAsync(reply); } if (activity.Type == ActivityTypes.Message) { ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl)); // return our reply to the user var reply = activity.CreateReply(); reply.Type = ActivityTypes.Event; reply.Name = "changeBackground"; reply.Value = activity.Text; await connector.Conversations.ReplyToActivityAsync(reply); } else { HandleSystemMessage(activity); } var response = Request.CreateResponse(HttpStatusCode.OK); return response; } 最重要的是,在HTML页面中,您必须向机器人发送事件,页面URL和机器人必须收听该事件才能获得价值 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |