Sign inGet started

WhatsApp संदेश भेजना

यह गाइड सेंड एंडपॉइंट POST /v1/whatsapp/messages को कवर करती है। आप एक JSON पेलोड बनाते हैं जिसमें एक प्राप्तकर्ता और ठीक एक प्रकार का कंटेंट होता है: एक पूर्व-अनुमोदित टेम्पलेट, या एक सर्विस संदेश जिसमें टेक्स्ट, इमेज, वीडियो, ऑडियो, स्टिकर, डॉक्यूमेंट, लोकेशन, कॉन्टैक्ट कार्ड या कुछ टैप करने योग्य सामग्री होती है। Bird एक मैसेज ID के साथ 202 Accepted लौटाता है और asynchronously डिलीवर करता है। आप दोनों में से कौन सा भेज सकते हैं, यह कस्टमर सर्विस विंडो पर निर्भर करता है। हर रिक्वेस्ट एक प्राप्तकर्ता को एक संदेश भेजती है, और कोई बैच एंडपॉइंट नहीं है।

एक न्यूनतम सेंड

सबसे छोटा वैध पेलोड एक to प्राप्तकर्ता और एक template उसके slug के साथ है। कोई विशिष्ट भाषा चाहिए तो language जोड़ें; इसे छोड़ने पर टेम्पलेट की डिफ़ॉल्ट भाषा भेजी जाती है, और टेम्पलेट में घोषित किसी भी वेरिएबल को components के ज़रिए भरें।
curl कॉल US होस्ट का नाम देता है; अगर आपकी key bk_eu1_ से शुरू होती है, तो इसके बजाय https://eu1.platform.bird.com को कॉल करें। SDK आपकी key से रीजन पढ़ लेते हैं, इसलिए वे कोई होस्ट सेट नहीं करते।
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);

कस्टमर सर्विस विंडो

आप दोनों में से कौन सा भेज सकते हैं, यह एक स्थिति पर निर्भर करता है: कस्टमर सर्विस विंडो खुली है या नहीं।
संपर्ककर्ता आपके बिज़नेस नंबर पर संदेश भेजकर या कॉल करके विंडो खोलता है, और यह 24 घंटे तक खुली रहती है, हर बार उनके दोबारा संदेश भेजने पर रीसेट होती है। जब तक यह खुली है, आप सर्विस संदेश भेज सकते हैं, यानी कोई भी फ्री-फ़ॉर्म कंटेंट: टेक्स्ट, इमेज, वीडियो, ऑडियो, स्टिकर, डॉक्यूमेंट, लोकेशन, या इंटरैक्टिव। एक बार यह समाप्त हो जाए, तो केवल पूर्व-अनुमोदित टेम्पलेट ही उन तक पहुँचता है, और उसका जवाब विंडो को फिर से खोल देता है।
Bird आपके लिए विंडो ट्रैक करता है, इसलिए बंद विंडो में भेजा गया सर्विस संदेश कुछ भी बनने या चार्ज होने से पहले अस्वीकार कर दिया जाता है: रिक्वेस्ट 422 E15044 WhatsAppServiceWindowClosed लौटाती है। यह जाँच बेस्ट-एफ़र्ट है और फ़ेल-ओपन होती है, इसलिए 202 इस बात का प्रमाण नहीं है कि डिस्पैच के समय विंडो वास्तव में खुली थी; स्वीकृति और डिस्पैच के बीच विंडो समाप्त हो जाए तो यह asynchronously फ़ेल होती है, संदेश के last_error पर service_window_expired के साथ।
पूरे लाइफ़साइकल के लिए कस्टमर सर्विस विंडो देखें: क्या इसे खोलता है, क्या इसे रीसेट करता है, और यह प्राइसिंग के साथ कैसे इंटरैक्ट करती है।

पेलोड बनाना

प्राप्तकर्ता

