- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将聊天控件嵌入到许多网站,我想获取我嵌入的网站的 Url,以便我的机器人可以获得与网站 URL 匹配的数据。但是,当我嵌入从 WebChat 生成的 iframe 时,我总是得到相同的 ServiceUrl,即 https://webchat.botframework.com/ ,它不是网站的 Url,所以我如何将聊天控件嵌入到任何网站,我的机器人可以获得网站 Url 而不是 WebChat 或 DirectLine 的 Url。
这是我尝试过的:Direct-Line chat control
我注意到,当我使用 Bot Framework Emulator 测试我的机器人时,它总是返回发件人的确切 Url(如果是本地测试,它将返回 http://localhost:XXXX/ )。那么我们该怎么做呢?
最佳答案
我认为实现此目的的一种方法是使用 BackChannel,它增加了机器人通过 WebChat 与嵌入机器人的页面进行通信的能力。它将允许您:
当然,第一部分是 HTML 页面,它将包含您放在一起的内容,以及发送/监听事件的逻辑。可以找到具有基本逻辑的示例页面 here下面是带有事件相关代码的图像。
现在,您需要让您的机器人准备好监听和发送事件。有一个 sample在 Node.js
中,展示了如何做到这一点。
在 C#
中移植它就像监听和发送事件类型的事件一样简单。示例代码(使用前面提到的 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 的事件,机器人必须监听该事件以获取值
关于c# - Bot框架获取内嵌聊天控制页面的ServiceUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42825048/
我正在用 PHP 脚本创建 RequestReport。 我似乎被 $serviceUrl 的问题困住了——这给了我很好的时尚 "Caught Exception: Missing serviceUr
我正在编写代码将文件上传到 AWS S3 并收到此异常: AmazonClientException: No RegionEndpoint or ServiceURL configured 我的代码:
我正在尝试实现 devBridge 自动完成功能,但它不适用于 ajax。当我使用不带 php 的手动 json 对象但我需要从数据库中获取数据时,它会起作用。PHP 代码: 'mysql',
问题:如果我使用 serviceUrl,Devbridge 自动完成工作正常,但不会对建议列表进行排序,因为我没有在服务器端实现搜索方法。 我更喜欢在客户端使用排序。 look up 属性工作正常,但
这个问题被讨论过几次,但我没能找到解决我们问题的方法。 我们有以下从数据库获取远程 URL 的 HttpInvoker 服务: @Service("exampleService") public cl
我有一个像这样的bean定义: 我以这种方式检索服务 bean: ApplicationContext context = new ClassPathXmlAp
我最近将我的 MS 机器人代码(使用 MS 机器人框架创建到我的新笔记本电脑中)。但是,在模拟器中,两台笔记本电脑的行为存在差异。 该机器人作为应用服务托管在 Azure 云中。 在我的旧笔记本电脑中
我最近将我的 MS 机器人代码(使用 MS 机器人框架创建到我的新笔记本电脑中)。但是,在模拟器中,两台笔记本电脑的行为存在差异。 该机器人作为应用服务托管在 Azure 云中。 在我的旧笔记本电脑中
我正在尝试为我的 4 个微服务实现 Discovery First Bootstrap 方式。第一个是从 git 获取配置的配置服务器,第二个是 Eureka 服务器。当我运行 docker-comp
我是一名优秀的程序员,十分优秀!