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

WhatsApp Business API para envio de proposta comercial

O cenário envia ao prospect um modelo de WhatsApp personalizado quando uma proposta comercial está pronta.

Visão geral do caso de uso

O cenário envia para o prospect uma mensagem personalizada pelo WhatsApp quando uma proposta comercial está pronta. A mensagem inclui o nome do prospect, o produto ou serviço oferecido e uma breve nota sobre a proposta. Um botão de URL estático abre o documento da proposta online.

Exemplo de modelo

Olá, {{1}}! Estamos enviando uma proposta comercial para "{{2}}". {{3}} Abra o documento usando o botão abaixo — estamos aqui se você tiver perguntas.

Proposta aberta
  • {{1}}
    nome do prospect ou cliente
  • {{2}}
    produto ou serviço coberto pela proposta
  • {{3}}
    Nota de proposta curta (por exemplo, válida até 30 de junho, inclui cronograma de implementação)
  • “Proposta aberta”
    botão — fixo no modelo do Meta
WhatsApp Business API for commercial proposal send

Quando usá-lo

Aja para este cenário quando uma proposta comercial estiver pronta, mas o e-mail ou um link de CRM sozinho não está sendo aberto — o prospect não tem um thread ativo no WhatsApp, então apenas um template aprovado pode ser utilizado na primeira abordagem. Isso se encaixa em equipes de vendas B2B que estão enviando cotações logo após a geração, agências acionando o WhatsApp quando uma proposta em PDF ou na web é publicada no CRM, e empresas de serviços enviando pacotes de preços para leads qualificados.

Revisão de proposta mais rápida
Três variáveis de corpo carregam o nome do prospect, o produto ou serviço cotado, e uma nota curta como validade ou cronograma, e o botão de URL estático abre o documento completo com um toque no WhatsApp.
<0>Taxas de abertura</0> mais altas que e-mail.
A notificação chega no WhatsApp, onde os prospects já leram as mensagens, em vez de um link de CRM ou caixa de entrada que eles podem nunca abrir.
No ping de proposta manual
O CRM ou o sistema de proposta emite um evento de proposta pronta, resolve o número de telefone e o template é enviado automaticamente — as vendas não precisam reescrever o resumo para cada prospect.
Registro de entrega pronto para pipeline
O resultado da entrega é registrado de volta no CRM após o envio, para que a equipe de vendas possa acompanhar a partir do mesmo registro que marcou a proposta como pronta.
Contato inicial conforme regras fora do chat
Um modelo aprovado do Meta atinge o prospect quando a mensagem em texto livre não é permitida porque ainda não há uma conversa aberta de 24 horas.

Fluxo de trabalho

  1. Acionar

    O CRM ou o sistema de propostas emite um evento pronto para proposta.

    event · triggered

  2. Capturar evento

    O sistema resolve os campos de telefone do prospect e proposta.

    phone: "+…"

  3. Construir & enviar

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

    POST /sendTemplate

  4. Entregue

    O prospect recebe a mensagem do WhatsApp com o link da proposta.

    delivered

  5. Status rastreado

    O resultado da entrega é registrado no CRM; as vendas podem acompanhar com base no engajamento.

    status: "read"

WhatsApp Business API for commercial proposal send

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 do WhatsApp · Como Aprovar o Modelo WABA
  4. Cadastro do cliente · Como Gerenciar o Consentimento

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_PRODUCTORSERVICENAME="___"         # {{2}} product or service name
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_PRODUCTORSERVICENAME=$TEST_PRODUCTORSERVICENAME" \
            "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}} product or service name → ${TEST_PRODUCTORSERVICENAME}
# {{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_PRODUCTORSERVICENAME}" },
        { "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": true significam que 1MSG aceitou a mensagem para envio — não que ela já tenha chegado ao telefone do cliente. Salve o campo id (que parece com wamid.…) para correlacionar os callbacks de entrega.

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

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

  • id

    Armazene isso; os callbacks de entrega e hookInfo estão vinculados a isso.

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

200 OKWebhook 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, faça uma consulta 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 frio requerem um modelo aprovado pela Meta.

Relacionado

Engajamento de Leads & Conversão
WhatsApp Business API para consulta antes da compra
O cenário envia ao cliente uma mensagem de template personalizada pelo WhatsApp, convidando-o para uma consulta pré-compra.
Engajamento de Leads & Conversão
WhatsApp Business API para notificação de novos leads
O cenário envia um template personalizado de WhatsApp para o gerente de vendas quando um novo lead é capturado.
Engajamento de Leads & Conversão
WhatsApp Business API para qualificação de leads.
Esse caso de uso envia um novo lead um modelo de WhatsApp com uma saudação personalizada: a mensagem substitui o nome do lead e o contexto do produto.
Engajamento de Leads & Conversão
WhatsApp Business API para follow-up de leads sem resposta
O cenário envia ao lead um modelo de WhatsApp personalizado quando ele não responde a uma mensagem de vendas anterior dentro do tempo esperado.
Engajamento de Leads & Conversão
WhatsApp Business API para passagem de leads para vendas
O cenário envia ao cliente um modelo de WhatsApp personalizado quando seu lead qualificado é repassado para a equipe de vendas.
Engajamento de Leads & Conversão
WhatsApp Business API para contato inicial com um novo lead
O cenário envia um novo lead um template personalizado de WhatsApp como o primeiro contato de vendas.
Engajamento de Leads & Conversão
WhatsApp Business API para esclarecer a necessidade.
O cenário envia ao lead um modelo personalizado de WhatsApp pedindo que esclareça seu propósito.
Engajamento de Leads & Conversão
WhatsApp Business API para acompanhamento sem resposta
O cenário envia ao cliente um template personalizado pelo WhatsApp quando ele não responde a uma mensagem de serviço anterior dentro do tempo esperado.

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