Regole per le keyword
Bird include il catalogo di keyword, quindi un destinatario che risponde STOP a uno dei tuoi numeri abilitati alla ricezione viene escluso senza alcuna configurazione da parte tua. START annulla l'esclusione. Una tua regola personalizzata sovrascrive il comportamento predefinito di Bird per l'ambito che copre.
Questa pagina illustra cosa riconosce Bird, come viene confrontato un messaggio in entrata e come modificare il testo o aggiungere keyword. La pagina Keywords è l'equivalente nella dashboard.

Cosa riconosce Bird per impostazione predefinita
Nove parole registrano un opt-out:
stop, stop all, stopall, unsubscribe, cancel, end, quit, revoke, optout
Due lo annullano: start e unstop.
Il confronto avviene sull'intero messaggio, non su una sottostringa. Poiché cancel e end sono keyword, questa distinzione è importante: "cancel my 3pm delivery" è un messaggio normale, non una revoca del consenso. Maiuscole/minuscole, accenti, spazi ripetuti e punteggiatura finale vengono ignorati, quindi Stop! e STOP corrispondono entrambi. La punteggiatura prima o all'interno della parola non viene ignorata, quindi #stop non corrisponde.
Dove le keyword non vengono confrontate
Una keyword all'interno di un messaggio di gruppo viene ignorata, quindi un partecipante non può fare opt-out rispondendo lì. Gestisci l'opt-out dichiarato da un membro del gruppo nella tua logica di invio.
Quando viene registrata la preferenza
La classificazione avviene in parallelo all'evento whatsapp.received, non prima. Un'integrazione in ascolto su quell'evento può quindi vedere arrivare un STOP prima che la preferenza che registra esista. Se il tuo handler reagisce al messaggio in entrata inviando qualcosa, rileggi i record del destinatario invece di dare per scontato l'ordine degli eventi.
Vedere cosa si applica
GET /v1/whatsapp/keyword-rules descrive come vengono gestite le risposte ai tuoi numeri. Senza filtri, restituisce il catalogo di Bird insieme a tutte le regole che hai creato. Restringi i risultati con country, waba, operation o scope:
- scope=system restituisce il catalogo di Bird, inclusa la regola predefinita che una tua regola sovrascrive.
- scope=workspace restituisce solo le tue regole.
const rules = await bird.whatsapp.keywordRules.list({ operation: "opt_out" });
for (const rule of rules.data ?? []) {
console.log(rule.scope, rule.effective_keywords);
}rules = client.whatsapp.keyword_rules.list(operation="opt_out")
for rule in rules.data or []:
print(rule.scope, rule.effective_keywords)rules, err := client.Whatsapp.KeywordRules.List(context.Background(), bird.WhatsappKeywordRulesListParams{
Operation: "opt_out", // omit for both operations, Bird's rules and your own
})
if err != nil {
log.Fatal(err)
}
for _, rule := range rules.Data {
fmt.Println(rule.Scope, rule.EffectiveKeywords)
}$rules = $bird->whatsapp->keywordRules->list(['operation' => 'opt_out']);
foreach ($rules->getData() ?? [] as $rule) {
echo $rule->getScope(), ' ', implode(',', $rule->getEffectiveKeywords() ?? []), PHP_EOL;
}bird whatsapp keyword-rules listcurl "https://us1.platform.bird.com/v1/whatsapp/keyword-rules?operation=opt_out" \
-H "Authorization: Bearer $BIRD_API_KEY"Le regole vengono restituite dalla più specifica, che è l'ordine in cui un messaggio in entrata viene confrontato con esse. Ciascuna include effective_keywords: l'insieme di Bird per quell'operazione e paese, più tutto ciò che hai aggiunto.
Per una tua regola senza country, effective_keywords mostra l'insieme globale di Bird, perché la regola non ha un paese e quello del mittente è sconosciuto finché non arriva un messaggio. Quella regola viene confrontata con l'insieme di Bird per il paese del mittente, che può essere più ampio. Imposta un country sulla tua regola per vedere esattamente con cosa corrispondono quei mittenti.
country è il paese del mittente, ricavato dal suo numero di telefono e non dal numero a cui ha scritto. È il segnale di paese che WhatsApp invia. Un mittente identificato da un user ID con ambito business non ha un paese associato, quindi un messaggio da esso salta le regole per paese e corrisponde a una regola globale.
Modificare la risposta
Le risposte predefinite di Bird sono corrette ma generiche. Per rispondere a tuo nome, crea una regola:
const rule = await bird.whatsapp.keywordRules.create({
operation: "opt_out",
country: "US", // the SENDER's country, from their own number
reply: "You're off the list. ACME Courier won't message you again.",
});
// effective_keywords is Bird's set plus any of your own.
console.log(rule.id, rule.effective_keywords);rule = client.whatsapp.keyword_rules.create(
operation="opt_out",
country="US", # the SENDER's country, from their own number
reply="You're off the list. ACME Courier won't message you again.",
)
# effective_keywords is Bird's set plus any of your own.
print(rule.id, rule.effective_keywords)rule, err := client.Whatsapp.KeywordRules.Create(context.Background(), bird.WhatsappKeywordRulesCreateParams{
Operation: "opt_out",
Country: bird.String("US"), // the SENDER's country, from their own number
Reply: bird.String("You're off the list. ACME Courier won't message you again."),
})
if err != nil {
log.Fatal(err)
}
// EffectiveKeywords is Bird's set plus any of your own.
fmt.Println(rule.Id, rule.EffectiveKeywords)$rule = $bird->whatsapp->keywordRules->create(
(new WhatsAppKeywordRuleCreate())
->setOperation('opt_out')
->setCountry('US')
->setReply("You're off the list. ACME Courier won't message you again."),
);
// getEffectiveKeywords() is Bird's set plus any of your own.
echo $rule->getId(), ' ', implode(',', $rule->getEffectiveKeywords() ?? []);bird whatsapp keyword-rules create \
--country US \
--keywords 'no more texts' \
--keywords 'remove me' \
--operation opt_out \
--reply "You're off the list. ACME Courier won't message you again." \
--waba 102290129340398curl -X POST https://us1.platform.bird.com/v1/whatsapp/keyword-rules \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"operation":"opt_out","country":"US","reply":"You'"'"'re off the list. ACME Courier won'"'"'t message you again."}'La tua regola sostituisce la risposta di Bird per quell'ambito e mantiene le keyword di Bird. I tuoi keywords sono aggiunte, non una sostituzione, quindi una keyword che Bird introduce in seguito inizia a corrispondere senza modifiche da parte tua.
Per non inviare nulla pur registrando l'opt-out, ometti reply quando crei la regola. Per silenziare una regola esistente, imposta reply a null in un body JSON nell'aggiornamento qui sotto; un flag CLI non può contenere null.

