Modèles WhatsApp
Les envois WhatsApp à l’initiative de l’entreprise utilisent un modèle préapprouvé. Un modèle contient du texte fixe et des variables : un envoi fournit donc uniquement des valeurs, comme un code OTP ou un numéro de commande.
Bird fournit un catalogue géré, en enregistre le contenu auprès de WhatsApp et l’envoie depuis les numéros propres à Bird ; ses slugs commencent par bird_. Un espace de travail qui a connecté un numéro qui lui appartient peut aussi créer des modèles sur son propre compte WhatsApp Business. La page Approved templates affiche tous les modèles que l’espace de travail peut envoyer et leur rendu.

Parcourir les modèles dans le tableau de bord
Ouvrez Approved templates dans WhatsApp > Approved templates. Your templates contient les modèles créés par cet espace de travail ; All templates y ajoute le catalogue géré par Bird. Recherchez par nom ou filtrez par statut et par catégorie, et basculez entre la grille de cartes et la vue en liste avec le sélecteur situé à côté des filtres.
En vue liste, chaque ligne affiche les champs nécessaires pour choisir et envoyer un modèle :
- Status : indique si le modèle peut être envoyé dans l’ensemble. Les modèles du catalogue géré indiquent
active; un modèle qui vous appartient indique l’état de sa propre approbation. Consultez la liste des langues pour vérifier que la langue requise est disponible. - Name : le libellé affiché, avec le
slugdu modèle en dessous. Utilisez leslugpour l’envoi. - Languages : les langues dans lesquelles le modèle est enregistré, comme l’anglais et le néerlandais.
- Category :
authentication,utilityoumarketing. La catégorie détermine la façon dont WhatsApp traite le message, le numéro Bird depuis lequel un modèle géré est envoyé et, avec le pays de destination, le prix. - WABA : Bird-managed pour les modèles du catalogue. Un modèle qui vous appartient affiche le compte WhatsApp Business qui le détient, et n'est envoyé que depuis un numéro de ce même compte.
- Updated : date de la dernière modification du modèle.
Cliquez sur une ligne pour ouvrir le détail du modèle.
Contenu d'un modèle
La vue détaillée affiche le corps du message, les variables et les boutons dans un aperçu de style WhatsApp.
Le détail fournit aussi un exemple cURL pour POST /v1/whatsapp/messages, qui utilise l'hôte régional et les valeurs d'exemple du modèle. Remplacez la clé API, le destinataire et les valeurs des variables avant l'envoi.
L'exemple est le moyen le plus rapide de voir la structure à laquelle un envoi doit correspondre. Via l'API, le même contenu provient de la version du modèle (Lire le contenu d'un modèle).
Lister les modèles depuis l'API
GET /v1/whatsapp/templates renvoie un catalogue paginé par curseur. La requête nécessite un accès en lecture whatsapp_management. Utilisez HTTP ou une méthode de requête brute d'un SDK.
type Templates = { data: Array<{ slug: string; status: string }> };
const templates = await bird.request<Templates>({
method: "GET",
path: "/v1/whatsapp/templates",
});templates = client.get("/v1/whatsapp/templates")var out struct {
Data []struct {
Slug string `json:"slug"`
Status string `json:"status"`
} `json:"data"`
}
if err := client.Get(context.Background(), "/v1/whatsapp/templates", &out); err != nil {
log.Fatal(err)
}$templates = $bird->get('/v1/whatsapp/templates');curl https://us1.platform.bird.com/v1/whatsapp/templates \
-H "Authorization: Bearer $BIRD_API_KEY"Chaque entrée identifie le modèle, sa catégorie et ses langues disponibles. Pour obtenir le contenu du message, lisez séparément la version active.
{
"available_languages": ["en", "es", "pt-BR", "..."],
"category": "authentication",
"default_language": "en",
"description": "One-time passcode",
"id": "wat_01ky4x8e4genzb7way45txfkm1",
"languages": {
"en": { "status": "approved" },
"es": { "status": "approved" },
"pt-BR": { "status": "approved" },
"...": "..."
},
"name": "bird_otp",
"on_missing_language": "fail",
"scope": "system",
"slug": "bird_otp",
"status": "active"
}L'exemple de réponse abrège les listes de langues bird_otp.
Les champs dont dépend un envoi :
slug: l'identifiant utilisé dans un envoi. Les slugs des modèles gérés commencent parbird_, un préfixe qui leur est réservé.waba: le compte WhatsApp Business qui détient les langues du modèle chez Meta, et auquel doit appartenir le numéro d'envoi. Ce champ est absent sur un modèle géré, car Bird gère son compte.available_languages: les langues qui peuvent être envoyées. Une langue en pause, désactivée, archivée ou limitée est retirée de cette liste.on_missing_language: ce qui se passe lorsque la langue demandée n'est pas disponible. Les modèles WhatsApp gérés par Bird utilisentfail, qui rejette l'envoi au lieu de le remplacer par une autre langue.
Statut et statut de langue
Les modèles gérés par Bird indiquent status: active. languages.<tag>.status indique l'état attribué par WhatsApp à une langue, par exemple approved, paused ou disabled.
Un modèle actif peut tout de même avoir une langue indisponible. Utilisez available_languages pour déterminer si une langue peut être envoyée.
Lire le contenu d'un modèle
Le contenu du message est rattaché à une langue de la version active. Lisez live_version_id dans le modèle, puis demandez la langue souhaitée :
const language = await bird.request({
method: "GET",
path: "/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en",
});language = client.get(
"/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en"
)var language map[string]any
if err := client.Get(context.Background(),
"/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en",
&language); err != nil {
log.Fatal(err)
}$language = $bird->get('/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en');curl https://us1.platform.bird.com/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en \
-H "Authorization: Bearer $BIRD_API_KEY"La référence du modèle accepte un ID slug ou wat_. GET …/versions/{version_id}/languages liste les langues de la version sans leur contenu.
{
"category": "utility",
"components": [
{
"example_parameters": [
{ "name": "ref", "text": "A1B2C3D4", "type": "text" },
{ "name": "amount", "text": "USD 49.99", "type": "text" }
],
"text": "Your order {{ref}} has been confirmed for a total of {{amount}}. Thanks for shopping with us.",
"type": "body"
}
],
"language": "en",
"status": "approved"
}Un envoi remplit ces espaces réservés par leur nom. example_parameters identifie chacun d'eux. Dans cet exemple, le champ parameters de l'envoi prend les clés ref et amount. Les clés d'un modèle positionnel sont ses numéros, par exemple 1, à deux exceptions près : le code d'un modèle d'authentification prend la clé code, et le suffixe numéroté d'un bouton url prend la clé button_url. Les boutons paramétrés ont leur propre example_parameters.
Le champ category de la langue indique la catégorie Meta utilisée pour la tarification. Elle peut différer de la catégorie enregistrée du modèle si Meta reclasse la langue.
La liste variables de la version récapitule chaque espace réservé avec sa clé, son type, son indicateur d'obligation et sa contrainte. Les espaces réservés nommés utilisent leur nom comme clé. Les espaces réservés positionnels utilisent leur numéro, sauf un code d'authentification (code) et le suffixe d'un bouton url (button_url). Le champ parameters d'un envoi accepte ces clés.
Envoyer avec un modèle
Indiquez le modèle dans l'objet template de l'envoi et renseignez ses variables via parameters. Consultez Envoyer des messages WhatsApp pour la charge utile complète :
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_otp",
parameters: { code: "123456" },
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+15551234567",
template="bird_otp",
language="en",
parameters={"code": "123456"},
)
print(msg.id, msg.status)msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+15551234567",
Template: "bird_otp",
Language: "en",
Parameters: map[string]any{"code": "123456"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)$message = $bird->whatsapp->send(
to: '+15551234567',
template: 'bird_otp',
language: 'en',
parameters: ['code' => '123456'],
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--language en \
--parameters '{"code":"123456"}' \
--template bird_otp \
--to +15551234567curl -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",
"parameters": { "code": "481920" }
}
}'Envoyer selon la catégorie
Chaque modèle appartient à l'une des trois catégories de Meta. La catégorie détermine ce que vous devez faire pour qu'un envoi réussisse, ainsi que son coût. Pour créer ou copier votre propre modèle d'authentification, votre entreprise doit être vérifiée, mais pas pour en envoyer un : le bird_otp géré par Bird se trouve sur le compte WhatsApp Business de Bird et s'envoie sans vérification de votre part. Les modèles marketing s'envoient toujours depuis votre propre compte WhatsApp Business, via un second API Meta vers lequel Bird achemine automatiquement les envois. Les modèles utilitaires sont ceux qui exigent le moins de prérequis.
- Modèles d'authentification : codes à usage unique, bouton de copie du code et vérification requise pour en créer un
- Modèles utilitaires : mises à jour de commande, rappels de rendez-vous et notifications de compte
- Modèles marketing : envois promotionnels, compte professionnel nécessaire et attentes en matière de désinscription
Étapes suivantes
- Envoyer des messages WhatsApp : la charge utile d'envoi complète dans laquelle s'insère l'objet
template - Consignes relatives aux modèles WhatsApp : les règles selon lesquelles Meta examine un modèle
- Modèles d'authentification : codes de vérification à usage unique et vérification de l'entreprise exigée pour en créer un
- Tarifs WhatsApp : comment la catégorie et la destination déterminent le prix
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet.