WhatsApp समूहों का प्रबंधन
Groups पेज पर जो कुछ भी होता है, वह /v1/whatsapp/groups के अंतर्गत बारह ऑपरेशन भी करते हैं। इसलिए किसी समूह का पूरा जीवनचक्र कोड में संभाला जा सकता है। आप समूह बनाते हैं और WhatsApp की पुष्टि का इंतज़ार करते हैं। फिर आप उसका आमंत्रण लिंक बाँटते हैं और तय करते हैं कि कौन शामिल होगा। आप उसका विवरण और पिन अद्यतन रखते हैं, और बातचीत खत्म होने पर उसे हटा देते हैं।
इस पेज की हर कॉल दो बातों पर निर्भर करती है। किसी को भी समूह में जोड़ा नहीं जा सकता, इसलिए आमंत्रण लिंक ही शामिल होने का एकमात्र तरीका है, और लोगों को आमंत्रित करने का काम API के बाहर होता है। ज़्यादातर बदलाव प्रतिक्रिया में नहीं, बल्कि WhatsApp पर पूरे होते हैं, इसलिए जो कॉल बदलाव स्वीकार करती है, वह यह नहीं बताती कि बदलाव सफल हुआ। बदलाव कैसे पूरा होता है में यह बात उन सभी ऑपरेशनों के लिए एक ही जगह समझाई गई है जिन पर यह लागू होती है।
WhatsApp समूह में बताया गया है कि समूह किस काम आता है, और डैशबोर्ड में यही जीवनचक्र कैसे चलता है। WhatsApp समूह को संदेश भेजना में समूह को संदेश भेजने का तरीका बताया गया है।
पूर्वापेक्षाएँ
आपको whatsapp_management एक्सेस वाली API कुंजी चाहिए। इस पेज पर डेटा पढ़ने के लिए रीड स्तर और बाकी सभी कामों के लिए राइट स्तर चाहिए। उपयोगकर्ता, टीमें और भूमिकाएँ में यह एक्सेस देने का तरीका बताया गया है।
आपको ऐसा बिज़नेस नंबर भी चाहिए जिसके पास Official Business Account स्टेटस हो। WhatsApp समूह के एडमिनिस्ट्रेटर के लिए यह स्टेटस ज़रूरी करता है, और समूह बनाने से पहले में इसे पाने का तरीका बताया गया है। GET /v1/whatsapp/numbers हर नंबर के लिए इसे is_official_business_account के रूप में रिपोर्ट करता है, इसलिए इसे वहीं पढ़ें, 412 मिलने पर इसका पता न लगाएँ। यह फ़्लैग नंबर के meta_synced_at के समय की स्थिति दिखाता है, इसलिए हो सकता है कि कुछ मिनट पहले जोड़े गए नंबर का स्टेटस अभी तक वापस पढ़ा न गया हो।
अपनी भाषा के लिए TypeScript, Python, Go या PHP SDK गाइड की मदद से क्लाइंट इनिशियलाइज़ करें। CLI उदाहरणों के लिए CLI इंस्टॉल और प्रमाणित करें। cURL उदाहरणों में US होस्ट दिया गया है। अगर आपकी कुंजी bk_eu1_ से शुरू होती है, तो इसकी जगह https://eu1.platform.bird.com को कॉल करें। SDK आपकी कुंजी से क्षेत्र पढ़ लेते हैं, इसलिए उनमें होस्ट सेट नहीं करना पड़ता।
1. समूह बनाएँ
समूह बनाते समय केवल एडमिनिस्ट्रेटर नंबर और एक विषय दिया जाता है, किसी और का नाम नहीं। दो विकल्प समूह के पूरे जीवनकाल के लिए तय हो जाते हैं और बाद में बदले नहीं जा सकते। पहला विकल्प नंबर है। दूसरा विकल्प join_approval_mode है, जो तय करता है कि आमंत्रण लिंक खोलने पर व्यक्ति सीधे शामिल हो जाए (auto_approve, डिफ़ॉल्ट) या एक अनुरोध बने जिस पर आप निर्णय लें (approval_required)।
नोट: समूह बनाने के लिए Official Business Account स्टेटस वाला बिज़नेस नंबर चाहिए। यह वही नीला चेक मार्क है जो WhatsApp चैट में बिज़नेस के नाम के आगे दिखाता है। WhatsApp Official Business Account में बताया गया है कि Meta क्या माँगता है और इसके लिए अनुरोध कैसे करें।
const group = await bird.whatsapp.groups.create({
whatsapp_number_id: "wan_01krdgeqcxet5s7t44vh8rt9mg",
subject: "Norwood Fleet — Tuesday route",
join_approval_mode: "approval_required",
});
console.log(group.id, group.status); // pending; read it back for the invite linkgroup = client.whatsapp.groups.create(
whatsapp_number_id="wan_01krdgeqcxet5s7t44vh8rt9mg",
subject="Norwood Fleet — Tuesday route",
join_approval_mode="approval_required",
)
print(group.id, group.status) # pending; read it back for the invite linkgroup, err := client.Whatsapp.Groups.Create(context.Background(), bird.WhatsappGroupsCreateParams{
WhatsappNumberID: "wan_01krdgeqcxet5s7t44vh8rt9mg",
Subject: "Norwood Fleet — Tuesday route",
JoinApprovalMode: bird.Ptr(bird.WhatsAppGroupJoinApprovalMode("approval_required")),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(*group.Id, *group.Status) // pending; read it back for the invite link$group = $bird->whatsapp->groups->create(
(new WhatsAppGroupCreate())
->setWhatsappNumberId('wan_01krdgeqcxet5s7t44vh8rt9mg')
->setSubject('Norwood Fleet — Tuesday route')
->setJoinApprovalMode('approval_required'),
);
echo $group->getId(), ' ', $group->getStatus(); // pendingbird whatsapp groups create \
--whatsapp-number-id wan_01krdgeqcxet5s7t44vh8rt9mg \
--subject 'Norwood Fleet — Tuesday route' \
--join-approval-mode approval_requiredcurl -X POST "https://us1.platform.bird.com/v1/whatsapp/groups" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"whatsapp_number_id": "wan_01krdgeqcxet5s7t44vh8rt9mg",
"subject": "Norwood Fleet — Tuesday route",
"join_approval_mode": "approval_required"
}'API ग्रुप को status pending स्थिति में और बिना invite_link के 202 लौटाता है: WhatsApp ग्रुप की पुष्टि करते समय लिंक जारी करता है। विषय अधिकतम 128 अक्षरों का हो सकता है और वैकल्पिक description अधिकतम 2,048 अक्षरों का। लिंक खोलने वाला हर व्यक्ति दोनों को देखता है, इसलिए ग्रुप का नाम किसी आंतरिक संदर्भ के बजाय उसके उद्देश्य पर रखें।
2. WhatsApp की पुष्टि की प्रतीक्षा करें
ग्रुप को तब तक दोबारा पढ़ें जब तक उसका status pending से न बदल जाए। स्थिति चाहे जो हो, रीड 200 लौटाता है, इसलिए कॉल के सफल होने के बजाय status के आधार पर निर्णय लें।
const group = await bird.whatsapp.groups.get("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(group.status, group.invite_link);group = client.whatsapp.groups.get("wag_01krdgeqcxet5s7t44vh8rt9mg")
print(group.status, group.invite_link)group, err := client.Whatsapp.Groups.Get(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
fmt.Println(*group.Status)
if group.InviteLink != nil {
fmt.Println(*group.InviteLink)
}$group = $bird->whatsapp->groups->get('wag_01krdgeqcxet5s7t44vh8rt9mg');
echo $group->getStatus(), ' ', $group->getInviteLink();bird whatsapp groups get wag_01krdgeqcxet5s7t44vh8rt9mgcurl "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg" \
-H "Authorization: Bearer $BIRD_API_KEY"पाँच स्थितियाँ लौट सकती हैं, और इनमें से केवल एक में ग्रुप पर काम किया जा सकता है:
| स्थिति | अर्थ |
|---|---|
pending | WhatsApp ने ग्रुप की पुष्टि नहीं की है। invite_link null है और यहाँ कुछ भी साझा करने योग्य नहीं है |
active | ग्रुप मौजूद है, उसका आमंत्रण लिंक काम करता है, और वह संदेश और बदलाव स्वीकार करता है |
suspended | WhatsApp ने ग्रुप में गतिविधि रोक दी है। इसे केवल WhatsApp हटा सकता है |
deleted | ग्रुप हटा दिया गया है, फिर भी पढ़ा जा सकता है ताकि उसका सहेजा गया संदर्भ अब भी काम करे |
failed | WhatsApp ने ग्रुप बनाने से मना कर दिया, और यह अंतिम स्थिति है |
failed, pending से निकलने का दूसरा रास्ता है, और last_operation.last_error.description में WhatsApp का अपना कारण होता है। विफल हुए ग्रुप पर कभी फिर से प्रयास न करें: इसके बजाय नया ग्रुप बनाएँ, और वह बदलें जिस पर इनकार में आपत्ति थी।
3. लोगों को ग्रुप में आने दें
ग्रुप का invite_link उन लोगों को भेजें जिन्हें आप उसमें चाहते हैं, उसी चैनल से जिससे आप उन तक पहले से पहुँचते हैं। कोई भी ऑपरेशन प्रतिभागी नहीं जोड़ता, इसलिए लिंक ही अंदर आने का एकमात्र रास्ता है और जुड़ना उन्हीं का फ़ैसला है। लिंक जिसके पास भी हो, उसे ग्रुप में प्रवेश देता है, इसलिए इसे एक क्रेडेंशियल की तरह सँभालें: WhatsApp ग्रुप बताता है कि लिंक को कितना फैलाना ठीक है।
auto_approve ग्रुप में, लिंक रखने वाला हर व्यक्ति सीधे शामिल हो जाता है और कोई फ़ैसला नहीं करना पड़ता। approval_required ग्रुप में, लिंक खोलने पर जुड़ने का अनुरोध बनता है। प्रतीक्षा कर रहे अनुरोधों की सूची लें, फिर उन पर 50 तक के बैच में फ़ैसला करें:
const waiting = [];
for await (const request of bird.whatsapp.groups.joinRequests.list(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
)) {
waiting.push(request.id);
}
const result = await bird.whatsapp.groups.joinRequests.approve("wag_01krdgeqcxet5s7t44vh8rt9mg", {
join_request_ids: waiting.slice(0, 50),
});
console.log(result.decided.length, result.failed.length);waiting = [r.id for r in client.whatsapp.groups.join_requests.list("wag_01krdgeqcxet5s7t44vh8rt9mg")]
result = client.whatsapp.groups.join_requests.approve(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
join_request_ids=waiting[:50],
)
print(len(result.decided), len(result.failed))result, err := client.Whatsapp.Groups.JoinRequests.Approve(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg", bird.WhatsappGroupsJoinRequestsApproveParams{
JoinRequestIDs: []string{"wgj_01krdgeqcxet5s7t44vh8rt9mg"},
})
if err != nil {
log.Fatal(err)
}
for _, failure := range *result.Failed {
fmt.Println(*failure.JoinRequestId, *failure.Error.Description)
}$result = $bird->whatsapp->groups->joinRequests->approve(
'wag_01krdgeqcxet5s7t44vh8rt9mg',
(new WhatsAppGroupJoinRequestDecision())->setJoinRequestIds(['wgj_01krdgeqcxet5s7t44vh8rt9mg']),
);
echo count($result->getDecided() ?? []), ' ', count($result->getFailed() ?? []);bird whatsapp groups join-requests list wag_01krdgeqcxet5s7t44vh8rt9mg
bird whatsapp groups join-requests approve wag_01krdgeqcxet5s7t44vh8rt9mg \
--join-request-ids wgj_01krdgeqcxet5s7t44vh8rt9mgcurl -X POST "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg/join-requests/batch-approve" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"join_request_ids": ["wgj_01krdgeqcxet5s7t44vh8rt9mg"]}'WhatsApp हर अनुरोध पर अलग से फ़ैसला करता है, इसलिए बैच आंशिक रूप से लागू हो सकता है: प्रतिक्रिया decided को failed से अलग करती है, और हर विफलता में वह कारण होता है जो WhatsApp ने error.description में दिया। स्टेटस कोड के बजाय प्रतिक्रिया पढ़ें। इनकार अक्सर ऐसे व्यक्ति के कारण होता है जिसने WhatsApp की मौजूदा शर्तें स्वीकार नहीं की हैं, और इसे कोई फिर से प्रयास ठीक नहीं करता।
ग्रुप में जितनी जगह है उससे ज़्यादा लोगों को मंज़ूरी देने पर कॉल अस्वीकार नहीं होती: जितने अनुरोध समा सकते हैं उन पर फ़ैसला हो जाता है और बाकी failed में लौटते हैं, और हर एक बताता है कि मंज़ूरी ग्रुप को उसकी प्रतिभागी सीमा से आगे ले जाएगी। अस्वीकार करना भी POST /v1/whatsapp/groups/{group_id}/join-requests/batch-reject के ज़रिए इसी तरह काम करता है। जब व्यक्ति खुद अनुरोध रद्द कर देता है तब भी वह सूची से हट जाता है, इसलिए जो ID एक पल पहले मान्य थी, आपके इस्तेमाल करने तक 422 E15051 लौटा सकती है।
50 की सीमा एक अनुरोध पर Bird की अपनी सीमा है, WhatsApp की नहीं, इसलिए बड़ी संख्या में अनुरोध अस्वीकार करना इस बात से बंधा नहीं है कि ग्रुप में कितने लोग आ सकते हैं।
अनुरोध आते ही उन पर नज़र रखें
सूची को बार-बार पढ़ने के बजाय whatsapp.group.join_request_created और whatsapp.group.join_request_revoked को सब्सक्राइब करें, ताकि आपको पता चले कि कब कोई जुड़ने का अनुरोध करता है और कब वह उसे रद्द करता है। अगर कोई अनुरोध सूची की दो रीड के बीच भेजा और रद्द कर दिया जाए, तो उसका कोई निशान नहीं बचता, इसलिए उसे देखने का एकमात्र तरीका ये इवेंट हैं। हर इवेंट में वही join_request.id होता है जो बैच ऑपरेशन लेते हैं, इसलिए आप सीधे इवेंट से ही निर्णय ले सकते हैं। WhatsApp ग्रुप वेबहुक में दोनों पेलोड और हर फ़ील्ड दिए गए हैं।
इनवाइट लिंक बदलना
लिंक बदलने पर एक नया लिंक जारी होता है और ग्रुप के पिछले सभी लिंक काम करना बंद कर देते हैं, इसलिए पुराना लिंक रखने वाला कोई भी व्यक्ति ग्रुप में नहीं जुड़ सकता। लिंक तब बदलें जब वह आपकी अपेक्षा से ज़्यादा लोगों तक पहुँच गया हो, या जब आपने किसी ऐसे व्यक्ति को हटाया हो जिसे आप वापस नहीं चाहते। नया लिंक इसी कॉल के जवाब में लौटता है, जो 200 देती है:
const link = await bird.whatsapp.groups.inviteLink.rotate("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(link.invite_link); // every earlier link has stopped workinglink = client.whatsapp.groups.invite_link.rotate("wag_01krdgeqcxet5s7t44vh8rt9mg")
print(link.invite_link) # every earlier link has stopped workinglink, err := client.Whatsapp.Groups.InviteLink.Rotate(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
fmt.Println(*link.InviteLink) // every earlier link has stopped working$link = $bird->whatsapp->groups->inviteLink->rotate('wag_01krdgeqcxet5s7t44vh8rt9mg');
echo $link->getInviteLink(); // every earlier link has stopped workingbird whatsapp groups invite-link rotate wag_01krdgeqcxet5s7t44vh8rt9mg --yescurl -X POST "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg/invite-link/rotate" \
-H "Authorization: Bearer $BIRD_API_KEY"मौजूदा लिंक पढ़ने के लिए लिंक बदलने की ज़रूरत नहीं है। ग्रुप में उसका invite_link होता है, इसलिए ग्रुप को पढ़ने से ही लिंक मिल जाता है।
CLI कभी पुष्टि नहीं माँगता, इसलिए उसकी विनाशकारी कमांड के लिए --yes देना ज़रूरी है: इसके बिना लिंक बदलना, किसी प्रतिभागी को हटाना, ग्रुप डिलीट करना, किसी संदेश को अनपिन करना और जुड़ने के अनुरोध अस्वीकार करना, ये सभी confirmation_required के साथ अस्वीकार हो जाते हैं।
कोई बदलाव कैसे पूरा होता है
WhatsApp कुछ बदलावों की पुष्टि अपने जवाब में करता है और कुछ की वेबहुक पर, और स्टेटस कोड बताता है कि आपके सामने किस तरह का बदलाव है:
| ऑपरेशन | जवाब | नतीजा कहाँ दिखता है |
|---|---|---|
| बनाना, अपडेट करना, डिलीट करना | 202 | ग्रुप का last_operation, जब WhatsApp परिणाम लौटा दे |
| किसी प्रतिभागी को हटाना | 202 | participants में उसी प्रतिभागी का अपना last_operation |
| जुड़ने के अनुरोध स्वीकार या अस्वीकार करना | 202 | प्रतिक्रिया में ही decided और failed |
| रोटेट, पिन, अनपिन | 200 | प्रतिक्रिया, जिसमें बदलाव पहले ही लागू हो चुका होता है |
पहली दो पंक्तियों में 202 का अर्थ है कि अनुरोध स्वीकार हुआ है, लागू नहीं हुआ। जब तक WhatsApp परिणाम नहीं लौटाता, last_operation.status का मान pending रहता है। आमतौर पर कुछ सेकंड में यह success या failed पर आ जाता है, और विफलता होने पर last_error.description में कारण होता है। क्या लागू हुआ, यह देखने के लिए ग्रुप को फिर से पढ़ें।
जब कोई ऑपरेशन pending हो, तब उसी चीज़ में कोई दूसरा बदलाव 409 E15054 लौटाता है। ग्रुप-स्तर के बदलाव ग्रुप का last_operation साझा करते हैं, इसलिए लंबित नाम-बदलाव डिलीट को रोक देता है। हर प्रतिभागी का अपना अलग मान होता है। इसलिए कई लोगों को एक साथ हटाने पर हर व्यक्ति की अपनी स्थिति और अपनी विफलता होती है, और केवल उसी व्यक्ति का लंबित हटाना उसे हटाने के दूसरे प्रयास को रोकता है।
राइट्स की सुरक्षा दो 409 करते हैं और पहले status की जाँच होती है, इसलिए जो ग्रुप active नहीं है, वह अपने last_operation की स्थिति चाहे जो हो, E15047 लौटाता है। यह उस ग्रुप के लिए मायने रखता है जो अभी बन रहा है, क्योंकि वह दोनों जगह एक साथ पेंडिंग होता है।
हर राइट एक Idempotency-Key हेडर भी लेता है। सुरक्षित रूप से फिर से प्रयास करने का तरीका Idempotency में बताया गया है।
ग्रुप का विषय, विवरण या चित्र बदलें
अपडेट वह जानकारी बदलता है जो प्रतिभागियों को ग्रुप में सबसे ऊपर दिखती है। जो फ़ील्ड आप नहीं भेजते, वे जैसे हैं वैसे रहते हैं। विवरण या चित्र हटाने के लिए null भेजें, क्योंकि खाली स्ट्रिंग हटाने का दूसरा तरीका नहीं, बल्कि 422 है।
const group = await bird.whatsapp.groups.update("wag_01krdgeqcxet5s7t44vh8rt9mg", {
subject: "Norwood Fleet — Wednesday route",
});
console.log(group.last_operation?.status); // pending until WhatsApp reports backgroup = client.whatsapp.groups.update(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
subject="Norwood Fleet — Wednesday route",
)
print(group.last_operation) # pending until WhatsApp reports backgroup, err := client.Whatsapp.Groups.Update(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg", bird.WhatsappGroupsUpdateParams{
Subject: bird.Ptr("Norwood Fleet — Wednesday route"),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(*group.LastOperation.Status) // pending until WhatsApp reports back$group = $bird->whatsapp->groups->update(
'wag_01krdgeqcxet5s7t44vh8rt9mg',
(new WhatsAppGroupUpdate())->setSubject('Norwood Fleet — Wednesday route'),
);
echo $group->getLastOperation()?->getStatus(); // pending until WhatsApp reports backbird whatsapp groups update wag_01krdgeqcxet5s7t44vh8rt9mg \
--subject 'Norwood Fleet — Wednesday route'curl -X PATCH "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"subject": "Norwood Fleet — Wednesday route"}'WhatsApp हर फ़ील्ड को अलग से लागू करता है, इसलिए अपडेट आंशिक रूप से लागू हो सकता है: एक फ़ील्ड अस्वीकार हो जाए और बाकी लागू हो जाएँ। ऑपरेशन पूरा होने पर last_operation.results में अपडेट द्वारा भेजे गए हर फ़ील्ड की एक प्रविष्टि होती है, जिससे आप हर अस्वीकृति को उसके इनपुट से मिला सकते हैं।
profile_picture_url इंटरनेट के किसी पते को नहीं, बल्कि आपके वर्कस्पेस की मीडिया लाइब्रेरी की किसी फ़ाइल को दर्शाता है। WhatsApp कम से कम 192 x 192 पिक्सेल और अधिकतम 5 MB की वर्गाकार JPEG लेता है। इसे हटाने से Bird में संग्रहीत चित्र हट जाता है, लेकिन WhatsApp में ग्रुप की फ़ोटो हटाने का कोई ऑपरेशन नहीं है। इसलिए जब तक कोई दूसरा चित्र उसकी जगह नहीं लेता, प्रतिभागियों को मौजूदा चित्र दिखता रहता है। प्रबंधन करने वाला नंबर और join_approval_mode ग्रुप बनाते समय तय होते हैं और यहाँ बदले नहीं जा सकते।
किसी प्रतिभागी को हटाएँ
हटाने की कार्रवाई पलटी नहीं जा सकती। WhatsApp हटाए गए व्यक्ति को इनवाइट लिंक से ग्रुप में शामिल होने से रोकता है। यह रोक लिंक पर नहीं, व्यक्ति पर लागू होती है, इसलिए लिंक रोटेट करने से वह वापस नहीं आ सकता। जोड़ने का कोई ऑपरेशन नहीं है, इसलिए बाहर हुए व्यक्ति को इस ग्रुप में वापस लाने का कोई तरीका नहीं है। उससे फिर जुड़ने के लिए नया ग्रुप बनाकर उसे आमंत्रित करना होगा।
व्यक्ति को उन दो पहचानकर्ताओं में से किसी एक से बताएँ जिनसे ग्रुप की participants सूची उसे दिखाती है: उसका bsuid, जो हर किसी के पास होता है, या E.164 फ़ॉर्मेट में उसका phone_number, जो तभी मौजूद होता है जब WhatsApp उसे साझा करता है। URL में शुरुआती + को %2B के रूप में percent-encode करें, जब तक आपका क्लाइंट यह खुद न करे।
const group = await bird.whatsapp.groups.participants.remove(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
"+15550002222",
);
console.log(group.participants?.length);group = client.whatsapp.groups.participants.remove(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
"+15550002222",
)
print(len(group.participants or []))group, err := client.Whatsapp.Groups.Participants.Remove(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg", "+15550002222")
if err != nil {
log.Fatal(err)
}
if group.Participants != nil {
fmt.Println(len(*group.Participants))
}$group = $bird->whatsapp->groups->participants->remove(
'wag_01krdgeqcxet5s7t44vh8rt9mg',
'+15550002222',
);
echo count($group->getParticipants() ?? []);bird whatsapp groups participants remove wag_01krdgeqcxet5s7t44vh8rt9mg +15550002222 --yescurl -X DELETE "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg/participants/%2B15550002222" \
-H "Authorization: Bearer $BIRD_API_KEY"किसी प्रतिभागी को हटाना उसकी अपनी प्रविष्टि पर तब तक pending रहता है जब तक WhatsApp इसकी पुष्टि नहीं करता, और यह कभी success तक नहीं पहुँचता: participants से प्रविष्टि का गायब होना ही बताता है कि हटाना सफल रहा। ग्रुप में न मौजूद किसी व्यक्ति का मान देने पर 422 E15050 लौटता है।
संदेश पिन करें
पिन करने से ग्रुप का कोई अपना संदेश उसकी चैट में सबसे ऊपर बना रहता है, ताकि बाद में जुड़ने वाले व्यक्ति को बार-बार चर्चा में आने वाली बात के लिए स्क्रॉल न करना पड़े। पिन duration_days तक रहता है, जो 1 से 30 तक हो सकता है और डिफ़ॉल्ट रूप से 7 होता है।
const pin = await bird.whatsapp.groups.pins.create("wag_01krdgeqcxet5s7t44vh8rt9mg", {
message_id: "wam_01kya19eknftrs2s6p82asmvnh",
duration_days: 14,
});
console.log(pin.pinned_until);pin = client.whatsapp.groups.pins.create(
"wag_01krdgeqcxet5s7t44vh8rt9mg",
message_id="wam_01kya19eknftrs2s6p82asmvnh",
duration_days=14,
)
print(pin.pinned_until)pin, err := client.Whatsapp.Groups.Pins.Create(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg", bird.WhatsappGroupsPinsCreateParams{
MessageID: "wam_01kya19eknftrs2s6p82asmvnh",
DurationDays: bird.Ptr(14),
})
if err != nil {
log.Fatal(err)
}
fmt.Println(*pin.PinnedUntil)$pin = $bird->whatsapp->groups->pins->create(
'wag_01krdgeqcxet5s7t44vh8rt9mg',
(new WhatsAppGroupPinnedMessageCreate())
->setMessageId('wam_01kya19eknftrs2s6p82asmvnh')
->setDurationDays(14),
);
echo $pin->getPinnedUntil()?->format(DATE_ATOM);bird whatsapp groups pins create wag_01krdgeqcxet5s7t44vh8rt9mg \
--message-id wam_01kya19eknftrs2s6p82asmvnh \
--duration-days 14curl -X POST "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg/pinned-messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message_id": "wam_01kya19eknftrs2s6p82asmvnh", "duration_days": 14}'संदेश इसी ग्रुप का होना चाहिए: किसी दूसरे ग्रुप का संदेश या वन-टू-वन संदेश देने पर 422 E15053 मिलता है। एक ग्रुप में एक साथ सीमित संख्या में ही पिन रह सकते हैं, और उस सीमा के बाद पिन करने पर कॉल विफल नहीं होती, बल्कि सबसे पुराना पिन हट जाता है। पहले से पिन किए गए संदेश को फिर से पिन करने पर उसकी समाप्ति का समय बदल जाता है। ग्रुप में अभी कौन-से संदेश पिन हैं, यह ग्रुप पर ही pinned_messages के रूप में मिलता है।
दिन पूरे होने पर WhatsApp संदेश को अपने आप अनपिन कर देता है, इसलिए अनपिन तभी करें जब आपको उसे समय से पहले हटाना हो। DELETE /v1/whatsapp/groups/{group_id}/pinned-messages/{message_id} का जवाब 200 होता है, और इसे दोहराना सुरक्षित है: इस ग्रुप का कोई ऐसा संदेश जो पिन नहीं है, उस पर कुछ नहीं बदलता और जवाब फिर भी 200 आता है।
ग्रुप डिलीट करें
डिलीट करने पर ग्रुप WhatsApp से हट जाता है। आपके बिज़नेस समेत हर प्रतिभागी की पहुँच खत्म हो जाती है, और इनवाइट लिंक काम करना बंद कर देता है। इसे पलटा नहीं जा सकता। बातचीत फिर से चलाने के लिए आपको नया ग्रुप बनाकर उसका लिंक भेजना होगा।
const group = await bird.whatsapp.groups.delete("wag_01krdgeqcxet5s7t44vh8rt9mg");
console.log(group.last_operation?.status); // pending until WhatsApp confirms itgroup = client.whatsapp.groups.delete("wag_01krdgeqcxet5s7t44vh8rt9mg")
if group.last_operation:
print(group.last_operation.status) # pending until WhatsApp confirms itgroup, err := client.Whatsapp.Groups.Delete(context.Background(), "wag_01krdgeqcxet5s7t44vh8rt9mg")
if err != nil {
log.Fatal(err)
}
fmt.Println(*group.LastOperation.Status) // pending until WhatsApp confirms it$group = $bird->whatsapp->groups->delete('wag_01krdgeqcxet5s7t44vh8rt9mg');
echo $group->getLastOperation()?->getStatus(); // pending until WhatsApp confirms itbird whatsapp groups delete wag_01krdgeqcxet5s7t44vh8rt9mg --yescurl -X DELETE "https://us1.platform.bird.com/v1/whatsapp/groups/wag_01krdgeqcxet5s7t44vh8rt9mg" \
-H "Authorization: Bearer $BIRD_API_KEY"इसके बाद भी ग्रुप status deleted के साथ पढ़ा जा सकता है, इसलिए उसका सहेजा गया रेफ़रेंस 404 बनने के बजाय अब भी मिल जाता है। failed ग्रुप को भी डिलीट किया जा सकता है, और इसमें किसी बाहरी सिस्टम से संपर्क नहीं होता: क्रिएट से WhatsApp पर कभी कोई ग्रुप बना ही नहीं, इसलिए पंक्ति हटाना Bird का अपना रिकॉर्ड-रखरखाव है। किसी भी दूसरे स्टेटस पर डिलीट 409 E15047 के साथ अस्वीकार हो जाता है।
अपने ग्रुप की सूची देखें
सूची आपके वर्कस्पेस के बनाए ग्रुप लौटाती है, सबसे नए पहले, कर्सर पेज के रूप में। आप एडमिन नंबर से फ़िल्टर कर सकते हैं (number, E.164 नंबर या wan_ ID के रूप में), उस WhatsApp Business Account से जिसके तहत ग्रुप भेजता है (waba), या status से। कई मानों में से किसी से भी मिलान के लिए पैरामीटर दोहराएँ। q विषय और विवरण में किसी सबस्ट्रिंग को खोजता है, और बड़े-छोटे अक्षरों में अंतर नहीं करता।
for await (const group of bird.whatsapp.groups.list({ status: ["active"] })) {
console.log(group.id, group.subject, group.participant_count);
}for group in client.whatsapp.groups.list(status=["active"]):
print(group.id, group.subject, group.participant_count)for group, err := range client.Whatsapp.Groups.List(context.Background(), bird.WhatsappGroupsListParams{
Status: []bird.WhatsAppGroupStatus{"active"},
}) {
if err != nil {
log.Fatal(err)
}
fmt.Println(*group.Id, group.Subject, *group.ParticipantCount)
}foreach ($bird->whatsapp->groups->list(['status' => ['active']]) as $group) {
echo $group->getId(), ' ', $group->getSubject(), PHP_EOL;
}bird whatsapp groups list --status activecurl "https://us1.platform.bird.com/v1/whatsapp/groups?status=active" \
-H "Authorization: Bearer $BIRD_API_KEY"डिलीट किया गया ग्रुप status deleted के साथ सूची में बना रहता है, इसलिए केवल वे ग्रुप देखने के लिए स्टेटस से फ़िल्टर करें जिन्हें आप अब भी संदेश भेज सकते हैं।
समस्या निवारण
412(E15045): नंबर के पास Official Business Account स्टेटस नहीं है, इसलिए WhatsApp उसे ग्रुप बनाने नहीं देता। यह फ़ैसला WhatsApp का है: नंबर की प्रोफ़ाइल पर WhatsApp Manager में यह स्टेटस माँगें, या ग्रुप ऐसे नंबर पर बनाएँ जिसके पास यह पहले से है।404(E15046): यह ID इस वर्कस्पेस के किसी ग्रुप की नहीं है। ग्रुप उसी वर्कस्पेस का होता है जिसने उसे बनाया, इसलिए किसी दूसरे वर्कस्पेस की ID यहाँ नहीं मिलती।409(E15047): ग्रुप पेंडिंग, निलंबित, डिलीट या विफल है। केवल सक्रिय ग्रुप में बदलाव हो सकता है। ग्रुप की स्थिति जानने के लिए उसे पढ़ें।409(E15049): यह नंबर पहले से ही उतने ग्रुप का एडमिनिस्ट्रेटर है जितने WhatsApp अनुमति देता है, यानी 10,000। जिन ग्रुप की बातचीत खत्म हो चुकी है उन्हें डिलीट करें, या यह ग्रुप किसी दूसरे नंबर पर बनाएँ।409(E15054): उसी ग्रुप या उसी प्रतिभागी में कोई बदलाव अभी लंबित है।last_operationपढ़ें और उसके पूरा होने की प्रतीक्षा करें।422(E15050): पाथ में ग्रुप का कोई प्रतिभागी नहीं है। ग्रुप कीparticipantsपढ़ें औरbsuidयाphone_numberठीक वैसे ही इस्तेमाल करें जैसे वह उन्हें दिखाती है।422(E15051): जॉइन अनुरोध की IDs में से एक अब निर्णय की प्रतीक्षा में नहीं है। अनुरोधों की सूची फिर से निकालें और लौटी हुई IDs इस्तेमाल करें।422(E15053): यह मैसेज किसी दूसरे ग्रुप या वन-टू-वन बातचीत का है। मैसेज काto.group_idबताता है कि कौन-सा ग्रुप उसे पिन कर सकता है।pendingग्रुप जो कभी सक्रिय नहीं होता: Bird उसे लंबित छोड़ने के बजाय प्रतीक्षा बंद कर देता है, और ग्रुप कोfailedपर ले जाता है, जिसका कारणlast_operation.last_errorपर होता है। फिर से प्रयास करने के बजाय नया ग्रुप बनाएँ।
संदर्भ
पूरे अनुरोध और प्रतिक्रिया के ढाँचे API संदर्भ में हैं: बनाना, सूची, प्राप्त करना, अपडेट, डिलीट, इनवाइट लिंक बदलना, प्रतिभागी हटाना, जॉइन अनुरोधों की सूची, स्वीकृति और अस्वीकृति, और मैसेज को पिन और अनपिन करना।
अगले कदम
- WhatsApp ग्रुप: ग्रुप किस काम आता है, और डैशबोर्ड में वही जीवनचक्र
- WhatsApp ग्रुप को भेजना: ग्रुप को संबोधित करना, वह क्या स्वीकार करता है, और हर प्रतिभागी की रसीदें
- WhatsApp ग्रुप मैसेज प्राप्त करना: मैसेज किस प्रतिभागी ने लिखा, और ग्रुप को जवाब देना
- बिज़नेस-स्कोप्ड यूज़र ID: वह पहचानकर्ता जिससे किसी प्रतिभागी को नामित किया जाता है, जब आपके पास उसका फ़ोन नंबर न हो
- Idempotency: ऐसे राइट के लिए फिर से प्रयास करना जो शायद पहले ही स्वीकार हो चुका हो
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।