Mensagens de texto simples WhatsApp
Texto simples é o tipo de conteúdo livre mais básico: um corpo sem anexo e uma pré-visualização opcional para o primeiro link dentro dele.
Enviar uma mensagem de texto
Defina text.body:
const msg = await bird.whatsapp.send({
to: "+16505551234",
from: "+13124495648",
text: { body: "Your driver is 2 minutes away." },
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+16505551234",
from_="+13124495648",
text={"body": "Your driver is 2 minutes away."},
)
print(msg.id, msg.status)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+16505551234",
From: "+13124495648",
Text: &bird.WhatsAppTextSend{Body: "Your driver is 2 minutes away."},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$text = (new WhatsAppMessageSendRequestText())
->setBody('Your driver is 2 minutes away.');
$message = $bird->whatsapp->send(
to: '+16505551234',
from: '+13124495648',
text: $text,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--from +13124495648 \
--text 'Your driver is 2 minutes away.' \
--to +16505551234{
"name": "whatsapp_send",
"arguments": {
"from": "+13124495648",
"text": {
"body": "Your driver is 2 minutes away."
},
"to": "+16505551234"
}
}curl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+16505551234",
"from": "+13124495648",
"text": {
"body": "Your driver is 2 minutes away."
}
}'A estrutura completa adiciona preview_url mais os campos que qualquer envio de conteúdo livre pode conter:
Exemplo de código
{
"to": "+16505551234",
"from": "+13124495648",
"text": {
"body": "Your order shipped: https://example.com/track/A1B2C3",
"preview_url": true
},
"in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
"tags": [{ "name": "category", "value": "shipping" }],
"metadata": { "order_id": "A1B2C3" }
}from é obrigatório em toda mensagem de serviço: um número que seu espaço de trabalho possui, não um gerenciado pelo Bird. in_reply_to_message_id cita uma mensagem anterior na mesma conversa; consulte Citando uma mensagem para saber contra o que ele resolve e o que pode faltar.
Limites
| Campo | Limite | Aplicado por |
|---|---|---|
| body | 1 a 4.096 caracteres | Bird, no aceite (422) |
| preview_url | booleano, padrão false | N/A, informativo |
Um body contendo apenas espaços em branco passa na validação do próprio schema minLength: 1, mas Bird ainda o captura: body que está vazio após o trim é recusado com 422 E15015 WhatsAppContentRequired. Um corpo acima de 4.096 caracteres é recusado com um 422 simples e sem código de catálogo dedicado.
Lendo uma mensagem de texto recebida
Uma mensagem de texto recebida contém o mesmo campo text.body, e nada mais nesse tipo. Consulte Recebendo mensagens de texto WhatsApp para a leitura completa de entrada, o payload whatsapp.received e o que observar.
Limites e casos especiais
- A janela de atendimento ao cliente precisa estar aberta. Texto simples é uma mensagem de serviço, entregável apenas dentro de uma janela aberta; consulte a janela de atendimento ao cliente do hub.
- preview_url afeta apenas o primeiro link, e apenas o que o cliente do destinatário renderiza. O padrão é false. Defina-o para pré-visualizar a primeira URL em body; uma URL posterior no mesmo corpo nunca recebe pré-visualização. Se o cliente do destinatário não conseguir buscar uma pré-visualização para esse link, ele volta silenciosamente a um link clicável simples. Nada na leitura informa se a pré-visualização foi de fato renderizada.
- O markdown WhatsApp é a renderização do cliente do destinatário de body, não parte do contrato API. Bird repassa body sem alterações; não valida, remove nem codifica *bold*, _italic_, ~strikethrough~ ou monoespaçado com três crases. Se esses marcadores são renderizados depende inteiramente do cliente que abre a mensagem.
- Uma mensagem recebida body não tem garantia de ser não vazia, apesar do que o schema de leitura diz. A Meta pode relatar uma mensagem recebida como "text": {} ou com um body vazio, e Bird armazena-a literalmente em vez de sintetizar um placeholder. Essa é uma lacuna conhecida e em aberto: não escreva um consumidor que confie no required: body do schema aqui.
Próximos passos
- Mensagens de serviço WhatsApp: a janela de atendimento ao cliente e o modelo que toda mensagem de serviço compartilha
- Enviando mensagens WhatsApp: o envelope da solicitação, o modelo 202 e tentativas seguras de reenvio
- Mensagens interativas: quando você quer um toque em vez de uma resposta digitada
Recursos relacionados
Continue com a documentação, guias e exemplos sobre este tópico. Os recursos estão em inglês.
Assista ao guiaConnecting WhatsApp to Bird: from buying a number to a live channelEntenda o conceitoWhat is the 24-hour customer service window on WhatsApp?Use a ferramentaWhatsApp message builderExplore a funcionalidadeWhatsApp
Experimente na prática e obtenha um resumo de implementação