{
  "name": "Nhắc bản nháp quá hạn duyệt",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "triggerAtMinute": 5
            }
          ]
        }
      },
      "id": "b8db8b60-5896-41e9-a084-8b4301d371fa",
      "name": "Mỗi giờ quét một lần",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "mode": "id",
          "value": "DIEN_ID_BANG_CUA_BAN",
          "cachedResultName": "CHON LAI BANG CUA BAN"
        },
        "matchType": "allConditions",
        "filters": {
          "conditions": [
            {
              "keyName": "trang_thai",
              "keyValue": "cho_duyet"
            },
            {
              "keyName": "updatedAt",
              "condition": "lte",
              "keyValue": "={{ $now.minus({ hours: 12 }).toISO() }}"
            }
          ]
        },
        "returnAll": true
      },
      "id": "2a25a7ed-b547-4c7d-bbc9-7d37522b8543",
      "name": "Tìm bản nháp quá 12 tiếng",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        224,
        0
      ],
      "notes": "Chỉ lấy dòng còn ở trạng thái cho_duyet và lần cập nhật gần nhất đã cách đây hơn 12 tiếng. Không có dòng nào thì lượt quét này dừng im lặng, đúng như mong muốn."
    },
    {
      "parameters": {
        "chatId": "DIEN_CHAT_ID_TELEGRAM_CUA_BAN",
        "text": "=<b>Bản nháp đã chờ quá 12 tiếng</b>\n\n<b>Người bình luận:</b> {{ $json.nguoi_binh_luan }}\n<b>Nhóm:</b> {{ $json.nhan }}\n\n<b>Họ viết:</b>\n{{ $json.noi_dung }}\n\n<b>Bản nháp trả lời:</b>\n{{ $json.cau_tra_loi }}",
        "replyMarkup": "inlineKeyboard",
        "inlineKeyboard": {
          "rows": [
            {
              "row": {
                "buttons": [
                  {
                    "text": "Đăng",
                    "additionalFields": {
                      "callback_data": "=dang|{{ $json.comment_id }}"
                    }
                  },
                  {
                    "text": "Sửa",
                    "additionalFields": {
                      "callback_data": "=sua|{{ $json.comment_id }}"
                    }
                  },
                  {
                    "text": "Bỏ qua",
                    "additionalFields": {
                      "callback_data": "=bo|{{ $json.comment_id }}"
                    }
                  }
                ]
              }
            }
          ]
        },
        "additionalFields": {
          "appendAttribution": false,
          "disable_web_page_preview": true,
          "parse_mode": "HTML"
        }
      },
      "id": "4a2290d9-d0c6-4839-8b47-af5c07f1d158",
      "name": "Nhắc lại qua Telegram",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        448,
        0
      ],
      "webhookId": "823a50df-30e5-427b-b399-b128d97a6577",
      "notes": "Ba nút dùng đúng định dạng callback_data của workflow duyệt, nên bạn bấm là đăng được ngay, không phải mở lại tin nhắn cũ."
    },
    {
      "parameters": {
        "operation": "update",
        "dataTableId": {
          "__rl": true,
          "mode": "id",
          "value": "DIEN_ID_BANG_CUA_BAN",
          "cachedResultName": "CHON LAI BANG CUA BAN"
        },
        "matchType": "allConditions",
        "filters": {
          "conditions": [
            {
              "keyName": "comment_id",
              "keyValue": "={{ $(\"Tìm bản nháp quá 12 tiếng\").item.json.comment_id }}"
            }
          ]
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "trang_thai": "qua_han"
          },
          "schema": [
            {
              "id": "trang_thai",
              "displayName": "trang_thai",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "id": "50090bce-d347-4bea-9515-8439f7e900f5",
      "name": "Đánh dấu quá hạn",
      "type": "n8n-nodes-base.dataTable",
      "typeVersion": 1.1,
      "position": [
        672,
        0
      ],
      "notes": "Đổi trạng thái sang qua_han để lượt quét sau không nhắc lại lần nữa. Bạn vẫn bấm được ba nút trong tin nhắn đã gửi, vì workflow duyệt tìm theo comment_id chứ không lọc theo trạng thái."
    },
    {
      "parameters": {
        "content": "### Nhắc đúng một lần\n\nMỗi giờ quét bảng một lượt. Bản nháp nào còn ở trạng thái `cho_duyet` mà đã nằm quá 12 tiếng thì được gửi lại Telegram kèm đủ ba nút, rồi đổi trạng thái thành `qua_han` để không nhắc lại nữa.\n\nBấm nút trong tin nhắn nhắc vẫn hoạt động bình thường, vì workflow duyệt tìm theo comment_id chứ không lọc theo trạng thái.\n\nKhông có dòng nào quá hạn thì lượt quét dừng im lặng, không gửi gì. Đó là đúng ý, không phải lỗi.\n\n**Muốn đổi mốc 12 tiếng** thì sửa trong node Tìm bản nháp quá 12 tiếng, nhớ sửa luôn tên node cho khỏi lệch.",
        "height": 320,
        "width": 340,
        "color": 4
      },
      "id": "47b05962-7b32-47ed-8d11-6b5a3af6e023",
      "name": "Sticky Note 821717d4",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -48,
        -48
      ]
    },
    {
      "parameters": {
        "content": "# BẮT ĐẦU Ở ĐÂY\n\nWorkflow nhỏ nhất trong ba cái, nhưng đừng bỏ.\n\n**Hai việc phải làm:**\n\n**1.** Điền Chat ID vào node Nhắc lại qua Telegram, chỗ đang để `DIEN_CHAT_ID_TELEGRAM_CUA_BAN`.\n\n**2.** Chọn lại bảng lưu của bạn trong hai node Data Table. Phải đúng cái bảng hai workflow kia đang dùng.\n\n---\n\n### VÌ SAO CẦN NÓ\n\nCổng duyệt có một điểm yếu: nó im lặng.\n\nBản nháp gửi lúc đêm, hoặc gửi đúng lúc bạn bận, sẽ trôi mất trong Telegram và nằm đó mãi mãi. Người bình luận không bao giờ được trả lời, mà hệ thống cũng không báo lỗi gì vì nó không hỏng.\n\nBất kỳ hàng đợi nào chờ người xử lý đều cần một cái như thế. Để không thì hàng đợi cứ âm thầm dài ra.",
        "height": 460,
        "width": 420,
        "color": 5
      },
      "id": "c2202a29-a6f6-4c76-8774-897782c7dbe7",
      "name": "BẮT ĐẦU Ở ĐÂY",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -48,
        -416
      ]
    }
  ],
  "connections": {
    "Mỗi giờ quét một lần": {
      "main": [
        [
          {
            "node": "Tìm bản nháp quá 12 tiếng",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tìm bản nháp quá 12 tiếng": {
      "main": [
        [
          {
            "node": "Nhắc lại qua Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Nhắc lại qua Telegram": {
      "main": [
        [
          {
            "node": "Đánh dấu quá hạn",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": true
  },
  "nodeGroups": []
}