O framework bot obtém o ServiceUrl da página de controle de bate-papo incorporado

Quero incorporar o controle de bate-papo a muitos sites e quero obter o URL do site que implantei para que meu bot possa obter a correspondência de dados com o URL do site. No entanto, quando eu incorporo o iframe gerado pelo WebChat, sempre recebo o mesmo ServiceUrl e isso é https://webchat.botframework.com/ , não é o URL do site, então como posso incorporar o controle de chat a qualquer O website e meu bot podem obter o URL do website, não o URL do WebChat ou do DirectLine.

Aqui está o que eu tentei: Controle de chat por linha direta

Aqui está o resultado que testei com o meu bot publicado: Resultado

Eu notei que, quando eu testei meu bot com o Bot Framework Emulator, ele sempre retorna o URL exato do remetente (no caso de testingm local, ele retornará http: // localhost: XXXX / ). Então, como podemos fazer assim?

Acho que uma maneira de conseguir isso seria usando o BackChannel, que adiciona a capacidade de um bot se comunicar com uma página que incorpora o bot através do WebChat. Isso permitirá que você:

  • Enviar events para uma página que hospeda uma instância de um WebChat
  • Ouça os events da página que hospeda uma instância de um WebChat

A primeira parte é, claro, a página HTML, que conterá o que você coloca junto, além da lógica para enviar / ouvir events. A página de amostra com a lógica básica pode ser encontrada aqui e abaixo é a imagem com o código relacionado a events.

Eventos do BackChannel

Agora, você precisa preparar seu bot para ouvir e enviar events. Há uma amostra no Node.js , que mostra como fazer isso.

Portando isso em C# , é tão fácil quanto ouvir e enviar para atividades do tipo Event. Um código de amostra para isso (usando os events da página HTML mencionados anteriormente):

 public async Task 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; } 

Bottom line, na sua página HTML você terá que enviar um evento para o bot, com o URL da página e o bot terá que ouvir esse evento para obter o valor