Sign inSign up

ggdadds/kirago

By ggdadds

•Updated 3 days ago

Image
0

5.3K

ggdadds/kirago repository overview

⁠KiraGo

KiraGo é uma API REST para automação de WhatsApp Web (multidevice).

Este repositório público existe para documentação de uso e notas de versão.

⁠Aviso importante

O WhatsApp pode banir números por uso indevido. Não use para SPAM, disparos em massa ou qualquer violação dos Termos do WhatsApp. Use por sua conta e risco.

⁠Instalação (Docker)

Exemplo de docker-compose.yml:

services:
  kirago:
    image: SUA_IMAGEM_DO_KIRAGO_AQUI
    container_name: kirago
    restart: unless-stopped
    env_file:
      - .env
    ports:
      - "${KIRAGO_PORT:-8080}:8080"

Suba o serviço:

docker compose up -d

⁠Configuração (.env)

Crie um arquivo .env na mesma pasta do docker-compose.yml. Você pode copiar kirago/.env.sample como ponto de partida.

⁠Variáveis obrigatórias
VariávelDescrição
KIRAGO_ADMIN_TOKENToken de administrador para rotas /admin/*
KIRAGO_LICENSE_KEYChave de licença — obrigatória para criar instâncias
KIRAGO_GLOBAL_ENCRYPTION_KEYChave AES-256 para dados sensíveis (exatamente 32 bytes)
KIRAGO_GLOBAL_HMAC_KEYChave HMAC global para assinar webhooks (mínimo 32 caracteres)
DB_USERUsuário PostgreSQL (padrão: postgres)
DB_PASSWORDSenha PostgreSQL
DB_NAMENome do banco (padrão: kirago)
DB_HOSTHost do banco (padrão: kirago-db)
DB_PORTPorta do banco (padrão: 5432)
⁠Variáveis de servidor
VariávelPadrãoDescrição
KIRAGO_PORT8080Porta de escuta
KIRAGO_ADDRESS0.0.0.0Endereço de bind
KIRAGO_PUBLIC_URL—URL pública da instância (usado em links externos)
KIRAGO_SKIP_HOMEPAGEfalsetrue redireciona / direto para /dashboard
KIRAGO_STATIC_DIRautoCaminho dos arquivos estáticos (dashboard, swagger)
TZ—Timezone (ex: America/Sao_Paulo)
DB_SSLMODEfalseModo SSL do banco
⁠Variáveis de sessão e dispositivo
VariávelPadrãoDescrição
SESSION_DEVICE_NAMEKiraGoNome do dispositivo exibido no WhatsApp
⁠Variáveis de webhook
VariávelPadrãoDescrição
KIRAGO_GLOBAL_WEBHOOK—URL de webhook global (recebe eventos de todos os usuários)
KIRAGO_GLOBAL_WEBHOOK_EVENTS—Eventos a encaminhar para o webhook global, separados por vírgula (vazio = todos)
WEBHOOK_FORMATjsonFormato do payload: json ou form
WEBHOOK_RETRY_ENABLEDtrueAtiva retry automático em falha de entrega
WEBHOOK_RETRY_COUNT5Número de tentativas
WEBHOOK_RETRY_DELAY_SECONDS30Intervalo entre tentativas (segundos)
WEBHOOK_ERROR_QUEUE_NAMEwebhook_errorsFila RabbitMQ para webhooks com falha
⁠Variáveis de presença (WhatsApp)
VariávelPadrãoDescrição
WA_AUTO_PRESENCE_AVAILABLEtrueEnvia PresenceAvailable automaticamente ao conectar
WA_AUTO_PRESENCE_OFF_SECONDS20Segundos até enviar PresenceUnavailable após conectar
WA_AUTO_PRESENCE_ON_INCOMINGfalseEnvia presença ao receber mensagens
WA_FORCE_ACTIVE_DELIVERY_RECEIPTSfalseForça recibos de entrega ativos
WA_HUMAN_CHAT_PRESENCEtrueEnvia ChatPresence (digitando) antes de enviar mensagens
WA_HUMAN_CHAT_PRESENCE_DELAY_MS_MIN0Delay mínimo (ms) antes de enviar com chat presence
WA_HUMAN_CHAT_PRESENCE_DELAY_MS_MAX0Delay máximo (ms) antes de enviar com chat presence

Dica: Em alguns aparelhos, manter a instância "online" pode suprimir notificações no celular. Se isso acontecer, mantenha WA_AUTO_PRESENCE_ON_INCOMING=false (padrão). Se ainda persistir, teste WA_AUTO_PRESENCE_AVAILABLE=false.

⁠Variáveis de proxy
VariávelPadrãoDescrição
KIRAGO_PROXY_FAILOPENfalseAo detectar falha no proxy, desativa-o e reconecta direto pela VPS
KIRAGO_PROXY_FAILOPEN_COOLDOWN_SECONDS300Cooldown (segundos) entre tentativas de fail-open por sessão
⁠Variáveis de RabbitMQ
VariávelPadrãoDescrição
RABBITMQ_URL—URL de conexão (amqp://...)
RABBITMQ_QUEUE—Fila para eventos WhatsApp
RABBITMQ_TYPEBOT_QUEUEtypebot_outboxFila para mensagens do Typebot
⁠Variáveis de log
VariávelPadrãoDescrição
KIRAGO_EVENT_LOGfalsePersiste logs de eventos no banco, acessíveis em GET /logs/events

⁠Documentação no servidor

Após subir a instância:

URLDescrição
{BASE_URL}/dashboardPainel de gerenciamento
{BASE_URL}/apiSwagger / OpenAPI
{BASE_URL}/docsDocumentação de uso
{BASE_URL}/loginTela de login por token

⁠Autenticação

Todas as rotas (exceto /health) exigem o header:

token: SEU_TOKEN
Content-Type: application/json

⁠Endpoints (resumo)

⁠Sessão
MétodoRotaDescrição
POST/session/connectIniciar conexão / gerar QR
GET/session/qrObter QR Code atual
GET/session/statusStatus da sessão
POST/session/disconnectDesconectar
POST/session/logoutLogout completo
POST/session/pairphoneParear por número de telefone
GET/POST/session/historySolicitar sincronização de histórico
⁠Webhook
MétodoRotaDescrição
POST/webhookConfigurar webhook
GET/webhookObter configuração atual
PUT/webhookAtualizar configuração
DELETE/webhookRemover webhook
⁠Envio de mensagens
MétodoRotaDescrição
POST/chat/send/textTexto
POST/chat/send/imageImagem
POST/chat/send/audioÁudio
POST/chat/send/videoVídeo
POST/chat/send/documentDocumento
POST/chat/send/stickerSticker
POST/chat/send/gifGIF
POST/chat/send/locationLocalização
POST/chat/send/contactContato
POST/chat/send/pollEnquete
POST/chat/send/buttonsBotões interativos
POST/chat/send/listLista interativa
POST/chat/send/carouselCarrossel
POST/chat/send/product-carouselCarrossel de produtos
POST/chat/send/orderDetalhes de pedido
POST/chat/send/editEditar mensagem enviada
POST/chat/send/presenceEnviar presença
⁠Ações no chat
MétodoRotaDescrição
POST/chat/reactReagir a mensagem
POST/chat/markreadMarcar como lido
POST/chat/deleteDeletar mensagem
POST/chat/presenceTyping / ChatPresence
GET/chat/historyHistórico do chat
POST/chat/archiveArquivar/desarquivar chat
⁠Download de mídia
MétodoRotaDescrição
POST/chat/downloadimageImagem
POST/chat/downloadvideoVídeo
POST/chat/downloadaudioÁudio
POST/chat/downloaddocumentDocumento
⁠Usuário / contatos
MétodoRotaDescrição
POST/user/checkVerificar se número existe no WhatsApp
GET/user/infoInformações do usuário
GET/user/avatarFoto de perfil
GET/user/contactsLista de contatos
GET/user/lidObter LID do usuário
GET/POST/user/privacyConfigurações de privacidade
GET/POST/user/blocklistLista de bloqueados
⁠Status / Story
MétodoRotaDescrição
POST/status/textPublicar story de texto
POST/status/imagePublicar story de imagem
POST/status/videoPublicar story de vídeo
POST/status/audioPublicar story de áudio
POST/status/stickerPublicar story de sticker
POST/status/setDefinir texto de status pessoal
⁠Grupos
MétodoRotaDescrição
GET/group/listListar grupos
GET/group/infoInformações do grupo
POST/group/createCriar grupo
POST/group/leaveSair do grupo
POST/group/joinEntrar via link
POST/group/participantsAdicionar/remover participantes
POST/group/nameRenomear grupo
POST/group/topicAlterar descrição
POST/group/photoAlterar foto
GET/group/invitelinkObter link de convite
GET/group/inviteinfoInfo do link de convite
⁠Newsletter (Canais WhatsApp)
MétodoRotaDescrição
GET/newsletter/listListar newsletters seguidos
POST/newsletter/createCriar newsletter
GET/newsletter/infoInfo do newsletter
POST/newsletter/followSeguir
POST/newsletter/unfollowDeixar de seguir
POST/newsletter/muteSilenciar/ativar
⁠CRM
MétodoRotaDescrição
POST/session/crm/configConfigurar integração CRM
GET/session/crm/configObter configuração
DELETE/session/crm/configRemover configuração
GET/session/crm/tokenObter token do CRM
POST/session/crm/sync-historySincronizar histórico de mensagens para o CRM
⁠Chatwoot
MétodoRotaDescrição
POST/session/chatwoot/configConfigurar Chatwoot
GET/session/chatwoot/configObter configuração
DELETE/session/chatwoot/configRemover configuração
POST/session/chatwoot/sync-historySincronizar histórico
POST/chatwoot/webhookWebhook recebido do Chatwoot
⁠Typebot
MétodoRotaDescrição
POST/session/typebot/configConfigurar Typebot
GET/session/typebot/configObter configuração
DELETE/session/typebot/configRemover configuração
POST/typebot/startIniciar fluxo
POST/typebot/continueContinuar fluxo
⁠Configurações avançadas por sessão
MétodoRotaDescrição
POST/GET/DELETE/session/s3/configConfiguração de S3
POST/session/s3/testTestar conexão S3
POST/GET/DELETE/session/rabbitmq/configConfiguração de RabbitMQ
POST/session/rabbitmq/testTestar conexão RabbitMQ
POST/GET/DELETE/session/hmac/configConfiguração de HMAC por sessão
POST/GET/DELETE/session/proxyConfigurar proxy de saída
POST/session/proxy/testTestar proxy
GET/POST/session/skipConfigurar eventos ignorados
⁠Admin
MétodoRotaDescrição
GET/POST/admin/usersListar / criar usuários
PUT/DELETE/admin/users/{id}Editar / remover usuário
⁠Utilitários
MétodoRotaDescrição
GET/healthHealth check
GET/logs/eventsLogs de eventos (requer KIRAGO_EVENT_LOG=true)
POST/call/rejectRejeitar chamada recebida

⁠Integração CRM

O KiraGo suporta envio de eventos em tempo real para um CRM externo via HTTP POST no endpoint /api/inbound do CRM.

⁠O que é enviado
  • Mensagens 1:1 — texto, imagem, áudio, vídeo, documento, sticker, localização, reações, respostas e deleções
  • ReadReceipt — confirmação de leitura
  • Presence — status de presença do contato
  • HistorySync — histórico de mensagens ao sincronizar (quando history_sync: true)

Grupos e canais (newsletters) não são enviados ao CRM — apenas conversas individuais.

⁠Resolução de nome do contato

O nome enviado ao CRM segue a ordem: FullName → FirstName → PushName → JID. Para mensagens enviadas pela instância, o nome é buscado no store local de contatos.

⁠Sincronização de histórico

Use POST /session/crm/sync-history para sincronizar mensagens existentes:

curl -X POST "{BASE_URL}/session/crm/sync-history" \
  -H "token: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "direction": "both",
    "include_media": true,
    "batch_size": 500,
    "max_messages": 0,
    "dry_run": false
  }'

Parâmetros:

CampoTipoDescrição
directionstringsent, received ou both
include_mediaboolIncluir mídia no payload
batch_sizeintMensagens por lote (padrão: 500)
max_messagesintLimite total (0 = sem limite)
dry_runboolSimula sem enviar ao CRM

⁠Eventos de webhook

O KiraGo tem dois tipos de webhook. Os eventos disponíveis são os mesmos em ambos, mas a forma de configurar é diferente:

Webhook da instânciaWebhook global
EscopoPor instância (usuário)Servidor inteiro — recebe de todas as instâncias
Como configurarPOST /webhook com "events": [...]Env KIRAGO_GLOBAL_WEBHOOK + KIRAGO_GLOBAL_WEBHOOK_EVENTS
Filtro de eventosCampo events na requisiçãoKIRAGO_GLOBAL_WEBHOOK_EVENTS separado por vírgula
Payload extrauserID, instanceNameuserID, instanceName (igual)
HMACChave por instância (POST /session/hmac/config)KIRAGO_GLOBAL_HMAC_KEY
Retry automáticoSim (fila de outbox)Não

Use "events": ["All"] (instância) ou deixe KIRAGO_GLOBAL_WEBHOOK_EVENTS vazio (global) para receber todos os eventos sem filtro.


⁠💬 Mensagens
EventoO que dispara
MessageNova mensagem recebida ou enviada em conversa individual
GroupMessageNova mensagem recebida ou enviada em grupo
UndecryptableMessageMensagem que não foi possível descriptografar
ReceiptRecibo de entrega de mensagem (alias de ReadReceipt)
ReadReceiptConfirmação de leitura de mensagem (tique azul)
GroupReadReceiptConfirmação de leitura em grupo
MediaRetryTentativa de reenvio de mídia que falhou no download

⁠👥 Grupos e contatos
EventoO que dispara
GroupInfoAlteração nas informações do grupo (nome, descrição, configurações, participantes)
JoinedGroupInstância entrou em um novo grupo
PictureFoto de perfil de contato ou grupo foi atualizada
BlocklistChangeUm contato foi bloqueado ou desbloqueado
BlocklistLista de bloqueados sincronizada completa

⁠🔌 Sessão e conexão
EventoO que dispara
ConnectedInstância conectada com sucesso ao WhatsApp
DisconnectedInstância desconectada (perda de conexão ou logout)
ConnectFailureFalha ao tentar conectar
LoggedOutSessão encerrada pelo WhatsApp (deslogar do celular)
ClientOutdatedVersão do cliente considerada desatualizada pelo WhatsApp
TemporaryBanNúmero banido temporariamente pelo WhatsApp
StreamErrorErro no stream de conexão com o servidor do WhatsApp
StreamReplacedStream substituído (outra sessão aberta com o mesmo número)
KeepAliveTimeoutTimeout no keep-alive da conexão
KeepAliveRestoredConexão keep-alive restaurada após timeout

⁠📷 QR e pareamento
EventoO que dispara
QRNovo QR Code gerado para parear o dispositivo
QRTimeoutQR Code expirou sem ser escaneado
PairSuccessPareamento concluído com sucesso
PairErrorFalha no pareamento do dispositivo
QRScannedWithoutMultideviceQR escaneado por um aparelho sem suporte a multidevice

⁠👀 Presença
EventoO que dispara
PresenceMudança de presença de um contato (online/offline/digitando)
ChatPresenceContato está digitando ou gravando áudio em um chat

⁠🔄 Sincronização
EventoO que dispara
HistorySyncSincronização de histórico de mensagens (ao conectar ou solicitar)
AppStateAtualização do estado interno do app (listas, contatos, configurações)
AppStateSyncCompleteSincronização de estado do app concluída
OfflineSyncCompletedSincronização offline concluída após reconexão
OfflineSyncPreviewPreview de itens pendentes antes da sincronização offline

⁠📞 Chamadas
EventoO que dispara
CallOfferChamada recebida (voz ou vídeo)
CallAcceptChamada aceita pelo destinatário
CallTerminateChamada encerrada
CallOfferNoticeAviso de chamada (notificação sem atender)
CallRelayLatencyInformação de latência do relay da chamada

⁠⚙️ Configurações e privacidade
EventoO que dispara
PrivacySettingsConfigurações de privacidade atualizadas (foto, recados, etc.)
PushNameSettingNome de exibição do número atualizado
UserAboutRecado/status do contato atualizado
IdentityChangeChave de identidade de um contato foi alterada (troca de aparelho)
CATRefreshErrorErro ao renovar token de autenticação interno

⁠📢 Newsletter (Canais WhatsApp)
EventoO que dispara
NewsletterJoinInstância passou a seguir um canal
NewsletterLeaveInstância deixou de seguir um canal
NewsletterMuteChangeSilenciamento de um canal foi alterado
NewsletterLiveUpdateNova publicação ou atualização ao vivo em um canal seguido

⁠🌐 Meta / Facebook Bridge
EventoO que dispara
FBMessageMensagem recebida via bridge Facebook/Meta (uso em contas Business)

⁠🔮 Especial
EventoO que dispara
AllRecebe todos os eventos acima sem exceção

⁠Exemplos rápidos (cURL)

⁠Conectar e gerar QR
curl -s -X POST \
  -H "token: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"immediate":true}' \
  "{BASE_URL}/session/connect"
curl -s -X GET \
  -H "token: SEU_TOKEN" \
  "{BASE_URL}/session/qr"
⁠Enviar texto
curl -s -X POST \
  -H "token: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"Phone":"5511999999999","Body":"Olá via KiraGo","Id":"msg-1"}' \
  "{BASE_URL}/chat/send/text"
⁠Configurar webhook
curl -s -X POST \
  -H "token: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"webhookurl":"https://seuapp.com/webhook","events":["Message","ReadReceipt","Connected"]}' \
  "{BASE_URL}/webhook"
⁠Configurar CRM
curl -s -X POST \
  -H "token: SEU_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"base_url":"https://seucrm.com","api_token":"TOKEN_CRM","history_sync":true}' \
  "{BASE_URL}/session/crm/config"

⁠Licenças e atualizações

O KiraGo é licenciado por chave. O acesso à API e as atualizações dependem da licença ativa.

Atualizações podem ser bloqueadas quando o build instalado estiver fora da janela de atualizações do plano. Ao renovar, o servidor revalida automaticamente.

⁠Como atualizar

docker compose pull
docker compose up -d

⁠Suporte

Se precisar de ajuda, informe:

  • Seu BASE_URL
  • O endpoint utilizado
  • O erro retornado pela API (sem expor o token)

Tag summary

Content type

Image

Digest

sha256:5c5f9c8b8…

Size

252.7 MB

Last updated

3 days ago

docker pull ggdadds/kirago