Suppressions
Een suppression is een adres dat je werkruimte niet zal berichten, vastgelegd met een bereik. Bird blokkeert een verzending naar een onderdrukt adres voordat deze WhatsApp bereikt.
Open de Suppressions-pagina om met de lijst te werken, of gebruik de API hieronder. Records die door ontvangers zijn opgegeven staan op het tabblad Preferences van dezelfde pagina en volgen andere regels.

Een business account onderdrukken
Maak vanuit het tabblad Suppressions een suppression aan voor een telefoonnummer en kies het business account waarvoor het geldt. Bird blokkeert berichten van dat account, en je andere accounts kunnen het nummer nog steeds berichten. De kolom Business account in de lijst vermeldt het account waarvoor een suppression geldt, of toont All accounts als het je hele werkruimte dekt.
POST /v1/whatsapp/suppressions legt hetzelfde vast vanuit code. waba is het account waarvoor je het wilt laten gelden; laat het weg om het adres te blokkeren voor je hele werkruimte, inclusief accounts die je later koppelt:
// Omit waba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same
// address for two accounts is two records.
const suppression = await bird.whatsapp.suppressions.add({
address: "+15550001234",
waba: "102290129340398",
});
console.log(suppression.id, suppression.applies_to);# Omit waba to block the address for the whole workspace, whichever account
# sends. With it, your other accounts keep reaching them, and the same
# address for two accounts is two records.
suppression = client.whatsapp.suppressions.add(
address="+15550001234",
waba="102290129340398",
)
print(suppression.id, suppression.applies_to)suppression, err := client.Whatsapp.Suppressions.Add(context.Background(), bird.WhatsappSuppressionsAddParams{
Address: "+15550001234",
// Omit Waba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same
// address for two accounts is two records.
Waba: &waba,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Id, suppression.AppliesTo)// Omit setWaba to block the address for the whole workspace, whichever account
// sends. With it, your other accounts keep reaching them, and the same address
// for two accounts is two records.
$suppression = $bird->whatsapp->suppressions->add(
(new WhatsAppSuppressionCreate())
->setAddress('+15550001234')
->setWaba('102290129340398'),
);
echo $suppression->getId(), ' ', $suppression->getAppliesTo();bird whatsapp suppressions add --address +5511977670804curl -X POST https://us1.platform.bird.com/v1/whatsapp/suppressions \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"+15550001234","waba":"102290129340398"}'
Eén bereik, één record
Een suppression heeft één bereik, dus hetzelfde adres geblokkeerd voor twee accounts levert twee records op in plaats van één. Om je hele werkruimte te dekken, doe je één aanroep zonder waba.
Een adres toevoegen dat al onderdrukt is voor dat bereik geeft 200 terug met het bestaande record, in plaats van een tweede aan te maken. Een nieuw record geeft 201 terug.
Een suppression wordt gesleuteld op het adres dat je vastlegt. Een ontvanger bereikt via telefoonnummer en dezelfde ontvanger bereikt via een business-scoped user ID zijn twee sleutels, dus het onderdrukken van het ene onderdrukt het andere niet. Leg beide vast als je dezelfde persoon op beide manieren aanspreekt.
Je suppressionlijst lezen
GET /v1/whatsapp/suppressions geeft de actieve suppressions terug, nieuwste eerst, als een cursorpagina. address filtert op prefix en negeert hoofdletters: een gedeeltelijke waarde matcht elk adres eronder, en een volledige waarde matcht alleen dat adres. reason beperkt tot een categorie, zoals manual voor de suppressions die je zelf hebt toegevoegd:
// address is a prefix, so a partial value matches every address under it.
const suppressions = await bird.whatsapp.suppressions.list({ address: "+1555" });
for (const suppression of suppressions.data ?? []) {
console.log(suppression.address, suppression.waba ?? "every account");
}# address is a prefix, so a partial value matches every address under it.
suppressions = client.whatsapp.suppressions.list(address="+1555")
for suppression in suppressions.data or []:
print(suppression.address, suppression.waba or "every account")for suppression, err := range client.Whatsapp.Suppressions.List(context.Background(), bird.WhatsappSuppressionsListParams{
Address: "+1555", // a prefix, so a partial value matches every address under it
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Address, suppression.Reason)
}// address is a prefix, so a partial value matches every address under it.
foreach ($bird->whatsapp->suppressions->list(['address' => '+1555']) as $suppression) {
echo $suppression->getAddress(), ' ', $suppression->getWaba() ?? 'every account', PHP_EOL;
}bird whatsapp suppressions listcurl "https://us1.platform.bird.com/v1/whatsapp/suppressions?address=%2B1555" \
-H "Authorization: Bearer $BIRD_API_KEY"De lijst bevat wat actief is; beëindigde records worden weggelaten. Een ontbrekend adres bewijst niet dat de werkruimte het nooit heeft onderdrukt; het record kan beëindigd zijn. Lees het op ID om het te bevestigen.
Eén record lezen
GET /v1/whatsapp/suppressions/{suppression_id} geeft zowel een beëindigd record als een actief record terug, met vermelding van wanneer het is beëindigd en waardoor:
// Resolves a record that has already ended, which the list leaves out.
const suppression = await bird.whatsapp.suppressions.get("was_01krdgeqcxet5s7t44vh8rt9mg");
console.log(suppression.reason, suppression.ended_at ?? "still in force");# Resolves a record that has already ended, which the list leaves out.
suppression = client.whatsapp.suppressions.get("was_01krdgeqcxet5s7t44vh8rt9mg")
print(suppression.reason, suppression.ended_at or "still in force")suppression, err := client.Whatsapp.Suppressions.Get(context.Background(), "was_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
fmt.Println(suppression.Reason, suppression.EndedAt)// Resolves a record that has already ended, which the list leaves out.
$suppression = $bird->whatsapp->suppressions->get('was_01krdgeqcxet5s7t44vh8rt9mg');
echo $suppression->getReason(), ' ', $suppression->getEndedAt()?->format(DATE_ATOM) ?? 'still in force';bird whatsapp suppressions get <suppression-id>curl https://us1.platform.bird.com/v1/whatsapp/suppressions/was_01krdgeqcxet5s7t44vh8rt9mg \
-H "Authorization: Bearer $BIRD_API_KEY"Een suppression beëindigen
De actie Delete op een suppressionrij beëindigt de suppression in plaats van deze te verwijderen. De blokkering stopt. Het record blijft leesbaar en toont wanneer het is beëindigd en door wie. DELETE /v1/whatsapp/suppressions/{suppression_id} doet hetzelfde en geeft 204 terug:
// Only a manual suppression can be ended; a recipient's own opt-out is
// theirs to reverse. The record is kept and still reads back by id.
await bird.whatsapp.suppressions.remove("was_01krdgeqcxet5s7t44vh8rt9mg");# Only a manual suppression can be ended; a recipient's own opt-out is
# theirs to reverse. The record is kept and still reads back by id.
client.whatsapp.suppressions.remove("was_01krdgeqcxet5s7t44vh8rt9mg")if err := client.Whatsapp.Suppressions.Remove(context.Background(), "was_01krdgeqcxet5s7t44vh8rt9mg"); err != nil {
log.Fatal(err)
}// Only a manual suppression can be ended; a recipient's own opt-out is theirs
// to reverse. The record is kept and still reads back by id.
$bird->whatsapp->suppressions->remove('was_01krdgeqcxet5s7t44vh8rt9mg');bird whatsapp suppressions remove <suppression-id> --yescurl -X DELETE https://us1.platform.bird.com/v1/whatsapp/suppressions/was_01krdgeqcxet5s7t44vh8rt9mg \
-H "Authorization: Bearer $BIRD_API_KEY"Een suppression die je zelf hebt toegevoegd heeft reden manual en kan worden beëindigd. De eigen opt-out van een ontvanger kan alleen door henzelf worden teruggedraaid, en de poging geeft 422 terug. Opnieuw aanroepen op een suppression die al beëindigd is slaagt en verandert niets, en een ID dat de werkruimte niet bevat geeft 404 terug.
Het beëindigen van een suppression vereist het ID ervan, dus zoek het eerst op via de lijst.
Nieuwe suppressions volgen
whatsapp_suppression.created wordt geactiveerd wanneer een suppression wordt vastgelegd, zodat je eigen systeem nieuwe blokkeringen kan zien zonder te pollen. De payload bevat:
- suppression_id, de identifier van het record.
- address, het onderdrukte nummer in E.164-formaat.
- waba, het account waartoe de blokkering beperkt is, of null wanneer het de hele werkruimte dekt.
- reason en workspace_id.
Er wordt geen event geactiveerd wanneer een suppression eindigt, dus lees de lijst opnieuw voordat je een kopie vertrouwt die je bewaart. Zie WhatsApp events voor de volledige payload.
Volgende stappen
- Preferences: de records die ontvangers opgeven, en welke je kunt terugdraaien.
- WhatsApp events: de whatsapp.rejected-payload die een geblokkeerde verzending oplevert.
- WhatsApp-berichten verzenden: de verzend-API en het asynchrone aflevermodel.
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