{
  "name": "MADIAD Hub - Đối soát bài đang chờ",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 10
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -160,
        0
      ],
      "id": "Chạy mỗi 10 phút",
      "name": "Chạy mỗi 10 phút"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": "[MADIAD Template] Lịch Đăng Hub"
        },
        "sheetName": {
          "__rl": true,
          "value": "Lịch Đăng",
          "mode": "name"
        },
        "options": {
          "dataLocationOnSheet": {
            "values": {
              "rangeDefinition": "specifyRange",
              "headerRow": 1,
              "firstDataRow": 3
            }
          }
        }
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        60,
        0
      ],
      "id": "Đọc Lịch Đăng",
      "name": "Đọc Lịch Đăng"
    },
    {
      "parameters": {
        "jsCode": "\nconst out = [];\nfor (const it of $input.all()) {\n  const r = it.json;\n  if (String(r['Trạng Thái'] ?? '').trim() !== 'Đang Đăng') continue;\n  const rid = String(r['Mã Yêu Cầu'] ?? '').trim();\n  if (!rid) continue;\n  out.push({ json: { _row: r.row_number, _rid: rid } });\n}\nreturn out;\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        280,
        0
      ],
      "id": "Lọc dòng đang chờ",
      "name": "Lọc dòng đang chờ"
    },
    {
      "parameters": {
        "method": "GET",
        "url": "=https://api.madiad.com/v1/posts/status?request_id={{ $json._rid }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "X-Madiad-Source",
              "value": "tpl-reconcile-v1"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "neverError": true,
              "fullResponse": true
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        500,
        0
      ],
      "id": "Tra trạng thái",
      "name": "Tra trạng thái",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "jsCode": "\n// Hỏng là success === false. THIẾU THÔNG TIN KHÔNG PHẢI LÀ HỎNG: coi thiếu là hỏng sẽ báo lỗi cho những bài đã đăng ngon lành.\n// Không có URL KHÔNG có nghĩa là chưa xong. Telegram, Discord, listmonk đăng xong vẫn không trả về đường dẫn nào.\nconst b = $json.body ?? {};\nconst row = $('Lọc dòng đang chờ').item.json._row;\nconst res = b.results ?? {};\nconst lines = Object.entries(res).map(([k, v]) => {\n  if (v?.success === false) return k + ': hỏng, ' + (v?.error ?? 'không rõ lý do');\n  if (v?.url) return k + ': ' + v.url;\n  if (v?.success === true) return k + ': đã đăng' + (v?.publish_id ? ' (' + v.publish_id + ')' : '');\n  return k + ': đang chạy';\n});\nconst bad = Object.entries(res).filter(([, v]) => v?.success === false)\n  .map(([k, v]) => k + ': ' + (v?.error ?? 'không rõ lý do'));\nconst ids = Object.entries(res).filter(([, v]) => v?.publish_id)\n  .map(([k, v]) => k + '=' + v.publish_id).join(';');\nconst st = String(b.status ?? '');\nif (st === 'completed' || st === 'partial')\n  return [{ json: { _row: row, _st: 'Đã Đăng', _link: lines.join('\\n'), _err: bad.join('\\n'), _ids: ids } }];\nif (st === 'failed')\n  return [{ json: { _row: row, _st: 'Lỗi', _link: lines.join('\\n'), _err: bad.join('\\n') || 'Nền tảng từ chối bài này.', _ids: ids } }];\nreturn [];\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        720,
        0
      ],
      "id": "Đọc kết quả",
      "name": "Đọc kết quả"
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "",
          "mode": "list",
          "cachedResultName": "[MADIAD Template] Lịch Đăng Hub"
        },
        "sheetName": {
          "__rl": true,
          "value": "Lịch Đăng",
          "mode": "name"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "row_number": "={{ $json._row }}",
            "Trạng Thái": "={{ $json._st }}",
            "Link Bài Đăng": "={{ $json._link }}",
            "Mã Bài Đăng": "={{ $json._ids }}",
            "Lỗi": "={{ $json._err }}",
            "Đăng Lúc": "={{ $now.setZone('Asia/Ho_Chi_Minh').toFormat('dd/MM/yyyy HH:mm') }}"
          },
          "matchingColumns": [
            "row_number"
          ],
          "schema": []
        },
        "options": {
          "dataLocationOnSheet": {
            "values": {
              "rangeDefinition": "specifyRange",
              "headerRow": 1,
              "firstDataRow": 3
            }
          }
        }
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        940,
        0
      ],
      "id": "Cập nhật dòng",
      "name": "Cập nhật dòng",
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "content": "## MADIAD Hub - Đối soát bài đang chờ\n\nKhông có URL KHÔNG có nghĩa là chưa xong. Telegram, Discord, listmonk đăng xong vẫn không trả về đường dẫn nào.\n\nHỏng là success === false. THIẾU THÔNG TIN KHÔNG PHẢI LÀ HỎNG: coi thiếu là hỏng sẽ báo lỗi cho những bài đã đăng ngon lành.",
        "height": 340,
        "width": 430,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -620,
        -180
      ],
      "id": "Hướng dẫn",
      "name": "Hướng dẫn"
    }
  ],
  "connections": {
    "Chạy mỗi 10 phút": {
      "main": [
        [
          {
            "node": "Đọc Lịch Đăng",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Đọc Lịch Đăng": {
      "main": [
        [
          {
            "node": "Lọc dòng đang chờ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lọc dòng đang chờ": {
      "main": [
        [
          {
            "node": "Tra trạng thái",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tra trạng thái": {
      "main": [
        [
          {
            "node": "Đọc kết quả",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Đọc kết quả": {
      "main": [
        [
          {
            "node": "Cập nhật dòng",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": false
  }
}