AutomationFlowsSlack & Telegram › WhatsApp Shipping Status Bot

WhatsApp Shipping Status Bot

WhatsApp Shipping Status Bot. Uses httpRequest. Webhook trigger; 23 nodes.

Webhook trigger★★★★☆ complexity23 nodesHTTP Request
Slack & Telegram Trigger: Webhook Nodes: 23 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "AnDGII7nyXdqm0VM",
  "name": "WhatsApp Shipping Status Bot",
  "nodes": [
    {
      "parameters": {
        "path": "whatsapp-shipping",
        "httpMethod": "GET",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "node-webhook-verify",
      "name": "Meta Webhook Verification",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        240,
        140
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "hub_mode",
              "name": "hub_mode",
              "value": "={{ $json.query['hub.mode'] }}",
              "type": "string"
            },
            {
              "id": "hub_verify_token",
              "name": "hub_verify_token",
              "value": "={{ $json.query['hub.verify_token'] }}",
              "type": "string"
            },
            {
              "id": "hub_challenge",
              "name": "hub_challenge",
              "value": "={{ $json.query['hub.challenge'] }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "node-extract-verify",
      "name": "Extract Verify Params",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        460,
        140
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "mode-check",
              "leftValue": "={{ $json.hub_mode }}",
              "rightValue": "subscribe",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            },
            {
              "id": "token-check",
              "leftValue": "={{ $json.hub_verify_token }}",
              "rightValue": "meluvo-bot-2026",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "node-check-verify",
      "name": "Valid Verification?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        680,
        140
      ]
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "={{ $json.hub_challenge }}",
        "options": {
          "responseCode": 200
        }
      },
      "id": "node-respond-challenge",
      "name": "Return hub.challenge",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        900,
        80
      ]
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "Forbidden",
        "options": {
          "responseCode": 403
        }
      },
      "id": "node-respond-forbidden",
      "name": "Return 403",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        900,
        200
      ]
    },
    {
      "parameters": {
        "path": "whatsapp-shipping",
        "httpMethod": "POST",
        "responseMode": "onReceived",
        "responseCode": 200,
        "options": {}
      },
      "id": "node-webhook",
      "name": "WhatsApp Incoming Message",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        240,
        380
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "sender_phone",
              "name": "sender_phone",
              "value": "={{ $json.body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0]?.from || '' }}",
              "type": "string"
            },
            {
              "id": "message_type",
              "name": "message_type",
              "value": "={{ $json.body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0]?.type || '' }}",
              "type": "string"
            },
            {
              "id": "message_text",
              "name": "message_text",
              "value": "={{ $json.body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0]?.text?.body || '' }}",
              "type": "string"
            },
            {
              "id": "has_messages",
              "name": "has_messages",
              "value": "={{ !!$json.body?.entry?.[0]?.changes?.[0]?.value?.messages?.[0] }}",
              "type": "boolean"
            }
          ]
        },
        "options": {}
      },
      "id": "node-parse",
      "name": "Parse WhatsApp Message",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        460,
        380
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "has-message",
              "leftValue": "={{ $json.has_messages }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true"
              }
            },
            {
              "id": "is-text",
              "leftValue": "={{ $json.message_type }}",
              "rightValue": "text",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "node-filter-text",
      "name": "Is Text Message?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        680,
        380
      ]
    },
    {
      "parameters": {},
      "id": "node-ignore",
      "name": "Ignore Non-Text",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        900,
        500
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "normalized_phone",
              "name": "normalized_phone",
              "value": "={{ (() => { const p = $json.sender_phone.replace(/\\D/g, ''); if (p.startsWith('972')) return p; if (p.startsWith('0')) return '972' + p.slice(1); return '972' + p; })() }}",
              "type": "string"
            },
            {
              "id": "sender_phone",
              "name": "sender_phone",
              "value": "={{ $json.sender_phone }}",
              "type": "string"
            },
            {
              "id": "message_text",
              "name": "message_text",
              "value": "={{ $json.message_text }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "node-normalize-phone",
      "name": "Normalize Phone Number",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        900,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.monday.com/v2",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "eyJhbGciOiJIUzI1NiJ9.eyJ0aWQiOjU1OTAyMjM2MiwiYWFpIjoxMSwidWlkIjo2Mzc3NjA5NywiaWFkIjoiMjAyNS0wOS0wN1QxNTowMToxNy4wMDBaIiwicGVyIjoibWU6d3JpdGUiLCJhY3RpZCI6MjQ1MzIyMjcsInJnbiI6ImV1YzEifQ.d86GOnxc-RhtZND7Q7LIoIg3ShFUW0xImLCVjRlzXHQ"
            },
            {
              "name": "API-Version",
              "value": "2024-10"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ query: 'query { items_by_column_values(board_id: 2131896795, column_id: \"phone__1\", column_value: \"' + $json.normalized_phone + '\") { id name column_values { id text } } }' }) }}",
        "options": {}
      },
      "id": "node-monday-search",
      "name": "Search Monday by Phone",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1120,
        320
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "order_found",
              "name": "order_found",
              "value": "={{ ($json.data?.items_by_column_values || []).length > 0 }}",
              "type": "boolean"
            },
            {
              "id": "tracking_number",
              "name": "tracking_number",
              "value": "={{ ($json.data?.items_by_column_values?.[0]?.column_values || []).find(c => c.id === 'text__1')?.text || '' }}",
              "type": "string"
            },
            {
              "id": "order_name",
              "name": "order_name",
              "value": "={{ $json.data?.items_by_column_values?.[0]?.name || '' }}",
              "type": "string"
            },
            {
              "id": "sender_phone",
              "name": "sender_phone",
              "value": "={{ $('Normalize Phone Number').item.json.sender_phone }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "node-extract-monday",
      "name": "Extract Order & Tracking",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1340,
        320
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "order-found",
              "leftValue": "={{ $json.order_found }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "node-check-order",
      "name": "Order Found?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1560,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/1032171949979127/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "<redacted-credential>"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.sender_phone, type: 'text', text: { body: '\u05de\u05e6\u05d8\u05e2\u05e8\u05d9\u05dd, \u05dc\u05d0 \u05de\u05e6\u05d0\u05e0\u05d5 \u05d4\u05d6\u05de\u05e0\u05d4 \u05d4\u05e7\u05e9\u05d5\u05e8\u05d4 \u05dc\u05de\u05e1\u05e4\u05e8 \u05d4\u05d8\u05dc\u05e4\u05d5\u05df \u05e9\u05dc\u05da. \u05d0\u05e0\u05d0 \u05e4\u05e0\u05d4 \u05d0\u05dc\u05d9\u05e0\u05d5 \u05dc\u05e9\u05d9\u05e8\u05d5\u05ea \u05dc\u05e7\u05d5\u05d7\u05d5\u05ea \u05dc\u05e2\u05d6\u05e8\u05d4.' } }) }}",
        "options": {}
      },
      "id": "node-reply-no-order",
      "name": "Reply: No Order Found",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1780,
        460
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "tracking-exists",
              "leftValue": "={{ $json.tracking_number }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "node-check-tracking",
      "name": "Tracking Number Exists?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1780,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/1032171949979127/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "<redacted-credential>"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $('Extract Order & Tracking').item.json.sender_phone, type: 'text', text: { body: '\u05d4\u05d4\u05d6\u05de\u05e0\u05d4 \u05e9\u05dc\u05da \u05e2\u05d3\u05d9\u05d9\u05df \u05d1\u05d4\u05db\u05e0\u05d4 \u05d5\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e2\u05e7\u05d1 \u05d8\u05e8\u05dd \u05d4\u05d5\u05e7\u05e6\u05d4. \u05e0\u05e2\u05d3\u05db\u05df \u05d0\u05d5\u05ea\u05da \u05d1\u05e8\u05d2\u05e2 \u05e9\u05d4\u05d7\u05d1\u05d9\u05dc\u05d4 \u05ea\u05e6\u05d0 \u05dc\u05d3\u05e8\u05da! \ud83d\udce6' } }) }}",
        "options": {}
      },
      "id": "node-reply-no-tracking",
      "name": "Reply: No Tracking Yet",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2000,
        460
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.aftership.com/tracking/2024-07/trackings",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "as-api-key",
              "value": "asat_785db7e65312486a9ff8ac92b048a6d3"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ tracking: { tracking_number: $json.tracking_number } }) }}",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        }
      },
      "id": "node-aftership-register",
      "name": "Register AfterShip Tracking",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2000,
        320
      ]
    },
    {
      "parameters": {
        "method": "GET",
        "url": "=https://api.aftership.com/tracking/2024-07/trackings?tracking_numbers={{ $('Extract Order & Tracking').item.json.tracking_number }}",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "as-api-key",
              "value": "asat_785db7e65312486a9ff8ac92b048a6d3"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        }
      },
      "id": "node-aftership-get",
      "name": "Get AfterShip Status",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2220,
        320
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "api_ok",
              "name": "api_ok",
              "value": "={{ ($json.data?.trackings?.length ?? 0) > 0 }}",
              "type": "boolean"
            },
            {
              "id": "carrier",
              "name": "carrier",
              "value": "={{ $json.data?.trackings?.[0]?.slug || '' }}",
              "type": "string"
            },
            {
              "id": "status_code",
              "name": "status_code",
              "value": "={{ $json.data?.trackings?.[0]?.tag || '' }}",
              "type": "string"
            },
            {
              "id": "last_event",
              "name": "last_event",
              "value": "={{ $json.data?.trackings?.[0]?.checkpoints?.[0]?.message || '' }}",
              "type": "string"
            },
            {
              "id": "last_location",
              "name": "last_location",
              "value": "={{ $json.data?.trackings?.[0]?.checkpoints?.[0]?.city || $json.data?.trackings?.[0]?.checkpoints?.[0]?.country_name || '' }}",
              "type": "string"
            },
            {
              "id": "last_time",
              "name": "last_time",
              "value": "={{ $json.data?.trackings?.[0]?.checkpoints?.[0]?.checkpoint_time || '' }}",
              "type": "string"
            },
            {
              "id": "tracking_number",
              "name": "tracking_number",
              "value": "={{ $('Extract Order & Tracking').item.json.tracking_number }}",
              "type": "string"
            },
            {
              "id": "sender_phone",
              "name": "sender_phone",
              "value": "={{ $('Extract Order & Tracking').item.json.sender_phone }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "node-extract-aftership",
      "name": "Extract Tracking Data",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2440,
        320
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "api-ok",
              "leftValue": "={{ $json.api_ok }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "node-check-aftership",
      "name": "AfterShip OK?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2660,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/1032171949979127/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "<redacted-credential>"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.sender_phone, type: 'text', text: { body: '\u05de\u05e6\u05d8\u05e2\u05e8\u05d9\u05dd, \u05dc\u05d0 \u05d4\u05e6\u05dc\u05d7\u05e0\u05d5 \u05dc\u05d0\u05d7\u05d6\u05e8 \u05d0\u05ea \u05e4\u05e8\u05d8\u05d9 \u05d4\u05de\u05e9\u05dc\u05d5\u05d7 \u05db\u05e8\u05d2\u05e2. \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1 \u05de\u05d0\u05d5\u05d7\u05e8 \u05d9\u05d5\u05ea\u05e8 \u05d0\u05d5 \u05e4\u05e0\u05d4 \u05dc\u05e9\u05d9\u05e8\u05d5\u05ea \u05d4\u05dc\u05e7\u05d5\u05d7\u05d5\u05ea \u05e9\u05dc\u05e0\u05d5.' } }) }}",
        "options": {}
      },
      "id": "node-reply-error",
      "name": "Reply: Tracking Error",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2880,
        460
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "reply_body",
              "name": "reply_body",
              "value": "={{ (() => { const statusMap = { NotFound: '\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 \u05e2\u05d3\u05d9\u05d9\u05df', InTransit: '\u05d1\u05d3\u05e8\u05db\u05d4 \u05dc\u05d0\u05e8\u05e5! \u2708\ufe0f', Expired: '\u05e4\u05d2 \u05ea\u05d5\u05e7\u05e3', Delivered: '\u05e0\u05de\u05e1\u05e8\u05d4! \ud83c\udf89', Undelivered: '\u05e0\u05d9\u05e1\u05d9\u05d5\u05df \u05de\u05e1\u05d9\u05e8\u05d4 \u05e0\u05db\u05e9\u05dc \u26a0\ufe0f', Exception: '\u05d1\u05e2\u05d9\u05d4 \u05d1\u05de\u05e9\u05dc\u05d5\u05d7 \u26a0\ufe0f', PickedUp: '\u05e0\u05d0\u05e1\u05e4\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05e9\u05dc\u05d9\u05d7 \ud83d\udce6', Alert: '\u05d4\u05ea\u05e8\u05d0\u05d4 \u26a0\ufe0f', Returning: '\u05d1\u05d3\u05e8\u05da \u05d7\u05d6\u05e8\u05d4', Returned: '\u05d4\u05d5\u05d7\u05d6\u05e8\u05d4' }; const status = statusMap[$json.status_code] || $json.status_code || '\u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2'; const lines = ['*\u05e2\u05d3\u05db\u05d5\u05df \u05de\u05e9\u05dc\u05d5\u05d7 | OneZone* \ud83c\udfc6', '', '*\u05e1\u05d8\u05d8\u05d5\u05e1:* ' + status]; if ($json.last_event) lines.push('\\n\ud83d\udd14 \u05e2\u05d3\u05db\u05d5\u05df \u05d0\u05d7\u05e8\u05d5\u05df: ' + $json.last_event); if ($json.last_location) lines.push('\ud83d\udccd \u05de\u05d9\u05e7\u05d5\u05dd: ' + $json.last_location); if ($json.last_time) { try { const d = new Date($json.last_time); lines.push('\ud83d\udd50 \u05d6\u05de\u05df: ' + d.toLocaleDateString('he-IL', {day:'numeric',month:'long',year:'numeric'}) + ' ' + d.toLocaleTimeString('he-IL', {hour:'2-digit',minute:'2-digit'})); } catch(e) { lines.push('\ud83d\udd50 \u05d6\u05de\u05df: ' + $json.last_time); } } lines.push(''); lines.push('*\u05de\u05e1\u05f3 \u05de\u05e2\u05e7\u05d1:* ' + $json.tracking_number); lines.push('\\n\ud83d\udd0d *\u05dc\u05de\u05e2\u05e7\u05d1 \u05e2\u05e6\u05de\u05d0\u05d9 \u05d1\u05db\u05dc \u05e8\u05d2\u05e2:* https://www.hfd.co.il/\u05d0\u05d9\u05ea\u05d5\u05e8-\u05d7\u05d1\u05d9\u05dc\u05d4/\\n_(\u05d9\u05e9 \u05dc\u05d4\u05e7\u05dc\u05d9\u05d3 \u05d0\u05ea \u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e2\u05e7\u05d1 \u05d9\u05d3\u05e0\u05d9\u05ea)_); return lines.join('\\n'); })() }}",
              "type": "string"
            },
            {
              "id": "sender_phone",
              "name": "sender_phone",
              "value": "={{ $json.sender_phone }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "node-format-reply",
      "name": "Format Hebrew Reply",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2880,
        320
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://graph.facebook.com/v21.0/1032171949979127/messages",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "<redacted-credential>"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "application/json",
        "body": "={{ JSON.stringify({ messaging_product: 'whatsapp', to: $json.sender_phone, type: 'text', text: { body: $json.reply_body } }) }}",
        "options": {}
      },
      "id": "node-send-whatsapp",
      "name": "Send WhatsApp Reply",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3100,
        320
      ]
    }
  ],
  "connections": {
    "Meta Webhook Verification": {
      "main": [
        [
          {
            "node": "Extract Verify Params",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Verify Params": {
      "main": [
        [
          {
            "node": "Valid Verification?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Valid Verification?": {
      "main": [
        [
          {
            "node": "Return hub.challenge",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Return 403",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WhatsApp Incoming Message": {
      "main": [
        [
          {
            "node": "Parse WhatsApp Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse WhatsApp Message": {
      "main": [
        [
          {
            "node": "Is Text Message?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Text Message?": {
      "main": [
        [
          {
            "node": "Normalize Phone Number",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Ignore Non-Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Phone Number": {
      "main": [
        [
          {
            "node": "Search Monday by Phone",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Monday by Phone": {
      "main": [
        [
          {
            "node": "Extract Order & Tracking",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Order & Tracking": {
      "main": [
        [
          {
            "node": "Order Found?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Order Found?": {
      "main": [
        [
          {
            "node": "Tracking Number Exists?",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reply: No Order Found",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tracking Number Exists?": {
      "main": [
        [
          {
            "node": "Register AfterShip Tracking",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reply: No Tracking Yet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Register AfterShip Tracking": {
      "main": [
        [
          {
            "node": "Get AfterShip Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get AfterShip Status": {
      "main": [
        [
          {
            "node": "Extract Tracking Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Tracking Data": {
      "main": [
        [
          {
            "node": "AfterShip OK?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AfterShip OK?": {
      "main": [
        [
          {
            "node": "Format Hebrew Reply",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reply: Tracking Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Hebrew Reply": {
      "main": [
        [
          {
            "node": "Send WhatsApp Reply",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "saveExecutionProgress": true
  },
  "tags": []
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

WhatsApp Shipping Status Bot. Uses httpRequest. Webhook trigger; 23 nodes.

Source: https://github.com/mirrorframestudio/amit-projects/blob/caed3818fa157d3059c4a053cd67b8caa8fb90d2/n8n/whatsapp-shipping-bot.json — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

HR teams, IT Operations, and System Administrators managing employee onboarding at scale. It’s perfect if you use Odoo 18 to trigger account requests and need Redmine + GitLab accounts created instant

HTTP Request, Slack
Slack & Telegram

This workflow is a complete, production-ready solution for recovering abandoned carts in Shopify stores using a multi-channel, multi-touch approach. It automates personalized follow-ups via Email, SMS

HTTP Request, Shopify, SendGrid +5
Slack & Telegram

qualiopi. Uses airtable, telegram, emailSend, httpRequest. Webhook trigger; 51 nodes.

Airtable, Telegram, Email Send +3
Slack & Telegram

This workflow automates end-to-end research analysis by coordinating multiple AI models—including NVIDIA NIM (Llama), OpenAI GPT-4, and Claude to analyze uploaded documents, extract insights, and gene

HTTP Request, Postgres, Slack +1
Slack & Telegram

PsyCardv2. Uses executeCommand, telegram, readBinaryFile, googleDrive. Webhook trigger; 41 nodes.

Execute Command, Telegram, Read Binary File +2