Templates de autenticação do WhatsApp
Um template de autenticação entrega um código de verificação de uso único. A Meta fornece o texto quando você cria o template. Ao enviá-lo, forneça o código como um parâmetro de corpo.
Antes de enviar
Escolha entre usar um template gerenciado pela Bird ou criar um template na sua própria conta comercial.
Enviar os templates pré-prontos do catálogo do Bird, bird_otp e bird_otp_authifly, não exige verificação da sua parte. Esses templates ficam nas WhatsApp Business Accounts do próprio Bird, e o caminho de envio gerenciado nunca verifica o status de verificação do seu negócio.
Quando a conta comercial conectada reporta not_verified, Bird recusa a criação ou duplicação de template de autenticação com 412 E15043 WhatsAppTemplateBusinessNotVerified. Verifique a conta conectada e seu status sincronizado mais recente. Consulte Verificação comercial da WhatsApp para o processo de verificação e tratamento de status.
A criação de templates de utilidade e marketing não é afetada por essa exigência; você pode continuar criando e editando esses templates independentemente do seu status de verificação.
Crie templates no dashboard, com a bird CLI, ou pelo servidor MCP. Consulte Criação de templates do WhatsApp para o fluxo completo.
Enviando um código de verificação
POST /v1/whatsapp/messages com um objeto template que nomeia um slug do catálogo:
const msg = await bird.whatsapp.send({
to: "+14155550100",
template: {
slug: "bird_otp",
language: "en",
components: [{ type: "body", parameters: [{ type: "text", text: "481920" }] }],
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+14155550100",
template="bird_otp",
language="en",
components=[{"type": "body", "parameters": [{"type": "text", "text": "481920"}]}],
)
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)
}
code := "481920"
components := []bird.WhatsAppMessageTemplateComponent{{
Type: "body",
Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{{Type: "text", Text: &code}},
}}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+14155550100",
Template: "bird_otp",
Language: "en",
Components: components,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$components = [
(new WhatsAppMessageTemplateComponent())
->setType('body')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setText('481920'),
]),
];
$message = $bird->whatsapp->send(
to: '+14155550100',
template: 'bird_otp',
language: 'en',
components: $components,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--components '[{"parameters":[{"text":"481920","type":"text"}],"type":"body"}]' \
--language en \
--template bird_otp \
--to +14155550100{
"name": "whatsapp_send",
"arguments": {
"template": {
"components": [
{
"parameters": [
{
"text": "481920",
"type": "text"
}
],
"type": "body"
}
],
"language": "en",
"slug": "bird_otp"
},
"to": "+14155550100"
}
}curl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550100",
"template": {
"slug": "bird_otp",
"language": "en",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"text": "481920"
}
]
}
]
}
}'Quatro regras são específicas desta categoria:
- Omita from. Um template gerenciado por Bird escolhe seu próprio remetente com base na categoria e na região, então definir from retorna 422 E15018 WhatsAppSenderNotAllowed. Isso é o oposto de um envio livre, que exige from, algo a ter em mente se você está vindo das páginas de mensagens interativas.
- to deve ser um número de telefone E.164. Um template de autenticação não pode ser enviado a um ID de usuário com escopo de negócio; isso é 422 E15014 WhatsAppRecipientNotSupportedForTemplate.
- O corpo aceita exatamente um parâmetro posicional, o código. Zero parâmetros, ou nomear o parâmetro, retorna 422 E15003 WhatsAppTemplateParameterMismatch. Autenticação é a única categoria que a Meta escreve posicionalmente; todas as outras categorias nomeiam seus parâmetros.
- Nenhuma janela de atendimento ao cliente é necessária. Envios de template não dependem de janela, e esse é exatamente o motivo pelo qual um template de código de verificação existe: ele precisa alcançar alguém que nunca enviou mensagem para você antes.
Consulte os idiomas disponíveis para bird_otp ou bird_otp_authifly no catálogo de templates. Se o idioma solicitado não estiver disponível, o envio falha em vez de substituir por outro idioma.
O botão de copiar código
A Meta escreve o corpo de um template de autenticação por conta própria, como um modelo predefinido com um único placeholder de código, então você fornece flags em vez de texto. O componente de botão é opcional no envio: se você não incluir um, o Bird o adiciona para você, carregando o mesmo código do corpo. Você também pode fornecê-lo manualmente:
Exemplo de código
{ "type": "button", "parameters": [{ "type": "text", "text": "481920" }] }De qualquer forma, exatamente um botão chega ao WhatsApp, e é o botão de copiar código: ao tocá-lo, o código é copiado para a área de transferência. Bird suporta apenas copy_code; os outros dois comportamentos de botão que a Meta documenta para templates de autenticação, one-tap e zero-tap autofill, não estão disponíveis no Bird atualmente.
A criação do botão de um template segue o mesmo formato: um botão otp, e o template não aceita nenhum outro tipo de botão. Você fornece add_security_recommendation (um booleano exibido no corpo) e code_expiration_minutes (1 a 90, exibido no rodapé) em vez de escrever texto.
O que a Meta permite em um template de autenticação
A Meta fixa a estrutura de um template de autenticação e revisa seu conteúdo: nenhuma URL, mídia ou emoji em qualquer parte do template, e um limite de 15 caracteres no parâmetro de código. A categoria também altera como o WhatsApp entrega a mensagem, enviando-a apenas para o dispositivo principal do destinatário. Consulte Diretrizes de templates para a estrutura fixa, os limites de caracteres e o processo de revisão completo.
Custo
A categoria e o destino definem o preço. Consulte Tarifas internacionais de autenticação WhatsApp para saber como o envio para um país diferente da sua localização principal pode alterá-lo, e Custos e faturamento para saber quando um envio é cobrado. Os valores das tarifas estão em Preços da WhatsApp.
Pontos de atenção
- Os templates pré-prontos do Bird não entregam para nove países. bird_otp e bird_otp_authifly enviam a partir das WhatsApp Business Accounts do próprio Bird, e essas contas não entregam mensagens de autenticação para Egito, Índia, Indonésia, Malásia, Nigéria, Paquistão, Arábia Saudita, África do Sul ou Emirados Árabes Unidos. Esse envio é recusado 422 E15063 WhatsAppDestinationRestricted antes de qualquer cobrança. Um template que você criou na sua própria conta, enviado a partir do seu próprio número, alcança esses países normalmente. Verify também alcança, movendo o código de verificação para outro canal automaticamente.
- Um envio com template próprio exige from, e ele precisa estar na mesma WhatsApp Business Account do template. Um remetente em uma conta diferente é recusado 422 E15023 WhatsAppSenderWABAMismatch antes de qualquer cobrança.
- Apenas um idioma cuja versão esteja aprovada e ativa pode ser enviado. Um idioma em rascunho, pendente, rejeitado ou pausado não pode.
- A Meta pode recategorizar um template por iniciativa própria. Não há como recusar, e isso move as regras de preço e entrega que acompanham a categoria.
- A categoria do template e a categoria do seu idioma podem divergir. Consulte Templates do WhatsApp para saber como o caminho de envio resolve isso.
- Um template de autenticação ingerido não pode ser duplicado. O Bird não consegue ler o texto gerado pelo WhatsApp de volta para as configurações a partir das quais um novo template é criado; isso é 422 E15024 WhatsAppTemplateContentNotDuplicable. Em vez disso, crie um novo com sua própria recomendação de segurança e expiração de código.
Próximos passos
- Templates do WhatsApp: navegação pelo catálogo e o contrato compartilhado de envio por template
- Templates de utilidade: atualizações de pedido, lembretes de agendamento e avisos de conta
- Verificação empresarial do WhatsApp: como a verificação funciona e o que mais ela desbloqueia
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