WhatsApp-marketingtemplates
Een marketingtemplate bevat promotionele inhoud, zoals een aanbieding, productaankondiging of coupon. Zorg vóór verzending voor goedgekeurde inhoud, toestemming van de ontvanger en een duidelijke manier om antwoorden en afmeldingen te verwerken.
Voordat je verstuurt
De beheerde catalogus van Bird bevat helemaal geen marketingtemplate, dus een marketingverzending gebruikt altijd een template die je werkruimte zelf heeft gemaakt, op een eigen WhatsApp Business Account:
- Koppel een WhatsApp Business Account en een eigen nummer. Zie Telefoonnummer instellen.
- Maak een template met categorie
marketingen dien deze in ter beoordeling. Zie Templaterichtlijnen voor wat wordt goedgekeurd. - Verstuur vanaf een nummer op hetzelfde WhatsApp Business Account als de template.
fromis verplicht bij een marketingverzending, en een afzender op een ander account wordt geweigerd422E15023WhatsAppSenderWABAMismatchvoordat er iets in rekening wordt gebracht.
Een marketingtemplate versturen
POST /v1/whatsapp/messages met from ingesteld en een template-object met je eigen slug:
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"
}
]
}
]
}
}'- Bodyparameters hebben een naam, net als bij utility. Elke parameter heeft een
name, en de volgorde in de array heeft geen betekenis. - De code van een couponknop is een gewone
text-parameter, zoals die op de knop hierboven. Er is geen apart parametertype voor couponcodes. - Een
gif-header neemt eengif-parameter, nietvideoofimage. Marketing is de enige categorie die een geanimeerde-GIF-header accepteert. - De waarden van een carrousel staan op
cards, nietparameters, en een verzending moet precies het aantal kaarten bevatten waarmee de template is goedgekeurd.
Bird stuurt elke marketingverzending automatisch naar Meta's Marketing Messages API; je hoeft je niet aan te melden en er is geen schakelaar per verzending. De onboardingstatus van het zakelijke account bij die API bepaalt Meta's optimalisaties, niet de bezorging zelf, met één uitzondering: een gif-header vereist een onboarded account, anders mislukt de verzending bij WhatsApp. Zie Marketingtemplates voor de accountstatus, wat onboarding ontsluit en waar marketing per land beperkt is.
Opt-outs
Wanneer Bird een geldig marketing-stop-event van Meta ontvangt, registreert het een ontvangersvoorkeur voor dat zakelijke account. Deze voorkeur staat los van een algehele berichtonderdrukking. Controleer beide records voordat je verzendt. Een bezorgfout kan binnenkomen vóór het bijbehorende voorkeur-event; bewaar de keuze van de ontvanger en onderzoek die geschiedenis in plaats van opnieuw te proberen. Zie Voorkeuren voor het vastleggen en uitlezen van deze records.
Kosten
Gebruik het gepubliceerde marketingtarief voor de bestemming en valuta. Bird brengt de uitgaande kosten in rekening vóór verzending; een factureerbare bezorging of leesuitkomst kan Meta's kosten toevoegen. Zie Kosten en facturering en WhatsApp-tarieven.
Waar je op moet letten
- Meta hercategoriseert naar marketing, nooit eruit, en dat is een prijswijziging. Een template die Meta inhoudelijk promotioneel vindt, wordt
marketingongeacht de categorie die je hebt ingediend, en de verzending gaat gewoon door tegen de nieuwe, hogere prijs. Je kunt dit niet weigeren en de categorie niet terugzetten; de oplossing is een nieuwe template. 131049is een bezorgpauze, geen door jou ingestelde limiet, en opnieuw proberen maakt het erger. Meta meldt131049zowel voor de algemene pauze in de VS als voor een marketinglimiet per gebruiker, en het eigen advies is om ongeveer een dag te wachten voordat je opnieuw verstuurt. Eerder opnieuw versturen kan het account langer onbereikbaar maken voor die ontvanger en vertekent je eigen bezorgpercentage. Bird meldt de fout alsrate_limited.131050betekent dat de ontvanger "Offers and announcements" heeft uitgeschakeld, en de verzending mag nooit opnieuw worden geprobeerd. Meta accepteert de verzending en weigert vervolgens te bezorgen. De juiste reactie is het pad voor berichtvoorkeuren, niet een nieuwe verzending: onderdruk de ontvanger zelf, of wacht tot deze bezorging weer inschakelt, wat Bird te weten komt via hetzelfde voorkeurmechanisme dat de stop meldde. Zie Voorkeuren.132015en132016zijn templatepauzering, geen ontvangersprobleem.132015is een pauze vanwege lage kwaliteit;132016is permanente uitschakeling na herhaalde pauzes, en de enige oplossing is een nieuwe template met andere inhoud. Controleer de status van de taal zelf in plaats van die van de template, want een gepauzeerde taal stopt onmiddellijk met verzenden.- Een afzender op het verkeerde WhatsApp Business Account wordt geweigerd voordat er iets in rekening wordt gebracht.
frommoet op hetzelfde account staan als de template, anders mislukt de verzending422E15023WhatsAppSenderWABAMismatch.
Volgende stappen
- WhatsApp-templates: door de catalogus bladeren en het gedeelde send-by-template-contract
- Marketingtemplates: de Marketing Messages API, onboardingstatus en waar marketing beperkt is
- Voorkeuren: ontvangersverklaringen vastleggen en uitlezen
- Utilitytemplates: orderupdates, afspraakherinneringen en accountmeldingen
Gerelateerde bronnen
Ga verder met de documentatie, handleidingen en voorbeelden voor dit onderwerp.