💬 Shared Inbox do WhatsApp na nova PlataformaMais
1msg official logo

WhatsApp Business API para agendamento — fluxo do WhatsApp

Esse cenário envia um ponto de entrada do WhatsApp com sendFlow durante a janela de atendimento ao cliente de 24 horas.

Visão geral do caso de uso

Este cenário envia um ponto de entrada do Flow no WhatsApp com sendFlow durante o período de 24 horas de atendimento ao cliente. Uma saudação personalizada mais um CTA de Reserve agora abre o formulário do flow publicado.

Exemplo de modelo

Oi {{1}}, agende sua consulta:

  • {{1}}
    nome do cliente no texto do convite de fluxo
WhatsApp Business API for appointment booking — whatsapp flow

Quando usar isso

Use esse cenário quando um cliente expressa intenção de agendar durante uma sessão ativa no WhatsApp e você precisa capturar a data e o horário de forma estruturada que um chat em texto livre não pode validar. Isso se encaixa em fluxos de trabalho de agendamento de serviços para desenvolvedores, pequenas equipes e agências que já possuem um Meta Flow publicado e desejam que o cliente agende sem sair da conversa.

Campos de agendamento validados
O CTA "Reservar agora" abre o seu Meta Flow publicado dentro do WhatsApp, para que as preferências de data e hora cheguem como envios de formulário estruturados em vez de respostas ambíguas em texto livre que seu backend precisa interpretar.
Reservando estadias na mesma conversa
sendFlow é ativado durante o horário de atendimento ao cliente de 24 horas, para que o cliente complete o formulário de fluxo na mesma conversa, em vez de mudar para e-mail ou um widget de reserva externo.
Convite de fluxo personalizado
Uma variável de corpo contém o nome do cliente no texto de saudação, então a mensagem sendFlow é lida como um convite direto antes que o cliente clique em Reservar agora.
Dados retornando para seu sistema
Quando o cliente envia o formulário de fluxo, o payload de conclusão retorna para o seu CRM ou integração de calendário via o webhook de fluxo, para que o agendamento não pare na tela de chat.
Sem atrito na fase inicial
Porque o cliente já está em uma sessão aberta, sendFlow entrega o ponto de entrada do fluxo sem iniciar uma nova conversa primeiro através de um template rígido aprovado.

Fluxo de Trabalho

  1. Gatilho

    Um cliente expressa intenção de agendamento enquanto a sessão está aberta.

    event · triggered

  2. Eventos de captura

    Seu backend resolve o nome do cliente e o id do fluxo.

    phone: "+…"

  3. Construir & enviar

    sendFlow envia a saudação com o CTA Reserve agora.

    POST /send_flow

  4. Entregue

    O cliente preenche o formulário de fluxo e os dados da reserva retornam para o seu sistema.

    delivered

WhatsApp Business API for appointment booking — whatsapp flow

Implementação técnica

Pré-requisitos

  1. Chave da API 1MSG · Como obtê-la
  2. Conta do WhatsApp Business · Como Conectar WABA
  3. Abra uma janela de sessão de 24 horas · Como funciona a janela de 24 horas
  4. Consentimento do cliente · Como Gerenciar o Consentimento dos Clientes
  5. Ponto de extremidade de Webhook · Como Configurar Webhooks

Exemplos de código

#!/usr/bin/env bash
set -euo pipefail

# === Configuration (replace "___" placeholders) ===
API_BASE_URL="https://api.1msg.io"        # production 1MSG API base URL
CHANNEL_ID="___"                           # channel ID from 1MSG dashboard
API_TOKEN="___"                            # channel JWT token (Bearer)



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
FLOW_TOKEN="___"                         # flow token from your backend

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"
URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendFlow"

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "Hi Alex, book your appointment:",
  "flowId": "1234567890",
  "flowToken": "${FLOW_TOKEN}",
  "flowCta": "Book now",
  "flowAction": "navigate"
}
JSON

RESPONSE="$(curl -s -w '\n%{http_code}' -X POST "$URL" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${API_TOKEN}" \
  -d "$PAYLOAD")"

