WhatsApp ग्रुप को भेजना
ग्रुप सेंड एक सामान्य POST /v1/whatsapp/messages है जिसमें to किसी व्यक्ति के बजाय एक ग्रुप को नाम देता है: एक रिक्वेस्ट, एक मैसेज, और उस ग्रुप चैट का हर प्रतिभागी उसे प्राप्त करता है और वहीं रिप्लाई कर सकता है जहाँ बाकी सब देख सकें। जो बदलता है वह रिपोर्टिंग है। मैसेज में काउंटर होते हैं कि उनमें से कितनों तक यह पहुँचा, और डिलीवरी एक-एक प्रतिभागी के लिए अलग-अलग कन्फ़र्म होती है।
ग्रुप बनाना और उसे प्रबंधित करना, उसे मैसेज भेजने से अलग है। WhatsApp ग्रुप प्रबंधित करना में API के ज़रिए ग्रुप बनाना और उसका invite लिंक शेयर करना शामिल है, और WhatsApp ग्रुप में बताया गया है कि ग्रुप किसलिए है और WhatsApp इस पर क्या सीमाएँ लगाता है।
पूर्वापेक्षाएँ
आपको WhatsApp write अनुमति वाली एक API key और एक Active ग्रुप की ID (wag_…) चाहिए। इसे ग्रुप के Details टैब से Groups पेज पर कॉपी करें, ग्रुप के ज़रिए आए किसी मैसेज पर to.group_id से पढ़ें, या अपने ग्रुप की सूची देखें।
उदाहरण group ID को अपने ID से बदलें। अपनी भाषा के लिए क्लाइंट को TypeScript, Python, Go, या PHP SDK गाइड से इनिशियलाइज़ करें। CLI उदाहरणों के लिए, WhatsApp write एक्सेस के साथ CLI इंस्टॉल और ऑथेंटिकेट करें। cURL रिक्वेस्ट में अपने वर्कस्पेस क्षेत्र के अनुसार API होस्ट का उपयोग करें।
1. मैसेज भेजें
Group ID को to में डालें और from छोड़ दें। ग्रुप उस बिज़नेस नंबर से बंधा होता है जिससे वह बनाया गया था, इसलिए मैसेज केवल उसी नंबर से जा सकता है; कोई sender नाम देने पर 422 E15018 मिलता है।
const msg = await bird.whatsapp.send({
to: "wag_01krdgeqcxet5s7t44vh8rt9mg",
text: { body: "The route sheet for Tuesday is up." },
});
console.log(msg.id, msg.status);msg = client.whatsapp.send(
to="wag_01krdgeqcxet5s7t44vh8rt9mg",
text={"body": "The route sheet for Tuesday is up."},
)
print(msg.id, msg.status)msg, err := client.Whatsapp.Send(context.Background(), bird.WhatsappSendParams{
To: "wag_01krdgeqcxet5s7t44vh8rt9mg",
Text: &bird.WhatsAppTextSend{Body: "The route sheet for Tuesday is up."},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Status)$text = (new WhatsAppMessageSendRequestText())
->setBody("The route sheet for Tuesday is up.");
$message = $bird->whatsapp->send(
to: 'wag_01krdgeqcxet5s7t44vh8rt9mg',
text: $text,
);
echo $message->getId(), ' ', $message->getStatus();bird whatsapp send \
--text 'The route sheet for Tuesday is up.' \
--to wag_01krdgeqcxet5s7t44vh8rt9mgcurl -X POST "https://us1.platform.bird.com/v1/whatsapp/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "wag_01krdgeqcxet5s7t44vh8rt9mg",
"text": { "body": "The route sheet for Tuesday is up." }
}'API, to.group_id पर ग्रुप echo के साथ 202 लौटाता है, साथ ही status: accepted और recipient_count: सेंड स्वीकार होने के समय ग्रुप में कितने लोग थे। यह संख्या स्टेप 3 में हर चीज़ का हर (denominator) है, और उसी क्षण तय हो जाती है। मैसेज भेजे जाने के दौरान इनवाइट लिंक से जुड़ने वाला व्यक्ति न तो मैसेज प्राप्त करता है और न ही इस संख्या को बदलता है।
2. ग्रुप क्या स्वीकार करता है
ग्रुप टेक्स्ट, इमेज, वीडियो, ऑडियो, स्टिकर, डॉक्यूमेंट, लोकेशन, कॉन्टैक्ट कार्ड, और authentication को छोड़कर किसी भी कैटेगरी का टेम्प्लेट स्वीकार करता है जो आपके वर्कस्पेस ने बनाया हो। दो तरह के कंटेंट 422 E15052 के साथ अस्वीकार कर दिए जाते हैं, मैसेज बनने या चार्ज होने से पहले, क्योंकि WhatsApp इनमें से किसी को भी ग्रुप चैट में डिलीवर नहीं करता:
- कोई भी इंटरैक्टिव कंटेंट: रिप्लाई बटन, लिस्ट मेन्यू, लिंक बटन, कैरोसेल, और लोकेशन व कॉन्टैक्ट-इन्फ़ो रिक्वेस्ट।
- एक authentication टेम्प्लेट। इसके बजाय वन-टाइम सत्यापन कोड सीधे प्रतिभागी को भेजें।
एक Bird-managed टेम्प्लेट Bird के स्वामित्व वाले नंबर से भेजा जाता है, जो कभी वह नंबर नहीं होता जिससे ग्रुप बंधा है, इसलिए इसे ग्रुप को एड्रेस करने पर 422 E15001 मिलता है।
फ़्री-फ़ॉर्म कंटेंट के लिए अभी भी एक खुली कस्टमर सर्विस विंडो ज़रूरी है, और ग्रुप की अपनी एक विंडो होती है: कोई भी प्रतिभागी ग्रुप को मैसेज करे तो पूरे ग्रुप के लिए एक 24 घंटे की विंडो खुलती है, और वही व्यक्ति ग्रुप के बाहर आपको मैसेज करे तो यह विंडो नहीं खुलती। विंडो समाप्त होने पर, ग्रुप तक पहुँचने के लिए टेम्प्लेट भेजना होगा।
3. Fan-out को ट्रैक करें
मैसेज कितना आगे पहुँचा है यह देखने के लिए मैसेज प्राप्त करें। तीन काउंटर fan-out की रिपोर्ट करते हैं:
| फ़ील्ड | यह क्या रिपोर्ट करता है |
|---|---|
recipient_count | स्वीकृति के समय प्रतिभागी, बाकी दोनों का हर (denominator) |
delivered_count | WhatsApp ने कितनों तक मैसेज पहुँचने की पुष्टि की है, उन लोगों सहित जिन्होंने केवल read रिपोर्ट किया |
read_count | कितनों ने इसे खोला है |
ग्रुप मैसेज पर, status उस सबसे दूर के बिंदु की रिपोर्ट करता है जहाँ हर प्राप्तकर्ता पहुँचा है: यह delivered तभी होता है जब delivered_count recipient_count के बराबर हो, और sent तब तक रहता है जब तक कुछ ने कन्फ़र्म किया है और कुछ ने नहीं। किसी भी WhatsApp मैसेज की read स्टेटस नहीं होती, इसलिए read को read_count और read_at से ट्रैक करें। delivered_at और read_at पहले प्राप्तकर्ता के हैं, अंतिम के नहीं। failed और rejected कभी प्रति प्रतिभागी नहीं होते, क्योंकि WhatsApp को एक ही हैंड-ऑफ़ होता है और उसके अस्वीकार होने का एक ही तरीका है।
अगर किसी ऐसे ग्रुप को भेजा जाए जिसमें अभी तक कोई शामिल नहीं हुआ है, तो कोई काउंटर नहीं होता, क्योंकि रिपोर्ट करने के लिए कोई हर (denominator) नहीं है, इसलिए ग्रुप मैसेज को one-to-one मैसेज से अलग पहचानने के लिए काउंटर के बजाय to.group_id देखें।
यह देखने के लिए कि कोई पुष्टि किस प्रतिभागी के बारे में है, मैसेज के इवेंट्स की सूची देखें। एक ग्रुप सेंड प्रति प्रतिभागी अधिकतम एक whatsapp.delivered और अधिकतम एक whatsapp.read में फैन-आउट होता है, हर एक में recipient उस व्यक्ति के फ़ोन नंबर, उनकी बिज़नेस-स्कोप्ड यूज़र ID, या दोनों के साथ होता है। किसी के लिए भी इनमें से कोई गारंटीड नहीं है: WhatsApp उस प्रतिभागी के लिए डिलीवरी रसीद छोड़ देता है जो पहले से चैट देख रहा है, और रीड तभी आती है जब वे मैसेज खोलें। प्रति प्रतिभागी हर एक की प्रतीक्षा करने के बजाय जो आए उसे गिनें, और कुल संख्या के लिए काउंटर पढ़ें। एकमात्र whatsapp.sent इवेंट में कोई recipient नहीं होता: वह WhatsApp को एक ही हैंड-ऑफ़ है, जिसमें किसी का नाम नहीं होता। whatsapp.delivered और whatsapp.read वेबहुक में यही फ़ील्ड होता है, जिससे आप अन्यथा समान कॉलबैक को अलग पहचान सकते हैं।
4. एक ग्रुप की बातचीत पढ़ें
एक ग्रुप के थ्रेड के लिए, दोनों दिशाओं में, group_id मैसेज सूचीबद्ध करें को पास करें:
for await (const msg of bird.whatsapp.list({ group_id: "wag_01krdgeqcxet5s7t44vh8rt9mg" })) {
console.log(msg.id, msg.direction, msg.status);
}for msg in client.whatsapp.list(group_id="wag_01krdgeqcxet5s7t44vh8rt9mg"):
print(msg.id, msg.direction, msg.status)for msg, err := range client.Whatsapp.List(context.Background(), bird.WhatsappListParams{
GroupID: "wag_01krdgeqcxet5s7t44vh8rt9mg",
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(msg.Id, *msg.Direction, *msg.Status)
}foreach ($bird->whatsapp->list(['group_id' => 'wag_01krdgeqcxet5s7t44vh8rt9mg']) as $message) {
echo $message->getId(), ' ', $message->getDirection(), "\n";
}bird whatsapp list --group-id wag_01krdgeqcxet5s7t44vh8rt9mgcurl "https://us1.platform.bird.com/v1/whatsapp/messages?group_id=wag_01krdgeqcxet5s7t44vh8rt9mg" \
-H "Authorization: Bearer $BIRD_API_KEY"इनबाउंड ग्रुप मैसेज from पर लिखने वाले प्रतिभागी के साथ वापस पढ़ा जाता है, और एक to जिसमें आपका बिज़नेस नंबर और group_id दोनों होते हैं: वह नंबर जिसने इसे प्राप्त किया, उस ग्रुप से क्वालिफ़ाइड जिसके ज़रिए यह आया। न तो to और न ही from किसी ग्रुप से मैच करता है, इसलिए group_id ही एकमात्र फ़िल्टर है जो सूची को एक ग्रुप तक सीमित करता है। वही मैसेज डैशबोर्ड में WhatsApp लॉग में हैं।
लागत
ग्रुप सेंड पर WhatsApp मैसेज भेजना में वर्णित दो घटकों में शुल्क लगता है, प्रत्येक की कीमत में एक अंतर के साथ। Bird का शुल्क सेंड के लिए एक बार लगता है और उस बिज़नेस नंबर के देश के अनुसार तय होता है जिससे मैसेज गया, क्योंकि एक ग्रुप कई देशों में फैला हो सकता है और उसका कोई एकल प्राप्तकर्ता देश नहीं होता। Meta का हिस्सा प्रति प्रतिभागी जमा होता है जिस तक मैसेज पहुँचा, हर एक उस प्रतिभागी के अपने देश की सामान्य one-to-one दर पर, इसलिए passthrough_amount उनकी रसीदें आने पर बढ़ता है। 1 अक्टूबर 2026 से यह हिस्सा ग्रुप को भेजे गए फ़्री-फ़ॉर्म कंटेंट को भी कवर करता है, जिसे Meta प्रति प्रतिभागी चार्ज करता है और भेजने वाले नंबर के मासिक 1,000 मुफ़्त सर्विस मैसेज से काटता है: अक्टूबर 2026 मूल्य निर्धारण परिवर्तन।
समस्या निवारण
404(E15046): Group ID इस वर्कस्पेस में किसी ग्रुप को इंगित नहीं करता। ग्रुप उस वर्कस्पेस का होता है जिसने इसे बनाया, इसलिए किसी अन्य वर्कस्पेस का ID यहाँ नहीं मिलता।409(E15047): ग्रुप pending, suspended, deleted, या failed है। केवल Active ग्रुप को मैसेज किया जा सकता है, और ग्रुप तब तक pending रहता है जब तक WhatsApp इसकी पुष्टि नहीं करता।422(E15018):fromहटा दें। ग्रुप उसी नंबर से भेजता है जिससे वह बनाया गया था।422(E15052): इंटरैक्टिव कंटेंट, या authentication टेम्प्लेट। देखें ग्रुप क्या स्वीकार करता है।422(E15044): ग्रुप की सर्विस विंडो बंद है। एक टेम्प्लेट भेजें, या किसी प्रतिभागी द्वारा ग्रुप में लिखने की प्रतीक्षा करें।statussentपर अटका हुआ:recipient_countसे कम प्रतिभागियों ने डिलीवरी कन्फ़र्म की है। यह देखने के लिए कि कौन बाकी है, मैसेज के इवेंट पढ़ें।
अगले कदम
- WhatsApp ग्रुप संदेश प्राप्त करना: भेजने वाले की पहचान करें और ग्रुप को जवाब दें
- WhatsApp ग्रुप प्रबंधित करना: प्रतिभागियों, इनवाइट लिंक और शामिल होने के अनुरोधों को प्रबंधित करें
- संदेश स्थिति वेबहुक: अपने संदेशों के लिए डिलीवरी अपडेट प्राप्त करें
- बिज़नेस-स्कोप्ड यूज़र ID: उस प्रतिभागी की पहचान करें जिसका फ़ोन नंबर आपके पास नहीं है
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।