to एक एकल प्राप्तकर्ता है, जो फ़ोन नंबर या business-scoped user ID के रूप में दिया जाता है। फ़ोन नंबर E.164 फ़ॉर्मेट में होता है: एक शुरुआती +, कंट्री कोड, और सब्सक्राइबर नंबर, जैसे +14155550100। हम नंबर वैलिडेट करते हैं, इसलिए एक ऐसा मान जो वास्तविक, डायल करने योग्य नंबर नहीं हो सकता (गलत लंबाई, अनअसाइन्ड प्रीफ़िक्स) कुछ भी चार्ज होने से पहले 422 WhatsAppInvalidRecipient के साथ अस्वीकार कर दिया जाता है। एक संदेश एक प्राप्तकर्ता को जाता है; कोई प्राप्तकर्ता ऐरे और कोई बैच सेंड नहीं है, इसलिए कई लोगों तक पहुँचने के लिए प्रति प्राप्तकर्ता एक कॉल करें।
एक business-scoped user ID जैसे US.13491208655302741918 उस संपर्ककर्ता को संबोधित करता है जिसका फ़ोन नंबर आपके पास नहीं है, और इसी तरह आप ऐसे संपर्ककर्ता को जवाब देते हैं जो बिना नंबर के आप तक पहुँचा। दो चीज़ें बदलती हैं: भेजने वाला नंबर उसी बिज़नेस पोर्टफ़ोलियो का होना चाहिए जिससे ID स्कोप्ड है, और वन-टाइम-सत्यापन कोड टेम्पलेट को फ़ोन नंबर चाहिए। Bird-मैनेज्ड टेम्पलेट 422 WhatsAppRecipientNotSupportedForTemplate के साथ अनुरोध स्वीकार करने के चरण में ही अस्वीकार कर दिया जाता है; आपके वर्कस्पेस द्वारा बनाया गया ऑथेंटिकेशन टेम्पलेट स्वीकार होता है और फिर फ़ेल हो जाता है, क्योंकि Meta को इसके लिए फ़ोन नंबर चाहिए।

टेम्पलेट

template भेजने के लिए पूर्व-अनुमोदित टेम्पलेट का नाम देता है:
  • slug (आवश्यक): टेम्पलेट का slug, जैसे bird_order_confirmation। यह आपके कैटलॉग में किसी टेम्पलेट से मेल खाना चाहिए (लोअरकेस अक्षर, अंक, और अंडरस्कोर)।
  • language: टेम्पलेट का भाषा टैग, जैसे en या pt-BR। टेम्पलेट की डिफ़ॉल्ट भाषा भेजने के लिए इसे छोड़ दें; ऐसी भाषा का नाम देना जो टेम्पलेट में नहीं है, 422 लौटाता है जो उपलब्ध भाषाएँ सूचीबद्ध करता है। स्वीकृत संदेश resolved भाषा को echo करता है।
  • components: वे मान जो टेम्पलेट के वेरिएबल भरते हैं (कंपोनेंट और पैरामीटर देखें)। बिना वेरिएबल वाले टेम्पलेट के लिए इसे छोड़ दें।
अपने टेम्पलेट, उनकी भाषाएँ, और प्रत्येक का रेंडर किया गया प्रीव्यू Templates पेज पर ब्राउज़ करें।

कंपोनेंट और पैरामीटर