HTTP_CODE="$(printf '%s' "$RESPONSE" | tail -n1)"
BODY="$(printf '%s' "$RESPONSE" | sed '$d')"

case "$BODY" in
  *'"sent":true'*) ok=1 ;;
  *) ok=0 ;;
esac

if [ "$HTTP_CODE" -ge 200 ] && [ "$HTTP_CODE" -lt 300 ] && [ "$ok" -eq 1 ]; then
  echo "Message sent to client."
else
  echo "$BODY" >&2
  exit 1
fi

Status de resposta e entrega

HTTP 2xx e JSON "sent": true significam que 1MSG aceitou a mensagem para envio — não que já chegou no telefone do cliente. Salve o campo id (parece com wamid.…) para correlacionar os callbacks de entrega.

200 Entendido.Resposta
{
  "sent": true,
  "id": "wamid.HBgLMzgwNjM5...",
  "message": "Message accepted for delivery"
}
  • sent

    Aceito para envio — não ainda no telefone do cliente

  • id

    Armazene-o; os retornos de chamada de entrega e hookInfo são baseados nisso.

A entrega em si chega mais tarde, como um retorno separado. Registre um webhook (POST …/webhook) e 1MSG POSTs atualizações de status para seu endpoint HTTPS em um payload de hooks[] de nível superior.

200 Entendido!Webhook de status de entrega — payload recebido.
{
  "hooks": [
    {
      "id": "gBGGeSaGViBfAgnlzOSHEwK9O6F",
      "type": "message",
      "status": "sent",
      "timestamp": "1654864094",
      "recipient_id": "556123122026"
    }
  ]
}
  • status

    enviado, entregue, lido — ou um status de falha quando aplicável

  • id

    Correlaciona o callback com o id retornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você preferir não receber chamadas de retorno, consulte GET {base}/{channel}/hookInfo?messageId=<id> em vez disso. Na prática, a entrega geralmente é concluída em segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo esperando por ele.

Erros comuns

StatusRespostaCausa
200Message was not sent: empty bodyNo body in the request.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
200wrong fileThe media could not be fetched or uploaded — not a reachable URL, not valid base64.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
200Message was not sent: filenamesendFile called without a filename, so the media has no extension to send.

Perguntas Frequentes

Não — este cenário utiliza uma mensagem de sessão dentro da janela de atendimento ao cliente de 24 horas.

Relacionado

Compromissos & Lembretes
WhatsApp Business API para lembrete de acompanhamento
O cenário envia ao cliente um modelo de WhatsApp personalizado quando um acompanhamento ou visita repetida é necessário.
Compromissos & Lembretes
WhatsApp Business API para confirmação de reagendamento
O cenário envia um modelo de WhatsApp personalizado ao cliente quando uma reserva é remarcada.
Compromissos & Lembretes
WhatsApp Business API para notificação de mudança de reserva
O cenário envia ao cliente um template personalizado de WhatsApp quando os detalhes da reserva mudam.
Compromissos & Lembretes
WhatsApp Business API para confirmação de cancelamento
O cenário envia ao cliente um template personalizado no WhatsApp quando uma reserva é cancelada.
Compromissos & Lembretes
WhatsApp Business API para confirmação de presença
O cenário envia ao cliente um modelo personalizado de WhatsApp perguntando se ele comparecerá a uma visita agendada.
Compromissos & Lembretes
WhatsApp Business API para lembrete de reserva antecipada
O cenário envia ao cliente um modelo personalizado de WhatsApp vários dias antes de uma visita agendada.
Compromissos & Lembretes
WhatsApp Business API para solicitação de confirmação
O cenário envia ao cliente um modelo personalizado de WhatsApp pedindo para confirmar ou cancelar uma ação planejada.
Compromissos & Lembretes
WhatsApp Business API para confirmação de reserva
O cenário envia ao cliente um template personalizado de WhatsApp imediatamente após a confirmação da reserva.

Crie para o WhatsApp em horas
sem complicações de infraestrutura