{
  "name": "Nabd hourly responses → Sheets / ردود نبض كل ساعة",
  "active": false,
  "nodes": [
    {
      "name": "Every hour",
      "id": "Every-hour",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 1
            }
          ]
        }
      }
    },
    {
      "name": "Poll responses",
      "id": "Poll-responses",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        250,
        0
      ],
      "parameters": {
        "jsCode": "const state = $getWorkflowStaticData('global');\nconst until = new Date().toISOString();\nconst since = state.since || new Date(Date.now()-3600000).toISOString();\nconst key = $env.NABD_API_KEY;\nif (!key) throw new Error('Configure Nabd key / اضبط مفتاح نبض');\nconst rows=[]; let cursor=null;\ndo {\n const url = new URL('https://nabdcx.com/api/public/v1/responses');\n url.searchParams.set('since',since); url.searchParams.set('limit','100');\n if(cursor) url.searchParams.set('cursor',cursor);\n const r=await this.helpers.httpRequest({method:'GET',url:url.toString(),headers:{Authorization:'Bearer '+key},json:true});\n rows.push(...r.data); cursor=r.next_cursor;\n} while(cursor);\nreturn rows.map(r=>({json:{...r,_pollUntil:until}}));"
      }
    },
    {
      "name": "Append row",
      "id": "Append-row",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        500,
        0
      ],
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "REPLACE_SHEET_ID",
          "mode": "id"
        },
        "sheetName": {
          "__rl": true,
          "value": "Responses",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "id": "={{ $json.id }}",
            "survey_id": "={{ $json.survey_id }}",
            "submitted_at": "={{ $json.submitted_at }}"
          },
          "matchingColumns": [
            "id"
          ],
          "schema": []
        },
        "options": {}
      }
    },
    {
      "name": "Commit watermark",
      "id": "Commit-watermark",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        750,
        0
      ],
      "parameters": {
        "jsCode": "const state=$getWorkflowStaticData('global');\nconst polled=$('Poll responses').all();\nif(polled.length) state.since=polled[0].json._pollUntil;\nreturn $input.all();"
      }
    }
  ],
  "connections": {
    "Every hour": {
      "main": [
        [
          {
            "node": "Poll responses",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Poll responses": {
      "main": [
        [
          {
            "node": "Append row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row": {
      "main": [
        [
          {
            "node": "Commit watermark",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {}
}
