Préférences
Une préférence est une déclaration sur ce qu'une personne souhaite, enregistrée en regard de son identifiant sur un canal. Sur WhatsApp, l'identifiant est un numéro de téléphone au format E.164. C'est un enregistrement distinct d'une suppression, et les deux sont vérifiés avant chaque envoi.
Les préférences parviennent à votre espace de travail de trois façons : WhatsApp en signale une, un destinataire tape un mot-clé, ou vous en enregistrez une vous-même. Ce que vous pouvez faire de chacune dépend de qui l'a déclarée.
Ce que porte une préférence
Une déclaration est soit revoked, un opt-out, soit granted, un consentement.
Elle porte aussi une portée, qui détermine la quantité de trafic qu'elle bloque. non_transactional couvre les messages marketing et autres messages non essentiels, tandis que les messages transactionnels tels que les reçus et les codes de vérification continuent d'être acheminés. all couvre tous les messages. L'onglet Preferences les affiche dans sa colonne Covers sous les libellés Non-transactional et All messages.
Une déclaration peut se restreindre à un expéditeur avec sender_scope, qui sur WhatsApp identifie le compte professionnel. Sans cela, la déclaration couvre le canal dans tout votre espace de travail, y compris les comptes que vous connecterez ultérieurement.
Une personne peut avoir plusieurs lignes sur un même canal, par exemple un opt-out sur l'ensemble du canal à côté d'un opt-out limité à un expéditeur. La déclaration la plus restrictive détermine si un message est envoyé.
Préférences que Bird enregistre pour vous
Lorsque Bird reçoit un événement Meta indiquant qu'un destinataire a arrêté les messages marketing, il enregistre une préférence d'origine destinataire pour ce compte professionnel WhatsApp. La préférence couvre les messages non transactionnels. Elle ne crée pas de suppression tous messages, et elle ne désinscrit pas la personne de tous les comptes de votre espace de travail.
Un destinataire peut déclarer la même chose en répondant STOP. Cette préférence est limitée au compte professionnel auquel il a écrit, comme celle ci-dessus. Elle couvre tous les messages, car un STOP tapé a une portée plus large que l'opt-out marketing de WhatsApp. Consultez les règles de mots-clés pour savoir ce que Bird reconnaît et comment modifier la réponse.
Un événement de reprise ultérieur met à jour la préférence de ce compte. Les suppressions et les autres préférences applicables continuent de s'appliquer : un événement de reprise seul ne prouve pas qu'un envoi est autorisé.
Préférences que vous enregistrez
Ouvrez la page Suppressions et passez à l'onglet Preferences. En enregistrer une avec Every business account in the workspace empêche l'adresse de recevoir des messages WhatsApp de tous les comptes que vous détenez, y compris ceux que vous connecterez ultérieurement.

La boîte de dialogue Record opt-out de cet onglet enregistre une portée tous messages.

