Trabalhando com um agente de IA? Baixe a documentação completa como arquivo Markdown para usar como contexto.
Baixar .md completoUm canal é um ativo Meta conectado — um número de WhatsApp, uma conta do Instagram ou uma Página do Facebook — pelo qual você envia e recebe mensagens. Esta página cobre como conectar, gerenciar e reconectar canais.
Para o schema exato de request/response de cada endpoint de canal (campos, tipos, códigos de status), veja a Referência da API. Esta página é o guia em nível de tarefa; ela não repete as tabelas de campos.
Antes de conectar qualquer canal — WhatsApp, Instagram ou Facebook Messenger — garanta que ambas as condições abaixo sejam atendidas. Elas valem igualmente para o fluxo do Portal e o fluxo da API; se alguma faltar, a Meta interrompe o popup de OAuth antes que um canal possa ser criado.
Use isto para conectar seus próprios canais, sem necessidade de código.
Definir uma webhook URL no Portal não cria um webhook_secret. Defina um
explicitamente para que as entregas recebidas sejam assinadas — veja
Segredo do webhook.
Use isto quando sua aplicação conecta canais em nome dos seus usuários finais.
Passo 1 — Cadastre seu redirect URI na whitelist. Por segurança, o usuário só pode ser
redirecionado de volta a uma URL que você tenha pré-registrado para a sua chave de API.
Registre a(s) URL(s) onde os usuários chegam após o OAuth (coringas são permitidos, ex.:
https://*.example.com/callback):
curl -X POST https://fiwano.com/api/v1/redirects \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"uri_pattern": "https://yourapp.com/callback"}'
Você os gerencia com GET /api/v1/redirects e DELETE /api/v1/redirects/{id}.
Passo 2 — Solicite uma setup URL. Passe um dos seus redirect URIs da whitelist. A
URL é válida até o expires_at retornado na resposta — abra-a em um navegador ou popup
para o usuário:
curl -X POST https://fiwano.com/api/v1/channels/setup-url \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel_type": "whatsapp", "redirect_uri": "https://yourapp.com/callback"}'
Passo 3 — O usuário conclui o OAuth da Meta. Após a aprovação, o usuário é
redirecionado ao seu redirect_uri com um parâmetro code de uso único:
https://yourapp.com/callback?code=abc123...
Em caso de falha, o redirect leva dois query params — ramifique sua lógica apenas no
error:
| Query param | Como usar |
|---|---|
error |
Código legível por máquina. Ramifique nisto. access_denied — o usuário cancelou o diálogo da Meta. setup_failed — o setup não pôde ser concluído (ex.: nenhuma conta do Instagram Business estava acessível com as permissões concedidas). |
message |
Explicação legível por humanos em inglês, codificada em URL, segura para exibir ao usuário. Formato livre e pode mudar — nunca faça parse ou ramifique no texto dela. |
Exemplo de redirect de falha:
https://yourapp.com/callback?error=setup_failed&message=We%20couldn%27t%20access%20any%20Instagram%20Business%20account...
Passo 4 — Troque o code. Em até 5 minutos (uso único), troque o code pelo canal. Você pode configurar o webhook na mesma chamada:
curl -X POST https://fiwano.com/api/v1/channels/exchange-code \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "abc123...",
"webhook_url": "https://yourapp.com/webhooks/meta",
"webhook_events": ["message.received", "message.delivered", "message.failed"]
}'
A resposta retorna seu channel_id (guarde-o — toda outra chamada o utiliza). Quando
você define webhook_url e não fornece um webhook_secret, a Fiwano gera um
automaticamente e o retorna aqui. Ele é retornado apenas nesta resposta — o GET
nunca o mostra de novo — então guarde-o para verificar as assinaturas dos webhooks
(Segredo do webhook). Todos os campos exceto code são opcionais e
podem ser definidos depois via PATCH /api/v1/channels/{id}.
Por padrão, nenhum evento é entregue. Você precisa definir explicitamente
webhook_events— aqui ou depois — para receber qualquer webhook.
O webhook_secret é a chave HMAC que a Fiwano usa para assinar as entregas de
webhook, para que seu endpoint possa confirmar que a requisição realmente veio da
Fiwano e não foi alterada no caminho. Quando um canal tem um segredo, cada entrega traz
um cabeçalho X-Webhook-Signature: sha256=<hmac> — veja
Webhooks para o trecho de verificação. Um canal sem
segredo recebe entregas sem assinatura.
Como um segredo aparece pela primeira vez difere conforme você conecta — e este é o único ponto em que o Portal e a API se comportam propositalmente de forma diferente:
webhook_url e o canal ainda não tem segredo, a
Fiwano gera um automaticamente (hex de 64 caracteres) e o retorna na resposta de
exchange-code / PATCH /api/v1/channels/{id} — ou seja, canais conectados via API
são assinados por padrão. Para usar um valor específico, forneça o seu próprio
webhook_secret nessa mesma chamada.Lendo de volta. O valor só é retornado no momento em que é definido ou alterado —
na revelação única do Portal, ou nas respostas de exchange-code e
PATCH /api/v1/channels/{id}. GET /api/v1/channels e GET /api/v1/channels/{id}
nunca o retornam; eles apenas informam has_webhook_secret: true | false. Guarde o
valor quando ele for exibido — se você o perder, a única opção é definir um novo.
Rotacionando. Defina um novo segredo a qualquer momento fornecendo um novo
webhook_secret ao PATCH /api/v1/channels/{id}, ou com as ações Generate random /
Save do Portal. Atualizar apenas webhook_url/webhook_events mantém o segredo
intacto. A mudança tem efeito na próxima entrega — não há janela de sobreposição,
então troque seu verificador para o novo segredo no mesmo momento, ou as assinaturas não
vão corresponder.
Restrições e recomendações.
| Tarefa | Endpoint |
|---|---|
| Listar todos os canais (ativos e inativos), cada um com seu estado de assinatura atual | GET /api/v1/channels |
| Inspecionar um canal | GET /api/v1/channels/{id} |
| Atualizar webhook URL / secret / events | PATCH /api/v1/channels/{id} |
| Desativar um canal | DELETE /api/v1/channels/{id} |
Cada canal traz um bloco subscription descrevendo seu estado de cobrança — veja
Assinaturas e Cobrança para o que as
combinações significam. As listas completas de campos estão na Referência da API.
A desativação é um soft delete. O DELETE impede o canal de enviar e
receber, mas não o apaga — seu channel_id e histórico são preservados para que
você possa reconectar depois. O Fiwano também cancela a inscrição do recurso de webhook da
Meta do canal apenas quando é seguro: uma inscrição de WABA é mantida se outro canal de
WhatsApp ativo usar a mesma WABA, e uma inscrição de Página é mantida se outro canal de
Instagram/Facebook ativo usar a mesma Página.
Um canal fica inativo quando é desativado (DELETE /api/v1/channels/{id}) ou
quando sua conexão com a Meta não pode mais ser mantida (por exemplo, o dono da conta
revogou o acesso na Meta). Para trazê-lo de volta, execute o mesmo fluxo de conexão
novamente para a mesma conta Meta (mesmo número de WhatsApp, conta do Instagram ou
Página do Facebook):
channel_id, webhook
URL/secret/events e histórico são preservados. Nenhum canal novo é criado e o seu
mapeamento de channel_id armazenado continua válido."already connected to another account").Documentação da API Fiwano