كتابات

· 3 دقائق قراءة

دليل الـ 97%: رسالة مع كل حركة للطرد

أتمتة صغيرة تتابع كل شحنة وتخبر العميل بما يحدث رفعت نسبة التسليم لدينا إلى 97%. هكذا كانت تعمل، ولهذا نجحت.

محمود عطيةمؤسس نقرة · طالب طب · مهندس برمجيات
  • التجارة
  • التشغيل
  • الأتمتة
Read in English

في مشروع التجارة الإلكترونية الذي أدرته مع أحد أفراد عائلتي، كنت مسؤولًا عن الإعلانات ومعظم التشغيل. إعلاناتنا كانت تنجح. مشكلتنا كانت فيما بعد الإعلان: طرود تغادر المخزن ثم تعود.

الحل الذي غيّر الأرقام لم يكن شركة شحن جديدة ولا خصمًا أكبر، بل أتمتة صغيرة تراقب كل شحنة وترسل للعميل رسالة كلما تحرك الطرد. ووصلت نسبة التسليم لدينا إلى 97%.

الفكرة في جملة واحدة

العميل يرفض الطرد الذي توقف عن التفكير فيه. وإذا ذكّرته كل خطوة في الرحلة بأن الطرد حقيقي، وفي الطريق، وسيصل قريبًا، فسيُفتح الباب.

الرسائل الأربع التي تهم

لكل شركة شحن أسماؤها لحالات الطرد، لكن العميل لا يحتاج إلا أربع لحظات:

  1. تم الطلب. تأكيد فيه اسمه والمنتجات والمبلغ الإجمالي وموعد الشحن.
  2. تم الشحن. شركة الشحن ورقم التتبع ويوم التسليم المتوقع.
  3. خرج للتوصيل. «طلبك يصل اليوم. سيتصل بك المندوب، فأبقِ هاتفك قريبًا.»
  4. تم التسليم. شكر وطريقة سهلة للإبلاغ عن أي مشكلة.

الرسالة الثالثة هي الأهم. كثير من محاولات التسليم الفاشلة مجرد مكالمات فائتة، ورسالة في صباح اليوم نفسه تحوّل الرقم المجهول إلى رقم منتظر.

كيف كانت الأتمتة تعمل

كنا نشحن مع البريد المصري، ونظام التتبع فيه يُظهر كل مسح للطرد. وكانت الأتمتة مملة عن قصد:

  • مهمة مجدولة تجمع الشحنات المفتوحة بانتظام.
  • لكل شحنة تجلب آخر أحداث التتبع.
  • تحوّل حالات الشحن إلى لحظاتنا الأربع.
  • إن تغيّرت اللحظة منذ آخر فحص، ترسل الرسالة المناسبة مرة واحدة وتسجّل أنها أرسلتها.

وبصورة مبسّطة:

type Moment = 'ordered' | 'shipped' | 'out_for_delivery' | 'delivered';

function momentOf(status: string): Moment | null {
  if (/delivered/i.test(status)) return 'delivered';
  if (/out for delivery|with courier/i.test(status)) return 'out_for_delivery';
  if (/accepted|in transit|dispatched/i.test(status)) return 'shipped';
  return null;
}

for (const s of await openShipments()) {
  const next = momentOf(await latestStatus(s.trackingNumber));
  if (next && next !== s.lastMoment) {
    await sendMessage(s.customer, templates[next](s));
    await markMoment(s.id, next);
  }
}

التفاصيل المهمة لم تكن تقنية. كل رسالة تُرسل مرة واحدة، في وقت مناسب، بعربية بسيطة، وبتوقيع المتجر. وكل رسالة تدعو العميل للرد، فتظهر المشاكل قبل وصول المندوب.

ما تعلّمته

  • الصمت هو العدو. كلما طالت الفترة بلا أخبار، صار الرفض عند الباب أسهل على العميل.
  • التحديد أفضل من المجاملة. «الخميس» أفضل من «قريبًا».
  • رسالة الصباح تسترد تكلفتها وأكثر. إنها أرخص طريقة لتحويل مكالمة فائتة إلى تسليم.
  • الردود ميزة. العميل الذي يرد على رسالة يخبرك بالعنوان الخاطئ أو تغيّر خططه في وقت يسمح بالإصلاح.

من متجر واحد إلى منصة

هذا هو الدرس الذي جعلني أبني نقرة كنظام لا كأداة لبناء المتاجر. الربط مع شركات الشحن، وتحديثات الطلب مع كل حركة، وتسوية التحصيل، كلها على خارطة طريق المنصة، ليحصل كل تاجر على الدليل نفسه دون أن يكتب سطر برمجة واحدًا.

إن كان لديك متجر اليوم، تستطيع البدء بجدول بيانات وأربعة قوالب رسائل. قِس نسبة التسليم لشهر قبل التجربة وشهر بعدها. الفرق بينهما هو ثمن الصمت.

↑↓ تنقّل↵ فتحesc إغلاق
mahmoud@attia: ~