عنصر الاستطلاع
سؤال استبيان بنقرة واحدة: كل خيار هو في آنٍ واحد عنصر تحكّم حقيقي داخل الرسالة ورابط عادي. يعمل التصويت في كل مكان، من Gmail على الويب إلى أبسط تطبيقات البريد النصية، دون أن يُطلب من المستلم مغادرة بريده الوارد في معظم الحالات.
آلية العمل
يُعرض كل خيار في الاستطلاع بتمثيلين في الوقت نفسه، لا بتمثيل واحد يُختار وقت البناء. فحيثما يدعم تطبيق البريد إرسال النماذج داخل الرسالة (Gmail على الويب/Android، وYahoo، وغيرهما)، يكون كل خيار نموذج <form method="post"> حقيقيًا يُرسَل مباشرة إلى نقطة نهاية التفاعلات العامة في MailInApp، فيُسجَّل الصوت بالنقر عليه دون مغادرة البريد الوارد. ويُغلَّف هذا النموذج في مستوى حركي فقط، ويقترن بقاعدة CSS تُخفي التمثيل الثاني: رابط <a href> عادي إلى /v/[token]/act يؤكّد الصوت نفسه ويسجّله على صفحة مستضافة.
وحيثما لا تُحترم قاعدة CSS هذه (Outlook، أو أي تطبيق بريد لا يستطيع إرسال نموذج داخل الرسالة)، يصبح ذلك الرابط المخفي مرئيًا بدلًا من ذلك ويؤدي المهمة. فالرابط العادي هو العنصر الأساسي الشامل الوحيد الذي يستطيع كل تطبيق بريد عرضه واتّباعه. ويُرسَل المساران كلاهما عبر نقطة نهاية التسجيل نفسها وينتجان حدثًا متطابقًا، فلا تتشعّب النتائج أبدًا بحسب تطبيق البريد الذي استخدمه المستلم.
يُسجَّل الصوت بمجرد تأكيدك على الصفحة المباشرة (أو فورًا عند الإرسال من داخل الرسالة) — لا عند مجرد جلب الرابط. وهذا مهم لأن أدوات الفحص في الشركات وأدوات أمان البريد الوارد تجلب مسبقًا كل رابط في الرسالة لحظة وصولها؛ فلو احتُسب طلب GET مجرد، لامتلأت نتائج الاستطلاع بالروبوتات قبل أن يفتح أي إنسان الرسالة. ويحدث التأكيد عبر إرسال نموذج حتى في مسار الرابط، ولهذا يعمل /v/[token]/act على خطوتين، تأكيد ثم تسجيل، بدلًا من إعادة التوجيه والتسجيل معًا.
يُزال تكرار صوت المستلم نفسه. فإعادة نقره على رابطه (نقرة مزدوجة متعجّلة، أو إعادة تحميل الصفحة) لا تُحدث شيئًا بدلًا من إضافة صف ثانٍ، ويُفرض ذلك عبر معرّف مستند Firestore حتمي مبني على الحملة والعنصر والمستلم. أما الأصوات المجهولة (دون رمز مستلم — مثل صوت من ملف HTML مُصدَّر ولُصق في مزوّد خدمة بريد (ESP) خارجي) فلا يُزال تكرارها لكل شخص؛ إذ لا يوجد شخص يُبنى عليه المفتاح. وبدلًا من ذلك تخضع لحدّ معدّل لكل عنوان IP ولكل حملة ولكل دقيقة، لأن معرّف الحملة ظاهر في مصدر الرسالة نفسها، ولا شيء آخر يمنع برنامجًا نصيًا من إرسال أصوات عشوائية.
الحقول القابلة للضبط:
- السؤال — نص سؤال الاستطلاع، مع لونه وحجم خطه الخاصين.
- لون الخلفية، والحشو، والحد، واستدارة الزوايا للبطاقة.
- لون نص الخيار ولون خلفية الخيار — تخصيص نمط مشترك يُطبَّق على كل أزرار الاختيار.
كل خيار استطلاع عنصر فرعي بحقل واحد هو التسمية — أضف الخيارات أو احذفها أو أعد ترتيبها بحرية في الشجرة.
إذا كان للمشروع تاريخ إغلاق أو حدّ أقصى للردود مضبوط (راجع دورة حياة الاستبيان) وقد بُلغ، يستبدل العرض المباشر بأزرار الاختيار التفاعلية نظائر رمادية غير نشطة، مع ملاحظة «هذا الاستبيان مغلق أمام الردود الجديدة». أما HTML المُرسَل نفسه فلا يُظهر هذه الحالة أبدًا — فهو ثابت لحظة الإرسال، ولا يجري التحقق إلا عند فتح الصفحة، لا عند إرسال الرسالة.
أمثلة
Subject
Quick one: what should we build next?
استطلاع بسؤال واحد («ما الميزة التي يجب أن نبنيها تاليًا؟») داخل نشرة عن منتج يمنحك قراءة مباشرة لمستوى الاهتمام دون عناء نموذج كامل. راجع الاستبيانات وآراء NPS للاطلاع على النمط الأوسع لجمع الملاحظات المنظّمة من البريد الوارد مباشرة. ويمكن لرسالة تلخيص فعالية أن تسأل «هل ستحضر فعالية أخرى؟» مع الخيارات «نعم»/«لا»/«ربما»، لتغذّي التخطيط للفعالية التالية مباشرة. ويمكن للفرق المتردّدة بين خيارين (A/B) أن تستخدم الاستطلاع تصويتًا داخليًا خفيفًا («الشعار A أم الشعار B؟») يُرسَل إلى أصحاب المصلحة، مع ظهور النتائج مباشرة على صفحة النتائج فور وصولها.
كيف يبدو البديل الثابت
<div id="em-poll-1" style="margin:12px 0;background-color:transparent">
<p style="margin:0 0 10px;font-weight:600;font-size:16px;color:#111827">Which do you prefer?</p>
<div>
<span class="kn-fallback">
<a href="https://mailinapp.com/v/eyJhbGci.../act?blockId=poll-1&blockType=poll&action=vote&option=Option+A"
style="display:inline-block;margin:0 6px 6px 0;padding:8px 14px;border:1px solid #d1d5db;border-radius:6px;background-color:#ffffff;color:#111827;font-size:14px;text-decoration:none">
Option A
</a>
</span>
</div>
</div>
هذا هو مسار الرابط في المستوى 2: رابط <a> عادي إلى /v/[token]/act، منسَّق ليبدو مثل زر الاختيار نفسه الذي يعرضه النموذج داخل الرسالة — ولا يظهر إلا حين يُخفى النموذج الحركي عبر CSS.