gpt4 book ai didi

c# - Bot框架获取内嵌聊天控制页面的ServiceUrl

转载 作者:太空狗 更新时间:2023-10-30 00:38:18 25 4
gpt4 key购买 nike

我想将聊天控件嵌入到许多网站,我想获取我嵌入的网站的 Url,以便我的机器人可以获得与网站 URL 匹配的数据。但是,当我嵌入从 WebChat 生成的 iframe 时,我总是得到相同的 ServiceUrl,即 https://webchat.botframework.com/ ,它不是网站的 Url,所以我如何将聊天控件嵌入到任何网站,我的机器人可以获得网站 Url 而不是 WebChat 或 DirectLine 的 Url。

这是我尝试过的:Direct-Line chat control

这是我用我发布的机器人测试的结果:Result

我注意到,当我使用 Bot Framework Emulator 测试我的机器人时,它总是返回发件人的确切 Url(如果是本地测试,它将返回 http://localhost:XXXX/ )。那么我们该怎么做呢?

最佳答案

我认为实现此目的的一种方法是使用 BackChannel,它增加了机器人通过 WebChat 与嵌入机器人的页面进行通信的能力。它将允许您:

  • 将事件发送到托管 WebChat 实例的页面
  • 从托管 WebChat 实例的页面监听事件

当然,第一部分是 HTML 页面,它将包含您放在一起的内容,以及发送/监听事件的逻辑。可以找到具有基本逻辑的示例页面 here下面是带有事件相关代码的图像。

BackChannel events

现在,您需要让您的机器人准备好监听和发送事件。有一个 sampleNode.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com