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

WhatsApp Business API para envio de sessão — fatura pdf

Este cenário envia um documento PDF com sendFile durante a janela de atendimento ao cliente de 24 horas do WhatsApp.

Visão geral do caso de uso

Este cenário envia um documento PDF com sendFile durante a janela de atendimento ao cliente do WhatsApp de 24 horas. Use-o quando a cobrança precisar anexar uma fatura sem iniciar uma nova conversa de modelo.

Exemplo de modelo

Fatura para o ingresso{{1}}

  • {{1}}
    número do chamado de suporte exibido na legenda do PDF
WhatsApp Business API for session send — invoice pdf

Quando utilizá-lo

Acesse este cenário quando a cobrança precisar entregar uma fatura em PDF enquanto uma conversa de suporte ainda está aberta no WhatsApp — o cliente já escreveu primeiro e a janela de sessão de 24 horas está ativa. Isso se encaixa no acompanhamento de cobrança dentro de tópicos de helpdesk onde anexar documentos através de modelos aprovados seria lento ou desnecessário para equipes que integram 1MSG com sistemas de tickets e faturamento.

Sem retorno de modelo para o PDF.
sendFile entrega a fatura dentro da janela de sessão aberta de 24 horas, então a cobrança anexa application/pdf sem submeter ou esperar por uma nova aprovação de template da Meta.
A fatura fica na thread de suporte.
O PDF chega no mesmo chat do WhatsApp que o cliente usou para suporte, como application/pdf com o nome de arquivo invoice.pdf, em vez de um anexo de e-mail separado que eles podem nunca abrir.
O cliente pode associar o arquivo ao seu tíquete.
Uma variável de legenda carrega o número do chamado no "Fatura para o ticket {{1}}", para que o cliente possa vincular o documento ao caso em aberto sem precisar procurar em outro canal.
Menos encaminhamentos manuais do helpdesk.
Quando o helpdesk marca um ticket como pronto para faturamento, seu backend resolve o número do ticket e a URL do PDF ou caminho de upload, então sendFile é acionado a partir desse evento.
Entrega registrada para acompanhamento de cobrança
O status de entrega é registrado de volta no sistema de ajuda ou faturamento, para que o financeiro saiba que a fatura chegou ao cliente na mesma conversa.

Fluxo de Trabalho

  1. Gatilho

    O helpdesk marca um ticket como pronto para faturamento enquanto a sessão ainda está aberta.

    event · triggered

  2. Capturar evento

    Seu backend resolve o número do ticket e a localização do PDF da fatura.

    phone: "+…"

  3. Construir e enviar

    sendFile envia application/pdf com o nome de arquivo invoice.pdf e uma legenda referenciando o ticket.

    POST /send_file

  4. Entregue

    O cliente recebe o PDF na mesma conversa do WhatsApp.

    delivered

WhatsApp Business API for session send — invoice pdf

Implementação técnica

Pré-requisitos

  1. 1MSG API Key · Como obter a chave da API
  2. Conta comercial do WhatsApp · Como Conectar WABA
  3. Sessão aberta 24 horas · Como funciona a janela de 24 horas
  4. Consentimento 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
MEDIA_URL="___"                         # local file path or HTTPS URL for sendFile body

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

read -r -d '' PAYLOAD <<JSON || true
{
  "phone": "${PHONE_NORM}",
  "body": "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf",
  "filename": "invoice.pdf"
}
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 1MSGaceitoMensagem para envio — não que já tenha chegado ao telefone do cliente.idcampo.wamid.…) para correlacionar chamadas de retorno 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; retornos de entrega.hookInfoestão focados nisso

A entrega em si chega mais tarde, como uma chamada de retorno separada. Registre um webhookPOST …/webhook) e 1MSG envia atualizações de status para seu endpoint HTTPS.hooks[]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

    Correla o retorno com oidretornado pela chamada de envio

  • timestamp

    Segundos Unix, como uma string

Se você prefere não receber retornos de chamada, participe da pesquisa.GET {base}/{channel}/hookInfo?messageId=<id>em vez disso. Na prática, a entrega muitas vezes é concluída em segundos — mas o contrato da API não garante isso, então nunca bloqueie um fluxo aguardando por ela.

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

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