Canais

WhatsApp e Web Widget

Publique o mesmo agente em canais conversacionais, mantendo memória por conversa, rate limit e configuração de provedor no Canvas Flow.

WhatsApp

O canal WhatsApp pode usar Meta Cloud API, Blip ou Sinch. No painel de provedores, escolha o provider e preencha as credenciais exigidas. Em seguida, defina o flow ou agente que receberá as mensagens.

Meta Cloud API

Configure verify token, WhatsApp Business Account ID, Phone Number ID, access token e versão da Graph API.

Blip

Configure Contract ID e Authorization Key quando a entrega das mensagens sair pela infraestrutura Blip.

Sinch

Use Conversation API com project/app/token ou modo relay com service number, username e token.

Webhooks do WhatsApp

Para Meta, configure no painel da Meta o callback público do Canvas Flow e o mesmo verify token salvo no provedor. Use webhook por flow quando quiser apontar direto para um fluxo, ou webhook principal por agente quando o agente deve decidir a rota.

GET  https://seu-host/api/canvas-flow/webhook/whatsapp/<FLOW_ID>
POST https://seu-host/api/canvas-flow/webhook/whatsapp/<FLOW_ID>

GET  https://seu-host/api/canvas-flow/webhook/whatsapp-main/<AGENT_ID>
POST https://seu-host/api/canvas-flow/webhook/whatsapp-main/<AGENT_ID>

Defina o provider

Salve credenciais em Provedores. O Canvas Flow usa essas credenciais para validar o callback e enviar respostas.

Publique um flow WhatsApp

Use mensagens ricas, botões, listas, anexos e WhatsApp Flow quando o canal exigir interação estruturada.

Teste uma conversa real

O `conversationId` vem do contato/canal. Reutilize o mesmo ID para manter memória e estado do fluxo.

Web Widget

O Web Widget é o canal para incorporar o agente em sites e produtos. Ele usa a API do Canvas Flow por trás, mas entrega uma interface pronta de chat com tema, posição, textos e abertura configuráveis.

Tema

Configure cor primária, cor de destaque, nome do assistente, subtítulo, avatar e textos de boas-vindas.

Posição

Escolha esquerda ou direita e defina se o chat abre automaticamente quando o usuário entra na página.

Memória

Use um `conversationId` estável por visitante/sessão para preservar contexto entre mensagens.

Embed em site

Copie o snippet gerado pelo painel do Web Widget. O modelo recomendado é deixar o browser falar com um backend/proxy seu; esse proxy injeta a API key no servidor e chama o Canvas Flow.

<script>
const canvasFlowWidget = {
  flowId: "<FLOW_ID>",
  agentId: "default-agent",
  channel: "webWidget",
  theme: {
    assistantName: "Assistente IA",
    position: "right",
    openByDefault: false
  }
};

async function enviarMensagemCanvasFlow(texto) {
  const conversationId =
    localStorage.getItem("canvasFlowConversationId") ||
    crypto.randomUUID();
  localStorage.setItem("canvasFlowConversationId", conversationId);

  return fetch("/seu-backend/canvas-flow-proxy", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      flowId: canvasFlowWidget.flowId,
      agentId: canvasFlowWidget.agentId,
      channel: canvasFlowWidget.channel,
      conversationId,
      text: texto,
      slots: { webWidget: canvasFlowWidget.theme }
    })
  }).then((response) => response.json());
}
</script>

Evite colocar API key direto no HTML público. Gere uma key com escopo mínimo e mantenha-a no backend/proxy que conversa com `POST /api/canvas-flow/test`.