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

WhatsApp Business API para confirmação de reagendamento

O cenário envia um modelo de WhatsApp personalizado ao cliente quando uma reserva é remarcada.

Visão geral do caso de uso

O cenário envia ao cliente um modelo personalizado de WhatsApp quando uma reserva é remarcada. A mensagem inclui o nome do cliente, o nome do serviço, a nova data e o novo horário. Um botão de URL estático abre os detalhes da reserva.

Exemplo de modelo

Olá,{{1}}! Seu{{2}}a consulta foi reagendada para{{3}}em{{4}}.

Ver reserva
  • {{1}}
    nome do cliente
  • {{2}}
    tipo de serviço ou reserva
  • {{3}}
    nova data de reserva
  • {{4}}
    novo horário de reserva
  • “Ver reserva”
    botão — fixo no modelo Meta
WhatsApp Business API for booking reschedule confirmation

Quando usá-lo

Procure por este cenário quando um cliente ou membro da equipe mover um compromisso e o negócio precisar da nova data e hora confirmadas em um lugar que o cliente realmente verá. Isso se encaixa em salões e clínicas onde mudanças de agenda são comuns, restaurantes que fazem novas reservas pelo WhatsApp, e integradores conectando webhooks de reagendamento de um sistema de agendamento ou CRM.

Menos faltas após um reagendamento
Nome, serviço, nova data e novo horário chegam como quatro variáveis de corpo no chat do WhatsApp do cliente, para que o slot atualizado permaneça pesquisável lá em vez de enterrado em um e-mail sobre a consulta antiga.
Menos confusão entre caça-níqueis.
O modelo nomeia o serviço e informa a nova data e hora em uma única mensagem, para que o cliente não fique se perguntando se a reserva original ou o novo horário ainda se aplica.
Sem trabalho de reconfirmação manual
O sistema de agendamento aciona o modelo no evento de remarcação com os novos campos de reserva, para que ninguém precise reescrever os detalhes ou se lembrar de enviar uma mensagem de acompanhamento.
Rastro de auditoria de reagendamento mais claro
O resultado da entrega é registrado de volta no sistema de agendamento ou CRM ao ser enviado, para que a equipe consiga ver que o cliente recebeu o novo horário sem precisar checar o WhatsApp manualmente.

Fluxo de Trabalho

  1. Atos do cliente

    O cliente ou a equipe completa um reagendamento e o sistema dispara um evento.

    user action

  2. Registrar evento

    O sistema resolve o número de telefone do cliente e os novos campos de reserva.

    phone: "+…"

  3. Construir e enviar

    Uma mensagem de template personalizada é criada com quatro variáveis de corpo e um botão de URL estático.

    POST /sendTemplate

  4. Entregue

    O cliente recebe a confirmação pelo WhatsApp com a nova data e hora.

    delivered

  5. Status acompanhado

    O resultado da entrega é registrado para agendamento ou acompanhamento de CRM.

    status: "read"

WhatsApp Business API for booking reschedule confirmation

Implementação técnica

Pré-requisitos

  1. Chave da API 1MSG · Como obter a chave da API
  2. Conta comercial do WhatsApp · Como Conectar WABA
  3. Modelo de WhatsApp · Como Aprovar o Template WABA
  4. Consentimento do cliente · Como Gerenciar o Consentimento dos Clientes

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)

TEMPLATE_NAME="___"                        # approved template name
TEMPLATE_NAMESPACE="___"                   # template namespace (required — send fails without it)
TEMPLATE_LANGUAGE="___"                    # template language code, e.g. "en"



# === Test data ===
TEST_PHONE="___"                 # client phone in international format
TEST_CUSTOMERNAME="___"         # {{1}} customer name
TEST_SERVICE="___"         # {{2}} service name
TEST_BOOKINGDATE="___"         # {{3}} booking date
TEST_BOOKINGTIME="___"         # {{4}} booking time

PHONE_NORM="$(printf '%s' "$TEST_PHONE" | tr -cd '0-9')"

