البريد الإلكتروني هو وسيلة التكامل الوحيدة التي تملكها كل مؤسسة بالفعل. يرسل الموردون الفواتير إليه، وتصل عبره البيانات المقدمة في النماذج، وتبعث المعدات التنبيهات إليه. يعامل استقبال البريد ومعالجته هذه القناة كواجهة بدلا من مهمة روتينية: يتصل برنامج نصي بصندوق البريد، ويقرأ ما وصل، ثم ينفذ الإجراء المطلوب.
إنه نمط قديم لا يحظى بالتقدير الكافي، لأن البديل، وهو مطالبة كل جهة تتعامل معها باعتماد API الخاص بك، لا يكون متاحا في العادة. تشرح هذه الصفحة الاستخدامات التي يناسبها، وكيفية بنائه بحيث لا يتعطل، والحالات التي يكون فيها webhook هو الحل الأفضل فعلا.
استخدامات استقبال البريد ومعالجته عبر IMAP
يثبت هذا الأسلوب فائدته في كل موضع لا تريد فيه الجهة المرسلة التكامل معك مباشرة أو لا تستطيع ذلك.
المستندات الواردة من الجهات المتعاملة. تصل الفواتير وأوامر الشراء وإيصالات التسليم وكشوف الحساب كمرفقات من مؤسسات لن تبني تكاملا مع نظامك. وغالبا ما يكون برنامج نصي يحفظها حسب المرسل والرقم المرجعي هو التكامل بأكمله.
تنبيهات المعدات. هناك كثير من الأجهزة التي لا ترسل سوى البريد الإلكتروني، مثل أجهزة النسخ الاحتياطي وأنظمة المراقبة والمعدات الصناعية القديمة. يوفر استقبال البريد عبر IMAP نقطة واحدة لجمع رسائلها.
بيانات النماذج والردود. يصلح لأي نظام يرسل إليك رسالة منظمة، بما في ذلك إشعارات الارتداد والردود التلقائية التي تفيد بأن الشخص خارج المكتب عندما تريد اتخاذ إجراء بناء عليها.
الموافقة من خلال الرد. رد شخص بكلمة "نعم" على رسالة هو خطوة في سير العمل، وغالبا ما تكون قراءة الرد برمجيا أبسط من بناء واجهة لا يريد أحد تسجيل الدخول إليها.
إعداده بحيث لا يتعطل
آلية استقبال البريد ومعالجته عادية، أما استمرارية النظام فتعتمد على مجموعة صغيرة من القرارات.
خصص له صندوق بريد مستقلا. لا تستخدم مجلدا داخل صندوق شخص آخر، ولا تشاركه مع شخص يقرأ الرسائل نفسها. يحمي العنوان المخصص افتراضات البرنامج النصي من أن يفسدها شخص يرتب الرسائل، ولا يضيف تكلفة هنا لأن الفوترة لا تتم حسب عدد المستخدمين.
استخدم بيانات دخول مقيدة بهذه المهمة. لا تستخدم حساب شخص بعينه. إذا تسربت بيانات دخول البرنامج النصي أو احتاجت إلى تغيير، فيجب أن يقتصر الأثر على البرنامج وحده.
انقل الرسائل التي تمت معالجتها ولا تحذفها. يمنحك مجلد "تمت المعالجة" سجل تدقيق وطريقة لإعادة المعالجة بعد إصلاح خطأ. أما الحذف فيجعل كل هفوة دائمة، ولا بد من وقوع هفوات.
تعامل مع وصول الرسالة نفسها مرتين. تحدث إعادة المحاولة وإعادة الاتصال وإعادة المعالجة جميعها. استخدام Message-ID كمفتاح وتجاوز أي رسالة شوهدت من قبل يحول المعالجة المكررة من مشكلة في البيانات إلى عملية لا تغير شيئا.
اجعل الفشل واضحا. توقف برنامج نصي عن قراءة صندوق البريد لا يظهر إلى أن يسأل أحد عن مكان الفواتير. يجب أن يرسل تنبيها عندما لا يعمل في موعده، لا عند وقوع خطأ فقط.
لماذا يناسب IMAP هذه المهمة
يعمل استقبال البريد ومعالجته عبر IMAP لأن IMAP نظام ملفات حقيقي للبريد يمكن الوصول إليه عن بعد، لا مجرد بروتوكول تنزيل.
يمكنك البحث على الخادم، وجلب الترويسات وحدها قبل أن تقرر تنزيل نص الرسالة، ونقل الرسائل بين المجلدات، ووضع العلامات، وكل ذلك من دون تنزيل صندوق البريد بأكمله. وهكذا يستطيع البرنامج النصي اختيار ما يحتاج إليه بتكلفة منخفضة، وهذا مهم عندما يضم الصندوق تاريخا يمتد سنوات.
كما أنه مدعوم في كل مكان، وهذه هي الحجة الأهم. توجد مكتبة له في كل لغة برمجة، ولم يتغير البروتوكول بطرق تكسر البرامج، وسيظل البرنامج النصي الذي تكتبه اليوم يعمل بعد عشر سنوات. وهذا ضمان أقوى مما تقدمه معظم واجهات API الخاصة بالموردين.
من المفيد أن تعرف أن الباقة المجانية تشمل IMAP، ولذلك لا يكلف صندوق استقبال مخصص للاستقبال فقط أي شيء. لكنه لا يستطيع الإرسال، لذا يحتاج أي نظام يرد برمجيا إلى باقة مدفوعة أو ملف SMTP خاص به.
تكلفة التشغيل
جانب التكلفة هو المفاجأة غالبا، لأنه أقل مما يتوقعه الناس.
صندوق استقبال البريد صندوق عادي، وعدد الصناديق محدود حسب فئة الباقة بدلا من فرض رسوم على كل واحد. لذلك لا توجد تكلفة هامشية لإضافة عنوان استقبال ثان عشر، وهو ما يجعل تخصيص صندوق لكل مصدر خيارا عمليا لا تبذيرا. ما تستهلكه فعليا هو مساحة من التخزين المشترك، ووقت المسؤول عندما يتعطل شيء.
يغير ذلك معايير التصميم مقارنة بالمنصات التي تفرض رسوما لكل مستخدم. ففيها تضغط عمليات استقبال البريد كلها داخل عنوان واحد مثقل لأن كل عنوان جديد يكلف مالا، ثم يضطر البرنامج النصي إلى فصل تدفقات متعددة لا علاقة بينها. هنا يكون الخيار الأرخص هو الأنظف أيضا.
متى يكون webhook أفضل
الوضوح بشأن هذه النقطة يمنع بناء الحل الخطأ.
إذا كانت الجهة المتعاملة توفر webhook، فاستخدمه. يتفوق الإرسال الفوري (push) على الاستقصاء الدوري (polling) في زمن الاستجابة والموثوقية والوضوح. تحصل على حمولة منظمة فور وقوع الحدث بدلا من اكتشافه عند الاستقصاء التالي ومحاولة تحليل نص مكتوب. استقبال البريد ومعالجته هو البديل عند غياب هذا الخيار.
وللاستقصاء حد أدنى معقول للفاصل الزمني. الفحص كل دقيقة مقبول، أما الفحص كل ثانية فهو استخدام مفرط وسيؤدي إلى تقييد معدل الطلبات. إذا كنت تحتاج فعلا إلى معالجة فورية، فالبريد الإلكتروني وسيلة نقل غير مناسبة بصرف النظر عن طريقة قراءته.
كما أن تحليل البريد الذي يكتبه البشر معركة خاسرة. استخراج رقم أمر شراء من رسالة أنشأتها آلة موثوق، أما استخراج النية من فقرة كتبها شخص فليس كذلك. وبناء سير عمل يعتمد عليه سينتج تدفقا مستمرا من الإخفاقات التي لا يستطيع أحد منعها تماما.
التوسع إلى ما بعد صندوق واحد
يتوسع استقبال البريد ومعالجته جيدا، ويعتمد الشكل المناسب على عدد التدفقات لديك.
إذا كان لديك عدد قليل من المصادر، يكون تخصيص صندوق لكل مصدر أوضح حل. يقرأ كل برنامج نصي عنوانه الخاص، ولا يؤثر تغيير أحدها في الآخر. وبما أن عدد الصناديق محدود حسب فئة الباقة لا أن الرسوم تفرض على كل واحد، تكلف عشرون من عناوين الاستقبال مثل عنوان واحد.
عند وجود مصادر كثيرة من النوع نفسه، يكون صندوق واحد يسبقه catch-all أنسب. تصل رسائل invoice-acme@ وinvoice-globex@ إلى المكان نفسه، ويحمل العنوان ذاته معلومات التوجيه التي يحتاج إليها البرنامج النصي. إنها التقنية نفسها المستخدمة في عنوان مستعار لكل تسجيل، لكن للأجهزة بدلا من الموردين.
عندما يكون الحجم كبيرا فعلا، تذكر أن مساحة التخزين مشتركة. سيستهلك صندوق الاستقبال الذي تتراكم فيه المرفقات هذه المساحة، لذلك يجب أن تكون الحصة وسياسة الاحتفاظ جزءا من التصميم منذ البداية لا أمرا تكتشف الحاجة إليه لاحقا. نشرح ذلك في حصص مساحة تخزين صناديق البريد.