forked from clairton/unoapi-cloud
-
Notifications
You must be signed in to change notification settings - Fork 3
COEXISTENCIA
wiki-bot edited this page Mar 17, 2026
·
2 revisions
- Permite operar cliente Web (Baileys) e cliente Meta (Cloud API) em paralelo.
- Primeira mensagem 1:1 sai pelo Web; ao receber mensagem via Meta abre janela de 24h no Redis.
- Com janela aberta, envios 1:1 passam a sair pelo Meta; grupos permanecem no Web.
- Redis acessível (
REDIS_URL). - Token da Cloud API válido e phone_number_id configurado.
- Sessão Web (QR/device) já conectada.
- Ativar:
COEXISTENCE_ENABLED=true - TTL opcional:
COEXISTENCE_WINDOW_SECONDS=86400(padrão 24h) - Cloud API (já usadas no forwarder):
WEBHOOK_FORWARD_URL=https://graph.facebook.com-
WEBHOOK_FORWARD_VERSION=v17.0(ajuste se necessário) WEBHOOK_FORWARD_PHONE_NUMBER_ID=<seu_phone_number_id>WEBHOOK_FORWARD_TOKEN=<Bearer da Cloud API>WEBHOOK_FORWARD_BUSINESS_ACCOUNT_ID=<opcional>
- Verificação de webhook:
UNOAPI_AUTH_TOKEN(ouauthTokenna config Redis).
- Ao editar/adicionar sessão, preencha:
- Coexistência: habilitar toggle e (opcional) janela em segundos.
- Cloud API: base URL, versão,
phone_number_id, token e Business Account ID (opcional). - Demais campos do Web permanecem iguais.
- Todas as configs são persistidas na sessão específica (Redis), não é global.
- No app Meta: cadastre um
redirect_uriHTTPS e obtenha oappId(produto WhatsApp). - Exponha o
appIde oredirect_urino front (ex.: via env ->EMBEDDED_SIGNUP_APP_ID,EMBEDDED_SIGNUP_REDIRECT_URIe renderize emwindow.EMBEDDED_SIGNUP_APP_ID/window.EMBEDDED_SIGNUP_REDIRECT_URIno HTML do manager). Mesmo sem env, o/embedded/config.jsretorna JS válido (valores vazios) para não quebrar o front. - Após concluir o Embedded Signup, a página é carregada com
wa_phone_id,wa_waba_id,wa_token(e opcionalwa_version). O manager:- Armazena o payload e, ao abrir a sessão, preenche
webhookForward.*, habilita coexistência e sugere janela 24h. - Mantém a modal aberta e exibe um alerta de “Dados de Cloud atualizados. Revise e salve.”
- Armazena o payload e, ao abrir a sessão, preenche
- Se clicar em “Importar retorno do Embedded” e não houver payload armazenado na aba, é exibido um alerta avisando para concluir o fluxo ou abrir o link de retorno.
- Clique em “Importar retorno do Embedded” (ou apenas abra a sessão) para aplicar os valores e depois salve a sessão para persistir.
- Endpoint backend
/embedded/exchange: trocacode→access_token(usa envEMBEDDED_SIGNUP_APP_ID,EMBEDDED_SIGNUP_APP_SECRET,EMBEDDED_SIGNUP_REDIRECT_URI, versão padrãoEMBEDDED_SIGNUP_GRAPH_VERSION=v24.0) e tenta preencherphone_number_id/waba_idautomaticamente. - Página de callback
public/embedded-callback.htmlchama/embedded/exchange, guarda o payload emlocalStoragee redireciona para o manager.
- Configure no BM/WA Cloud:
https://<host>/webhooks/whatsapp(único endpoint; roteamos pelophone_number_id). - Use o verify token de
UNOAPI_AUTH_TOKEN. - Assine eventos de
messages/statuses. - O webhook aciona a abertura da janela de 24h para os contatos que enviarem mensagens via Meta.
- Envio 1:1 inicial → Web (Baileys) sem template.
- Resposta via Meta (webhook) → abre janela 24h no Redis para o contato.
- Com janela aberta → envios 1:1 seguem pelo Meta; cada envio renova a janela.
- Expirou a janela → volta a enviar pelo Web até nova mensagem Meta abrir outra janela.
- Grupos e status continuam sempre pelo Web.
- Endereçamento Meta: apenas PN (dígitos, ex.:
55...). Se o destino vier em@lid, ele é normalizado para número antes de enviar; grupos nunca vão para o Meta.
- Suba a aplicação com as envs acima.
- Faça login QR normalmente.
- Verifique logs (nível debug) por
COEX window opened. - Teste: envie mensagem 1:1 (sai Web), responda pelo contato (via Meta), depois envie novamente (deve sair Meta).
- Se
COEXISTENCE_ENABLED=falseou Cloud não estiver configurado, tudo funciona como antes (apenas Web). - Nenhuma rota AMQP mudou; somente o roteamento 1:1 e o webhook Meta passam a controlar a janela de 24h.