evolution-client-python/test_evolution.py
Davidson Gomes b0131a1141 feat: Add full support for WebSocket configuration and management in the Evolution API Client library
- Implement WebSocketConfig and WebSocketInfo models for event configuration
- Add create_websocket() method in the client for simplified creation of WebSocket handlers
- Expand WebSocket service with set_websocket() and find_websocket() methods
- Update README with detailed documentation on WebSocket configuration and usage
- Add new event handlers in the test example (on_qrcode, on_connection)
2025-03-06 09:44:59 -03:00

156 lines
5.0 KiB
Python

from evolutionapi.client import EvolutionClient
from evolutionapi.models.instance import InstanceConfig
from evolutionapi.models.message import TextMessage, MediaMessage, MediaType
from evolutionapi.models.websocket import WebSocketConfig
import time
import logging
# Configuração do logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
print("Iniciando cliente")
client = EvolutionClient(
base_url='http://localhost:8081',
api_token='429683C4C977415CAAFCCE10F7D57E11'
)
instance_token = "82D55E57CBBC-48A5-98FB-E99655AE7148"
instance_id = "teste"
# Configurando eventos do WebSocket
websocket_config = WebSocketConfig(
enabled=True,
events=[
"APPLICATION_STARTUP",
"QRCODE_UPDATED",
"MESSAGES_SET",
"MESSAGES_UPSERT",
"MESSAGES_UPDATE",
"MESSAGES_DELETE",
"SEND_MESSAGE",
"CONTACTS_SET",
"CONTACTS_UPSERT",
"CONTACTS_UPDATE",
"PRESENCE_UPDATE",
"CHATS_SET",
"CHATS_UPSERT",
"CHATS_UPDATE",
"CHATS_DELETE",
"GROUPS_UPSERT",
"GROUP_UPDATE",
"GROUP_PARTICIPANTS_UPDATE",
"CONNECTION_UPDATE",
"LABELS_EDIT",
"LABELS_ASSOCIATION",
"CALL",
"TYPEBOT_START",
"TYPEBOT_CHANGE_STATUS"
]
)
# Configurando WebSocket para a instância
logger.info("Configurando WebSocket...")
response = client.websocket.set_websocket(instance_id, websocket_config, instance_token)
logger.info(f"Configuração WebSocket: {response}")
# Obtendo configuração atual do WebSocket
websocket_info = client.websocket.find_websocket(instance_id, instance_token)
logger.info(f"WebSocket habilitado: {websocket_info.enabled}")
logger.info(f"Eventos configurados: {websocket_info.events}")
# Criando gerenciador WebSocket usando o cliente
logger.info("Criando gerenciador WebSocket...")
websocket_manager = client.create_websocket(
instance_id=instance_id,
api_token=instance_token,
max_retries=5,
retry_delay=1.0
)
def on_message(data):
"""Handler para evento de mensagens"""
try:
if 'data' in data:
message_data = data['data']
logger.info("=== Mensagem Recebida ===")
logger.info(f"De: {message_data['key']['remoteJid']}")
logger.info(f"Tipo: {message_data['messageType']}")
# Extrai o conteúdo baseado no tipo da mensagem
if 'message' in message_data:
if 'conversation' in message_data['message']:
logger.info(f"Conteúdo: {message_data['message']['conversation']}")
elif 'extendedTextMessage' in message_data['message']:
logger.info(f"Conteúdo: {message_data['message']['extendedTextMessage']['text']}")
elif 'imageMessage' in message_data['message']:
logger.info(f"Conteúdo: [Imagem] {message_data['message']['imageMessage'].get('caption', '')}")
else:
logger.info(f"Conteúdo: {message_data['message']}")
logger.info("=======================")
except Exception as e:
logger.error(f"Erro ao processar mensagem: {e}", exc_info=True)
def on_qrcode(data):
"""Handler para evento de QR Code"""
logger.info("=== QR Code Atualizado ===")
logger.info(f"QR Code: {data}")
logger.info("=======================")
def on_connection(data):
"""Handler para evento de conexão"""
logger.info("=== Status de Conexão ===")
logger.info(f"Status: {data}")
logger.info("=======================")
logger.info("Registrando handlers de eventos...")
# Registrando handlers de eventos
websocket_manager.on('messages.upsert', on_message)
websocket_manager.on('qrcode.updated', on_qrcode)
websocket_manager.on('connection.update', on_connection)
try:
logger.info("Iniciando conexão WebSocket...")
# Conectando ao WebSocket
websocket_manager.connect()
# Mantendo o programa rodando para receber eventos
logger.info("Aguardando eventos...")
while True:
time.sleep(1)
except KeyboardInterrupt:
logger.info("Encerrando conexão WebSocket...")
finally:
websocket_manager.disconnect()
# Exemplos de outras operações (comentados)
# response = client.group.fetch_all_groups(instance_id, instance_token, False)
# print(response)
# text_message = TextMessage(
# number="557499879409",
# text="Olá, como vai?",
# delay=1200
# )
# response = client.messages.send_text(instance_id, text_message, instance_token)
# print("Mensagem de texto enviada")
# print(response)
# media_message = MediaMessage(
# number="557499879409",
# mediatype="document",
# mimetype="application/pdf",
# caption="Olá, como vai?",
# fileName="arquivo.pdf"
# )
# response = client.messages.send_media(instance_id, media_message, instance_token, "arquivo.pdf")
# print("Mensagem de mídia enviada")
# print(response)