2017-03-16 79 views
3

我想将聊天控件嵌入到很多网站中,我想获取我嵌入的网站的Url以便我的bot可以获得与网址。但是,当我嵌入从WebChat生成的iframe时,我总是得到相同的ServiceUrl,并且这是https://webchat.botframework.com/,它不是网站的Url,所以如何将聊天控件嵌入到任何网站,我的机器人可以获取网站Url不是WebChat或DirectLine的Url。Bot框架获取嵌入式聊天控件的ServiceUrl页面

这是我已经试过:Direct-Line chat control

这里的结果我已经与我的出版BOT测试:Result

我注意到,当我测试了我的机器人与机器人框架模拟器,它总是返回发件人的确切Url(在本地testingm的情况下,它将返回http://localhost:XXXX/)。那么我们该怎么做呢?

+0

这似乎并不是与Robot Framework相关的测试自动化工具的名称相同。 –

+0

我知道它只是一个用于测试的模拟器,但我想知道的是,无论如何,我们可以在我们发布机器人时获得它 –

+0

您可以托管自己的网聊控件。请参阅此链接https://github.com/Microsoft/BotFramework-WebChat – Satheesh

回答

7

我认为通过使用BackChannel可以让机器人与通过WebChat嵌入机器人的页面进行通信。它会允许你:

  • 将事件发送到承载在承载网谈

的第一件实例的网络聊天

  • 侦听来自网页的事件实例的页面当然是HTML页面,它将包含你放在一起的内容,以及发送/收听事件的逻辑。具有基本逻辑的示例页面可以找到here,下面是带有事件相关代码的图像。

    BackChannel events

    现在,你需要准备你的机器人倾听和发送事件。 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和机器人会必须收听该事件才能获得值