टेम्पलेट में वेरिएबल होते हैं, नामित ({{ref}}, {{amount}}) या क्रमांकित ({{1}}, {{2}})। आप उनके मान components के ज़रिए देते हैं। हर कंपोनेंट एक type (body या button) और एक parameters ऐरे नाम करता है। हर पैरामीटर अपना type (text, image, video, gif, document, या location) नाम करता है और मेल खाता फ़ील्ड रखता है: text एक सादा स्ट्रिंग, image/video/gif/document एक पब्लिक https url, और location मैप पर एक पॉइंट। नामित पैरामीटर वाले टेम्पलेट को हर पैरामीटर पर एक name चाहिए, जो टेम्पलेट द्वारा घोषित नामों से ठीक मेल खाए (फ़ील्ड संदर्भ देखें)। पोज़िशनल टेम्पलेट name छोड़ देता है और इसके बजाय {{n}} क्रम में मान लेता है, ताकि पहला पैरामीटर {{1}} भरे। दोनों स्थितियों में, टेम्पलेट की घोषणा से मेल न खाने वाले पैरामीटर 422 WhatsAppTemplateParameterMismatch लौटाते हैं। वायर पर एक header कंपोनेंट टाइप भी मौजूद है: Bird-मैनेज्ड टेम्पलेट पर इसे हटा दिया जाता है, क्योंकि कोई Bird-मैनेज्ड टेम्पलेट हेडर वेरिएबल घोषित नहीं करता, लेकिन आपके वर्कस्पेस द्वारा बनाए गए टेम्पलेट पर इसे फ़ॉरवर्ड किया जाता है, और इसी तरह मीडिया-हेडर यूटिलिटी या मार्केटिंग टेम्पलेट को उसकी इमेज मिलती है।
उदाहरण के लिए, एक वन-टाइम-सत्यापन कोड टेम्पलेट जिसकी बॉडी में {{1}} is your verification code लिखा है और जिसका बटन कोड कॉपी करता है, कोड को बॉडी पैरामीटर और बटन पैरामीटर दोनों के रूप में लेता है, पोज़िशनली (बिना name):
कोड उदाहरण
{
  "components": [
    { "type": "body", "parameters": [{ "type": "text", "text": "481920" }] },
    { "type": "button", "parameters": [{ "type": "text", "text": "481920" }] }
  ]
}

कैटेगरी और सेंडर

टेम्पलेट की कैटेगरी (authentication, utility, या marketing) तय करती है कि WhatsApp संदेश को कैसे हैंडल करता है और, गंतव्य देश के साथ, इसकी लागत क्या होती है।
सेंडर का मालिक कौन है, यह तय करता है कि आपको उसका नाम देना है या नहीं:
  • एक Bird-मैनेज्ड टेम्पलेट (जिसका slug bird_ से शुरू होता है) उस नंबर से भेजता है जो Bird उस कैटेगरी के लिए रखता है, इसलिए from छोड़ दें। इसे सेट करने पर 422 WhatsAppSenderNotAllowed लौटता है।
  • बाकी सब कुछ अपना सेंडर from में नाम करता है: किसी भी प्रकार का सर्विस संदेश, और आपके वर्कस्पेस द्वारा बनाया गया कोई भी टेम्पलेट। नंबर आपके वर्कस्पेस का अपना होना चाहिए। इसे छोड़ने पर 422 WhatsAppSenderRequired लौटता है, और जिस नंबर से वर्कस्पेस भेज नहीं सकता वह 422 WhatsAppSenderNotFound लौटाता है। बनाए गए टेम्पलेट को नंबर के समान WhatsApp Business Account पर भी होना चाहिए, अन्यथा सेंड 422 WhatsAppSenderWABAMismatch लौटाता है।
फ़ोन नंबर सेटअप दोनों प्रकार के नंबर और आपके अपने नंबर को कनेक्ट करने का तरीका कवर करता है।

सर्विस संदेश

