Szablony marketingowe WhatsApp
Szablon marketingowy zawiera treści promocyjne, takie jak oferta, ogłoszenie produktowe lub kupon. Przed wysyłką przygotuj zatwierdzoną treść, zgodę odbiorcy oraz jasny sposób obsługi odpowiedzi i rezygnacji.
Zanim wyślesz
Zarządzany katalog Bird nie zawiera żadnego szablonu marketingowego, więc wysyłka marketingowa zawsze korzysta z szablonu utworzonego w Twoim obszarze roboczym, na własnym koncie WhatsApp Business Account:
- Podłącz własne konto WhatsApp Business Account i własny numer. Zobacz Konfiguracja numeru telefonu.
- Utwórz szablon z kategorią marketing i prześlij go do recenzji. Zobacz Wytyczne dotyczące szablonów, aby dowiedzieć się, co przechodzi weryfikację.
- Wysyłaj z numeru na tym samym koncie WhatsApp Business Account co szablon. from jest wymagany przy wysyłce marketingowej, a nadawca z innego konta zostanie odrzucony 422 E15023 WhatsAppSenderWABAMismatch zanim cokolwiek zostanie naliczone.
Wysyłanie szablonu marketingowego
POST /v1/whatsapp/messages z ustawionym from i obiektem template wskazującym Twój własny 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"
}
]
}
]
}
}'- Parametry body są nazwane, tak samo jak w szablonach utility. Każdy parametr zawiera name, a kolejność w tablicy nie ma znaczenia.
- Kod przycisku kuponowego to zwykły parametr text, taki jak ten na przycisku powyżej. Nie istnieje osobny typ parametru dla kodu kuponu.
- Nagłówek gif przyjmuje parametr gif, a nie video ani image. Marketing to jedyna kategoria akceptująca nagłówek z animowanym GIF-em.
- Wartości karuzeli trafiają do cards, a nie parameters, a wysyłka musi zawierać dokładnie tyle kart, z iloma szablon został zatwierdzony.
Bird automatycznie kieruje każdą wysyłkę marketingową do Marketing Messages API od Meta; nie musisz tego włączać i nie ma przełącznika per wysyłka. Status onboardingu konta biznesowego w tym API warunkuje optymalizacje Meta, a nie samą dostarczalność, z jednym wyjątkiem: nagłówek gif wymaga konta po onboardingu, w przeciwnym razie wysyłka kończy się błędem na etapie WhatsApp. Zobacz Szablony marketingowe, aby poznać stan konta, co odblokowuje onboarding i gdzie marketing jest ograniczony według kraju.
Rezygnacje
Gdy Bird otrzyma od Meta prawidłowe zdarzenie zatrzymania marketingu, zapisuje preferencję odbiorcy dla danego konta firmowego. Ta preferencja jest niezależna od blokady wszystkich wiadomości do tego odbiorcy. Przed wysyłką sprawdź oba wpisy. Błąd doręczenia może nadejść przed odpowiadającym mu zdarzeniem preferencji; zachowaj wybór odbiorcy i zbadaj tę historię zamiast ponawiać wysyłkę. Zobacz Rezygnacje, aby dowiedzieć się, jak zapisywać i odczytywać te wpisy.
Koszt
Zastosuj opublikowaną stawkę marketingową dla danego kierunku i waluty. Bird pobiera opłatę za wysyłkę przed przekazaniem wiadomości; rozliczane zdarzenie doręczenia lub odczytu może doliczyć opłatę Meta. Zobacz Koszty i rozliczenia oraz cennik WhatsApp.
Na co uważać
- Meta przekategoryzowuje do marketingu, nigdy z niego, a to zmiana ceny. Szablon, który Meta uzna za promocyjny w treści, staje się marketing niezależnie od przesłanej kategorii, a wysyłka nadal wychodzi po nowej, wyższej cenie. Nie ma możliwości rezygnacji ani edycji kategorii z powrotem; jedynym rozwiązaniem jest nowy szablon.
- 131049 to wstrzymanie dostarczania, a nie skonfigurowany przez Ciebie limit, i ponowne próby pogarszają sytuację. Meta zgłasza 131049 zarówno dla ogólnego wstrzymania w USA, jak i dla limitu marketingowego na użytkownika, a zalecenie Meta to odczekanie mniej więcej doby przed ponowną wysyłką. Wcześniejsza ponowna wysyłka może sprawić, że konto będzie niedostępne dla tego odbiorcy na dłużej i zaburza Twoją dostarczalność. Bird zgłasza ten błąd jako rate_limited.
- 131050 oznacza, że odbiorca wyłączył "Offers and announcements", i nigdy nie wolno ponawiać wysyłki. Meta przyjmuje wysyłkę, a następnie odmawia dostarczenia. Prawidłowa reakcja to ścieżka preferencji wiadomości, a nie ponowna wysyłka: zablokuj odbiorcę samodzielnie lub poczekaj, aż ponownie włączy dostarczanie, o czym Bird dowiaduje się przez ten sam mechanizm preferencji, który zgłosił zatrzymanie. Zobacz Rezygnacje.
- 132015 i 132016 to wstrzymanie szablonu, a nie problem z odbiorcą. 132015 to wstrzymanie z powodu niskiej jakości; 132016 to trwałe wyłączenie po wielokrotnych wstrzymaniach, a jedynym rozwiązaniem jest nowy szablon z inną treścią. Sprawdzaj status samego języka, a nie szablonu, ponieważ wstrzymany język natychmiast blokuje wysyłkę.
- Nadawca na niewłaściwym koncie WhatsApp Business Account zostaje odrzucony przed naliczeniem opłaty. from musi znajdować się na tym samym koncie co szablon, w przeciwnym razie wysyłka kończy się błędem 422 E15023 WhatsAppSenderWABAMismatch.
Następne kroki
- Szablony WhatsApp: przeglądanie katalogu i wspólny kontrakt wysyłki przez szablon
- Szablony marketingowe: Marketing Messages API, status onboardingu i gdzie marketing jest ograniczony
- Rezygnacje: rejestrowanie i odczytywanie blokad oraz preferencji
- Szablony utility: aktualizacje zamówień, przypomnienia o wizytach i powiadomienia o koncie
Powiązane zasoby
Kontynuuj z dokumentacją, przewodnikami i przykładami dotyczącymi tego tematu. Zasoby są w języku angielskim.
Obejrzyj przewodnikConnecting WhatsApp to Bird: from buying a number to a live channelZrozum koncepcjęWhat is the 24-hour customer service window on WhatsApp?Użyj narzędziaWhatsApp message builderPoznaj możliwościWhatsApp
Wypróbuj ćwiczenie i uzyskaj brief wdrożeniowy