WhatsApp टेम्पलेट
बिज़नेस की ओर से शुरू किए गए WhatsApp संदेश पूर्व-अनुमोदित टेम्पलेट का उपयोग करते हैं। टेम्पलेट में निश्चित टेक्स्ट और वेरिएबल होते हैं, इसलिए भेजते समय केवल वैल्यू देनी होती हैं जैसे OTP कोड या ऑर्डर नंबर।
Bird एक प्रबंधित कैटलॉग प्रदान करता है, उसकी सामग्री को WhatsApp के साथ पंजीकृत करता है, और इसे Bird के अपने नंबरों से भेजता है; इसके slug bird_ से शुरू होते हैं। जिस वर्कस्पेस ने अपना खुद का नंबर कनेक्ट किया है, वह अपने WhatsApp Business Account पर भी टेम्प्लेट बना सकता है। Templates पेज वर्कस्पेस द्वारा भेजे जा सकने वाले सभी टेम्प्लेट और उनका रेंडर दिखाता है।

डैशबोर्ड में टेम्पलेट ब्राउज़ करना
WhatsApp > Templates पर Templates खोलें। Your templates में इस वर्कस्पेस द्वारा बनाए गए टेम्पलेट होते हैं; All templates में Bird-प्रबंधित कैटलॉग भी शामिल होता है। नाम से खोजें या स्टेटस और कैटेगरी से फ़िल्टर करें, और फ़िल्टर के बगल वाले टॉगल से कार्ड ग्रिड और लिस्ट व्यू के बीच स्विच करें।
लिस्ट व्यू में हर पंक्ति वे फ़ील्ड दिखाती है जो टेम्पलेट चुनने और भेजने के लिए ज़रूरी हैं:
- Status: टेम्पलेट कुल मिलाकर भेजने योग्य है या नहीं। प्रबंधित कैटलॉग टेम्पलेट active दिखाते हैं; आपके अपने टेम्पलेट की अनुमोदन स्थिति दिखती है। यह सुनिश्चित करने के लिए कि आवश्यक भाषा उपलब्ध है, भाषा सूची जाँचें।
- Name: डिस्प्ले लेबल, जिसके नीचे टेम्पलेट का slug होता है। भेजने के लिए slug का उपयोग करें।
- Languages: टेम्पलेट जिन भाषाओं में रजिस्टर्ड है, जैसे अंग्रेज़ी और डच।
- Category: authentication, utility, या marketing। कैटेगरी यह तय करती है कि WhatsApp संदेश को कैसे संभालता है, प्रबंधित टेम्पलेट किस Bird नंबर से भेजा जाता है, और गंतव्य देश के साथ मिलकर कीमत क्या होगी।
- WABA: कैटलॉग टेम्पलेट के लिए Bird-managed। आपके अपने टेम्पलेट में वह WhatsApp Business Account दिखता है जिस पर वह रखा है, और वह केवल उसी अकाउंट के नंबर से भेजा जाता है।
- Updated: टेम्पलेट में अंतिम बदलाव कब हुआ।
टेम्पलेट का विवरण खोलने के लिए किसी पंक्ति पर क्लिक करें।
टेम्पलेट में क्या होता है
डिटेल व्यू मैसेज बॉडी, वेरिएबल और बटन को WhatsApp-शैली के प्रीव्यू में रेंडर करता है।
डिटेल में POST /v1/whatsapp/messages के लिए एक cURL उदाहरण भी होता है, जो रीजनल होस्ट और टेम्पलेट की उदाहरण वैल्यू का उपयोग करता है। भेजने से पहले API कुंजी, प्राप्तकर्ता और वेरिएबल वैल्यू बदलें।
यह उदाहरण भेजने के लिए ज़रूरी संरचना देखने का सबसे तेज़ तरीका है। API पर वही सामग्री टेम्पलेट के वर्शन से मिलती है (टेम्पलेट की सामग्री पढ़ना)।
API से टेम्पलेट सूचीबद्ध करना
GET /v1/whatsapp/templates एक cursor-paginated कैटलॉग लौटाता है। इस अनुरोध के लिए whatsapp_management रीड एक्सेस ज़रूरी है। HTTP या SDK raw-request मेथड का उपयोग करें।
type Templates = { data: Array<{ slug: string; status: string }> };
const templates = await bird.request<Templates>({
method: "GET",
path: "/v1/whatsapp/templates",
});templates = client.get("/v1/whatsapp/templates")var out struct {
Data []struct {
Slug string `json:"slug"`
Status string `json:"status"`
} `json:"data"`
}
if err := client.Get(context.Background(), "/v1/whatsapp/templates", &out); err != nil {
log.Fatal(err)
}$templates = $bird->get('/v1/whatsapp/templates');curl https://us1.platform.bird.com/v1/whatsapp/templates \
-H "Authorization: Bearer $BIRD_API_KEY"हर एंट्री टेम्पलेट, उसकी कैटेगरी और उपलब्ध भाषाओं की पहचान करती है। मैसेज सामग्री के लिए लाइव वर्शन अलग से पढ़ें।
कोड उदाहरण
{
"available_languages": ["en", "es", "pt-BR", "..."],
"category": "authentication",
"default_language": "en",
"description": "One-time passcode",
"id": "wat_01ky4x8e4genzb7way45txfkm1",
"languages": {
"en": { "status": "approved" },
"es": { "status": "approved" },
"pt-BR": { "status": "approved" },
"...": "..."
},
"name": "bird_otp",
"on_missing_language": "fail",
"scope": "system",
"slug": "bird_otp",
"status": "active"
}उदाहरण रिस्पॉन्स bird_otp भाषा सूचियों को संक्षिप्त करता है।
वे फ़ील्ड जिन पर भेजना निर्भर करता है:
- slug: भेजने में उपयोग होने वाला हैंडल। प्रबंधित टेम्पलेट के slug bird_ से शुरू होते हैं, जो उनके लिए आरक्षित प्रीफ़िक्स है।
- waba: Meta पर टेम्पलेट की भाषाएँ रखने वाला WhatsApp Business Account, और वह अकाउंट जिससे सेंडर नंबर संबंधित होना चाहिए। प्रबंधित टेम्पलेट पर यह नहीं होता क्योंकि Bird इसका अकाउंट प्रबंधित करता है।
- available_languages: भेजी जा सकने वाली भाषाएँ। कोई रुकी, अक्षम, आर्काइव्ड या सीमित भाषा इस सूची से हट जाती है।
- on_missing_language: अनुरोधित भाषा अनुपलब्ध होने पर क्या होता है। Bird-प्रबंधित WhatsApp टेम्पलेट fail का उपयोग करते हैं, जो किसी अन्य भाषा को प्रतिस्थापित करने के बजाय भेजना अस्वीकार कर देता है।
स्टेटस और भाषा स्टेटस
Bird-प्रबंधित टेम्पलेट status: active रिपोर्ट करते हैं। languages.<tag>.status एक भाषा के लिए WhatsApp की स्थिति रिपोर्ट करता है, जैसे approved, paused, या disabled।
एक सक्रिय टेम्पलेट में भी कोई भाषा अनुपलब्ध हो सकती है। भाषा भेजने योग्य है या नहीं, यह तय करने के लिए available_languages का उपयोग करें।
टेम्पलेट की सामग्री पढ़ना
मैसेज सामग्री लाइव वर्शन में किसी भाषा से संबंधित होती है। टेम्पलेट से live_version_id पढ़ें, फिर आवश्यक भाषा का अनुरोध करें:
const language = await bird.request({
method: "GET",
path: "/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en",
});language = client.get(
"/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en"
)var language map[string]any
if err := client.Get(context.Background(),
"/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en",
&language); err != nil {
log.Fatal(err)
}$language = $bird->get('/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en');curl https://us1.platform.bird.com/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en \
-H "Authorization: Bearer $BIRD_API_KEY"टेम्पलेट रेफ़रेंस slug या wat_ ID स्वीकार करता है। GET …/versions/{version_id}/languages वर्शन की भाषाओं को उनकी सामग्री के बिना सूचीबद्ध करता है।
कोड उदाहरण
{
"category": "utility",
"components": [
{
"example_parameters": [
{ "name": "ref", "text": "A1B2C3D4", "type": "text" },
{ "name": "amount", "text": "USD 49.99", "type": "text" }
],
"text": "Your order {{ref}} has been confirmed for a total of {{amount}}. Thanks for shopping with us.",
"type": "body"
}
],
"language": "en",
"status": "approved"
}भेजने के components को टेम्पलेट से मेल खाना चाहिए। example_parameters हर प्लेसहोल्डर की पहचान करता है। इस उदाहरण में बॉडी पैरामीटर name: "ref" और name: "amount" का उपयोग करते हैं। पोज़िशनल टेम्पलेट name को छोड़ देता है और {{n}} क्रम में वैल्यू लेता है। पैरामीटराइज़्ड बटन के अपने example_parameters होते हैं।
भाषा category प्राइसिंग के लिए उपयोग की जाने वाली Meta कैटेगरी है। यदि Meta भाषा को पुनर्वर्गीकृत करता है तो यह टेम्पलेट की रजिस्टर्ड कैटेगरी से भिन्न हो सकती है।
वर्शन की variables सूची हर प्लेसहोल्डर को उसकी key, type, required फ़्लैग और constraint के साथ सारांशित करती है। नामित प्लेसहोल्डर अपने नामों को key के रूप में उपयोग करते हैं। पोज़िशनल प्लेसहोल्डर अपने नंबर का उपयोग करते हैं।
टेम्पलेट से भेजना
भेजने के template ऑब्जेक्ट में टेम्पलेट नाम दें और components के ज़रिए इसके वेरिएबल भरें; पूरे पेलोड के लिए WhatsApp संदेश भेजना देखें:
const msg = await bird.whatsapp.send({
to: "+15551234567",
template: {
slug: "bird_otp",
components: [{ type: "body", parameters: [{ type: "text", text: "123456" }] }],
},
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="+31612345678",
template="bird_otp",
language="en",
components=[{"type": "body", "parameters": [{"type": "text", "text": "123456"}]}],
)
print(msg.id, msg.status)code := "123456"
msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "+15551234567",
Template: "bird_otp",
Language: "en",
Components: []bird.WhatsAppMessageTemplateComponent{{
Type: "body",
Parameters: &[]bird.WhatsAppMessageTemplateComponentParameter{{Type: "text", Text: &code}},
}},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)$message = $bird->whatsapp->send(
to: '+15551234567',
template: 'bird_otp',
language: 'en',
components: [
(new WhatsAppMessageTemplateComponent())
->setType('body')
->setParameters([
(new WhatsAppMessageTemplateComponentParameter())->setType('text')->setText('123456'),
]),
],
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--components '[{"parameters":[{"text":"1234","type":"text"}],"type":"body"},{"parameters":[{"text":"1234","type":"text"}],"type":"button"}]' \
--language en \
--template bird_otp \
--to +31612345678curl -X POST https://us1.platform.bird.com/v1/whatsapp/messages \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+14155550100",
"template": {
"slug": "bird_otp",
"language": "en",
"components": [
{ "type": "body", "parameters": [{ "type": "text", "text": "481920" }] },
{ "type": "button", "parameters": [{ "type": "text", "text": "481920" }] }
]
}
}'कैटेगरी के अनुसार भेजना
हर टेम्पलेट Meta की तीन कैटेगरी में से एक रखता है, और कैटेगरी यह बदलती है कि भेजने से पहले आपको क्या करना होगा और इसकी लागत क्या होगी। अपना authentication टेम्पलेट बनाने या कॉपी करने के लिए सत्यापित बिज़नेस ज़रूरी है, लेकिन भेजने के लिए नहीं: Bird का प्रबंधित bird_otp Bird के अपने WhatsApp Business Account पर होता है और आपके किसी सत्यापन के बिना भेजा जाता है। Marketing टेम्पलेट हमेशा आपके अपने WhatsApp Business Account से भेजे जाते हैं, एक दूसरे Meta API पर जिसे Bird स्वचालित रूप से रूट करता है। तीनों में Utility टेम्पलेट की पूर्वशर्तें सबसे कम हैं।
- Authentication टेम्पलेट: वन-टाइम सत्यापन कोड, कोड-कॉपी बटन, और बनाने के लिए सत्यापन गेट
- Utility टेम्पलेट: ऑर्डर अपडेट, अपॉइंटमेंट रिमाइंडर, और अकाउंट सूचनाएँ
- Marketing टेम्पलेट: प्रमोशनल संदेश, आवश्यक बिज़नेस अकाउंट, और ऑप्ट-आउट अपेक्षा
अगले कदम
- WhatsApp संदेश भेजना: पूरा सेंड पेलोड जिसमें template ऑब्जेक्ट फ़िट होता है
- WhatsApp टेम्पलेट दिशानिर्देश: वे नियम जिनके आधार पर Meta टेम्पलेट की समीक्षा करता है
- Authentication टेम्पलेट: वन-टाइम सत्यापन कोड और बनाने के लिए बिज़नेस-सत्यापन गेट
- WhatsApp प्राइसिंग: कैटेगरी और गंतव्य कीमत कैसे तय करते हैं
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।