Comment filtrer les messages dans ejabberd
Question
Je ejabberd et en cours d'exécution avec les utilisateurs de test, et son travail bien. Je veux écrire un module qui peut intercepter les messages et les modifier, comme suit:
- intercepter "messages"
- les envoyer à un fichier php
- obtenir le résultat du même fichier php (immédiat)
- Modifier la strophe du message et l'envoyer sur le fil au destinataire
La documentation ejabberd est faible et tutoriels sont inexistants. Pouvez-vous me donner quelques exemples de code qui fait cela. Je peux alors comprendre comment le configurer pour mes besoins.
Merci un paquet!
Adil
La solution
Voici l'exemple de base de tel module:
-module(packet_interceptor).
-behaviour(gen_mod).
-export([start/2,
stop/1]).
-export([on_filter_packet/1]).
start(Host, _Opts) ->
ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 0).
on_filter_packet({From, To, XML} = Packet) ->
%% does something with a packet
%% should return modified Packet or atom `drop` to drop the packet
Packet.
Et assurez-vous d'ajouter ce module dans la configuration ejabberd dans la section de module
:
{modules,
[...
...
...
{packet_interceptor, []}
]}.
Il suffit de prolonger on_filter_packet/1
la façon dont vous voulez et revenir paquet modifié de manière appropriée.
Autres conseils
L'exemple de Gleber est excellent. J'ai aussi écrit un exemple plus complexe de manipulation de paquets que j'ai construit pour Chesspark appelé mod_sunshine .
Comment envoyer ces données XML à PHP (via? Xml =) et récupérer le XML résultant et passer ensuite au destinataire?
Si vous avez une version récente de ejabberd qui utilise exmpp, vous pouvez utiliser exmpp_xml: node_to_binary / 1 ou exmpp_xml:. Node_to_list / 1 pour activer la représentation interne du XML à un binaire ou une chaîne respectivement
Il y avait même nom fonctions dans le ejabberd plus, mais à l'intérieur du module XML.
Il semble que ce que vous voulez y faire est de créer un composant serveur XMPP. Beaucoup de choses ont déjà été dit sur ce poste href="https://stackoverflow.com/questions/1105378/which-xmpp-server-to-experiment-developing-a-server-component"> .
Je peux vous relier quelques liens utiles:
-
Un Echo- Bot en Python de metajack.im, un blog très agréable d'un gourou XMPP. Ce bot écouter toutes les strophes de message et répondre à certains d'entre eux.
La solution de Gleber est vraiment « ejabberd » orientée (certainement le plus facile dans votre cas), alors que celui-ci peut évoluer avec d'autres serveurs XMPP.
Il est l'interface:
ejabberd_router:register_route(MyHost)
que je l'ai utilisé dans le passé et fonctionne bien. Une fois que le MyHost
est inscrit sur ejabberd, le module recevra les communications destinées à MyHost
par des messages de info
(en supposant gen_server
).
Comme l'a noté @gleber, ne pas oublier d'ajouter votre module dans le fichier de configuration.