for pair in "CHANNEL_ID=$CHANNEL_ID" "API_TOKEN=$API_TOKEN" \
            "TEMPLATE_NAME=$TEMPLATE_NAME" "TEMPLATE_NAMESPACE=$TEMPLATE_NAMESPACE" \
            "TEMPLATE_LANGUAGE=$TEMPLATE_LANGUAGE" "TEST_PHONE=$TEST_PHONE" \
            "TEST_CUSTOMERNAME=$TEST_CUSTOMERNAME" \
            "TEST_SERVICE=$TEST_SERVICE" \
            "TEST_BOOKINGDATE=$TEST_BOOKINGDATE" \
            "TEST_BOOKINGTIME=$TEST_BOOKINGTIME"; do
    val="${pair#*=}"
    if [ -z "$val" ] || [ "$val" = "___" ]; then
        echo "Missing configuration value: ${pair%%=*}" >&2
        exit 1
    fi
done

if [ -z "$PHONE_NORM" ]; then
    echo "Error: phone number has no digits after normalization" >&2
    exit 1
fi

URL="${API_BASE_URL%/}/${CHANNEL_ID}/sendTemplate"

# params carries body ONLY. Button text is fixed in the Meta template — no button param.

# {{1}} customer name → ${TEST_CUSTOMERNAME}
# {{2}} service name → ${TEST_SERVICE}
# {{3}} booking date → ${TEST_BOOKINGDATE}
# {{4}} booking time → ${TEST_BOOKINGTIME}
read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "template": "${TEMPLATE_NAME}",
  "namespace": "${TEMPLATE_NAMESPACE}",
  "language": { "policy": "deterministic", "code": "${TEMPLATE_LANGUAGE}" },
  "params": [
    {
      "type": "body",
      "parameters": [
        { "type": "text", "text": "${TEST_CUSTOMERNAME}" },
        { "type": "text", "text": "${TEST_SERVICE}" },
        { "type": "text", "text": "${TEST_BOOKINGDATE}" },
        { "type": "text", "text": "${TEST_BOOKINGTIME}" }
      ]
    }

  ]
}
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."
    echo "API response: $BODY"
else
    echo "Send failed. HTTP status: $HTTP_CODE" >&2
    echo "$BODY" >&2
    exit 1
fi

Status de resposta e entrega

HTTP 2xx e JSON"sent": truemean 1MSGaceitoa mensagem para enviar — não que ela já tenha chegado ao telefone do cliente.idcampowamid.…) para correlacionar as callbacks de entrega.

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

    Aceito para envio.nãoainda no telefone do cliente

  • id

    Armazene; retornos de entrega.hookInfosão definidos por isso

A entrega em si chega mais tarde, como um callback separado. Registre um webhookPOST …/webhook) e 1MSG publica atualizações de status no seu endpoint HTTPS em um nível superiorhooks[]carga.

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

    sent, delivered, read— ou um status de falha quando aplicável

  • id

    Correlaciona o callback com oidretorno da chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você prefere não receber chamadas de retorno, não participe.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 isso.

Erros comuns

StatusRespostaCausa
200Message was not sent: template is not definednamespace, template or language missing from the request body.
200template name (…) does not exist in <language>The template is approved in a different language than the one requested.
200Message was not sent: provide chatId, phone, bsuid, or usernameNo recipient the channel could resolve.
403access deniedThe token is wrong, or belongs to a different channel than the URL.
429too many requests. please try laterThe channel is over its send rate.

Perguntas Frequentes

Sim — mensagens de WhatsApp de início a frio requerem um template aprovado pela Meta.

Relacionado

Compromissos & Lembretes
WhatsApp Business API para lista de documentos pré-visita
O cenário envia ao cliente um modelo personalizado de WhatsApp com uma lista de documentos antes da visita.
Compromissos & Lembretes
WhatsApp Business API para confirmação de reserva pendente
O cenário envia ao cliente um modelo de WhatsApp personalizado quando uma reserva aguarda confirmação.
Compromissos & Lembretes
WhatsApp Business API para notificação de novos agendamentos
O cenário envia ao gerente de equipe um modelo personalizado de WhatsApp quando uma nova reserva é criada.
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 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 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.

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