Pour en enregistrer une qui bloque uniquement le marketing, utilisez la page Contacts > Preferences à l'échelle de l'espace de travail, dont la boîte de dialogue propose Marketing messages ainsi que All messages.
Lire les préférences depuis le code
GET /v1/preferences renvoie les préférences enregistrées de l'espace de travail, les plus récentes en premier. Passez channel=whatsapp pour restreindre à ce canal, et handle avec pour consulter tout ce qui est enregistré pour un numéro avant de lui envoyer un message :
for await (const preference of bird.preferences.list({
channel: "whatsapp",
handle: "+15550001234",
})) {
console.log(preference.status, preference.coverage, preference.sender_scope);
}for preference in client.preferences.list(channel="whatsapp", handle="+15550001234"):
print(preference.status, preference.coverage, preference.sender_scope)for pref, err := range client.Preferences.List(context.Background(), bird.PreferencesListParams{
Channel: bird.PreferenceChannelWhatsapp,
Handle: "+15550001234",
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(*pref.Status, *pref.Coverage)
}foreach ($bird->preferences->list(['channel' => 'whatsapp', 'handle' => '+15550001234']) as $preference) {
echo $preference->getStatus(), ' ', $preference->getCoverage(), PHP_EOL;
}bird preferences list --channel whatsapp --handle +15550001234curl "https://us1.platform.bird.com/v1/preferences?channel=whatsapp&handle=%2B15550001234" \
-H "Authorization: Bearer $BIRD_API_KEY"handle exige channel, car le même identifiant peut exister sur plus d'un canal.
Enregistrer une préférence depuis le code
POST /v1/preferences enregistre une déclaration. L'écriture est un upsert indexé sur le canal, l'identifiant et la portée d'expéditeur : une nouvelle déclaration remplace celle en cours pour cette clé :
const result = await bird.preferences.create({
channel: "whatsapp",
handle: "+15550001234",
status: "revoked",
coverage: "non_transactional",
});
console.log(result.applied, result.preference?.id);result = client.preferences.create(
channel="whatsapp",
handle="+15550001234",
status="revoked",
coverage="non_transactional",
)
print(result.applied, result.preference.id)result, err := client.Preferences.Create(context.Background(), bird.PreferencesCreateParams{
Channel: bird.PreferenceChannelWhatsapp,
Handle: "+15550001234",
Status: bird.PreferenceStatusRevoked,
Coverage: bird.PreferenceCoverageNonTransactional,
})
if err != nil {
log.Fatal(err)
}
// A newer statement already on file answers Applied false instead of an
// error, with the surviving statement in Preference.
if result.Applied != nil && *result.Applied {
fmt.Println("opt-out recorded")
}$result = $bird->preferences->create(
channel: 'whatsapp',
handle: '+15550001234',
status: 'revoked',
coverage: 'non_transactional',
);
echo var_export($result->getApplied(), true);bird preferences create \
--channel whatsapp \
--handle +15550001234 \
--status revoked \
--coverage non_transactionalcurl -X POST https://us1.platform.bird.com/v1/preferences \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"channel":"whatsapp","handle":"+15550001234","status":"revoked","coverage":"non_transactional"}'Les déclarations sont ordonnées par la date à laquelle elles ont été faites, et non par la date de leur arrivée. API refuse une déclaration antérieure à celle en cours pour la clé et renvoie applied: false avec la déclaration qui a prévalu. Le refus reste dans l'historique de la clé.
Un 201 signifie que la clé n'avait aucun enregistrement et que cette déclaration en a créé un. Un 200 renvoie l'enregistrement en vigueur de la clé, que cette déclaration l'ait remplacé, répété ou ait été refusée.
Ce que vous pouvez annuler
Une préférence que vous avez enregistrée, vous pouvez la supprimer depuis l'onglet Preferences ou avec DELETE /v1/preferences/{preference_id} une fois que le destinataire vous demande de reprendre les envois.
Une déclaration faite par la personne elle-même lui appartient. Un désabonnement ou un mot-clé stop prend fin lorsqu'elle se réinscrit, et une suppression renvoie 422. Pour reprendre l'envoi de messages avec son consentement, enregistrez une déclaration granted portant consented_at, le moment où la personne a consenti. L'autorisation s'applique lorsque ce moment est postérieur à l'opt-out qu'elle annule : elle enregistre le changement d'avis plutôt que d'effacer la déclaration d'origine.
Une suppression est ordonnée comme toute autre déclaration, en utilisant l'heure de réception. Si l'enregistrement porte une déclaration faite après ce moment, la suppression est refusée et renvoyée avec applied: false accompagnée de l'enregistrement en vigueur.
Quand une erreur de livraison arrive en premier
Une erreur de livraison du fournisseur peut signaler un stop avant que Bird n'ait enregistré un événement correspondant. Respectez le choix du destinataire et examinez l'historique des préférences et des événements plutôt que de traiter l'absence d'enregistrement local comme une autorisation d'envoi.
Étapes suivantes
- Suppressions : les adresses que votre espace de travail bloque directement.
- Règles de mots-clés : les mots qui enregistrent une préférence sur vos numéros.
- Événements WhatsApp : le payload whatsapp.rejected produit par un envoi bloqué.
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