WhatsApp-Marketing-Templates
Ein Marketing-Template enthält werbliche Inhalte wie ein Angebot, eine Produktankündigung oder einen Gutschein. Bereiten Sie vor dem Versand genehmigte Inhalte, die Einwilligung der Empfänger und einen klaren Umgang mit Antworten und Opt-outs vor.
Bevor Sie senden
Der verwaltete Katalog von Bird enthält kein einziges Marketing-Template. Ein Marketing-Versand verwendet daher immer ein Template, das Ihr Workspace erstellt hat, auf einem eigenen WhatsApp Business Account:
- Verbinden Sie ein WhatsApp Business Account und eine eigene Nummer. Siehe Einrichtung der Telefonnummer.
- Erstellen Sie ein Marketing-Template und reichen Sie es zur Prüfung ein. Siehe Template-Richtlinien für die Freigabekriterien.
- Senden Sie von einer Nummer auf demselben WhatsApp Business Account wie das Template.
fromist bei einem Marketing-Versand erforderlich, und ein Absender auf einem anderen Account wird422E15023WhatsAppSenderWABAMismatchabgelehnt, bevor etwas berechnet wird.
Ein Marketing-Template senden
POST /v1/whatsapp/messages mit gesetztem from und einem template-Objekt, das Ihren eigenen Slug benennt:
const msg = await bird.whatsapp.send({
to: "+16505551234",
from: "+13125550101",
template: {
slug: "summer_sale",
language: "en",
components: [
{
type: "header",
parameters: [{ type: "image", url: "https://cdn.example.com/banners/summer.png" }],
},
{ type: "body", parameters: [{ type: "text", name: "first_name", text: "Pablo" }] },
{ type: "button", parameters: [{ type: "text", text: "SUMMER25" }] },
],
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+16505551234",
from_="+13125550101",
template="summer_sale",
language="en",
components=[
{
"type": "header",
"parameters": [{"type": "image", "url": "https://cdn.example.com/banners/summer.png"}],
},
{"type": "body", "parameters": [{"type": "text", "name": "first_name", "text": "Pablo"}]},
{"type": "button", "parameters": [{"type": "text", "text": "SUMMER25"}]},
],
)
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)
}
name := "Pablo"
nameKey := "first_name"
banner := "https://cdn.example.com/banners/summer.png"
coupon := "SUMMER25"
components := []bird.WhatsAppMessageTemplateComponent{
{Type: "header", Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{{Type: "image", Url: &banner}}},
{Type: "body", Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{{Type: "text", Name: &nameKey, Text: &name}}},
{Type: "button", Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{{Type: "text", Text: &coupon}}},
}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+16505551234",
From: "+13125550101",
Template: "summer_sale",
Language: "en",
Components: components,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$components = [
(new WhatsAppMessageTemplateComponent())
->setType('header')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('image')->setUrl('https://cdn.example.com/banners/summer.png'),
]),
(new WhatsAppMessageTemplateComponent())
->setType('body')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('first_name')->setText('Pablo'),
]),
(new WhatsAppMessageTemplateComponent())
->setType('button')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setText('SUMMER25'),
]),
];
$message = $bird->whatsapp->send(
to: '+16505551234',
from: '+13125550101',
template: 'summer_sale',
language: 'en',
components: $components,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--from +13125550101 \
--components '[{"parameters":[{"type":"image","url":"https://cdn.example.com/banners/summer.png"}],"type":"header"},{"parameters":[{"name":"first_name","text":"Pablo","type":"text"}],"type":"body"},{"parameters":[{"text":"SUMMER25","type":"text"}],"type":"button"}]' \
--language en \
--template summer_sale \
--to +16505551234curl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+16505551234",
"from": "+13125550101",
"template": {
"slug": "summer_sale",
"language": "en",
"components": [
{
"type": "header",
"parameters": [
{
"type": "image",
"url": "https://cdn.example.com/banners/summer.png"
}
]
},
{
"type": "body",
"parameters": [
{
"type": "text",
"name": "first_name",
"text": "Pablo"
}
]
},
{
"type": "button",
"parameters": [
{
"type": "text",
"text": "SUMMER25"
}
]
}
]
}
}'- Body-Parameter sind benannt, genau wie bei Utility. Jeder Parameter trägt einen
name, und die Reihenfolge im Array hat keine Bedeutung. - Der Code eines Gutschein-Buttons ist ein gewöhnlicher
text-Parameter, wie der auf dem Button oben. Es gibt keinen separaten Parametertyp für Gutscheincodes. - Ein
gif-Header erwartet einengif-Parameter, nichtvideooderimage. Marketing ist die einzige Kategorie, die einen animierten GIF-Header akzeptiert. - Carousel-Werte gehören auf
cards, nicht aufparameters, und ein Versand muss exakt die Anzahl an Karten liefern, mit der das Template genehmigt wurde.
Bird leitet jeden Marketing-Versand automatisch an Metas Marketing Messages API weiter; Sie müssen sich nicht anmelden, und es gibt keinen Schalter pro Versand. Der Onboarding-Status des Business-Accounts bei diesem API steuert Metas Optimierungen, nicht die Zustellung selbst. Ausnahmen sind gif-Header und Templates mit Höchstpreis, die einen Account mit abgeschlossenem Onboarding erfordern. Siehe Marketing-Templates für den Account-Status, was Onboarding freischaltet und wo Marketing länderspezifisch eingeschränkt ist.
Opt-outs
Wenn Bird ein gültiges Marketing-Stopp-Ereignis von Meta empfängt, speichert es eine Empfängerpräferenz für diesen Business-Account. Diese Präferenz ist getrennt von einer Unterdrückung aller Nachrichten. Prüfen Sie beide Einträge vor dem Senden. Ein Zustellfehler kann vor dem zugehörigen Präferenzereignis eintreffen. Respektieren Sie in diesem Fall die Entscheidung des Empfängers und untersuchen Sie den Verlauf, anstatt den Versand erneut zu versuchen. Siehe Präferenzen zum Erfassen und Abfragen dieser Einträge.
Kosten
Verwenden Sie den veröffentlichten Marketing-Tarif für das Zielland und die Währung, oder legen Sie einen Höchstpreis fest, damit Meta eine variable Zustellgebühr bis zu Ihrer Obergrenze berechnet. Bird berechnet die eigene Versandgebühr vor der Übermittlung; ein abrechenbares Zustell- oder Leseergebnis kann Metas Gebühr hinzufügen. Siehe Kosten und Abrechnung und WhatsApp-Preise.
Worauf Sie achten sollten
- Metas Kategorie bestimmt den Preis. Meta kann werbliche Inhalte nach der Genehmigung als Marketing umkategorisieren. Prüfen Sie vor dem Senden die aktuelle Kategorie jeder Sprache; ein Versand mit Höchstpreis erfordert die Kategorie Marketing. Siehe Metas Prüfverfahren für Kategorien, wenn Sie mit der Einstufung nicht einverstanden sind.
131049ist eine Zustellpause, keine von Ihnen konfigurierte Begrenzung der Anfragerate, und erneutes Senden verschlimmert es. Meta meldet131049sowohl bei seiner generellen US-Pause als auch bei einem benutzerbezogenen Marketing-Limit, und Metas eigene Empfehlung ist, etwa einen Tag mit dem erneuten Senden zu warten. Früheres erneutes Senden kann den Account für diesen Empfänger länger unerreichbar machen und verfälscht Ihre eigene Zustellrate. Bird meldet den Fehler alsrate_limited.131050bedeutet, dass der Empfänger "Offers and announcements" deaktiviert hat, und der Versand darf niemals erneut versucht werden. Meta nimmt den Versand an und lehnt dann die Zustellung ab. Die richtige Reaktion ist der Messaging-Präferenzen-Pfad, kein erneuter Versand: Unterdrücken Sie den Empfänger selbst, oder warten Sie, bis er die Zustellung wieder aktiviert, worüber Bird über denselben Präferenzmechanismus informiert wird, der den Stopp gemeldet hat. Siehe Präferenzen.132015und132016bedeuten Template-Pausierung, kein Empfängerproblem.132015ist eine Pause wegen niedriger Qualität;132016ist eine dauerhafte Deaktivierung nach wiederholten Pausen, und die einzige Lösung ist ein neues Template mit anderem Inhalt. Prüfen Sie den Status der jeweiligen Sprache statt den des Templates, da eine pausierte Sprache den Versand sofort stoppt.- Ein Absender auf dem falschen WhatsApp Business Account wird vor jeder Berechnung abgelehnt.
frommuss auf demselben Account wie das Template liegen, sonst schlägt der Versand fehl422E15023WhatsAppSenderWABAMismatch.
Nächste Schritte
- WhatsApp-Templates: Katalog durchsuchen und der gemeinsame Vertrag für den Template-Versand
- Marketing-Templates: die Marketing Messages API, Onboarding-Status und wo Marketing eingeschränkt ist
- Präferenzen: Empfängeraussagen erfassen und abfragen
- Utility-Templates: Bestellupdates, Terminbenachrichtigungen und Kontohinweise
Verwandte Ressourcen
Weiter mit der Dokumentation, Anleitungen und Beispielen zu diesem Thema.