قاعدة المعرفة
القوالب
متن يُكتب مرة واحدة، ويُدار بإصدارات، ويُرسل مرات كثيرة: من المحرّر، أو من شيفرتك الخاصة، أو عبر وكيل.
التفاصيل
- القالب يخصّ الاتصال لا الشخص الذي كتبه، وهذا بعينه سبب استبدال النسخة الأولى من هذا. فتلك كانت مرتبطة بالمستخدم: قالب أحد الزملاء كان غير مرئي لمفتاح API خاص بمساحة العمل، فلم يكن بوسع أي تكامل أن يرسل ما يراه الشخص الذي أعدّه، وحذف حساب المؤلّف كان يأخذ معه قوالب مساحة العمل. وقد جرى ترحيل الصفوف بدل إسقاطها.
- طريقتان لتأليف المتن. شجرة كتل فوق مكوّنات
@react-email/components(Section, Row, Column, Container, Text, Heading, Button, Link, Img, Hr, Markdown, CodeBlock, CodeInline)، يجري التحقق منها أثناء كتابتها، فتُرفض العقدة الخاطئة أو قيمةhrefغير الآمنة في النداء نفسه الذي كتبها بدل أن تصل في صورة بريد معطوب. أو ترميز تُصيّره بنفسك: إن كانت قوالبك أصلًا مكوّنات react-email في مستودعك الخاص، فصيّرها هناك بـ@react-email/renderوأرسل الـ HTML، الذي يُنقّى مرة واحدة عند نشر الإصدار. - ثلاث وعشرون نقطة انطلاق وواحدة فارغة، في معرض لا في قائمة، لأن هذه أشياء لا بدّ أن تراها قبل أن تختار بينها، فكل بطاقة تعرض البريد نفسه. ترحيب وتحقّق، وإيصالات وفواتير، وشحن وتجديدات، وملخّصات وإعلانات، موزّعة تحت أربعة عناوين، وكل واحدة منها تُفتح في المحرّر المرئي وكل جزء فيها قابل للنقل وإعادة التنسيق والحذف. وأيًّا كان ما تختاره فإنه يصل كمسودّة، فلا شيء قابل للإرسال حتى تنشره.
- المعرض هو الجزء الوحيد من هذا الموجود في التطبيق فقط. فالمستدعي الذي يصل إلى القوالب من شيفرتك الخاصة أو من وكيل يرسل متنًا (مستند كتل أو ترميزك الخاص) بدل أن يسمّي نقطة انطلاق، فالثلاث والعشرون موضعٌ للبدء لا كتالوج للتثبيت منه.
- الفتحات المُسمّاة والخصائص المُسمّاة هما نوعا الفراغ، وتُكتب على هيئة {{key}} في المتن وفي الموضوع. الفتحة يملؤها من يحرّر القالب وتحمل قيمة افتراضية، فالإرسال الذي لا يسمّي شيئًا يُصيَّر رغم ذلك. أما الخاصية فتُزوَّد عند الإرسال، والمعلَّمة منها بأنها مطلوبة ترفض الإرسال عند غيابها: رمز 422، ولا يخرج أي بريد. وهذا الرفض هو الغاية من التصريح بها: فالبديل رسالة تخرج وفيها فراغ مكان رقم الطلب، لا يبلّغ عنه شيء ولا يستطيع أحد استرجاعه.
- الإصدار المنشور مُجمَّد. فتحرير متن قالب منشور يسكّ مسودّة جديدة بدل أن يعيد كتابة ما هو حيّ، فتظل عمليات الإرسال تحلّ إلى ما حلّت إليه بالأمس حتى ينشر أحدهم، والإرسال الذي يثبّت رقم إصدار لا يتأثر حتى عندئذٍ. ويُصرَّف المتن عند النشر، وهو ما يجعل القالب الذي لا يُصيَّر يفشل عند من ينشره لا عند المستلِم.
- المعاينة تُصيّر تمامًا ما سينتجه الإرسال دون أن ترسله، وتبلّغ عمّا لا يزال فارغًا بدل أن ترفضه. فالقالب الذي يُعايَن هو عادةً قالب قيد الكتابة، والمؤلّف الذي يملأ كتلة واحدة في كل مرة لا ينبغي أن يضطر إلى استيفاء كل خاصية ليرى ما أنجزه حتى الآن.
- كل قالب يحمل سجلّه الخاص لما أرسله: كم رسالة خرجت خلال آخر سبعة أو ثلاثين أو تسعين يومًا، وأيّها فُتحت وأيّها نُقر فيها، وسلسلة يومًا بيوم، وتقسيمًا بحسب مصدر كل إرسال: المحرّر، أو شيفرتك، أو وكيل، أو الطابور. وكل معدّل يسمّي مقامه بنفسه بدل أن يستعيره، لأنها مختلفة فعلًا: فالفتحات تُحسب على الرسائل التي حملت بكسل تتبّع، والنقرات على الرسائل التي حملت رابطًا مُعاد كتابته، وقد تحمل الرسالة أحدهما دون الآخر. أما المعاينة فلا تُسجَّل أبدًا، والإرسال التجريبي يُحسب على حدة ويُستبعد من كل رقم، لأنه لم يخرج قط.
- هذا السجلّ صادق فيما لا يستطيع رؤيته، وهذا هو سبب الثقة في النصف الذي يراه. فالإرسال يُطابَق بسجلّ تسليمه عبر الإرسال نفسه، ولا يحمل سجلًّا إلا البريد المُرسل من شيفرتك الخاصة أو من الطابور. أما الرسالة المُرسلة من المحرّر أو من وكيل أو من المساعد فلا تحمله. لذا فالقالب المستخدم غالبًا من المحرّر تصل معظم عمليات إرساله غير مُطابَقة، ويُعرض عدد غير المُطابَق رقمًا قائمًا بذاته بدل أن يُدمج بوصفه «لم يفتحه أحد».
- أربعة أسطح فوق خدمة واحدة، حتى يكون لسؤال «ما معنى النشر» جواب واحد لا ثلاثة تتفق اليوم. زرّ القوالب في المحرّر يعرض القوالب المنشورة ويستبدل الرسالة بما تختاره بدل أن يلصقه فيها: فالإرسال يسمّي القالب، والإصدار يُثبَّت لحظة اختيارك له، والمتن يُصيَّر حيث أُلِّف، فلا يمكن لنشرٍ يقع بين الاختيار والنقر أن يغيّر ما يخرج، ويبقى التخطيط الذي ما كان المحرّر ليحتمله سليمًا. وما تملؤه هناك هو القيم، لا المتن. و/templates تسع نقاط نهاية خلف نطاقَي templates:read و templates:write، يغلّفها الـ SDK دالةً بدالة. ويحتاج إرسال قالب إلى إذن إرسال إضافةً إلى إذن قالب، حتى يستطيع مفتاح صادر لأداة كتابة إعلانية أن يؤلّف وينشر دون أن يقدر على مراسلة أحد. ويحمل خادم MCP خمس أدوات: list وread وpreview وcreate وsend. ولا توجد عمدًا أداة لتحديث قالب قائم أو حذفه أو نشره. فالتحرير يسكّ مسودّة لن يحلّ إليها الإرسال التالي، والحذف لا رجعة فيه. أما تحرير متن مخزّن فهو شاشة: /workspace/templates تحمل لوحة كتل مع لوحة عناصر ومُفتّش، ومعاينة حيّة إلى جانبها، والحفظ والنشر فعلان منفصلان، وهو ما يجعل الإصدار المنشور شيئًا يمكنك تركه على حاله بينما تعمل على التالي.
- 200 قالب لكل اتصال، ومستند كتل بحدّ أقصى 500 كتلة، وثمانية مستويات تداخل، و20,000 حرف في أي قيمة واحدة، و100 فتحة و100 خاصية؛ ومتن مُرسل كترميز بحدّ أقصى مليون حرف، وموضوع بحدّ أقصى 998. وكل واحد من هذه الحدود حارسٌ ضد سكربت جامح لا حدٌّ من حدود الخطة، وكل واحد منها يرفض برسالة تسمّي الرقم الذي رفض عنده، ولا شيء في القوالب محجوب خلف فئة اشتراك.