علّم شحنات بوسطة المسلَّمة في جدولك

عند تسليم بوسطة لطلب، يُحدَّث صفه في الجدول بالحالة ومبلغ التحصيل.

متوسط توفّر ~4 ساعة شهريًا تطبيقات المنطقةبواسطة فريق Flowngn

تعمل مع n8n · Make · Zapier

كيف تعمل

المشغّل: Webhook — تحديث حالة الشحنة من بوسطة
  1. استقبل تحديث الحالة من بوسطة.
  2. تابع فقط عند تسليم الشحنة.
  3. حدّث صف الطلب المطابق: الحالة ورقم التتبع والمبلغ المحصَّل.

المخطط

trueBosta updateWebhook{ }Read statusCode⑂Delivered?IfGUpdate order rowGoogle Sheets
مشغّل تطبيق منطق كود

الكود

كود JavaScript المستخدم في خطوات Code، وهو مضمَّن بالفعل في القالب بالأسفل.

Read status · عقدة Code
// Mode: Run Once for Each Item
// Bosta delivery webhook → clean fields with a readable status in English and Arabic.
// Confirm the state codes in Bosta's webhook documentation and adjust this map if needed.
const STATES = {
  21: { en: "Picked up", ar: "تم استلام الشحنة من المتجر", kind: "progress" },
  24: { en: "At Bosta warehouse", ar: "الشحنة في مخزن بوسطة", kind: "progress" },
  41: { en: "Out for delivery", ar: "الشحنة خرجت للتوصيل", kind: "progress" },
  45: { en: "Delivered", ar: "تم التوصيل", kind: "delivered" },
  46: { en: "Returned to business", ar: "تم إرجاع الشحنة", kind: "problem" },
  47: { en: "Exception", ar: "مشكلة في التوصيل", kind: "problem" },
};

const b = $json.body || {};
const code = Number(b.state?.code ?? b.state);
const state = STATES[code] || { en: `Status ${code}`, ar: `الحالة ${code}`, kind: "other" };

return {
  json: {
    tracking: b.trackingNumber || "",
    order_id: b.businessReference || "",
    code,
    status_en: state.en,
    status_ar: state.ar,
    kind: state.kind,
    cod: b.cod || 0,
    reason: b.exceptionReason || "",
  },
};

ابنِها بأداتك

اختر أداتك — نفس الأتمتة، خطوة بخطوة.

انسخه والصقه مباشرة في مساحة عمل n8n (Ctrl+V)، أو حمّله واستخدم Import from File. بعد ذلك اربط حساباتك واستبدل كل قيمة تبدأ بـ YOUR_.

ملف Workflow JSON
عرض الكود (162 سطر)
{
  "name": "علّم شحنات بوسطة المسلَّمة في جدولك (Flowngn)",
  "nodes": [
    {
      "parameters": {
        "content": "## علّم شحنات بوسطة المسلَّمة في جدولك\nعند تسليم بوسطة لطلب، يُحدَّث صفه في الجدول بالحالة ومبلغ التحصيل.\n\n**Setup**\n1. Open each node and connect your own credentials.\n2. Replace every YOUR_… placeholder.\n3. Test once, then activate.\n\nFree template from Flowngn",
        "height": 260,
        "width": 340
      },
      "id": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee",
      "name": "Setup notes",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -420,
        -60
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "bosta-delivered",
        "options": {}
      },
      "id": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee",
      "name": "Bosta update",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "webhookId": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee"
    },
    {
      "parameters": {
        "jsCode": "// Mode: Run Once for Each Item\n// Bosta delivery webhook → clean fields with a readable status in English and Arabic.\n// Confirm the state codes in Bosta's webhook documentation and adjust this map if needed.\nconst STATES = {\n  21: { en: \"Picked up\", ar: \"تم استلام الشحنة من المتجر\", kind: \"progress\" },\n  24: { en: \"At Bosta warehouse\", ar: \"الشحنة في مخزن بوسطة\", kind: \"progress\" },\n  41: { en: \"Out for delivery\", ar: \"الشحنة خرجت للتوصيل\", kind: \"progress\" },\n  45: { en: \"Delivered\", ar: \"تم التوصيل\", kind: \"delivered\" },\n  46: { en: \"Returned to business\", ar: \"تم إرجاع الشحنة\", kind: \"problem\" },\n  47: { en: \"Exception\", ar: \"مشكلة في التوصيل\", kind: \"problem\" },\n};\n\nconst b = $json.body || {};\nconst code = Number(b.state?.code ?? b.state);\nconst state = STATES[code] || { en: `Status ${code}`, ar: `الحالة ${code}`, kind: \"other\" };\n\nreturn {\n  json: {\n    tracking: b.trackingNumber || \"\",\n    order_id: b.businessReference || \"\",\n    code,\n    status_en: state.en,\n    status_ar: state.ar,\n    kind: state.kind,\n    cod: b.cod || 0,\n    reason: b.exceptionReason || \"\",\n  },\n};",
        "mode": "runOnceForEachItem"
      },
      "id": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee",
      "name": "Read status",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        300,
        0
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "c1",
              "leftValue": "={{ $json.kind }}",
              "rightValue": "delivered",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee",
      "name": "Delivered?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        600,
        0
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "YOUR_SPREADSHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Orders",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "order_id": "={{ $json.order_id }}",
            "status": "delivered",
            "tracking": "={{ $json.tracking }}",
            "cod_collected": "={{ $json.cod }}",
            "delivered_at": "={{ $now.toISO() }}"
          },
          "matchingColumns": [
            "order_id"
          ]
        },
        "options": {}
      },
      "id": "2de5c18f-5c8e-4bfb-a9ba-9118f6766aee",
      "name": "Update order row",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.5,
      "position": [
        900,
        0
      ]
    }
  ],
  "connections": {
    "Bosta update": {
      "main": [
        [
          {
            "node": "Read status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read status": {
      "main": [
        [
          {
            "node": "Delivered?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Delivered?": {
      "main": [
        [
          {
            "node": "Update order row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}

← افتحها في ساحة التجربة لتعديلها

نصائح

  • جدولك يحتاج عمود order_id يطابق المرجع في بوسطة.

أتمتات مشابهة