template के बजाय, text, image, video, audio, sticker, document, location, contact_cards, या interactive में से ठीक एक रखें। सभी नौ सर्विस संदेश हैं, इसलिए उन्हें खुली कस्टमर सर्विस विंडो चाहिए। उन सभी को from भी चाहिए, जो आपके वर्कस्पेस का अपना नंबर हो; Bird के मैनेज्ड नंबर इसे नहीं भेज सकते।
  • text: { "body": "..." }, अधिकतम 4,096 अक्षर। body में पहले URL के लिए लिंक प्रीव्यू रेंडर करने हेतु "preview_url": true जोड़ें।
  • image, video, audio, sticker, document: प्रत्येक एक पब्लिक https URL लेता है जिसे WhatsApp भेजते समय फ़ेच करता है (url), इसलिए साइन्ड URL को सेंड से ज़्यादा समय तक वैध रहना चाहिए। http URL सीधे अस्वीकार कर दिया जाता है। WhatsApp फ़ाइल को स्वयं फ़ेच करता है, इसलिए जो URL पहुँच में नहीं है, असमर्थित प्रकार परोसता है, या अपने प्रकार की साइज़ सीमा से बड़ी फ़ाइल है, वह स्वीकार होता है और फिर फ़ेल होता है, संदेश के last_error पर media_rejected के साथ और description में WhatsApp का अपना कारण। image, video, और document एक वैकल्पिक caption भी लेते हैं; document एक वैकल्पिक filename भी लेता है; audio वॉइस-नोट रेंडरिंग के लिए एक वैकल्पिक voice फ़्लैग लेता है।
  • location: { "latitude": ..., "longitude": ... } (दोनों आवश्यक, दशमलव डिग्री) और वैकल्पिक name तथा address
  • contact_cards: एक संदेश में शेयर किए गए अधिकतम पाँच कॉन्टैक्ट का ऐरे। हर कार्ड के name को formatted_name और कम से कम एक अन्य भाग (first_name, last_name, middle_name, prefix, या suffix) चाहिए; phone_numbers, emails, urls, और addresses प्रत्येक अधिकतम दस प्रविष्टियाँ लेते हैं, और org तथा birthday (YYYY-MM-DD के रूप में) वैकल्पिक हैं। E.164 में phone_number होने पर उस कार्ड को एक बटन मिलता है जो उसके साथ चैट खोलता है।
  • interactive: बॉडी टेक्स्ट और कुछ टैप करने योग्य, छह प्रकारों में से एक में: रिप्लाई बटन, लिस्ट मेनू, लिंक बटन, मीडिया कैरोसेल, या एक सिंगल बटन जो प्राप्तकर्ता से उनकी लोकेशन या फ़ोन नंबर माँगता है। इंटरैक्टिव संदेश हर प्रकार की वायर शेप, टैप से उत्पन्न रिप्लाई, और सीमाओं को कवर करता है।
कोड उदाहरण
{
  "to": "+16505551234",
  "from": "+13124495648",
  "text": { "body": "Your order shipped: https://example.com/track/A1B2C3", "preview_url": true }
}
बिना कंटेंट वाली, या एक से अधिक प्रकार वाली रिक्वेस्ट 422 के साथ अस्वीकार कर दी जाती है।

संदेश को क्वोट करना

