Depois de mergulhar nos conceitos de XMPP e entender como o Ejabberd funciona na teoria, eu decidi construir algo de verdade — mesmo que simples — para realmente sentir como essa arquitetura opera na prática. Nada substitui o aprendizado que surge quando a gente bota a mão na massa.
Neste artigo, vou mostrar como instalei, configurei e conectei um cliente Python ao Ejabberd usando XMPP.
A ideia é construir um mini-cliente de chat capaz de:
conectar ao servidor
autenticar
enviar mensagens
receber mensagens em tempo real
Tudo isso em poucas linhas de Python.
1. Instalando o Ejabberd
Eu optei por usar a versão Docker, porque é a mais rápida para subir sem complicações.
Se quiser instalar manualmente, também funciona — mas pelo Docker é muito mais simples.
Subindo o Ejabberd no Docker
-p 5222:5222 \
-p 5280:5280 \
-p 5269:5269 \
rroemhild/ejabberd
Usuário padrão desse container:
-
Admin JID: admin@localhost
-
Senha: admin
Para acessar o painel administrativo:
2. Criando um usuário XMPP para testes
No painel do Ejabberd, criei um usuário simples para meu cliente Python:
-
JID: test1@localhost
-
Senha: 1234
Também criei um segundo usuário para simular uma conversa:
-
JID: test2@localhost
-
Senha: 1234
Assim consigo testar envio e recebimento.
3. Instalando o cliente XMPP em Python
A melhor biblioteca atual é slixmpp, compatível com asyncio.
Criando meu primeiro cliente XMPP em Python
Eu queria algo simples, mas funcional: um script que conecta e envia uma mensagem.
import slixmpp
class SendMsgBot(slixmpp.ClientXMPP):
def __init__(self, jid, password, recipient, message):
super().__init__(jid, password)
self.msg = message
self.add_event_handler("session_start", self.start)
self.send_presence()
await self.get_roster()
self.send_message(
mto=self.recipient,
mbody=self.msg,
mtype="chat"
)
print(f"Mensagem enviada para {self.recipient}")
self.disconnect()
async def main():
bot = SendMsgBot(
"test1@localhost", # JID
"1234", # Senha
"test2@localhost", # Destinatário
"Olá! Essa é minha primeira mensagem XMPP via Python!"
)
await bot.process(forever=False)
Execução:
5. Criando um cliente que recebe mensagens
Agora eu queria testar o fluxo inverso: ouvir mensagens chegando.
import slixmpp
class ReceiverBot(slixmpp.ClientXMPP):
def __init__(self, jid, password):
super().__init__(jid, password)
self.add_event_handler("message", self.message)
self.send_presence()
await self.get_roster()
print("Bot conectado. Aguardando mensagens...")
if msg['type'] in ('chat', 'normal'):
print(f"\n Nova mensagem de {msg['from']}: {msg['body']}")
async def main():
bot = ReceiverBot("test2@localhost", "1234")
await bot.process(forever=True)
Execução:
Agora, quando você rodar o outro script, verá as mensagens chegando em tempo real.
6. Dicas práticas que aprendi durante os testes
Use o painel admin do Ejabberd
Ele facilita muito para verificar usuários, conexões e tentativas de autenticação.
Logs do Docker ajudam MUITO
Se algo der errado:
docker logs ejabberd
Verifique o domínio usado
No meu caso, usei localhost, então o JID é:
test1@localhost
Se rodar em outra máquina, use o IP ou domínio real.
slixmpp é totalmente assíncrono
Isso é fantástico para aplicações maiores (chatbots, automação, IoT etc.)
7. Próximo passo: automatizando um mini-chat CLI
Depois desses testes, vou criar um CLI em Python que envia/recebe mensagens em tempo real, quase como um “telegram simplificado”. Em breve postarei em um novo artigo.
Criar minha primeira aplicação XMPP com Ejabberd e Python foi muito mais simples do que imaginei.
O protocolo é antigo, mas extremamente poderoso, extensível e seguro — e o Ejabberd é uma máquina robusta para implantar qualquer sistema de mensageria.
Agora tenho uma base prática para continuar explorando:
-
presença
-
roster (contatos)
-
salas MUC (multiusuário)
-
pub/sub
-
gateways
-
bots