WhatsApp ग्रुप प्रबंधित करना
Groups पेज जो कुछ करता है, /v1/whatsapp/groups के अंतर्गत बारह ऑपरेशन भी वही करते हैं, इसलिए किसी ग्रुप का पूरा जीवनचक्र कोड में फिट होता है: बनाएँ, WhatsApp से पुष्टि की प्रतीक्षा करें, इनवाइट लिंक साझा करें, तय करें कौन शामिल होगा, विवरण और पिन अपडेट रखें, और बातचीत समाप्त होने पर हटा दें।
इस पेज पर हर कॉल को दो बातें प्रभावित करती हैं। किसी को भी ग्रुप में जोड़ा नहीं जा सकता, इसलिए इनवाइट लिंक ही एकमात्र रास्ता है, और लोगों को आमंत्रित करना API के बाहर होता है। अधिकांश बदलाव प्रतिक्रिया में नहीं बल्कि WhatsApp पर स्थिर होते हैं, इसलिए जो कॉल बदलाव स्वीकार करती है वह वो कॉल नहीं है जो आपको बताती है कि वह लागू हो गया; बदलाव कैसे स्थिर होता है हर लागू ऑपरेशन के लिए इसे एक बार कवर करता है।
WhatsApp groups बताता है कि ग्रुप किसलिए है और डैशबोर्ड में वही जीवनचक्र कैसा दिखता है। WhatsApp ग्रुप को संदेश भेजना मैसेजिंग को कवर करता है।
पूर्वापेक्षाएँ
आपको whatsapp_management एक्सेस वाली API key चाहिए: इस पेज पर रीड के लिए read लेवल, बाकी सबके लिए write लेवल। Users, teams, and roles इसे देना कवर करता है।
आपको एक बिज़नेस नंबर भी चाहिए जिसके पास 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 होस्ट का नाम देते हैं; अगर आपकी key bk_eu1_ से शुरू होती है, तो इसके बजाय https://eu1.platform.bird.com को कॉल करें। SDK आपकी key से रीजन पढ़ लेते हैं, इसलिए वे कोई होस्ट सेट नहीं करते।
1. ग्रुप बनाएँ
create में एडमिनिस्ट्रेटिंग नंबर और एक विषय दिया जाता है, और कोई अन्य सदस्य नहीं। दो विकल्प ग्रुप के पूरे जीवनकाल के लिए तय हो जाते हैं और बाद में बदले नहीं जा सकते: नंबर, और join_approval_mode, जो तय करता है कि इनवाइट लिंक खोलने पर कोई सीधे शामिल हो जाए (auto_approve, डिफ़ॉल्ट) या एक अनुरोध उठे जिस पर आप निर्णय लें (approval_required)।
Note: creating a group needs a business number with Official Business Account status, the blue check mark WhatsApp puts next to a business name in the chat. WhatsApp Official Business Account covers what Meta requires and how to request it.
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 | ग्रुप समाप्त हो गया है, और पढ़ने योग्य बना रहता है ताकि उसका कोई संग्रहीत संदर्भ अभी भी resolve हो |
failed | WhatsApp ने create को अस्वीकार कर दिया, जो अंतिम है |
failed pending से बाहर निकलने का दूसरा रास्ता है, और last_operation.last_error.description में WhatsApp का अपना कारण होता है। विफल create को उसी ग्रुप पर कभी फिर से प्रयास न करें: इसके बजाय एक नया बनाएँ, और जिस बात पर अस्वीकृति हुई उसे बदलें।
3. लोगों को ग्रुप में आने दें
ग्रुप का invite_link उन लोगों को भेजें जिन्हें आप उसमें चाहते हैं, जो भी चैनल उन तक पहले से पहुँचता है उसके ज़रिए। कोई भी ऑपरेशन प्रतिभागी नहीं जोड़ता, इसलिए लिंक ही अंदर आने का एकमात्र रास्ता है और जुड़ना उनका फ़ैसला है। यह जिसके पास हो उसे प्रवेश देता है, इसलिए इसे एक क्रेडेंशियल की तरह संभालें: WhatsApp groups में बताया गया है कि इसे कितना फैलाना चाहिए।
auto_approve ग्रुप पर, लिंक रखने वाला कोई भी व्यक्ति अंदर है और कुछ तय करने की ज़रूरत नहीं। approval_required ग्रुप पर, लिंक खोलने से एक join request आता है। प्रतीक्षारत अनुरोधों की सूची देखें, फिर उन्हें 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 group webhooks दोनों पेलोड और हर फ़ील्ड देता है।
इनवाइट लिंक को रोटेट करना
रोटेट करने पर एक नया लिंक जारी होता है और ग्रुप के पहले के सभी लिंक बंद हो जाते हैं, इसलिए पुराना लिंक रखने वाला कोई भी व्यक्ति ज्वाइन नहीं कर सकता। जब कोई लिंक आपकी अपेक्षा से अधिक फैल जाए, या किसी को हटाने के बाद जिसे आप वापस नहीं चाहते, तब रोटेट करें। नया लिंक कॉल पर ही वापस आता है, जो 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 कुछ बदलावों की पुष्टि अपने रिप्लाई में करता है और कुछ की webhook पर, और स्टेटस कोड बताता है कि आप किस प्रकार को देख रहे हैं:
| ऑपरेशन | उत्तर | परिणाम कहाँ दिखता है |
|---|---|---|
| Create, update, delete | 202 | ग्रुप का last_operation, जब WhatsApp रिपोर्ट करे |
| प्रतिभागी हटाना | 202 | उस प्रतिभागी का अपना last_operation जो participants में होता है |
| ज्वाइन रिक्वेस्ट स्वीकार या अस्वीकार करना | 202 | रिस्पॉन्स पर ही decided और failed |
| Rotate, pin, unpin | 200 | रिस्पॉन्स, जो पहले से लागू बदलाव है |
पहली दो पंक्तियों के लिए, 202 का मतलब है कि अनुरोध स्वीकार किया गया, लागू नहीं। last_operation.status तब तक pending रहता है जब तक WhatsApp रिपोर्ट न करे, आमतौर पर कुछ सेकंड में, फिर success या failed पर सेटल होता है, और विफलता पर last_error.description कारण बताता है। क्या लागू हुआ यह देखने के लिए ग्रुप को दोबारा पढ़ें।
जब कोई ऑपरेशन pending हो, उसी चीज़ पर दूसरा बदलाव 409 E15054 लौटाता है। ग्रुप-स्तरीय बदलाव ग्रुप का last_operation साझा करते हैं, इसलिए एक अधूरा rename किसी delete को रोकता है। हर प्रतिभागी का अपना होता है, इसलिए एक साथ कई लोगों को हटाने पर हर एक को अपनी स्थिति और अपनी विफलता मिलती है, और केवल उस व्यक्ति की पेंडिंग removal ही उस पर दोबारा प्रयास रोकती है।
दो 409 राइट्स की रक्षा करते हैं और status पहले जाँचा जाता है, इसलिए जो ग्रुप active नहीं है वह last_operation चाहे कुछ भी कहे, E15047 लौटाता है। यह उस ग्रुप के लिए महत्वपूर्ण है जो अभी बनाया जा रहा है, जो दोनों मानदंडों पर एक साथ pending है।
हर राइट एक 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 create समय पर निर्धारित होते हैं और यहाँ बदले नहीं जा सकते।
प्रतिभागी हटाना
हटाना पूर्ववत नहीं किया जा सकता। WhatsApp हटाए गए व्यक्ति को इनवाइट लिंक से ग्रुप में ज्वाइन करने से रोकता है, और यह ब्लॉक लिंक के बजाय व्यक्ति का अनुसरण करता है, इसलिए लिंक रोटेट करने से वे वापस नहीं आ सकते। इसके साथ जोड़ने के लिए कोई add ऑपरेशन नहीं है, इसलिए एक बार बाहर होने पर कुछ भी किसी को इस ग्रुप में वापस नहीं लाता, और उन तक दोबारा पहुँचने के लिए एक नया ग्रुप बनाना और उन्हें उसमें आमंत्रित करना होगा।
व्यक्ति को उस पहचानकर्ता से नाम दें जिसके तहत ग्रुप का 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"प्रतिभागी की removal उनकी अपनी प्रविष्टि पर 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 ग्रुप को भी डिलीट किया जा सकता है, और वह किसी बाहरी सिस्टम तक नहीं पहुँचता: create ने 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): ग्रुप pending, suspended, deleted, या failed है। केवल active ग्रुप ही बदलाव स्वीकार करता है। ग्रुप की स्थिति देखने के लिए उसे पढ़ें।409(E15049): यह नंबर पहले से WhatsApp द्वारा अनुमत 10,000 ग्रुप एडमिनिस्ट्रेट करता है। जिन ग्रुप की बातचीत पूरी हो चुकी है उन्हें डिलीट करें, या यह ग्रुप किसी दूसरे नंबर पर बनाएँ।409(E15054): उसी ग्रुप या उसी प्रतिभागी पर कोई बदलाव अभी भी अधूरा है।last_operationपढ़ें और उसके सेटल होने की प्रतीक्षा करें।422(E15050): पाथ ग्रुप में किसी का नाम नहीं बताता। ग्रुप काparticipantsपढ़ें औरbsuidयाphone_numberका उपयोग करें जैसा वह रिपोर्ट करता है।422(E15051): ज्वाइन रिक्वेस्ट ID में से कोई एक अब निर्णय की प्रतीक्षा में नहीं है। अनुरोध दोबारा सूचीबद्ध करें और वापस आने वाली ID का उपयोग करें।422(E15053): मैसेज किसी दूसरे ग्रुप या एक-से-एक बातचीत का है। मैसेज काto.group_idबताता है कि कौन-सा ग्रुप उसे पिन कर सकता है।pendingग्रुप जो कभी active नहीं होता: Bird pending छोड़ने के बजाय प्रतीक्षा छोड़ देता है, और ग्रुप कोfailedमें ले जाता है जिसका कारणlast_operation.last_errorपर होता है। फिर से प्रयास करने के बजाय एक प्रतिस्थापन बनाएँ।
संदर्भ
पूर्ण अनुरोध और रिस्पॉन्स आकार API संदर्भ में हैं: create, list, get, update, delete, इनवाइट लिंक रोटेट करें, प्रतिभागी हटाएँ, list, ज्वाइन रिक्वेस्ट approve और reject करें, और मैसेज pin और unpin करें।
अगले कदम
- WhatsApp groups: ग्रुप किसके लिए है, और डैशबोर्ड में वही जीवनचक्र
- WhatsApp group को मैसेज भेजना: ग्रुप को संबोधित करना, इसके लिए क्या चाहिए, और इसकी प्रति-प्रतिभागी रसीदें
- WhatsApp group मैसेज प्राप्त करना: कौन-से प्रतिभागी ने लिखा, और ग्रुप को उत्तर देना
- Business-scoped user IDs: वह पहचानकर्ता जिससे प्रतिभागी को नाम दिया जाता है जब आपके पास फ़ोन नंबर नहीं होता
- Idempotency: ऐसे राइट को फिर से प्रयास करना जो शायद पहले ही स्वीकार हो चुका हो
संबंधित संसाधन
इस विषय के लिए दस्तावेज़, गाइड और उदाहरणों के साथ आगे बढ़ें।