in_reply_to_message_id को एक WhatsApp मैसेज ID पर सेट करें ताकि आपका संदेश उसके जवाब के रूप में भेजा जाए, ठीक वैसे जैसे WhatsApp ऐप में रिप्लाई टैप करने पर संदेश क्वोट होता है। प्राप्तकर्ता को आपके संदेश के ऊपर क्वोट किया गया संदेश दिखता है, और यह फ़ील्ड संदेश की हर रीड पर वापस आता है।
यह उल्टा भी काम करता है: एक इनबाउंड संदेश जिसे WhatsApp रिप्लाई के रूप में चिह्नित करता है, उसी फ़ील्ड में क्वोट किए गए संदेश की ID रखता है, और इसी तरह आप जानते हैं कि रिप्लाई आपके किस संदेश का जवाब है। जिस इनबाउंड संदेश को WhatsApp चिह्नित नहीं करता, उसमें कोई ID नहीं होती, और रेज़ोल्यूशन भी मिस हो सकता है। विश्वसनीय कोरिलेशन के लिए, अपने ऐप्लिकेशन की संग्रहीत कन्वर्सेशन या टास्क स्टेट के साथ स्पष्ट इंटरैक्टिव रिप्लाई आइडेंटिफ़ायर इस्तेमाल करें। आउटगोइंग metadata आउटगोइंग रिकॉर्ड पर रहता है और रिप्लाई पर स्वचालित रूप से कॉपी नहीं होता।
क्वोट सेंड स्वीकार होने से पहले resolve होता है, इसलिए जो क्वोट रेंडर नहीं हो सकता वह रिक्वेस्ट को ही फ़ेल कर देता है और कुछ भी बनता या चार्ज नहीं होता। ऐसी ID जो इस वर्कस्पेस में मौजूद किसी संदेश की नहीं है, या ऐसे संदेश की है जिसे क्वोट करने की 15 दिनों की अवधि बीत चुकी है, 404 E15071 WhatsAppReferencedMessageNotFound लौटाती है। ऐसा संदेश जो WhatsApp तक कभी नहीं पहुँचा, या इस सेंड के to और from से अलग कन्वर्सेशन का संदेश, 422 E15072 WhatsAppMessageNotQuotable लौटाता है। अगर Bird उस स्टोर तक नहीं पहुँच सकता जो सवाल का जवाब देता है, तो सेंड 503 E15073 WhatsAppMessageLookupUnavailable लौटाता है, जिसे फिर से प्रयास करना उचित है। क्वोट टेम्पलेट सेंड और फ्री-फ़ॉर्म सेंड दोनों पर काम करता है।
कोड उदाहरण
{
  "to": "+16505551234",
  "from": "+13124495648",
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "text": { "body": "Yes, that slot is still free." }
}

टैग और मेटाडेटा

दो वैकल्पिक फ़ील्ड आपका अपना कॉन्टेक्स्ट संदेश से जोड़ते हैं; दोनों API रीड पर वापस आते हैं और संदेश के हर वेबहुक इवेंट में शामिल होते हैं:
  • tags: कम-कार्डिनैलिटी डाइमेंशन (कोई कैंपेन, कोई एक्सपेरिमेंट वेरिएंट) के लिए अधिकतम 20 स्ट्रक्चर्ड { "name": ..., "value": ... } लेबल जिन पर आप फ़िल्टर और रिपोर्ट करते हैं। नाम और मान ASCII अक्षर, अंक, अंडरस्कोर, और हाइफ़न लेते हैं; नाम अधिकतम 32 अक्षर और एक सेंड में अद्वितीय, मान अधिकतम 64। टैग से संदेश सूची फ़िल्टर करें (?tag=campaign या ?tag=campaign:launch-week), और Metrics पेज टैग के अनुसार डिलीवरी विभाजित करता है।
  • metadata: एक मनमाना JSON ऑब्जेक्ट, अधिकतम 2 KB सीरियलाइज़्ड, प्रति-सेंड कॉन्टेक्स्ट के लिए जो आपको फ़िल्टर डाइमेंशन के रूप में नहीं चाहिए (कोई इंटर्नल ऑर्डर ID, कोई सेशन संदर्भ)।
कोड उदाहरण
{
  "tags": [{ "name": "campaign", "value": "order-confirmations" }],
  "metadata": { "order_id": "ord_8271" }
}

फ़ील्ड संदर्भ

