Templates utilitaires WhatsApp
Un template utilitaire fait suite à une action déjà effectuée par le destinataire : une commande, un paiement, une réservation, une connexion. Le catalogue de Bird en propose huit, dont bird_signin_alert et bird_delivery_update. Prenez la catégorie d'un slug dans la liste des templates plutôt que dans son nom : bird_signin_alert ressemble à un template d'authentification mais n'en est pas un, c'est un template utilitaire.
Avant d'envoyer
Choisissez un modèle du catalogue géré ou créez le vôtre sur votre compte professionnel connecté.
L'envoi des templates du catalogue de Bird ne nécessite aucune vérification de votre part, comme pour l'authentification. Créer votre propre template utilitaire n'en nécessite pas non plus : contrairement à l'authentification, la vérification d'entreprise imposée par Meta ne s'applique jamais à la catégorie utilitaire, vous pouvez donc créer et modifier des templates utilitaires sur un espace de travail non vérifié. Consultez Vérification d'entreprise WhatsApp pour savoir ce que la vérification débloque par ailleurs.
to peut être un numéro de téléphone E.164 ou un identifiant utilisateur limité à l'entreprise. Un template utilitaire ne comporte pas de bouton OTP, il n'exige donc pas le destinataire au format numéro de téléphone uniquement qu'impose l'authentification.
Chaque template utilitaire du catalogue géré est enregistré dans en uniquement, avec on_missing_language: fail. Demander une langue absente du catalogue fait échouer l'envoi au lieu de basculer vers l'anglais ou toute autre langue.
Envoyer un template utilitaire
POST /v1/whatsapp/messages avec un objet template désignant un slug du catalogue :
const msg = await bird.whatsapp.send({
to: "+16505551234",
template: {
slug: "bird_order_confirmation",
language: "en",
components: [
{
type: "body",
parameters: [
{ type: "text", name: "ref", text: "A1B2C3D4" },
{ type: "text", name: "amount", text: "USD 49.99" },
],
},
],
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+16505551234",
template="bird_order_confirmation",
language="en",
components=[
{
"type": "body",
"parameters": [
{"type": "text", "name": "ref", "text": "A1B2C3D4"},
{"type": "text", "name": "amount", "text": "USD 49.99"},
],
}
],
)
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)
}
ref := "A1B2C3D4"
amount := "USD 49.99"
refName := "ref"
amountName := "amount"
components := []bird.WhatsAppMessageTemplateComponent{{
Type: "body",
Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{
{Type: "text", Name: &refName, Text: &ref},
{Type: "text", Name: &amountName, Text: &amount},
},
}}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+16505551234",
Template: "bird_order_confirmation",
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')->setName('ref')->setText('A1B2C3D4'),
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('amount')->setText('USD 49.99'),
]),
];
$message = $bird->whatsapp->send(
to: '+16505551234',
template: 'bird_order_confirmation',
language: 'en',
components: $components,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--components '[{"parameters":[{"name":"ref","text":"A1B2C3D4","type":"text"},{"name":"amount","text":"USD 49.99","type":"text"}],"type":"body"}]' \
--language en \
--template bird_order_confirmation \
--to +16505551234{
"name": "whatsapp_send",
"arguments": {
"template": {
"components": [
{
"parameters": [
{
"name": "ref",
"text": "A1B2C3D4",
"type": "text"
},
{
"name": "amount",
"text": "USD 49.99",
"type": "text"
}
],
"type": "body"
}
],
"language": "en",
"slug": "bird_order_confirmation"
},
"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",
"template": {
"slug": "bird_order_confirmation",
"language": "en",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"name": "ref",
"text": "A1B2C3D4"
},
{
"type": "text",
"name": "amount",
"text": "USD 49.99"
}
]
}
]
}
}'Comme pour tout template géré, omettez from : Bird choisit le numéro d'envoi en fonction de la catégorie et de la région, et le définir renvoie 422 E15018 WhatsAppSenderNotAllowed. Créer votre propre template utilitaire et l'envoyer fonctionne de la même manière que tout envoi avec un template créé par vous ; consultez Envoyer avec un template pour le contrat général.
Remplir les variables
Les paramètres utilitaires sont nommés, l'inverse du code positionnel unique de l'authentification. Chaque paramètre porte un name, et l'ordre d'un paramètre nommé dans le tableau n'a aucune importance. Envoyez une entrée components pour chaque bloc qui contient effectivement un espace réservé ; un corps sans variables ne prend aucune entrée components.
Un bouton URL est la seule exception : sa variable est toujours positionnelle {{1}}, et l'envoi transporte la valeur brute plutôt qu'une adresse complète :
Exemple de code
{ "type": "button", "parameters": [{ "type": "text", "text": "A-4192" }] }Pour les règles partagées sur les composants, sub_type, et la correspondance entre les components d'un envoi et les espaces réservés déclarés d'un template, consultez Envoyer avec un template et Composants et paramètres.
Coût
Un modèle utilitaire livré pendant une fenêtre de service client ouverte peut bénéficier du tarif gratuit de Meta. Les frais sortants de Bird sont facturés lors du traitement du message, avant la soumission. Un callback ultérieur de livraison ou de lecture détermine si des frais Meta s'appliquent. Tenez compte des deux composantes pour estimer le total.
Consultez Coûts et facturation pour savoir quand un envoi est facturé, et Tarification WhatsApp pour les tarifs.
Points de vigilance
- Meta peut recatégoriser un template utilitaire en marketing de sa propre initiative, et le message continue d'être envoyé au nouveau tarif, plus élevé. Une entreprise déjà avertie par Meta pour mauvaise catégorisation ne reçoit plus aucun préavis depuis avril 2025 ; le changement s'applique immédiatement. Excluez le langage promotionnel, les offres et les ventes additionnelles du texte d'un template utilitaire, car c'est ce qui déclenche le reclassement. Consultez Directives pour les templates pour savoir ce qui est considéré comme promotionnel.
- Un en-tête gif ou un bouton copy_code est refusé en dehors de la catégorie marketing. Ce sont des composants réservés au marketing ; déclarer l'un ou l'autre sur un template utilitaire échoue.
- Un envoi avec un template créé par vous n'est pas vérifié pour le nombre de paramètres avant d'être facturé. Envoyez un nombre incorrect de paramètres sur votre propre template et le message est accepté et facturé, puis rejeté par Meta. Les envois via le catalogue géré ne présentent pas ce problème.
- Un expéditeur sur le mauvais WhatsApp Business Account est refusé avant toute facturation. from doit se trouver sur le même compte que le template ; sinon l'envoi échoue 422 E15023 WhatsAppSenderWABAMismatch.
Étapes suivantes
- Templates WhatsApp : parcourir le catalogue et le contrat partagé d'envoi par template
- Templates d'authentification : codes de vérification à usage unique et vérification requise pour en créer un
- Templates marketing : envois promotionnels et le compte nécessaire pour en créer un
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Regarder le guideConnecting WhatsApp to Bird: from buying a number to a live channelComprendre le conceptWhat is the 24-hour customer service window on WhatsApp?Utiliser l'outilWhatsApp message builderExplorer la fonctionnalitéWhatsApp
Essayez la pratique et obtenez un guide d'implémentation