WhatsApp यूटिलिटी टेम्पलेट
यूटिलिटी टेम्पलेट उस चीज़ का फ़ॉलो-अप करता है जो प्राप्तकर्ता पहले ही कर चुका है: कोई ऑर्डर, भुगतान, बुकिंग या साइन-इन। Bird के कैटलॉग में इनमें से आठ उपलब्ध हैं, जिनमें bird_signin_alert और bird_delivery_update शामिल हैं। किसी slug की कैटेगरी उसके नाम से नहीं, बल्कि टेम्पलेट लिस्ट से लें: bird_signin_alert ऑथेंटिकेशन टेम्पलेट जैसा दिखता है लेकिन है नहीं, यह यूटिलिटी है।
भेजने से पहले
एक प्रबंधित कैटलॉग टेम्पलेट चुनें या अपने कनेक्टेड बिज़नेस अकाउंट पर खुद एक बनाएं।
Bird के स्टॉक्ड कैटलॉग टेम्पलेट भेजने के लिए आपको कोई वेरिफ़िकेशन नहीं चाहिए, ठीक ऑथेंटिकेशन की तरह। अपना खुद का यूटिलिटी टेम्पलेट बनाने के लिए भी कोई वेरिफ़िकेशन नहीं चाहिए: ऑथेंटिकेशन के विपरीत, Meta का बिज़नेस-वेरिफ़िकेशन गेट यूटिलिटी पर कभी लागू नहीं होता, इसलिए आप अनवेरिफ़ाइड वर्कस्पेस पर यूटिलिटी टेम्पलेट बना और एडिट कर सकते हैं। वेरिफ़िकेशन और क्या अनलॉक करता है, इसके लिए WhatsApp बिज़नेस वेरिफ़िकेशन देखें।
to एक E.164 फ़ोन नंबर या बिज़नेस-स्कोप्ड यूज़र ID हो सकता है। यूटिलिटी टेम्पलेट में कोई OTP बटन नहीं होता, इसलिए इसे ऑथेंटिकेशन की तरह सिर्फ़ फ़ोन-नंबर वाले प्राप्तकर्ता की ज़रूरत नहीं होती।
हर मैनेज्ड कैटलॉग यूटिलिटी टेम्पलेट केवल en में on_missing_language: fail के साथ रजिस्टर्ड है। कैटलॉग में उपलब्ध न होने वाली भाषा माँगने पर अंग्रेज़ी या किसी और भाषा में फ़ॉलबैक होने के बजाय भेजना विफल हो जाता है।
यूटिलिटी टेम्पलेट भेजना
कैटलॉग slug नाम देने वाले template ऑब्जेक्ट के साथ POST /v1/whatsapp/messages:
const msg = await bird.whatsapp.send({
to: "+16505551234",
template: {
slug: "bird_order_confirmation",
language: "en",
components: [
{
type: "body",
parameters: [
{ type: "text", name: "ref", text: "A1B2C3D4" },
{ type: "text", name: "amount", text: "USD 49.99" },
],
},
],
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+16505551234",
template="bird_order_confirmation",
language="en",
components=[
{
"type": "body",
"parameters": [
{"type": "text", "name": "ref", "text": "A1B2C3D4"},
{"type": "text", "name": "amount", "text": "USD 49.99"},
],
}
],
)
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)
}
ref := "A1B2C3D4"
amount := "USD 49.99"
refName := "ref"
amountName := "amount"
components := []bird.WhatsAppMessageTemplateComponent{{
Type: "body",
Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{
{Type: "text", Name: &refName, Text: &ref},
{Type: "text", Name: &amountName, Text: &amount},
},
}}
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+16505551234",
Template: "bird_order_confirmation",
Language: "en",
Components: components,
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)
}$components = [
(new WhatsAppMessageTemplateComponent())
->setType('body')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('ref')->setText('A1B2C3D4'),
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setName('amount')->setText('USD 49.99'),
]),
];
$message = $bird->whatsapp->send(
to: '+16505551234',
template: 'bird_order_confirmation',
language: 'en',
components: $components,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--components '[{"parameters":[{"name":"ref","text":"A1B2C3D4","type":"text"},{"name":"amount","text":"USD 49.99","type":"text"}],"type":"body"}]' \
--language en \
--template bird_order_confirmation \
--to +16505551234{
"name": "whatsapp_send",
"arguments": {
"template": {
"components": [
{
"parameters": [
{
"name": "ref",
"text": "A1B2C3D4",
"type": "text"
},
{
"name": "amount",
"text": "USD 49.99",
"type": "text"
}
],
"type": "body"
}
],
"language": "en",
"slug": "bird_order_confirmation"
},
"to": "+16505551234"
}
}curl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+16505551234",
"template": {
"slug": "bird_order_confirmation",
"language": "en",
"components": [
{
"type": "body",
"parameters": [
{
"type": "text",
"name": "ref",
"text": "A1B2C3D4"
},
{
"type": "text",
"name": "amount",
"text": "USD 49.99"
}
]
}
]
}
}'किसी भी मैनेज्ड टेम्पलेट की तरह, from छोड़ दें: Bird कैटेगरी और रीजन से भेजने वाला नंबर चुनता है, और इसे सेट करने पर 422 E15018 WhatsAppSenderNotAllowed लौटता है। अपना खुद का यूटिलिटी टेम्पलेट बनाकर भेजना किसी भी authored send की तरह काम करता है; सामान्य कॉन्ट्रैक्ट के लिए टेम्पलेट से भेजना देखें।
वेरिएबल भरना
यूटिलिटी पैरामीटर नामित (named) होते हैं, ऑथेंटिकेशन के एकल positional कोड के उलट। हर पैरामीटर में एक name होता है, और नामित पैरामीटर का अरे में क्रम कोई मायने नहीं रखता। हर उस ब्लॉक के लिए एक components एंट्री भेजें जिसमें वास्तव में कोई प्लेसहोल्डर हो; बिना वेरिएबल वाली बॉडी के लिए कोई components एंट्री नहीं चाहिए।
URL बटन एक अपवाद है: इसका वेरिएबल हमेशा positional {{1}} होता है, और भेजते समय पूरे पते के बजाय केवल बेयर वैल्यू दी जाती है:
कोड उदाहरण
{ "type": "button", "parameters": [{ "type": "text", "text": "A-4192" }] }कंपोनेंट, sub_type, और भेजते समय components टेम्पलेट के घोषित प्लेसहोल्डर से कैसे मैप होते हैं, इसके साझा नियमों के लिए टेम्पलेट से भेजना और कंपोनेंट और पैरामीटर देखें।
लागत
खुली कस्टमर सर्विस विंडो के अंदर डिलीवर हुआ utility टेम्पलेट Meta की मुफ़्त दर के लिए योग्य हो सकता है। Bird का आउटबाउंड शुल्क मैसेज प्रोसेसिंग के दौरान, सबमिशन से पहले लिया जाता है। बाद में मिलने वाला delivered या read कॉलबैक तय करता है कि Meta शुल्क लागू होता है या नहीं। कुल लागत का अनुमान लगाते समय दोनों घटकों की जाँच करें।
भेजने पर शुल्क कब लगता है यह जानने के लिए लागत और बिलिंग देखें, और दरों के लिए WhatsApp मूल्य निर्धारण देखें।
ध्यान देने योग्य बातें
- Meta अपनी पहल पर किसी यूटिलिटी टेम्पलेट को मार्केटिंग में रीकैटेगराइज़ कर सकता है, और मैसेज नई, ऊँची कीमत पर भेजा जाता रहता है। जिस बिज़नेस को Meta पहले ही गलत कैटेगराइज़ेशन की चेतावनी दे चुका है, उसे अप्रैल 2025 से कोई पूर्व सूचना नहीं मिलती; बदलाव तुरंत लागू हो जाता है। यूटिलिटी टेम्पलेट की कॉपी में प्रमोशनल भाषा, ऑफ़र या अपसेल न रखें, क्योंकि यही इस बदलाव को ट्रिगर करता है। क्या प्रमोशनल माना जाता है, इसके लिए टेम्पलेट गाइडलाइन देखें।
- मार्केटिंग के बाहर gif हेडर या copy_code बटन अस्वीकार कर दिया जाता है। दोनों केवल-मार्केटिंग कंपोनेंट हैं; इनमें से कोई भी यूटिलिटी टेम्पलेट पर डिक्लेयर करने पर विफल होता है।
- authored send में शुल्क लगने से पहले पैरामीटर काउंट की जाँच नहीं होती। अपने खुद के टेम्पलेट पर ग़लत संख्या में पैरामीटर भेजें तो मैसेज स्वीकार और चार्ज हो जाता है, फिर Meta द्वारा रिजेक्ट कर दिया जाता है। मैनेज्ड कैटलॉग sends में यह कमी नहीं है।
- ग़लत WhatsApp Business Account पर मौजूद सेंडर किसी भी शुल्क से पहले अस्वीकार कर दिया जाता है। from को टेम्पलेट के समान अकाउंट पर होना चाहिए; अन्यथा भेजने का अनुरोध 422 E15023 WhatsAppSenderWABAMismatch के साथ विफल होता है।
अगले कदम
- WhatsApp टेम्पलेट: कैटलॉग ब्राउज़ करना और टेम्पलेट से भेजने का साझा कॉन्ट्रैक्ट
- ऑथेंटिकेशन टेम्पलेट: वन-टाइम सत्यापन कोड और इसे बनाने के लिए सत्यापन गेट
- मार्केटिंग टेम्पलेट: प्रमोशनल sends और इसे बनाने के लिए ज़रूरी अकाउंट
संबंधित संसाधन
इस विषय के लिए डॉक्यूमेंटेशन, गाइड और उदाहरणों के साथ आगे बढ़ें। संसाधन अंग्रेज़ी में हैं।
गाइड देखेंConnecting WhatsApp to Bird: from buying a number to a live channelकॉन्सेप्ट समझेंWhat is the 24-hour customer service window on WhatsApp?टूल का उपयोग करेंWhatsApp message builderक्षमता जानेंWhatsApp
अभ्यास करें और इम्प्लीमेंटेशन ब्रीफ़ पाएँ