फ़ील्डप्रकारआवश्यकसीमाएँ / नोट्स
tostringहाँप्रति संदेश एक प्राप्तकर्ता: एक E.164 फ़ोन नंबर, या एक business-scoped user ID, जिसे कोई वन-टाइम-सत्यापन कोड टेम्पलेट स्वीकार नहीं करता
fromstring (E.164)नहीं**Bird-मैनेज्ड टेम्पलेट के लिए छोड़ दें, जो अपना सेंडर स्वयं चुनता है; सर्विस संदेश और आपके वर्कस्पेस द्वारा बनाए गए टेम्पलेट के लिए आवश्यक, और आपके वर्कस्पेस का अपना नंबर होना चाहिए
template.slugstringनहीं**एक टेम्पलेट slug जो आपका वर्कस्पेस भेज सकता है; Bird-मैनेज्ड slug bird_ से शुरू होते हैं
template.languagestringनहीं*टेम्पलेट भाषा टैग (en, pt-BR); टेम्पलेट की डिफ़ॉल्ट भाषा भेजने के लिए छोड़ दें
template.componentsarrayनहींटेम्पलेट के वेरिएबल भरता है; कंपोनेंट type यह body या button है
template.components[].parameters[].namestringनहीं†वह प्लेसहोल्डर जिसे यह मान भरता है, जैसे ref; नामित-पैरामीटर टेम्पलेट के लिए आवश्यक और टेम्पलेट के घोषित नामों से मेल खाना चाहिए, पोज़िशनल टेम्पलेट के लिए छोड़ दें
interactiveobjectनहीं**बॉडी टेक्स्ट और एक प्रकार का टैप करने योग्य कंटेंट; यह सर्विस संदेश है, इसलिए इसे खुली सर्विस विंडो चाहिए। इंटरैक्टिव संदेश देखें
in_reply_to_message_idstringनहींएक WhatsApp मैसेज ID जो इस वर्कस्पेस के पास है, आपके भेजे गए संदेश में क्वोट किया गया; रीड पर echo होता है। संदेश को क्वोट करना देखें
tagsarrayनहींअधिकतम 20 {name, value} लेबल; नाम ≤ 32 अक्षर, मान ≤ 64, नाम अद्वितीय
metadataobjectनहींमनमाना JSON, अधिकतम 2 KB सीरियलाइज़्ड
* language वैकल्पिक है; इसे छोड़ने पर टेम्पलेट की डिफ़ॉल्ट भाषा भेजी जाती है। † name नामित-पैरामीटर टेम्पलेट के हर पैरामीटर पर आवश्यक है। पोज़िशनल टेम्पलेट के लिए इसे छोड़ दें। कंपोनेंट और पैरामीटर देखें। ** template या सर्विस-संदेश कंटेंट फ़ील्ड (text, image, video, audio, sticker, document, location, interactive) में से ठीक एक रखें; सर्विस संदेश देखें।

Async मॉडल: 202 का मतलब

एक सफल सेंड 202 Accepted एक मैसेज ID और status: accepted के साथ लौटाता है। 202 तभी लौटाया जाता है जब सेंड स्थायी रूप से स्वीकार हो चुका हो; इसे स्वीकार करके चुपचाप कभी नहीं छोड़ा जाता। जिन हार्ड फ़ेलियर को आप ठीक कर सकते हैं, वे 422 के साथ तुरंत फ़ेल होते हैं: अमान्य प्राप्तकर्ता, अज्ञात टेम्पलेट slug या भाषा, पैरामीटर मिसमैच, या बंद कस्टमर सर्विस विंडो में भेजा गया सर्विस संदेश (WhatsAppServiceWindowClosed)। वॉलेट में अपर्याप्त राशि इनमें से नहीं है: सेंड स्वीकार हो जाता है, और जब Bird चार्ज करने की कोशिश करता है तो संदेश insufficient_balance के साथ rejected पर समाप्त होता है। वास्तविक डिलीवरी asynchronously होती है: जब हम इसे WhatsApp को सौंपते हैं तो संदेश sent पर जाता है, फिर रसीद आने पर एक टर्मिनल स्टेटस (delivered या failed) पर, जिसे इवेंट, वेबहुक, और रीड एंडपॉइंट के ज़रिए रिपोर्ट किया जाता है। रीड रसीद अलग से एक read_at टाइमस्टैम्प और एक whatsapp.read इवेंट के रूप में दिखती है, स्टेटस के रूप में नहीं।
एक प्राइवेसी नोट: authentication-कैटेगरी टेम्पलेट के लिए API कभी भरे गए मान नहीं लौटाता। 202 echo और हर बाद की रीड उन संदेशों के लिए एक खाली components ऐरे रखती है, ताकि सत्यापन कोड कभी दोबारा सामने न आए।

