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

WhatsApp Business API para suporte — botões interativos

Este cenário envia uma mensagem interativa com o sendButton durante a janela de atendimento ao cliente de 24 horas.

Visão geral do caso de uso

Este cenário envia uma mensagem com um botão interativo usando sendButton durante a janela de atendimento ao cliente de 24 horas. Três respostas rápidas permitem que o cliente escolha o menu principal, status do pedido ou transferência para um agente sem precisar digitar.

Exemplo de modelo

Como podemos ajudar você hoje?

WhatsApp Business API for support menu — interactive buttons

Quando usá-lo

Acesse este cenário quando uma mensagem de cliente abrir ou continuar uma sessão de suporte no WhatsApp e eles precisarem de um caminho rápido de autoatendimento antes que um agente leia o texto livre. Ele se encaixa em filas de suporte de nível 1, onde pedidos repetitivos de status de pedido, menu e solicitações de escalonamento atrasam a primeira resposta dentro da janela de atendimento ao cliente de 24 horas.

Menos triagem manual de perguntas repetitivas
Após o webhook de entrada confirmar a sessão, o sendButton entrega três respostas rápidas rotuladas — menu principal, status do pedido e falar com o agente — para que os agentes não precisem decifrar as mesmas intenções a partir de texto livre toda vez.
Intenção estruturada em vez de texto ambíguo
Cada toque no botão retorna um payload de webhook estruturado com um id de botão fixo, assim seu backend recebe seleção de menu, status ou agente sem precisar interpretar o que o cliente digitou.
Roteamento automático para o fluxo certo
O webhook entrega o id do botão e seu backend ramifica para menus, status ou fluxos de transferência para agentes programaticamente, combinando com a opção que o cliente pressionou.
Autoatendimento sem precisar digitar cada solicitação
O menu interativo aparece durante a sessão aberta com orientações no rodapé, e o cliente escolhe o menu principal, status do pedido ou transferência para um agente com um toque, em vez de digitar a solicitação novamente.

Fluxo de Trabalho

  1. Status rastreado

    Uma mensagem de cliente chega via webhook e mantém a sessão aberta.

    status: "read"

  2. Construir e enviar

    Seu backend envia o menu de botões interativos com orientações no rodapé.

    POST /send_button

  3. Atos do cliente

    O cliente toca em uma das três opções.

    user action

  4. Entregue

    O webhook entrega o id do botão para direcionar a menus, status ou fluxos de agentes.

    delivered

WhatsApp Business API for support menu — interactive buttons

Implementação técnica

Pré-requisitos

  1. 1MSG Chave da API · Como obter a chave da API
  2. Conta do WhatsApp Business · Como Conectar o WABA
  3. Janela de sessão aberta 24 horas · Como funciona a janela de 24 horas
  4. Opt-in do cliente · Como Gerenciar o Consentimento dos Clientes
  5. Endpoint 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

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

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "How can we help you today?",
  "footer": "Choose an option",
  "sections": [
    { "type": "reply", "reply": { "id": "menu", "title": "Main menu" } },
    { "type": "reply", "reply": { "id": "status", "title": "Order status" } },
    { "type": "reply", "reply": { "id": "agent", "title": "Talk to agent" } }
  ]
}
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": truemean 1MSGaceitoa mensagem para envio — não que já tenha chegado ao celular do cliente.idcampowamid.…) para correlacionar 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.hookInfoestão focados nisso

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

  • timestamp

    Segundos Unix, como uma string

Se você não quiser receber ligações, escolha não ser contatado.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: 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

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.
Serviço ao Cliente
WhatsApp Business API para notificação de tíquete aceito
O cenário envia ao cliente um modelo personalizado de WhatsApp quando seu pedido de suporte é aceito para processamento.
Serviço ao Cliente
WhatsApp Business API — criar grupo no WhatsApp para equipe
Este cenário usa a API de grupos com uma operação de criação para provisionar um grupo do WhatsApp nomeado para transmissões da equipe.
Serviço ao Cliente
WhatsApp Business API para suporte — reação e confirmações
Este cenário combina sendReaction e readMessage durante a janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para resposta de sessão — solicite mais.
Este cenário envia uma mensagem de texto livre pelo WhatsApp com sendMessage dentro da janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para notificação de resolução
O cenário envia um template personalizado pelo WhatsApp quando o ticket de suporte do cliente é resolvido.
Serviço ao Cliente
WhatsApp Business API — repasse ao especialista com contato
Este cenário envia um cartão de contato do WhatsApp com sendContact durante a janela de atendimento ao cliente de 24 horas.
Serviço ao Cliente
WhatsApp Business API para lembrete de resposta pendente
O cenário envia ao cliente um template personalizado de WhatsApp quando o suporte está bloqueado aguardando sua resposta.

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