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

WhatsApp Business API para notificação de pedido cancelado

O cenário envia ao cliente um modelo de WhatsApp personalizado quando um pedido é cancelado.

Visão geral do caso de uso

O cenário envia ao cliente um modelo personalizado de WhatsApp quando um pedido é cancelado. A mensagem inclui o nome do cliente, número do pedido, nome do produto e uma nota sobre reembolso ou próximo passo. Um botão de URL estático abre os detalhes do pedido ou o suporte.

Exemplo de template

Olá,{{1}}! Pedido #{{2}}Desculpe, não consigo ajudar com isso.{{3}}" foi cancelado.{{4}}.

Detalhes do pedido
  • {{1}}
    nome do cliente
  • {{2}}
    número do pedido
  • {{3}}
    nome do produto
  • {{4}}
    motivo do cancelamento, prazo para reembolso ou próximo passo
  • “Detalhes do pedido”
    botão — fixado no modelo Meta
WhatsApp Business API for order cancellation notification

Quando usá-lo

Acesse este cenário quando um pedido é cancelado e o cliente precisa de um registro claro do que foi cancelado, se um reembolso se aplica e o que esperar a seguir — frequentemente sem um chat aberto no WhatsApp. Ele se encaixa em lojas de e-commerce que confirmam cancelamentos de comerciantes ou clientes, marketplaces cansados de tickets perguntando se um cancelamento foi efetivado, e integradores conectando webhooks de cancelamento do OMS ao WhatsApp.

Menos tickets de "meu cancelamento foi efetivado?"
Número do pedido, nome do produto e nota de reembolso ou próximo passo chegam como quatro variáveis no corpo do chat do cliente, para que o suporte não reexplique os mesmos cancelamentos em contatos repetidos.
Menos pedidos duplicados e contatos repetidos
O modelo confirma imediatamente que o pedido não será enviado, então o cliente para de fazer novos pedidos ou buscar atualizações por e-mail e outros canais.
Sem mensagens de cancelamento manual
A OMS dispara o modelo no evento de cancelamento de pedido, para que ninguém precise digitar novamente o nome do cliente, o número do pedido ou as notas de reembolso para cada caso.
Alcance clientes sem um chat aberto
Um modelo aprovado pode ser enviado quando não há conversa ativa, porque texto livre não é permitido até que o cliente responda.
Registrado para acompanhamento de CRM ou financeiro
O resultado da entrega é registrado após o envio, então o status de cancelamento é sincronizado de volta para a plataforma de e-commerce ou CRM junto com o botão de URL estático que abre os detalhes do pedido.

Fluxo de Trabalho

  1. Desencadear

    O OMS registra o cancelamento de pedido e dispara um evento.

    event · triggered

  2. Captura de evento

    O sistema resolve os campos de telefone e cancelamento do cliente.

    phone: "+…"

  3. Construa e envie

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

    POST /sendTemplate

  4. Entregue

    O cliente recebe a atualização do WhatsApp e pode abrir os detalhes do pedido através do botão.

    delivered

  5. Status rastreado

    O resultado da entrega está registrado; os erros são tratados de acordo com as regras da plataforma.

    status: "read"

WhatsApp Business API for order cancellation notification

Implementação técnica

Pré-requisitos

  1. 1MSG API Key · Como obter a chave da API
  2. Conta do WhatsApp Business · Como Conectar WABA
  3. Modelo de WhatsApp · Como Aprovar o Modelo 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_TICKETNUMBER="___"         # {{2}} ticket number
TEST_PRODUCTNAME="___"         # {{3}} product name
TEST_NEXTSTEP="___"         # {{4}} next step

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_TICKETNUMBER=$TEST_TICKETNUMBER" \
            "TEST_PRODUCTNAME=$TEST_PRODUCTNAME" \
            "TEST_NEXTSTEP=$TEST_NEXTSTEP"; 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}} ticket number → ${TEST_TICKETNUMBER}
# {{3}} product name → ${TEST_PRODUCTNAME}
# {{4}} next step → ${TEST_NEXTSTEP}
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_TICKETNUMBER}" },
        { "type": "text", "text": "${TEST_PRODUCTNAME}" },
        { "type": "text", "text": "${TEST_NEXTSTEP}" }
      ]
    }

  ]
}
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 envio — não que já tenha chegado ao telefone do cliente.idcampowamid.…) para correlacionar os retornos 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 isso; chamadas de retorno de entrega ehookInfoestão focados nisso

A entrega em si chega mais tarde, como um retorno separado. Registre um webhookPOST …/webhook) e 1MSG envia atualizações de status para o seu ponto de extremidade 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 retorno com oidretornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você preferir não receber chamadas de retorno, desative essa opção.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

Pedidos & Entrega
WhatsApp Business API para pedido aceito para processamento
O cenário envia ao cliente um modelo personalizado de WhatsApp quando seu pedido é aceito para processamento no armazém ou OMS.
Pedidos & Entrega
WhatsApp Business API para notificação de ausência
O cenário envia ao cliente um template personalizado do WhatsApp quando ele não responde a uma mensagem anterior relacionada ao pedido dentro do tempo esperado.
Pedidos & Entrega
WhatsApp Business API para notificação de entrega de pedido
O cenário envia ao cliente um modelo personalizado de WhatsApp quando seu pedido é entregue a um parceiro de entrega para a última milha de cumprimento.
Pedidos & Entrega
WhatsApp Business API para confirmação de entrega de pedido
O cenário envia ao cliente um modelo personalizado WhatsApp quando seu pedido é marcado como entregue.
Pedidos & Entrega
WhatsApp Business API para notificação de nova rota
O cenário faz com que um gerente ou despachante envie um modelo personalizado de WhatsApp quando uma nova rota ou viagem é criada.
Pedidos & Entrega
WhatsApp Business API para confirmação de novos pedidos
O cenário envia ao cliente um modelo de WhatsApp personalizado logo após um novo pedido ser criado.
Pedidos & Entrega
Notificação de entrega falha no WhatsApp Business API
O cenário envia ao cliente um modelo personalizado de WhatsApp quando uma tentativa de entrega falha.
Pedidos & Entrega
WhatsApp Business API para entrega — compartilhe localização
Este cenário envia uma localização de mapa com sendLocation durante a janela de atendimento ao cliente de 24 horas.

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