सुरक्षित रूप से फिर से प्रयास करना

Idempotency-Key हेडर को प्रति लॉजिकल सेंड एक अद्वितीय मान के साथ भेजें, और फिर से प्रयास सुरक्षित हो जाते हैं। अगर आपकी पहली रिक्वेस्ट सफल हुई लेकिन आपने रिस्पॉन्स नहीं देखा (टाइमआउट, ड्रॉप्ड कनेक्शन), तो उसी key के साथ रीप्ले करने पर डुप्लिकेट संदेश भेजने और चार्ज करने के बजाय मूल परिणाम लौटता है। रीप्ले किए गए रिस्पॉन्स में एक Idempotency-Replay हेडर होता है। key फ़ॉर्मेट और रिटेंशन के लिए idempotency देखें।

रिप्लाई प्राप्त करना

इनबाउंड संदेश आउटबाउंड संदेशों के समान रिसोर्स पर आते हैं, और उनमें से हर एक सर्विस विंडो रीसेट करता है। WhatsApp संदेश प्राप्त करना उन्हें API पर पढ़ना, संपर्ककर्ता द्वारा भेजा गया मीडिया फ़ेच करना, और whatsapp.received वेबहुक कवर करता है।

लागत और बिलिंग

WhatsApp की कीमत प्रति संदेश है, जो टेम्पलेट की कैटेगरी और प्राप्तकर्ता के देश पर निर्भर करती है; WhatsApp प्राइसिंग देखें। एक संदेश दो चरणों में, दो अलग-अलग समय पर चार्ज होता है, और संदेश पर cost ऑब्जेक्ट दोनों रिपोर्ट करता है:
फ़ील्डयह क्या हैयह कब आता है
transaction_amountसेंड हैंडल करने के लिए Bird का शुल्कजब Bird स्वीकृत सेंड को डिस्पैच से पहले प्रोसेस करता है
passthrough_amountसंदेश मूल्य में Meta का हिस्सा, जिसे Bird पास-थ्रू करता हैजब एक लागू delivered या read रसीद आती है
amountअब तक मूल्यांकित कंपोनेंट का योगहर कंपोनेंट आने पर बढ़ता है
currency_codeआपके ऑर्गनाइज़ेशन वॉलेट की मुद्रा, दोनों कंपोनेंट द्वारा साझापहले कंपोनेंट के साथ
दोनों राशियाँ दशमलव स्ट्रिंग हैं, कर को छोड़कर।
दोनों कंपोनेंट अलग-अलग इनपुट पर मूल्यांकित होते हैं। Bird का शुल्क आपके भेजे गए टेम्पलेट की कैटेगरी और प्राप्तकर्ता के देश का उपयोग करता है, जो फ़ोन नंबर के कंट्री कोड से आता है या, business-scoped user ID पर भेजे गए सेंड में, उस ID के दो-अक्षर प्रीफ़िक्स से। Meta का हिस्सा उस कैटेगरी का उपयोग करता है जो Meta स्वयं लागू रसीद पर रिपोर्ट करता है, जो टेम्पलेट की कैटेगरी से भिन्न हो सकती है: Meta authentication-international रिपोर्ट कर सकता है जब उसके destination, business-location और eligibility नियम लागू होते हैं। WhatsApp authentication-international दरें देखें।
cost क्या दिखाता है, यह इस पर निर्भर करता है कि संदेश कितना आगे बढ़ चुका है:
  • 202 पर, cost null है। कुछ भी मूल्यांकित नहीं हुआ है।
  • प्रोसेसिंग के बाद, transaction_amount सेट है और amount उसके बराबर है। passthrough_amount null रहता है।
  • एक लागू delivered या read रसीद के बाद, सफलतापूर्वक रिकॉर्ड किया गया Meta चार्ज passthrough_amount को भरता है, और amount रिकॉर्ड किए गए कंपोनेंट दर्शाता है।
