mirror of
https://github.com/EvolutionAPI/evolution-client-python.git
synced 2025-07-13 07:04:49 -06:00
Evolution Client Python
Client Python para interagir com a API evolutionapi.
build/lib | ||
env | ||
evolutionapi | ||
.gitignore | ||
publish.sh | ||
README.md | ||
setup.py | ||
test_evolution.py |
Evolution Client Python
Client Python para interagir com a API evolutionapi.
Instalação
pip install evolutionapi
Uso Básico
Inicializando o Cliente
from evolutionapi.client import EvolutionClient
client = EvolutionClient(
base_url='http://seu-servidor:porta',
api_token='seu-token-api'
)
Gerenciamento de Instâncias
Listar Instâncias
instances = client.instances.fetch_instances()
Criar Nova Instância
from evolutionapi.models.instance import InstanceConfig
config = InstanceConfig(
instanceName="minha-instancia",
integration="WHATSAPP-BAILEYS",
qrcode=True
)
nova_instancia = client.instances.create_instance(config)
Operações com Instâncias
Conectar Instância
estado = client.instance_operations.connect(instance_id, instance_token)
Verificar Estado da Conexão
estado = client.instance_operations.get_connection_state(instance_id, instance_token)
Definir Presença
from evolutionapi.models.presence import PresenceStatus
client.instance_operations.set_presence(
instance_id,
PresenceStatus.AVAILABLE,
instance_token
)
Enviando Mensagens
Mensagem de Texto
from evolutionapi.models.message import TextMessage
mensagem = TextMessage(
number="5511999999999",
text="Olá, como vai?",
delay=1000 # delay opcional em ms
)
response = client.messages.send_text(instance_id, mensagem, instance_token)
Mensagem de Mídia
from evolutionapi.models.message import MediaMessage, MediaType
mensagem = MediaMessage(
number="5511999999999",
mediatype=MediaType.IMAGE.value,
mimetype="image/jpeg",
caption="Minha imagem",
media="base64_da_imagem_ou_url",
fileName="imagem.jpg"
)
response = client.messages.send_media(instance_id, mensagem, instance_token)
Mensagem com Botões
from evolutionapi.models.message import ButtonMessage, Button
botoes = [
Button(
type="reply",
displayText="Opção 1",
id="1"
),
Button(
type="reply",
displayText="Opção 2",
id="2"
)
]
mensagem = ButtonMessage(
number="5511999999999",
title="Título",
description="Descrição",
footer="Rodapé",
buttons=botoes
)
response = client.messages.send_buttons(instance_id, mensagem, instance_token)
Mensagem com Lista
from evolutionapi.models.message import ListMessage, ListSection, ListRow
rows = [
ListRow(
title="Item 1",
description="Descrição do item 1",
rowId="1"
),
ListRow(
title="Item 2",
description="Descrição do item 2",
rowId="2"
)
]
section = ListSection(
title="Seção 1",
rows=rows
)
mensagem = ListMessage(
number="5511999999999",
title="Título da Lista",
description="Descrição da lista",
buttonText="Clique aqui",
footerText="Rodapé",
sections=[section]
)
response = client.messages.send_list(instance_id, mensagem, instance_token)
Gerenciamento de Grupos
Criar Grupo
from evolutionapi.models.group import CreateGroup
config = CreateGroup(
subject="Nome do Grupo",
participants=["5511999999999", "5511888888888"],
description="Descrição do grupo"
)
response = client.group.create_group(instance_id, config, instance_token)
Atualizar Foto do Grupo
from evolutionapi.models.group import GroupPicture
config = GroupPicture(
image="base64_da_imagem"
)
response = client.group.update_group_picture(instance_id, "grupo_jid", config, instance_token)
Gerenciar Participantes
from evolutionapi.models.group import UpdateParticipant
config = UpdateParticipant(
action="add", # ou "remove", "promote", "demote"
participants=["5511999999999"]
)
response = client.group.update_participant(instance_id, "grupo_jid", config, instance_token)
Gerenciamento de Perfil
Atualizar Nome do Perfil
from evolutionapi.models.profile import ProfileName
config = ProfileName(
name="Novo Nome"
)
response = client.profile.update_profile_name(instance_id, config, instance_token)
Atualizar Status
from evolutionapi.models.profile import ProfileStatus
config = ProfileStatus(
status="Novo status"
)
response = client.profile.update_profile_status(instance_id, config, instance_token)
Configurar Privacidade
from evolutionapi.models.profile import PrivacySettings
config = PrivacySettings(
readreceipts="all",
profile="contacts",
status="contacts",
online="all",
last="contacts",
groupadd="contacts"
)
response = client.profile.update_privacy_settings(instance_id, config, instance_token)
Operações de Chat
Verificar Números WhatsApp
from evolutionapi.models.chat import CheckIsWhatsappNumber
config = CheckIsWhatsappNumber(
numbers=["5511999999999", "5511888888888"]
)
response = client.chat.check_is_whatsapp_numbers(instance_id, config, instance_token)
Marcar Mensagem como Lida
from evolutionapi.models.chat import ReadMessage
mensagem = ReadMessage(
remote_jid="5511999999999@s.whatsapp.net",
from_me=False,
id="mensagem_id"
)
response = client.chat.mark_message_as_read(instance_id, [mensagem], instance_token)
Chamadas
Simular Chamada
from evolutionapi.models.call import FakeCall
config = FakeCall(
number="5511999999999",
isVideo=False,
callDuration=30
)
response = client.calls.fake_call(instance_id, config, instance_token)
Labels
Gerenciar Labels
from evolutionapi.models.label import HandleLabel
config = HandleLabel(
number="5511999999999",
label_id="label_id",
action="add" # ou "remove"
)
response = client.label.handle_label(instance_id, config, instance_token)
WebSocket
O cliente Evolution API suporta conexão via WebSocket para receber eventos em tempo real. Aqui está um guia de como usar:
Configuração Básica
from evolutionapi.services.websocket import WebSocketManager
import logging
# Configuração do logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# Configuração do WebSocket
websocket = WebSocketManager(
base_url="http://localhost:8081", # URL da sua Evolution API
instance_id="teste", # ID da sua instância
api_token="seu-token-aqui" # Token de autenticação
)
Registrando Handlers de Eventos
Você pode registrar handlers para diferentes tipos de eventos:
def handle_message(data):
print(f"Nova mensagem recebida: {data}")
def handle_qrcode(data):
print(f"QR Code atualizado: {data}")
# Registrando handlers
websocket.on("messages.upsert", handle_message)
websocket.on("qrcode.updated", handle_qrcode)
Eventos Disponíveis
Os eventos disponíveis são:
Eventos de Instância
application.startup
: Disparado quando a aplicação iniciainstance.create
: Disparado quando uma nova instância é criadainstance.delete
: Disparado quando uma instância é deletadaremove.instance
: Disparado quando uma instância é removidalogout.instance
: Disparado quando uma instância faz logout
Eventos de Conexão e QR Code
qrcode.updated
: Disparado quando o QR Code é atualizadoconnection.update
: Disparado quando o status da conexão mudastatus.instance
: Disparado quando o status da instância mudacreds.update
: Disparado quando as credenciais são atualizadas
Eventos de Mensagens
messages.set
: Disparado quando mensagens são definidasmessages.upsert
: Disparado quando novas mensagens são recebidasmessages.edited
: Disparado quando mensagens são editadasmessages.update
: Disparado quando mensagens são atualizadasmessages.delete
: Disparado quando mensagens são deletadassend.message
: Disparado quando uma mensagem é enviadamessaging-history.set
: Disparado quando o histórico de mensagens é definido
Eventos de Contatos
contacts.set
: Disparado quando contatos são definidoscontacts.upsert
: Disparado quando novos contatos são adicionadoscontacts.update
: Disparado quando contatos são atualizados
Eventos de Chats
chats.set
: Disparado quando chats são definidoschats.update
: Disparado quando chats são atualizadoschats.upsert
: Disparado quando novos chats são adicionadoschats.delete
: Disparado quando chats são deletados
Eventos de Grupos
groups.upsert
: Disparado quando grupos são criados/atualizadosgroups.update
: Disparado quando grupos são atualizadosgroup-participants.update
: Disparado quando participantes de um grupo são atualizados
Eventos de Presença
presence.update
: Disparado quando o status de presença é atualizado
Eventos de Chamadas
call
: Disparado quando há uma chamada
Eventos de Typebot
typebot.start
: Disparado quando um typebot iniciatypebot.change-status
: Disparado quando o status do typebot muda
Eventos de Labels
labels.edit
: Disparado quando labels são editadoslabels.association
: Disparado quando labels são associados/desassociados
Exemplo de Uso com Eventos Específicos
def handle_messages(data):
logger.info(f"Nova mensagem: {data}")
def handle_contacts(data):
logger.info(f"Contatos atualizados: {data}")
def handle_groups(data):
logger.info(f"Grupos atualizados: {data}")
def handle_presence(data):
logger.info(f"Status de presença: {data}")
# Registrando handlers para diferentes eventos
websocket.on("messages.upsert", handle_messages)
websocket.on("contacts.upsert", handle_contacts)
websocket.on("groups.upsert", handle_groups)
websocket.on("presence.update", handle_presence)
Exemplo Completo
from evolutionapi.services.websocket import WebSocketManager
import logging
import time
# Configuração do logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def handle_message(data):
logger.info(f"Nova mensagem recebida: {data}")
def handle_qrcode(data):
logger.info(f"QR Code atualizado: {data}")
def handle_connection(data):
logger.info(f"Status da conexão: {data}")
def main():
# Inicializa o WebSocket
websocket = WebSocketManager(
base_url="http://localhost:8081",
instance_id="teste",
api_token="seu-token-aqui"
)
# Registra os handlers
websocket.on("messages.upsert", handle_message)
websocket.on("qrcode.updated", handle_qrcode)
websocket.on("connection.update", handle_connection)
try:
# Conecta ao WebSocket
websocket.connect()
logger.info("Conectado ao WebSocket. Aguardando eventos...")
# Mantém o programa rodando
while True:
time.sleep(1)
except KeyboardInterrupt:
logger.info("Encerrando conexão...")
websocket.disconnect()
except Exception as e:
logger.error(f"Erro: {e}")
websocket.disconnect()
if __name__ == "__main__":
main()
### Recursos Adicionais
#### Reconexão Automática
O WebSocket Manager possui reconexão automática com backoff exponencial:
```python
websocket = WebSocketManager(
base_url="http://localhost:8081",
instance_id="teste",
api_token="seu-token-aqui",
max_retries=5, # Número máximo de tentativas de reconexão
retry_delay=1.0 # Delay inicial entre tentativas em segundos
)
Logging
O WebSocket Manager utiliza o sistema de logging do Python. Você pode ajustar o nível de log conforme necessário:
# Para ver mais detalhes
logging.getLogger("evolutionapi.services.websocket").setLevel(logging.DEBUG)
Tratamento de Erros
O WebSocket Manager possui tratamento de erros robusto:
- Reconexão automática em caso de desconexão
- Logs detalhados de erros
- Tratamento de eventos inválidos
- Validação de dados recebidos
Dicas de Uso
- Sempre use try/except ao conectar ao WebSocket
- Implemente handlers para todos os eventos que você precisa monitorar
- Use logging para debug e monitoramento
- Considere implementar um mecanismo de heartbeat se necessário
- Mantenha o token de API seguro e não o exponha em logs