5
votes

Bot Framework v4 - Conversation par le bot

Je développe un bot pour Microsoft Teams à l'aide du Bot Framework SDK v4 pour NodeJS. Existe-t-il un moyen pour le bot de lancer automatiquement une conversation dans un canal, plutôt que de lancer la conversation par l'utilisateur? Mon bot fonctionne bien lorsque l'utilisateur initie la conversation. Des suggestions sur la façon dont je peux procéder?


0 commentaires

4 Réponses :


2
votes

MS Teams appelle un "message proactif" (note: Bot Framework définit généralement un "message proactif" comme l'envoi à un utilisateur d'un message non lié à la conversation en cours, pour lequel vous avez une référence. Teams regroupe quelques éléments dans ce Catégorie). Vous pouvez en savoir plus sur comment pour utiliser la messagerie proactive à partir des documents officiels de Teams. Ou, plus précisément, création d'une conversation de chaîne .

L'essentiel est que vous devez capturer une conversationUpdate et rechercher un nouveau membre ajouté à la conversation ou récupérez la liste de l'équipe , puis vous envoyer le message proactif . < / p>

Remarque: pour MS Teams, l'utilisateur ou l'équipe devra d'abord ajouter le bot:

Les bots peuvent créer de nouvelles conversations avec un utilisateur Microsoft Teams individuel à condition que votre bot dispose d'informations utilisateur obtenues lors de l'ajout précédent dans une portée personnelle ou d'équipe. Ces informations permettent à votre bot de les notifier de manière proactive. Par exemple, si votre bot a été ajouté à une équipe, il peut interroger la liste de l'équipe et envoyer des messages individuels aux utilisateurs dans des discussions personnelles, ou un utilisateur peut @mentionner un autre utilisateur pour déclencher le bot pour qu'il envoie un message direct à cet utilisateur.

Certains développeurs rencontrent des erreurs 401: Non autorisé lors de l'utilisation de la messagerie proactive, en particulier si le bot a été redémarré pour une raison quelconque et que le bot tente de relancer un message proactif. Vous pouvez en savoir plus sur la manière d'éviter que en utilisant trustServiceUrl de cet exemple (ceci est ma branche, qui est utilisée pour soumettre une demande d'extraction pour mettre à jour l'exemple proactif avec trustServiceUrl info).


10 commentaires

Le besoin "que le bot puisse lancer automatiquement une conversation dans un canal" n'est pas vraiment une "messagerie proactive" car il a besoin d'utiliser une information antérieure, plutôt que d'obtenir uniquement l'identité de quelque chose d'autre


@NicolasR Vous avez raison, du moins pour la façon dont Bot Framework le définit. Cependant, la documentation Teams < / a> en quelque sorte l'intégrer avec des messages de bienvenue et une initiation à la conversation. Je vais modifier la réponse.


Oui, il semble que certaines actions peuvent être effectuées en fonction du canal


Merci pour votre réponse. Dans mon scénario, j'envoie des données à partir d'une API REST externe au bot s'exécutant sur Microsoft Teams. Le bot reçoit ces données et les envoie au canal approprié. J'ai pu obtenir cette fonctionnalité avec succès, cependant, le bot ne déclenche pas de notification lorsque ce message arrive sur Teams. Quelqu'un at-il été confronté à un tel problème? Ou des suggestions sur la façon dont je peux modifier la fonctionnalité?


Quel type de notification souhaitez-vous qu'il crée? Chat ou activité, et sur ordinateur ou mobile?


... et quel code utilisez-vous pour envoyer votre message de bot à utilisateur / canal?


@PratikMathur pouvez-vous partager le code sur la façon dont vous avez effectué l'appel REST au bot fonctionnant en équipe?


@PratikMathur pouvez-vous partager comment vous avez finalement résolu le problème?


@AmitVig J'ai pu trouver une solution, notée ici stackoverflow.com/questions/61132206/...


J'ai compris cela il y a quelque temps, mais je n'ai pas mis à jour le fil. Ajout de la réponse ci-dessous



0
votes

Vous pouvez lancer une toute nouvelle conversation à l'aide du connecteur Client dans Botframework V4 et Teams Extensions V4. Dans nodejs, vous trouverez une solution dans l'un des commentaires de ce problème Github a>. Pour tous ceux qui recherchent une solution en C # , voici un article de blog détaillé sur l'accomplissement de cela dans la version C # du botframework.

dans nodejs:

ConnectorClient _client = new ConnectorClient(new Uri(turnContext.Activity.ServiceUrl), await GetMicrosoftAppCredentialsAsync(turnContext), new HttpClient());
            var channelData = turnContext.Activity.GetChannelData<TeamsChannelData>();

            var conversationParameter = new ConversationParameters
            {
                Bot = turnContext.Activity.Recipient,
                IsGroup = true,
                ChannelData = channelData,
                TenantId = channelData.Tenant.Id,
                Activity = MessageFactory.Text(message)
            };
            var response = await _client.Conversations.CreateConversationAsync(conversationParameter);


2 commentaires

Lisez le billet de blog; une chose sur laquelle je n'étais pas tout à fait clair - à la fin, vous montrez une capture d'écran du bot qui fonctionne, vous l'ajoutez à un canal, puis vous écrivez au bot avec un @mention et il vous répond, puis plus tard, il commence propre conversation. Était-il nécessaire d'y écrire pour pouvoir terminer la configuration et avoir accès à la chaîne? Tout ce qu'il a saisi (Guid?) En tant que référence de canal peut-il être stocké, de sorte que le bot puisse être arrêté, redémarré et être toujours capable de créer de nouvelles conversations dans le canal?


@CaiusJard Ouais, écrire au bot est d'abord nécessaire. Vous pouvez utiliser une base de données pour conserver vos données, en utilisant entityframework ou ce que vous voulez.



0
votes

Nous devons vraiment savoir quand vous voulez que le bot envoie le message, la classe TeamsActivityHandler du bot framework fournit plusieurs méthodes que vous pouvez utiliser par exemple:

  1. onMembersAdded (BotHandler) : enregistre un gestionnaire d'événements d'activité pour l'événement ajouté par les membres, émis pour toute activité de mise à jour de conversation entrante qui inclut des membres ajoutés à la conversation.

En savoir plus sur les événements / méthodes que vous pouvez utiliser ici .


0 commentaires

0
votes

J'ai fini par comprendre et j'ai écrit un contrôleur de bot que je peux appeler à la demande avec le code suivant.

var conversationParameters = new ConversationParameters
            {
                IsGroup = true,
                ChannelData = new TeamsChannelData
                {
                    // this needs to come from the teams context.
                    Channel = new ChannelInfo(channelId),
                },
                Activity = (Activity)MessageFactory.Attachment(attachment)
            };
            // your service url may differ.
            MicrosoftAppCredentials.TrustServiceUrl(String.IsNullOrEmpty(serviceUrl) ? constantServiceUrl : serviceUrl, DateTime.MaxValue);
            var response = connectorClient.Conversations.CreateConversationAsync(conversationParameters).GetAwaiter().GetResult();


0 commentaires