Aggiungere keyword personalizzate
// Omitting keywords leaves the set alone; an empty array clears your additions
// back to Bird's. reply: null switches the auto-reply off and still records
// the opt-out.
const rule = await bird.whatsapp.keywordRules.update("wkr_01m2kj8x4te9p0rr7e5w2n1abc", {
keywords: ["no more texts", "remove me"],
});
console.log(rule.effective_keywords);# Omitting keywords leaves the set alone; an empty list clears your additions
# back to Bird's.
rule = client.whatsapp.keyword_rules.update(
"wkr_01m2kj8x4te9p0rr7e5w2n1abc", keywords=["no more texts", "remove me"]
)
print(rule.effective_keywords)// Omitting keywords leaves the set alone; an empty slice clears your
// additions back to Bird's.
rule, err := client.Whatsapp.KeywordRules.Update(context.Background(),
"wkr_01m2kj8x4te9p0rr7e5w2n1abc", bird.WhatsappKeywordRulesUpdateParams{
Keywords: []string{"no more texts", "remove me"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(rule.EffectiveKeywords)// Omitting keywords leaves the set alone; an empty array clears your additions
// back to Bird's.
$rule = $bird->whatsapp->keywordRules->update(
'wkr_01m2kj8x4te9p0rr7e5w2n1abc',
(new WhatsAppKeywordRuleUpdate())->setKeywords(['no more texts', 'remove me']),
);
echo implode(',', $rule->getEffectiveKeywords() ?? []);bird whatsapp keyword-rules update <id> \
--keywords 'no more texts' \
--reply "You're off the list. ACME Courier won't message you again."curl -X PATCH https://us1.platform.bird.com/v1/whatsapp/keyword-rules/wkr_01m2kj8x4te9p0rr7e5w2n1abc \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keywords":["no more texts"]}'Omettere keywords lascia invariate le tue aggiunte. Inviare un array vuoto le riporta all'insieme di Bird.
Ambito delle regole e duplicati
Una regola può restringersi a un singolo WhatsApp Business Account con waba, a un singolo paese del mittente con country, a entrambi o a nessuno dei due. Puoi avere una sola regola per combinazione di operazione, paese e account. Una seconda scrittura per la stessa combinazione restituisce un errore di duplicato.
Bird rifiuta una regola che associa stop a opt_in, sia che la parola provenga dal catalogo di Bird sia da un'altra delle tue regole, in modo che una parola di opt-out non possa essere usata per concedere il consenso.
Eliminare una regola
Eliminare la tua regola trasferisce quell'ambito alla regola successiva nell'ordine di corrispondenza, che non è sempre una delle tue. L'ordine è:
- La tua regola per un account e un paese.
- La tua regola per l'account.
- La tua regola per il paese.
- La regola di Bird per il paese del mittente.
- La tua regola globale.
- La regola globale di Bird.
Eliminare la tua regola per un paese trasferisce quindi l'ambito alla regola di Bird per quel paese prima della tua regola globale:
// The next rule in the ladder answers the scope, which is another rule of yours if you hold a less specific one; STOP never stops working.
await bird.whatsapp.keywordRules.delete("wkr_01m2kj8x4te9p0rr7e5w2n1abc");# The next rule in the ladder answers the scope, which is another rule of yours if you hold a less specific one; STOP never stops working.
client.whatsapp.keyword_rules.delete("wkr_01m2kj8x4te9p0rr7e5w2n1abc")if err := client.Whatsapp.KeywordRules.Delete(context.Background(),
"wkr_01m2kj8x4te9p0rr7e5w2n1abc"); err != nil {
log.Fatal(err)
}// The next rule in the ladder answers the scope, which is another rule of yours if you hold a less specific one; STOP never stops working.
$bird->whatsapp->keywordRules->delete('wkr_01m2kj8x4te9p0rr7e5w2n1abc');bird whatsapp keyword-rules delete <id> --yescurl -X DELETE https://us1.platform.bird.com/v1/whatsapp/keyword-rules/wkr_01m2kj8x4te9p0rr7e5w2n1abc \
-H "Authorization: Bearer $BIRD_API_KEY"Eliminare una regola non interrompe il funzionamento di STOP. Riporta il testo e l'insieme di keyword alla regola successiva in quell'ordine.
Prossimi passi
- Preferenze: i record creati da una keyword e quali puoi annullare.
- Soppressioni: gli indirizzi che il tuo spazio di lavoro blocca direttamente.
- Opt-out e keyword per SMS: lo stesso meccanismo sull'altro canale, che include anche keyword di help e campagna.
Risorse correlate
Prosegui con la documentazione, le guide e gli esempi per questo argomento. Le risorse sono in inglese.
Guarda la guidaConnecting WhatsApp to Bird: from buying a number to a live channelComprendi il concettoWhat is the 24-hour customer service window on WhatsApp?Usa lo strumentoWhatsApp message builderEsplora la funzionalitàWhatsApp
Prova l'esercitazione e ottieni un brief di implementazione