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

WhatsApp Business API para notificação de escalonamento

O cenário envia ao cliente um template de WhatsApp personalizado quando um ticket de suporte é escalado porque a resolução está levando mais tempo que o usual.

Visão geral do caso de uso

O cenário envia ao cliente um modelo personalizado de WhatsApp quando um ticket de suporte é escalado porque a resolução está levando mais tempo do que o normal. A mensagem inclui o nome do cliente, o número do ticket e o que acontece a seguir após a escalada. Um botão de URL estático abre a página de status do ticket.

Exemplo de modelo

Olá,{{1}}! Sua solicitação #{{2}}está demorando mais do que o habitual, então nós escalamos isso.{{3}}Pedimos desculpas pela espera.

Status da solicitação
  • {{1}}
    nome do cliente
  • {{2}}
    número do tíquete ou do caso
  • {{3}}
    próximo passo após o escalonamento (por exemplo, especialista sênior designado, resposta em até 24 horas)
  • “Status da solicitação”
    botão — fixo no template Meta
WhatsApp Business API for ticket escalation notification

Quando usar isso

Alcance este cenário quando um ticket de suporte exceder seu SLA ou for movido para uma fila sênior e o cliente ainda não tiver um thread aberto no WhatsApp — a empresa precisa informá-los que o caso foi escalado e o que acontecerá a seguir antes que eles procurem o suporte novamente. Isso se aplica a equipes de helpdesk, suporte empresarial com comunicação transparente sobre SLA e agências que implementam webhooks de escalonamento do Zendesk, Freshdesk ou de um motor de SLA personalizado.

Menos contatos repetidos de "onde está meu ingresso?"
Três variáveis no corpo da mensagem carregam o nome do cliente, o número do ticket e o próximo passo após a escalada, para que o atraso e o caminho de escalada cheguem pelo WhatsApp, em vez de forçar outro e-mail ou busca por telefone.
Aviso proativo sem um chat aberto
Um modelo aprovado é enviado quando o SLA é ultrapassado ou a prioridade aumenta, para que o cliente saiba sobre a escalada mesmo quando não há uma sessão ativa de 24 horas para responder.
Status de autoatendimento a partir da mesma mensagem
O botão de URL estático abre a página de status do ticket fixada no template Meta, assim o cliente pode verificar o progresso sem precisar chamar o suporte novamente.
Sem e-mails de escalonamento manual
O helpdesk dispara o template no evento de escalonamento e o sistema preenche os campos de telefone e escalonamento, para que nenhum agente precise reescrever os detalhes do ticket para cada violação.
Entrega rastreada no helpdesk ou CRM
O resultado da entrega é registrado após o envio, assim a equipe de suporte sabe se o aviso de escalonamento atingiu o cliente.

Fluxo de trabalho

  1. Gatilho

    O helpdesk escala o ticket quando o SLA é excedido ou a prioridade aumenta.

    event · triggered

  2. Capturar evento

    O sistema resolve o número de telefone do destinatário e os campos de escalonamento.

    phone: "+…"

  3. Construir e enviar

    Uma mensagem de modelo personalizada é construída com três variáveis de corpo e um botão de URL estático.

    POST /sendTemplate

  4. Entregue

    O cliente recebe a notificação do WhatsApp com o número do ticket e o contexto de escalonamento.

    delivered

  5. Status rastreado

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

    status: "read"

WhatsApp Business API for ticket escalation notification

Implementação técnica

Pré-requisitos

  1. 1MSG API Key · Como obter a chave da API
  2. Conta do WhatsApp Business · Como Conectar o 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_NEXTSTEP="___"         # {{3}} 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_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}} 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_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 a ser enviada — não que já tenha chegado ao telefone do cliente.idcampo.wamid.…para correlacionar as chamadas 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.hookInfoestão ligados a isso

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

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

    Correla o callback com.idretornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você prefere não receber ligações, não faça.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 ela.

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 modelo aprovado pelo Meta.

Relacionado

Serviço ao Cliente
WhatsApp Business API para notificação de status de verificação
O cenário envia ao cliente um modelo de WhatsApp personalizado quando o status de verificação ou eKYC deles muda.
Serviço ao Cliente
WhatsApp Business API para solicitação de upload de documentos
O cenário envia um modelo de WhatsApp personalizado ao cliente quando um documento necessário está faltando e ele deve carregá-lo para continuar.
Serviço ao Cliente
WhatsApp Business API para notificação de transferência
O cenário envia para o cliente um modelo personalizado de WhatsApp quando um chamado de suporte é transferido para outro departamento.
Serviço ao Cliente
WhatsApp Business API para notificação de status de ticket
O cenário envia ao cliente um modelo de WhatsApp personalizado quando o status de um ticket de suporte muda.
Serviço ao Cliente
WhatsApp Business API para notificação de ticket criado
O cenário envia ao cliente um modelo personalizado de WhatsApp quando um novo chamado de suporte é criado.
Serviço ao Cliente
WhatsApp Business API para notificação de ticket fechado
O cenário envia ao cliente um modelo personalizado de WhatsApp quando um chamado de suporte é fechado.
Serviço ao Cliente
WhatsApp Business API para solicitação de anexo de ingresso
O cenário envia um modelo de WhatsApp ao cliente quando o suporte precisa de uma foto, documento ou prova e não há sessão de 24 horas aberta.
Serviço ao Cliente
WhatsApp Business API para solicitar informações do ticket
O cenário envia ao cliente um modelo de WhatsApp personalizado quando o suporte precisa de mais dados para resolver um ticket e não há janela de sessão aberta.

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