Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Utiliser le canal Email avec ses bots

Poster un commentaire

Il est parfois intéressant de dialoguer avec un bot via l’envoi d’un email.

Par exemple vos commerciaux doivent rédiger un rapport mensuel dans un fichier Excel. Ils l’envoient en PJ au bot qui se charge d’accuser réception, l’archiver et lancer un traitement.

C’est le scénario que nous allons démontrer ici. Ce scénario est assez fréquent en entreprise, c’est par exemple ainsi que j’envoi des fichiers sur mon Kindle.

 

Notez également qu’Email est pour l’instant le seul canal qui accepte les conversations de groupe initiées par le bot.

Botbuilder supporte uniquement les mails Office 365. Si vous ignorez ce que c’est, voici une couche de rappel:

http://www.brucebnews.com/2013/04/the-difference-between-a-microsoft-account-and-an-office-365-account/

 

Activer le canal Email

Il faut aller dans le portail :

2017-03-02_23-58-55

On clique sur Edit:

2017-03-03_00-00-20

Renseignez le formulaire.

L’adresse email est celle du bot, c’est à dire l’adresse qu’il va surveiller et surtout sur laquelle il va répondre.

 

Note: ne mettez pas une adresse pro car à chaque fois qu’un client vous enverra quelque chose le bot va lui répondre!
Je dis ça comme ça bien entendu, je ne suis pas du genre à faire ce genre d’erreur…..

 

Cliquer ensuite sur le bouton bleu: ‘Submit Email Credentials »

 

Si tout se passe bien:

2017-03-03_00-02-33

Premier essai

On va faire réagir le bot à la réception d’un email.

Faisons un bot très simple histoire de voir si ça marche vraiment:

public async Task StartAsync(IDialogContext context)
{
   await context.PostAsync("Salut, je suis SuperBot à votre service!");
   context.Wait(MessageReceivedAsync);
}
 
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
   await context.PostAsync("Que puis-je faire pour vous?");
   context.Wait(MessageReceivedAsync);
}

J’envoi ensuite un mail depuis une boîte quelconque. Le message parvient à la boîte cible bien entendu et au bout de quelques instants le bot répond à l’expéditeur:

2017-03-03_22-57-33

On a reçu deux messages. Un par appel à PostAsync().

Le principe est donc très simple.

 

Un scénario plus élaboré

On va envoyer un message avec une PJ. On va alors:

  • Accuser réception
  • Récupérer la PJ
  • Lire le message de l’émail qui pourrait être analysé éventuellement par un des services cognitifs tels LUIS

Pour la récupération de la PJ, il faut avoir en tête que l’appli va tourner sur un serveur où vous n’avez pas accès. La sauvegarde locale n’est donc pas envisageable et pas non plus possible d’ailleurs faute d’avoir les permissions.

 

Voici un exemple de code:

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
   IMessageActivity message = await argument;
   foreach (Attachment item in message.Attachments)
   {
      if (item.ContentType.StartsWith("image/"))
      {
         // sauvegarde d'un fichier image
         try
         {
            byte[] array = (byte[])item.Content;
            // sauvegarde du fichier
         }
         catch (Exception ex)
         {
            await context.PostAsync(ex.Message);
         }
 
         await context.PostAsync(message.From.Name + ", j'ai bien reçu le fichier: " + item.Name);
     }
   }
 
   context.Wait(MessageReceivedAsync);
}

Ce qui nous permet de recevoir le mail suivant:

2017-03-03_23-51-27

Les PJ nous arrivent donc sous la forme d’un attachement. Là j’analyse le content type pour connaître la nature du fichier et faire ou pas une sauvegarde.

 

D’autres paramètres peuvent nous intéresser dans message:

  • Text
    Le corps du mail
  • From
    Expéditeur de l’activité (le mail)
  • Recipent
    Agent qui reçoit l’activité, le bot dans notre exemple
  • ServiceUrl
    Url du canal
  • ChannelId
    Nom du canal, ici ’email’

 

L’examen de la propriété ChannelData constitue toutefois une façon plus systématique de récupérer les informations qui nous intéressent. On y découvrent les 3 propriétés suivantes:

  • htmlBody
    Le corps du message
  • importance
    L’importance du message: high, normal ou low
  • subject
    Le sujet du message

 

On peut trouver un exemple dans la doc:

2017-03-05_14-07-10

 

 

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s