إرسال تصويت (Poll Vote)
التصويت برمجياً على استطلاع رأي في واتساب.
تسجيل الدخول مطلوب
سجل الدخول لاستبدال المعرفات (Instance ID) ورمز الوصول (Access Token) بمعلومات حسابك الحقيقي لاختبار ال API مباشرة.
تسجيل الدخوللا توجد معاملات استعلام مطلوبة
هذه النهاية الطرفية لا تتوقع بيانات في الرابط.
توصيات
تحقق من معرف رسالة الاستطلاع قبل محاولة التصويت.
استخدم هذا للاختبار الآلي لتدفقات عمل الاستطلاع.
المشاركة البرمجية: إتقان محرك تصويت الاستطلاعات
في البيئات عالية الأتمتة، غالباً ما تحتاج البوتات إلى المشاركة في عملية اتخاذ القرار جنباً إلى جنب مع المستخدمين البشريين. توفر نقطة نهاية /v2/send/poll/vote القدرة على الإدلاء بالأصوات أو تغييرها أو سحبها من استطلاعات واتساب الحالية برمجياً. يتيح ذلك سيناريوهات معقدة حيث يمكن لوكيل الذكاء الاصطناعي التعبير عن استنتاجاته أو تفضيلاته أو حالته عبر واجهة استطلاع الرأي الأصلية التفاعلية.
🏗️ بنية التصويت البرمجي
يتطلب التصويت الديناميكي عبر API فهماً دقيقاً لنظام حالة الاستطلاع:
- ارتباط الهدف: يتطلب المحرك
messageIdصالحاً لاستطلاع تم إرساله مسبقاً. يضمن ذلك تثبيت التصويت في السياق التفاعلي الصحيح. - فهرسة الخيارات: يتيح لك Wawp التصويت باستخدام إما الاسم النصي الصريح للخيار (مثلاً
"رائع!") أو موقعه المفهرس (بدءاً من 0) داخل الاستطلاع. يقوم محركنا تلقائياً بتحويل هذه الخيارات إلى المعرفات الثنائية الداخلية التي تتطلبها شبكة واتساب، مما يمنع أخطاء "التصويت الشبح". - تجاوز الحالة: يتبع واتساب نموذج "التجاوز" (Overwrite) للتصويت. عندما تستدعي نقطة النهاية هذه، فإن مصفوفة
votesالجديدة الخاصة بك تحل تماماً محل اختيارك السابق لهذا الاستطلاع. إذا أرسلت مصفوفة فارغة[]، يتم سحب تصويتك السابق بالكامل.
🛡️ أفضل الممارسات الاستراتيجية لمشاركة البوت
1. التحقق قبل التصويت
لضمان موثوقية عالية، يجب على نظامك التحقق من وجود الاستطلاع وأنه لا يزال "نشطاً".
- التنفيذ: قبل التصويت، تحقق من قاعدة بياناتك المحلية أو استخدم مستمعاً (Listener) للتأكد من عدم حذف الاستطلاع. سيؤدي التصويت البرمجي على استطلاع غير موجود أو منتهي الصلاحية إلى إرجاع خطأ
Message Not Found. - التوقيت: تجنب التصويت فوراً (في غضون أجزاء من الثانية) بعد إنشاء استطلاع بواسطة مستخدم آخر. إضافة تأخير بسيط (1-2 ثانية) يحاكي وقت المعالجة الطبيعي ويضمن انتشار الاستطلاع بالكامل عبر شبكة واتساب.
2. إدارة منطق الإجابات المتعددة
معلمة votes هي مصفوفة لسبب وجيه.
- مربعات الاختيار مقابل أزرار الاختيار: إذا تم إنشاء الاستطلاع الأصلي مع
multipleAnswers: true، يمكن أن تحتوي مصفوفتك على عدة فهارس (مثلاً[0, 2]). أما إذا كان استطلاعاً بخيار واحد، فإن المصفوفات التي تحتوي على أكثر من عنصر ستؤدي عادةً إلى احتساب العنصر الأخير فقط من قبل واجهة واتساب. - اتساق تجربة المستخدم: تأكد من أن تصويتات البوت الخاصة بك تتماشى مع أي تصريحات نصية سابقة أدلى بها لتجنب الخلط لدى المشاركين البشريين.
3. قوة السحب الانتقائي
يسمح التصويت البرمجي بـ "الإجماع المؤقت".
- سيناريو: يمكن للبوت الخاص بك التصويت لخيار ما أثناء "تحقيقه" في مشكلة، ثم سحب تصويته أو التبديل إلى خيار "النجاح" بمجرد انتهاء التحقيق. يوفر هذا مؤشراً مرئياً للتقدم يكون أكثر دقة واحترافية من إغراق الدردشة برسائل الحالة المتكررة.
🧩 حالات استخدام متقدمة
بناء الإجماع المؤتمت
قم ببناء "بوت مدير" (Moderator Bot) يراقب استطلاعاً جماعياً. بمجرد وصول خيار محدد إلى حد معين (مثلاً 5 أصوات)، يمكن للبوت الإدلاء بتصويته لهذا الخيار لـ "إتمام الصفقة" ثم إطلاق رسالة تنسيق أو دعوة تقويم تلقائياً.
إعادة محاذاة المشاعر
في تدفق دعم مدفوع بالذكاء الاصطناعي، إذا بدأ المستخدم استطلاعاً لتقييم تجربته، يمكن للبوت التصويت برمجياً لخيار "محايد" في البداية. مع تحسن المحادثة وارتفاع درجات تحليل المشاعر، يمكن للبوت تحديث تصويته إلى "إيجابي"، مما يوفر للوكيل البشري إشارة مرئية لتقييم الذكاء الاصطناعي الحالي للتفاعل.
🛠️ المزالق الشائعة والحلول
- عوائق الترخيص: تأكد دائماً من تهيئة مثيلك بشكل صحيح قبل دمج التصويت البرمجي في سير عمل الإنتاج الخاص بك.
- حساسية حالة الأحرف: عند التصويت عبر أسماء الخيارات النصية، تأكد من مطابقة السلاسل لخيارات الاستطلاع تمائاً (بما في ذلك حالة الأحرف والمسافات الزائدة). سيؤدي عدم التطابق إلى تجاهل التصويت أو إرجاع خطأ. استخدام الفهارس (أرقام صحيحة) هو أفضل ممارسة موصى بها للأنظمة عالية الموثوقية.
- ظروف السباق (Race Conditions): إذا حاولت عدة مثيلات من البوت الخاص بك تحديث تصويت في نفس الاستطلاع في وقت واحد، فإن آخر طلب يستلمه بروكسي Wawp هو الذي سيحدد الحالة النهائية. استخدم طابوراً مركزياً أو آلية قفل في نظامك الخلفي إذا كان لديك عدة مجموعات بوت تتفاعل مع نفس الدردشة.
ملخص الإمكانيات:
- الإدلاء بالأصوات أو تحديثها أو سحبها برمجياً في استطلاعات واتساب الأصلية.
- دعم التصويت عبر سلاسل الخيارات الحرفية أو الفهارس الرقمية.
- حصري للأتمتة المتقدمة وتكامل الذكاء الاصطناعي.
- دعم كامل لبنيات استطلاعات الرأي متعددة الخيارات (checkbox) والخيارات الفردية (radio).
- مزامنة في الوقت الفعلي مع شبكة واتساب لتحديثات واجهة المستخدم الفورية على أجهزة المستلمين.
البارامترات
قم بتهيئة المعاملات المطلوبة للتفاعل مع نقطة النهاية هذه. جميع وسائط الاستعلام والبيانات مدرجة أدناه مع تفاصيلها.
محتوى الطلب
يرسل كـ JSONstring | المعرف الفريد لجلسة واتساب مثال: | ||
string | رمز وصول API الخاص بك مثال: | ||
string | رقم الهاتف المستهدف أو معرف المجموعة مثال: | ||
string | المعرف الفريد لرسالة الاستطلاع مثال: | ||
array | مصفوفة من أسماء الخيارات المختارة أو فهارسها مثال: |
أمثلة الكود
استخدم أمثلة الكود الجاهزة لدمج واجهة برمجة التطبيقات (API) في مشروعك بسرعة وكفاءة. اختر لغة البرمجة والمكتبة التي تفضلها.
الردود المتوقعة
استكشف كافة الردود والنتائج المحتملة من الخادم. قمنا بتوثيق كل كود حالة (Status Code) مع أمثلة للبيانات لتسهيل معالجة الأخطاء والنجاح.
Example
{
"_data": {
"id": {
"fromMe": true,
"remote": "000000000000@c.us",
"id": "MSG_ID_123456",
"_serialized": "true_000000000000@c.us_MSG_ID_123456"
},
"viewed": false,
"body": "BASE64_IMAGE_DATA",
"type": "image",
"t": 1759108866,
"from": {
"server": "c.us",
"user": "111111111111",
"_serialized": "111111111111@c.us"
},
"to": {
"server": "c.us",
"user": "000000000000",
"_serialized": "000000000000@c.us"
},
"ack": 0,
"isNewMsg": true,
"star": false,
"kicNotified": false,
"caption": "Here's your requested image.",
"deprecatedMms3Url": "https://example.com/media-url",
"directPath": "/media/direct/path/example",
"mimetype": "image/jpeg",
"filehash": "FILE_HASH_PLACEHOLDER",
"encFilehash": "ENC_FILE_HASH_PLACEHOLDER",
"size": 192487,
"mediaKey": "MEDIA_KEY_PLACEHOLDER",
"mediaKeyTimestamp": 1759108865,
"streamable": false,
"mediaHandle": null,
"isFromTemplate": false,
"pollInvalidated": false,
"isSentCagPollCreation": false,
"latestEditMsgKey": null,
"latestEditSenderTimestampMs": null,
"mentionedJidList": {
},
"groupMentions": {
},
"isEventCanceled": false,
"eventInvalidated": false,
"isVcardOverMmsDocument": false,
"isForwarded": false,
"isQuestion": false,
"questionReplyQuotedMessage": null,
"questionResponsesCount": 0,
"readQuestionResponsesCount": 0,
"labels": {
},
"hasReaction": false,
"disappearingModeInitiator": "chat",
"disappearingModeTrigger": "chat_settings",
"productHeaderImageRejected": false,
"lastPlaybackProgress": 0,
"isDynamicReplyButtonsMsg": false,
"isCarouselCard": false,
"parentMsgId": null,
"callSilenceReason": null,
"isVideoCall": false,
"callDuration": null,
"callCreator": null,
"callParticipants": null,
"isCallLink": null,
"callLinkToken": null,
"isMdHistoryMsg": false,
"stickerSentTs": 0,
"lastUpdateFromServerTs": 0,
"invokedBotWid": null,
"bizBotType": null,
"botResponseTargetId": null,
"botPluginType": null,
"botPluginReferenceIndex": null,
"botPluginSearchProvider": null,
"botPluginSearchUrl": null,
"botPluginSearchQuery": null,
"botPluginMaybeParent": false,
"botReelPluginThumbnailCdnUrl": null,
"botMessageDisclaimerText": null,
"botMsgBodyType": null,
"requiresDirectConnection": false,
"bizContentPlaceholderType": null,
"hostedBizEncStateMismatch": false,
"senderOrRecipientAccountTypeHosted": false,
"placeholderCreatedWhenAccountIsHosted": false,
"galaxyFlowDisabled": false,
"links": {
}
},
"mediaKey": "MEDIA_KEY_PLACEHOLDER",
"id": {
"fromMe": true,
"remote": "000000000000@c.us",
"id": "MSG_ID_123456",
"_serialized": "true_000000000000@c.us_MSG_ID_123456"
},
"ack": 0,
"hasMedia": true,
"body": "Here's your requested image.",
"type": "image",
"timestamp": 1759108866,
"from": "111111111111@c.us",
"to": "000000000000@c.us",
"deviceType": "android",
"isForwarded": false,
"forwardingScore": 0,
"isStatus": false,
"isStarred": false,
"fromMe": true,
"hasQuotedMsg": false,
"hasReaction": false,
"vCards": {
},
"mentionedIds": {
},
"groupMentions": {
},
"isGif": false,
"links": {
}
}Command Palette
Search for a command to run...