Sign inGet started

WhatsApp reply buttons

Reply buttons WhatsApp मैसेज के नीचे तीन तक टैप करने योग्य विकल्प रखते हैं, ताकि प्राप्तकर्ता फ्री टेक्स्ट की जगह एक टैप से जवाब दे सके। इन्हें किसी त्वरित निर्णय के लिए इस्तेमाल करें, जैसे बुकिंग की पुष्टि या रद्दीकरण। तीन से ज़्यादा विकल्पों के लिए इसके बजाय लिस्ट मेन्यू का उपयोग करें।

Reply buttons भेजें

interactive.type को button पर सेट करें, एक body_text और एक से तीन buttons के साथ, हर एक quick_reply:
const msg = await bird.whatsapp.send({
  to: "+16505551234",
  from: "+13124495648",
  interactive: {
    type: "button",
    body_text: "Your gardening workshop is scheduled for 9am tomorrow.",
    buttons: [{ type: "quick_reply", quick_reply: { slug: "change-booking", text: "Change" } }],
  },
});
console.log(msg.id, msg.status);
from हर service मैसेज पर ज़रूरी है: आपके वर्कस्पेस का अपना नंबर, Bird-managed नहीं। पूर्ण संरचना में एक वैकल्पिक हेडर, फ़ुटर, पहले के मैसेज का कोट, और एक दूसरा बटन जुड़ता है:
कोड उदाहरण
{
  "to": "+16505551234",
  "from": "+13124495648",
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "interactive": {
    "type": "button",
    "header": {
      "type": "image",
      "url": "https://cdn.example.com/banners/workshop.png"
    },
    "body_text": "Your gardening workshop is scheduled for 9am tomorrow.",
    "footer_text": "Lucky Shrub, your gateway to succulents",
    "buttons": [
      { "type": "quick_reply", "quick_reply": { "slug": "change-booking", "text": "Change" } },
      { "type": "quick_reply", "quick_reply": { "slug": "cancel-booking", "text": "Cancel" } }
    ]
  },
  "tags": [{ "name": "category", "value": "booking" }],
  "metadata": { "order_id": "A-1" }
}
in_reply_to_message_id उसी conversation में पहले के किसी मैसेज को कोट करता है। रिज़ॉल्यूशन कैसे काम करता है और क्या छूट सकता है, इसके लिए hub का रिप्लाई को सहसंबंधित करने के लिए मैसेज कोट करना देखें।
यह type केवल quick_reply बटन भेजता है। एक cta_url बटन एक अलग interactive.type का हिस्सा है और buttons के साथ नहीं आ सकता; साझा बटन संरचना के लिए hub का buttons सेक्शन देखें।

हेडर और फ़ुटर

हेडर वैकल्पिक है, और यह चार में से एक आकार का होता है:
कोड उदाहरण
"header": { "type": "text",     "text": "New workshop dates" }
"header": { "type": "image",    "url": "https://cdn.example.com/a.png" }
"header": { "type": "video",    "url": "https://cdn.example.com/a.mp4" }
"header": { "type": "document", "url": "https://cdn.example.com/a.pdf" }
एक मीडिया हेडर (image, video, या document) अपनी फ़ाइल को एक पब्लिक https URL के रूप में रखता है जिसे WhatsApp भेजते समय fetch करता है, न कि अपलोड किए गए मीडिया हैंडल के रूप में। footer_text वैकल्पिक है और बटन के नीचे एक लाइन जोड़ता है।

सीमाएँ

फ़ील्डसीमा
buttons1 से 3 entries, हर एक quick_reply
quick_reply.slugज़रूरी, 1 से 256 characters
quick_reply.text (label)ज़रूरी, 1 से 20 characters, मैसेज में अद्वितीय
body_textज़रूरी, 1 से 1,024 characters
footer_textवैकल्पिक, 1 से 60 characters
header.text1 से 60 characters
Bird जाँचता है कि बटन labels (quick_reply.text) अद्वितीय हैं, लेकिन यह नहीं जाँचता कि slug values अद्वितीय हैं, भले ही हर slug का उद्देश्य एक बटन की पहचान करना हो। एक ही slug वाले दो बटन दोनों भेजे और डिलीवर होते हैं, और उनके रिप्लाई अलग-अलग नहीं पहचाने जा सकते।

