2017-03-16 95 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和機器人會必須收聽該事件才能獲得值