الأمان وإلغاء الوصول
رموز، لا كلمات مرور
ربط مساعد لا يسلّمه أبدًا كلمة مرورك في MailInApp ولا مفتاح API. فالموافقة على شاشة الموافقة تنشئ رمز وصول OAuth مقيّدًا بالصلاحيات التي حدّدتها بالضبط، ومرتبطًا بالحساب الذي اخترته بالضبط. والرموز سلاسل عشوائية مبهمة تُخزَّن مجزّأة (hashed) — وهو النمط نفسه الذي يستخدمه MailInApp أصلًا لمفاتيح API الخاصة بالمطوّرين — فلا تستطيع قراءة قاعدة البيانات استرجاع بيانات اعتماد صالحة للاستخدام، ويكون إلغاء أحدها فوريًا بدلًا من انتظار انتهاء صلاحيته.
- رموز الوصول تدوم 1 ساعة.
- رموز التجديد تدوم 60 يومًا وتتناوب مع كل استخدام — فيتوقف القديم عن العمل لحظة إصدار رمز جديد، وإن أُعيد استخدام رمز تجديد سبق تناوبه (وهي علامة على تسرّبه)، يُلغى الاتصال كله تلقائيًا بدلًا من ذلك الرمز وحده.
تأكيد من خطوتين قبل أي إرسال
منح campaigns:send لا يعني أن المساعد يستطيع مراسلة جهات اتصالك في خطوة واحدة. فالإرسال يمر دائمًا عبر استدعاءين منفصلين لأداتين:
prepare_sendيحدّد جمهورك، ويطبّق حظر الإرسال، ويعرض معاينة حقيقية — وهو موسوم للقراءة فقط، لأنه لا يرسل شيئًا. ويعيد عدد المستلمين، وعيّنة من العناوين، وHTML المعروض، وconfirmationTokenقصير الأمد مرتبطًا بذلك المشروع والموضوع والجمهور تحديدًا.confirm_sendيشترط ذلك الرمز بعينه، إضافة إلى المشروع/الموضوع/الجمهور نفسه تمامًا الذي أُنشئ له. وأي عدم تطابق — موضوع مختلف، أو تحديد صفوف مختلف، أو رمز منتهي الصلاحية (نافذة مدتها 10 دقائق) — يُرفض مباشرة.
الأثر العملي: لا يستطيع المساعد إرسال بريد دون أن يعرض أولًا ما سيرسله وإلى كم شخص، ولا يستطيع تبديل الجمهور أو الموضوع بين عرض المعاينة عليك والإرسال الفعلي. وفي Claude، تُعرض نتيجة prepare_send بطاقةً فعلية مع زر Confirm & Send الخاص بها — فتكون الموافقة البشرية نقرة على معاينة معروضة، لا جملة في نص دردشة قد يتجاوزها النموذج بإقناع نفسه.
وكل إرسال يتم بهذه الطريقة يمر إضافةً عبر الضمانات القائمة في حسابك: الحدّ connectorSendRecipientsMonthly في باقتك (المنفصل عن حجم الإرسال الشهري المعتاد لديك والأقل منه بكثير — 0 في الباقة المجانية)، وقائمة حظر الإرسال نفسها التي يفحصها كل إرسال آخر، والحدّ الأقصى الشهري الإجمالي للإرسال في حسابك. ويُسجَّل كلٌّ منها أيضًا سجلَّ تدقيق مستقلًا.
المحتوى غير الموثوق محاط بسياج، لا موثوق به
حقول جهات الاتصال، ونصوص رسائل صندوق البريد الواردة، والإجابات النصية الحرة في النماذج — كلها يكتبها أشخاص غيرك: مستلم، أو أيًّا كان من يراسل صندوق الدعم لديك. والأدوات التي تعيد هذا المحتوى تغلّفه بوضوح بوصفه بيانات غير موثوقة في نتيجة الأداة، فيتعامل معه مساعدك على أنه شيء يُقرأ ويُلخَّص، لا تعليمات تُتّبع أبدًا. (للمهتمين بالتفاصيل التقنية: هذا السياج موجود في نتيجة الأداة، لا في وصف الأداة أبدًا — فوضع تعليمات سلوكية في الوصف هو بالضبط نوع سطح حقن الأوامر الذي يرفضه مراجعو الموصّلات فور رؤيته.)
ما لا تستطيع أي أداة الوصول إليه أبدًا
لا تستطيع أي أداة موصّل — أيًّا كانت النطاقات التي تمنحها — قراءة مفتاح API، أو سرّ توقيع Webhook، أو كلمة مرور SMTP، أو سرّ عميل OAuth لمصدر بيانات مرتبط، أو تدويرها؛ ولا تغيير إعدادات المدفوعات أو النطاقات أو SMTP؛ ولا إدارة دعوات الفريق. وهذه هي الاستثناءات نفسها تمامًا التي لا يستطيع عضو الفريق بدور editor الوصول إليها في أي مكان آخر في MailInApp أصلًا. ولا شيء هنا يمسّ Stripe أو الفوترة كذلك — فالرسوم المتنازع عليها أو الاسترداد يبقيان إجراءً في لوحة التحكم فقط.
الحساب نفسه، مع إعادة الفحص دائمًا
يرتبط الاتصال بحساب واحد وقت الموافقة، ولا يعيد أبدًا قراءة ترويسة ليقرّر الحساب الذي يعمل باسمه (بخلاف جلسة لوحة التحكم المسجّل دخولها التي تختار بين الشركات). ويُعاد التحقق من ذلك الارتباط مع كل استدعاء مقابل عضويتك الحالية في الفريق — فإن أُزلت من فريق، أو تغيّر دورك، فإن الاستدعاء التالي مباشرة على ذلك الاتصال يعكس الواقع الجديد، لا ما كان صحيحًا حين منحته.
إلغاء اتصال
انتقل إلى الاتصالات في لوحة التحكم (/dashboard/connections). يُدرج كل مساعد وافقت عليه مع نطاقاته الممنوحة وموعد آخر استدعاء أجراه؛ ويسري الإلغاء فورًا — فكل رمز يملكه ذلك المساعد، رموز الوصول والتجديد على حدّ سواء، يتوقف عن العمل عند استدعائه التالي مباشرة. ولا شيء يحتاج إلى التراجع عنه من جهة المنصة (Claude/Gemini) أولًا؛ فالإلغاء هنا كافٍ دائمًا.