रिप्लाई पढ़ना

एक प्रेस अपने आप में एक inbound मैसेज के रूप में आती है, जिसमें interactive_reply होता है:
कोड उदाहरण
{
  "id": "wam_01kyb2m4xq7whs0d8n3prv6tez",
  "direction": "inbound",
  "from": { "phone_number": "+16505551234" },
  "to": { "phone_number": "+13124495648" },
  "status": "received",
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "interactive_reply": {
    "type": "button",
    "button": {
      "slug": "cancel-booking",
      "text": "Cancel"
    }
  },
  "created_at": "2026-08-25T09:04:11Z"
}
भेजते समय आपने जो slug सेट किया था वह हूबहू वापस आता है, इसलिए आप बिना किसी lookup table के सीधे उस पर branch कर सकते हैं। यह रिप्लाई आपको message list या GET /v1/whatsapp/messages/{id} के ज़रिए दिखता है; पूरे पथ के लिए hub का रिप्लाई पढ़ना देखें।

सीमाएँ और विशेष स्थितियाँ

  • Customer service window खुला होना चाहिए। Reply buttons एक service मैसेज हैं, केवल खुले window के अंदर ही डिलीवर होते हैं; hub का customer service window देखें। Window की जाँच fails open है, इसलिए 202 इस बात का प्रमाण नहीं है कि भेजते समय window वास्तव में खुला था।
  • from आपके वर्कस्पेस के स्वामित्व वाला नंबर होना चाहिए। इसे छोड़ना, या ऐसा नंबर देना जो कनेक्टेड sender नहीं है, send बनने से पहले ही reject कर दिया जाता है।
  • Labels अद्वितीय होने चाहिए, वरना send अस्वीकार हो जाता है। एक ही quick_reply.text वाले दो बटन 422 E15056 WhatsAppInteractiveDuplicateLabel के साथ विफल होते हैं, क्योंकि Meta अन्यथा send स्वीकार और चार्ज होने के बाद duplicate को reject कर देता।
  • Label वह है जो प्राप्तकर्ता देखता है; slug कभी नहीं दिखता। slug में user-facing कॉपी डालना एक साइलेंट no-op है, क्योंकि चैट में केवल text रेंडर होता है।
  • एक मीडिया हेडर URL जिसे WhatsApp fetch नहीं कर पाता, send स्वीकार होने के बाद विफल होता है। Bird हेडर url को उस तरह validate नहीं करता जैसे वह मीडिया मैसेज के URL को करता है, इसलिए एक http:// URL या error लौटाने वाला URL request पास कर जाता है और फिर asynchronously विफल होता है, मैसेज के last_error पर media_rejected के साथ।
  • Meta के अपने field names भेजने पर request विफल हो जाता है। यह type अज्ञात properties को सीधे reject करता है, इसलिए Meta के Cloud API reference से कॉपी किए गए JSON, जैसे कोई body object या action.buttons wrapper, को पहले Bird के flat fields में बदलना होगा।
एक कोट जो resolve नहीं होता, कुछ भी बनने या चार्ज होने से पहले request को विफल कर देता है: 404 E15071 जब id ऐसे मैसेज को इंगित करता है जो इस वर्कस्पेस में नहीं है, 422 E15072 जब वह ऐसे मैसेज को इंगित करता है जिसे कोट नहीं किया जा सकता। किसी भी WhatsApp send में आने वाली त्रुटियों के लिए, जैसे बंद window, अनुपलब्ध या अमान्य sender, या अमान्य प्राप्तकर्ता, hub के errors और WhatsApp मैसेज भेजना देखें।

अगले कदम