【问题标题】:Bot framework get the ServiceUrl of embedded chat control pagebot框架获取嵌入式聊天控制页面的ServiceUrl
【发布时间】:2017-03-16 03:58:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这似乎与Robot Framework无关,同名测试自动化工具。
  • 我知道它只是一个用于测试的模拟器,但我想在这里知道的是无论如何我们可以在发布机器人时得到它
  • 您可以托管自己的网络聊天控件。参考这个链接github.com/Microsoft/BotFramework-WebChat
  • 你不能;但是您可以考虑使用 backChannel 通过事件从网页向机器人发送内容
  • @EzequielJadib 好的,你能告诉我如何制作一个 backChannel 吗?

标签: c# .net botframework direct-line-botframework


【解决方案1】:

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

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

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

现在,您需要准备好您的机器人来监听和发送事件。在Node.js 中有一个sample,它显示了如何做到这一点。

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 的事件,机器人必须监听该事件以获取值

【讨论】:

  • 示例链接已损坏,请尽可能更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多