OpenERP Traiter automatiquement les messages entrants par Mailgate
Par SISalp le mardi 2 mars 2010, - Administrer Odoo - Lien permanent
Le module CRM d'OpenERP permet de traiter automatiquement les flux de messages électroniques entrants en les associant automatiquement à des cas d'avant-vente, de support, etc...
Voici comment mettre cette fonction en oeuvre et la gérer avec un niveau de sécurité acceptable, en attendant qu'une solution de remplacement mieux conçue prenne la relève.
Temps d'exécution de la procédure :
- Environ deux heures en incluant la création des boites à lettre
Difficulté :
- Niveau administrateur système
- Etre familier de l'administration Linux et des droits d'accès Linux, avoir des notions sur la messagerie (pop, imap, mta,mda,smtp).
Risque : Attention à la sécurité des informations transmises par mail
- Une installation insuffisante peut entraîner la perte de messages d'entrée.
- En cas de serveurs multiples ou bases multiples, ne pas délivrer des messages à une tierce personne par un paramétrage erroné
- Sauvegardez logiciel et données avant toute intervention.
Principe de fonctionnement de Mailgate
Cette fonction s'appuie sur une utilisation peu élaborée du logiciel fetchmail, bien connu sous linux, qui permet de lire une boite à lettre de réception en mode ligne de commande puis de traiter les messages obtenus. En l'occurrence, ces messages sont transmis à un logiciel inclus dans le module CRM d'OpenERP qui crée un cas, ou le complète s'il existe déjà.
Activation de fetchmail
fetchmail peut être activé selon trois modes :
- en ligne de commande tapée dans un teminal du serveur
- périodiquement depuis la table "cron" qui active une commande à une période prédéfinie
- automatiquement, par un daemon spécialisé qui réactive le programme cycliquement.
Lecture des messages de la boite à lettre d'entrée
Quand on active fetchmail, on lui indique le nom d'un fichier de paramètres dans lequel on a préalablement documenté les paramètres d'accès à la boite à lettre à consulter. fetchmail peut gérer les protocoles pop et imap, et différents modes d'authentification et de cryptage.
Fetchmail lit alors les nouveaux messages reçus sur la boite à lettre.
Traitement du message
Dans le même fichier de paramètres, fetchmail va trouver les informations nécessaires pour activer le programme mailgate.py qui se trouve dans le code d'OpenERP. Parmi ces informations, on trouve les identifiants permettant d'accéder aux données du serveur OpenERP, mais aussi des informations qui concernent la section des cas de CRM dans laquelle sera géré le cas correspondant au message.
Difficultés habituelles de mise en oeuvre
La mise en oeuvre de cette fonctionalité n'est pas difficile en soi, mais elle nécessite d'enchainer plusieurs étapes qui ne souffrent pas la moindre erreur car le programme mailgate est totalement dépourvu d'aide à la mise au point. N'espérez pas un message explicite vous indiquant où s'est perdu votre message de test.
fetchmail en revanche propose une aide abondante
man fetchmail
souvent trop abondante au regard du problème à résoudre. Mailgate est beaucoup plus facile à appréhender si vous n'aimez pas lire car il n'y a aucune documentation disponible, à notre connaissance, autre que le code lui-même.
Quand vous aurez passé consciencieusement toutes les étapes de mise en oeuvre, que vous vous serez lu et relu, il se peut que le traitement des messages ne fonctionne toujours pas. Vérifiez alors que les paramètres codés dans le code du programme mailgate.py correspondent à votre contexte. Nous y reviendrons plus loin. D'autre part, le protocole xml-rpc-"secure" n'est pas compatible avec mailgate.
Premiers essais "à la main"
Pour une première approche, vous pouvez suivre les étapes suivantes :
Création d'une boite à lettre chez un fournisseur de services.
Dans nos exemples nous utiliserons des boites à lettre proposées gratuitement par Google (google mail, ou gmail). Ce service est fiable, efficace, facile à mettre en oeuvre. Un filtre anti-spam est inclu, les messages émis sont signés, les fonctions sont ouvertes.
Installation du logiciel
Sous debian ou Ubuntu,
apt-get install fetchmail
Adaptation de mailgate.py
Dans le fichier openerp-server/server/bin/addons/crm/scripts/openerp-mailgate/openerp-mailgate.py, changer si nécessaire
- localhost par l'adresse ip de votre serveur
- 8069 par le port sur lequel openerp-server est en attente.
Attention, en faisant ainsi, vous ne pouvez lancer plusieurs serveurs indépendants sur le même répertoire de code s'ils veulent tous utiliser la fonction mailgate. Les solutions à cette limitation ne seront pas abordées ici.
Création d'un fichier de parametres
Voici un exemple de fichier de paramètres /home/sisalpuser/openerp/dev5/fetchmail/fetchmailrc
set logfile /home/sisalpuser/openerp/dev5/fetchmail/fetchmail.log set idfile /home/sisalpuser/openerp/dev5/fetchmail/fetchmail-ids poll pop.googlemail.com with proto POP3 and options no dns username support.ma_societe@gmail.com password &#§!password options ssl keep mda "/home/sisalpuser/openerp/dev5/server/bin/addons/crm/scripts/openerp-mailgate/openerp-mailgate.py -u1 -p&#§!oe-password -s7 -esupport.ma_societe@gmail.com -dmytestbase"
Dans cet exemple, qui peut concerner le serveur dev5.sisalp.net, fetchmail et mailgate sont chargés d'effectuer les opérations suivantes :
- Relèver une boite à lettre sécurisée googlemail avec les identifiants qui vont bien,
- Transmettre les messages relevés à openerp-mailgate.py qui va se connecter à OpenERP avec l'utilisateur "1", le mot de passe "&#§!oe-password"
- Créer le cas dans la section "7" de la base de données "mytestbase"
1 et 7 sont des identifiants internes d'OpenERP. Pour trouver ces identifiants, ils faut regarder en bas à gauche dans le client OpenERP quand le formulaire est présenté. 1 correspond sans doute à l'utilisateur "admin", 7 doit correspondre à l'id de la section dans laquelle on crée le cas, probablement une section qui s'apelle "support".
L'option -e quant à elle est utilisée pour marquer les messages sortants de manière cohérente.
Ce fichier doit être possédé par l'utilisateur qui activera la commande fetchmail avec les droits 710
chown userlinux /home/sisalpuser/openerp/dev5/fetchmail/fetchmailrc chmod 710 /home/sisalpuser/openerp/dev5/fetchmail/fetchmailrc
Commande d'activation de fetchmail
Voici un exemple de commande correspondant au même exemple
fetchmail -f /home/sisalpuser/openerp/dev5/fetchmail/fetchmailrc --pidfile /home/sisalpuser/openerp/dev5/fetchmail/fetchmail.pid
avec l'option -v, vous aurez le détail des opérations de recherche des messages dans le fichier log spécifié /home/sisalpuser/openerp/dev5/fetchmail/fetchmail.log, et vous mettrez ainsi rapidement au point la relève de mail.
Coté mailgate, il faut espérer que ça fonctionne assez naturellement, parce qu'il n'y a pas beaucoup de moyens simples pour savoir pourquoi le cas ne serait pas créé correctement.
Création d'un cas de CRM à la réception d'un message
- Envoyez un message de test sur l'adresse mail support.ma_societe@gmail.com
- Exécuter la commande fetchmail
- Constater qu'un cas a été créé dans la section des cas de CRM.
Passer du prototype à un environnement de production
Paramétrer mailgate avec l'outil xoe (recommandé)
On se reportera utilement à cette page pour installer l'environnement xoe d'exécution des serveurs OpenERP multiples.
L'essentiel des opérations décrites précédemment ont probablement déjà été exécutées automatiquement par xoe, à savoir
- l'installation de fetchmail,
- l'adaptation du code de mailgate.py (voir paragraphe Note complémentaire ci-dessous)
Il reste donc à fournir les paramètres nécessaires pour l'exécution de fetchmail sur les différents serveurs, pour les différentes bases de données.
Pour paramétrer fetchmail avec xoe, exécutez la commande suivante correspondant à l'exemple donné précédemment :
xoe --new -fetchmail dev5 mail_support Auto "poll pop.googlemail.com with proto POP3 and options no dns username support.ma_societe@gmail.com password &#§!password options ssl keep" "/home/sisalpuser/openerp/dev5/server/bin/addons/crm/scripts/openerp-mailgate/openerp-mailgate.py -u1 -p&#§!oe-password -s7 -esupport.ma_societe@gmail.com -dmytestbase"
cette commande accepte cinq paramètres, à savoir
- le service openerp concerné (ici dev5)
- un nom unique identifiant la directive (ici mail_support)
- la valeur "Auto"
- les paramètres et option de relevé de la boite à lettre, encadrés par des doubles guillemets
- les paramètres et options de traitement par mailgate.py, sans "mda"
Vous pouvez également éditer directement le fichier de configuration de xoe par la commande
xoe --config -edit
Vous trouverez dans le fichier lui-même les directives pour ajouter/modifier une directive "fetchmail:"
Pour supprimer une directive d'execution de fetchmail de la configuration de xoe :
xoe --cancel -fetchmail dev5 mail_support
Pour modifier la fréquence de relevé de la boite à lettre éditer la ligne de la crontab :
crontab -e */15 * * * * /usr/local/bin/xoe --fetchmail
Ici, une fréquence de 15 minutes. Pour démarrer le traitement des mails entrants pour un service comme dev5
xoe --fetchmail -on dev5
Pour le démarrer sur tous les services
xoe --fetchmail -on
Pour l'arrêter pour le service dev5 (exemple)
xoe --fetchmail -off dev5
Pour l'arrêter pour tous les services
xoe --fetchmail -off
Attention : Ne pas perdre de message pendant les arrêts du serveur OpenERP
Vous pouvez utiliser ou non xoe pour cette opération. Si votre installation ne le nécessite pas, il est probablement plus simple de ne pas l'utiliser et d'améliorer le paramétrage initial réalisé manuellement plus haut.
Prenez cependant garde au fait que les messages relevés de la boite à lettre sont perdus si le serveur OpenERP n'est pas opérationnel à cet instant là. Ce cas peut se produire si vous activez fetchmail par un daemon, périodiquement. Si votre service OpenERP s'interrompt inopinément ou pour des opérations de maintenance ou de sauvegarde, vous risquez donc de perdre des messages.
Pour éviter cela dans la mesure du possible, xoe vérifie que chaque service OpenERP est bien actif au moment de lire les boites à lettre d'entrée des messages qui lui sont destinés, sinon cette opération est reportée à plus tard. Ce test n'est pas parfait parce que le serveur OpenERP peut être en marche et pourtant incapable de traiter le requête. Mailgate devrait dans ce cas signaler l'erreur auquel cas, fetchmail pourra rejouer le message non traité.
Nous pouvons espérer que la prochaine version d'OpenERP prévue en 2010 remédiera à ces problèmes et ne nécessitera plus cette activation coordonnée depuis un programme extérieur.
Note complémentaire sur l'adaptation automatique du code de mailgate.py avec l'outil poe (étape optionnelle)
Il n'est pas possible d'utiliser un port différent de 8069 pour le protocole xml-rpc sans modifier le code même de mailgate. En effet celui-ci fait l'hypothèse d' un serveur OpenERP situé sur le host "localhost" et répondant sur le port "8069" au protocole xml-rpc. (le protocole xml-rpc-"secure" n'est pas compatible avec mailgate.)
L'édition manuelle ne pose pas de problème particulier.
Dans le cas d'un serveur de production, il peut être utile d'automatiser cette modification. Cette opération est effectuée par exemple sur les serveurs d'hébergement de SISalp, afin que chaque serveur utilise systématiquement des paramètres réseau différents des autres serveurs.
Le détail des opérations n'est pas nécessaire ici. Pour les personnes qui souhaiteraient effectuer cette opération, se reporter à la documentation de poe
Au téléchargement du code OpenERP, xoe exécute automatiquement poe, pour adapter la modification du code au contexte réel du serveur (adresse, port), puis applique cette adaptation au code avant démarrage du serveur.
On trouvera plus d'information sur l'utilisation de la directive "profile:" de xoe sur la documentation de la commande xoe.
Merci d'avoir lu cet article et pour vos commentaires éventuels.