Bot framework obtient le ServiceUrl de la page de contrôle de discussion intégrée

Je souhaite intégrer le contrôle de chat à de nombreux sites Web et obtenir l’URL du site Web que j’ai intégrée pour que mon bot puisse obtenir la correspondance des données avec l’URL du site Web. Cependant, lorsque j’intègre l’iframe généré à partir de WebChat, j’obtiens toujours le même ServiceUrl, à savoir https://webchat.botframework.com/ . Ce n’est pas l’URL du site Web. Comment intégrer le contrôle de chat à site Web et mon bot peut obtenir l’URL du site Web et non l’URL du WebChat ou de DirectLine.

Voici ce que j’ai essayé: Contrôle de chat en direct

Voici le résultat que j’ai testé avec mon bot publié: Résultat

J’ai remarqué que, lorsque j’ai testé mon bot avec l’émulateur Bot Framework, il renvoyait toujours l’URL exacte de l’expéditeur (en cas de test local, il renverrait http: // localhost: XXXX / ). Alors, comment pouvons-nous faire comme ça?

Je pense qu’un moyen d’y parvenir serait d’utiliser BackChannel, ce qui permet à un bot de communiquer avec une page qui l’intègre via WebChat. Cela vous permettra de:

  • Envoi d’événements à une page hébergeant une instance de WebChat
  • Écouter les événements de la page qui héberge une instance de WebChat

La première partie est, bien sûr, la page HTML, qui contiendra ce que vous avez mis en place, ainsi que la logique d’envoi / écoute des événements. La page d’exemple avec la logique de base peut être trouvée ici et ci-dessous est l’image avec le code associé aux événements.

Événements BackChannel

Maintenant, vous devez préparer votre bot pour écouter et envoyer des événements. Il existe un exemple dans Node.js , qui montre comment faire cela.

Porter cela en C# , est aussi simple que d’écouter et d’envoyer des activités de type Event. Un exemple de code pour cela (en utilisant les événements de la page HTML mentionnée précédemment):

 public async Task Post([FromBody]Activity activity) { if (activity.Type == ActivityTypes.Event && ssortingng.Equals(activity.Name, "buttonClicked", SsortingngComparison.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; } 

En bout de ligne, dans votre page HTML, vous devrez envoyer un événement au bot, avec l’URL de la page et le bot devra écouter cet événement pour obtenir la valeur.