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:
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ê:
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.
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