WhatsApp-authenticatietemplates
Een authenticatietemplate bezorgt een eenmalige verificatiecode. Meta levert de tekst wanneer je het template maakt. Bij het versturen geef je de code mee als body-parameter.
Voordat je verstuurt
Kies of je een door Bird beheerd template wilt gebruiken of zelf een template op je eigen zakelijke account wilt maken.
Het versturen van de standaardcatalogustemplates van Bird, bird_otp en bird_otp_authifly, vereist geen verificatie van jouw kant. Die templates staan op de eigen WhatsApp Business Accounts van Bird, en het beheerde verzendpad controleert de verificatiestatus van je bedrijf nooit.
Wanneer het gekoppelde zakelijke account not_verified meldt, weigert Bird het aanmaken of dupliceren van authenticatietemplates met 412 E15043 WhatsAppTemplateBusinessNotVerified. Controleer het gekoppelde account en de laatst gesynchroniseerde status. Zie WhatsApp-bedrijfsverificatie voor het verificatieproces en de statusafhandeling.
Het aanmaken van utility- en marketingtemplates wordt niet beïnvloed door deze poort; je kunt die blijven aanmaken en bewerken ongeacht je verificatiestatus.
Maak templates aan in het dashboard, met de bird CLI, of via de MCP-server. Zie WhatsApp-templates aanmaken voor de volledige flow.
Een verificatiecode versturen
POST /v1/whatsapp/messages met een template-object dat een catalogusslug benoemt:
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"
}
]
}
]
}
}'Vier regels zijn specifiek voor deze categorie:
- Laat from weg. Een door Bird beheerde template kiest zijn eigen afzender op basis van categorie en regio, dus het instellen van from retourneert 422 E15018 WhatsAppSenderNotAllowed. Dat is het tegenovergestelde van een verzending met vrij geformuleerde inhoud, die from vereist. Goed om te onthouden als je hier via de pagina's over interactieve berichten terechtkomt.
- to moet een E.164-telefoonnummer zijn. Een authenticatietemplate kan niet naar een business-scoped user-ID gestuurd worden; dat is 422 E15014 WhatsAppRecipientNotSupportedForTemplate.
- De body neemt precies één positionele parameter: de code. Nul parameters, of de parameter benoemen, retourneert 422 E15003 WhatsAppTemplateParameterMismatch. Authenticatie is de enige categorie die Meta positioneel schrijft; elke andere categorie benoemt zijn parameters.
- Er is geen klantenservicevenster nodig. Templateverzendingen zijn niet venstergebonden, en dat is precies de reden dat een verificatiecodetemplate bestaat: het moet iemand bereiken die je nog nooit een bericht heeft gestuurd.
Lees de beschikbare talen voor bird_otp of bird_otp_authifly uit de templatecatalogus. Als de gevraagde taal niet beschikbaar is, mislukt de verzending in plaats van een andere taal te gebruiken.
De kopieerknop
Meta schrijft de body van een authenticatietemplate zelf, als een voorinstelling met één codeplaatshouder, dus je levert vlaggen aan in plaats van tekst. De knopcomponent is optioneel bij een verzending: als je er geen opneemt, voegt Bird hem voor je toe met dezelfde code als de body. Je kunt hem ook zelf meegeven:
Codevoorbeeld
{ "type": "button", "parameters": [{ "type": "text", "text": "481920" }] }In beide gevallen komt er precies één knop bij WhatsApp aan, en dat is de kopieerknop: erop tikken kopieert de code naar het klembord. Bird ondersteunt alleen copy_code; de andere twee knopgedragingen die Meta documenteert voor authenticatietemplates, one-tap en zero-tap autofill, zijn niet beschikbaar op Bird.
Het aanmaken van een templateknop volgt dezelfde structuur: één otp-knop, en de template accepteert geen andere knoptypen. Je levert add_security_recommendation (een boolean die in de body wordt getoond) en code_expiration_minutes (1 tot 90, getoond in de footer) in plaats van tekst te schrijven.
Wat Meta toestaat in een authenticatietemplate
Meta legt de structuur van een authenticatietemplate vast en beoordeelt de inhoud: geen URL's, media of emoji's ergens in de template, en een limiet van 15 tekens op de codeparameter. De categorie verandert ook hoe WhatsApp het bericht bezorgt: het wordt alleen naar het primaire apparaat van de ontvanger gestuurd. Zie Templaterichtlijnen voor de vaste structuur, tekenlimieten en het beoordelingsproces in detail.
Kosten
Categorie en bestemming bepalen de prijs. Zie WhatsApp-tarieven voor internationale authenticatie voor hoe verzending naar een ander land dan je primaire locatie de prijs kan wijzigen, en Kosten en facturering voor wanneer een verzending in rekening wordt gebracht. De tarieven staan op WhatsApp-prijzen.
Aandachtspunten
- De standaardtemplates van Bird worden niet bezorgd in negen landen. bird_otp en bird_otp_authifly versturen vanaf de eigen WhatsApp Business Accounts van Bird, en die accounts bezorgen geen authenticatieberichten in Egypte, India, Indonesië, Maleisië, Nigeria, Pakistan, Saudi-Arabië, Zuid-Afrika of de Verenigde Arabische Emiraten. Zo'n verzending wordt geweigerd met 422 E15063 WhatsAppDestinationRestricted voordat er iets in rekening wordt gebracht. Een template die je op je eigen account hebt aangemaakt en vanaf je eigen nummer verstuurt, bereikt deze landen gewoon. Verify bereikt ze ook, door de verificatiecode zelfstandig naar een ander kanaal te verplaatsen.
- Een verzending met een eigen template vereist from, en die moet op hetzelfde WhatsApp Business Account staan als de template. Een afzender op een ander account wordt geweigerd met 422 E15023 WhatsAppSenderWABAMismatch voordat er iets in rekening wordt gebracht.
- Alleen een taalversie die goedgekeurd en live is, kan verstuurd worden. Een concept-, in behandeling zijnde, afgewezen of gepauzeerde taalversie niet.
- Meta kan een template op eigen initiatief hercategoriseren. Er is geen opt-out, en het verplaatst de prijs- en bezorgregels die bij de categorie horen.
- De categorie van de template en de categorie van de taalversie kunnen uiteenlopen. Zie WhatsApp-templates voor hoe het verzendpad dit oplost.
- Een geïmporteerde authenticatietemplate kan niet gedupliceerd worden. Bird kan de door WhatsApp gegenereerde tekst niet teruglezen naar de instellingen waaruit een nieuwe template wordt opgebouwd; dat is 422 E15024 WhatsAppTemplateContentNotDuplicable. Maak in plaats daarvan een nieuwe aan met een eigen beveiligingsaanbeveling en codeverlooptijd.
Volgende stappen
- WhatsApp-templates: de catalogus doorzoeken en het gedeelde send-by-template-contract
- Utility-templates: orderupdates, afspraakherinneringen en accountmeldingen
- WhatsApp-bedrijfsverificatie: hoe verificatie werkt en wat het verder ontgrendelt
Gerelateerde bronnen
Ga verder met de documentatie, gidsen en voorbeelden voor dit onderwerp. De bronnen zijn in het Engels.
Bekijk de gidsConnecting WhatsApp to Bird: from buying a number to a live channelBegrijp het conceptWhat is the 24-hour customer service window on WhatsApp?Gebruik de toolWhatsApp message builderOntdek de mogelijkheidWhatsApp
Probeer de oefening en ontvang een implementatieoverzicht