null कंपोनेंट का मतलब है कि उस प्रोजेक्शन में कोई राशि रिकॉर्ड नहीं है; यह इस बात का प्रमाण नहीं है कि संदेश मुफ़्त था। शून्य पर स्पष्ट रूप से मूल्यांकित कंपोनेंट "0.00000" दिखता है।
दोनों चार्ज अलग तरह से फ़ेल भी होते हैं। Bird का शुल्क फ़ेल-क्लोज़्ड होता है: जब 202 के बाद यह पूरा नहीं हो पाता क्योंकि वॉलेट सेंड कवर नहीं कर सकता या रूट पर कोई कॉन्फ़िगर्ड प्राइस नहीं है, तो संदेश एरर कोड insufficient_balance या price_not_found के साथ rejected पर समाप्त होता है, और कुछ भी चार्ज नहीं होता। rejected संदेश कभी WhatsApp तक नहीं पहुँचा, और यही इसे failed से अलग करता है। Meta का हिस्सा फ़ेल-ओपन होता है: अगर रसीद आने पर वॉलेट में कमी है या दर उपलब्ध नहीं है, तो चार्ज छोड़ दिया जाता है बिना देखी गई संदेश स्थिति को उलटे। आपकी डिलीवरी दूसरे चार्ज के कारण कभी रुकती नहीं।
Bird द्वारा चार्ज किया गया संदेश वह आउटबाउंड चार्ज बनाए रखता है, भले ही बाद में डिलीवरी फ़ेल हो जाए। Meta शुल्क एक लागू delivered या read कॉलबैक से प्रोसेस होता है जब Meta रेगुलर प्राइसिंग resolvable कैटेगरी और destination के साथ रिपोर्ट करता है। दोनों कॉलबैक पाथ एक ही fee identity का उपयोग करते हैं और बिलिंग सर्विस के डिडुप्लिकेशन पर निर्भर करते हैं। रीप्ले की गई रसीदों को बिलिंग रिकॉर्ड के विरुद्ध मिलान करें, संदेश प्रोजेक्शन को स्थायी डेबिट रसीद न मानें। सर्विस या फ़्री-एंट्री प्राइसिंग Meta कंपोनेंट को शून्य बना सकती है; अनरेज़ॉल्व्ड कंपोनेंट इस बात का प्रमाण नहीं है कि संदेश मुफ़्त था।
वित्तीय मिलान के लिए बिलिंग लेज़र का उपयोग करें। संदेश cost फ़ील्ड चार्ज के प्रोजेक्शन हैं और पिछड़ सकते हैं या अपूर्ण रह सकते हैं। संदेश ऑब्ज़र्वेशन और बिलिंग रिकॉर्ड के बीच अंतर के लिए WhatsApp मेट्रिक्स देखें।
WhatsApp इवेंट लागत नहीं रखते। किसी भी कंपोनेंट को पढ़ने के लिए, GET /v1/whatsapp/messages/{id} से संदेश वापस पढ़ें।

अगले कदम

  • सर्विस संदेश: नौ फ्री-फ़ॉर्म कंटेंट आर्म और हर एक क्या लेता है
  • WhatsApp संदेश प्राप्त करना: इनबाउंड संदेश, मीडिया, और whatsapp.received वेबहुक
  • Business-scoped user IDs: ऐसे संपर्ककर्ता को संबोधित करना जो बिना फ़ोन नंबर के आप तक पहुँचा
  • Templates: कैटलॉग ब्राउज़ करें और टेम्पलेट के वेरिएबल पढ़ें
  • Idempotency: Idempotency-Key हेडर के साथ सुरक्षित फिर से प्रयास