AutomationFlowsSlack & Telegram › W02 — Publish Queue (telegram Channel)

W02 — Publish Queue (telegram Channel)

W02 — Publish queue (Telegram channel). Uses httpRequest, telegram. Scheduled trigger; 6 nodes.

Cron / scheduled trigger★★★★☆ complexity6 nodesHTTP RequestTelegram
Slack & Telegram Trigger: Cron / scheduled Nodes: 6 Complexity: ★★★★☆ Added:

This workflow follows the HTTP Request → Telegram recipe pattern — see all workflows that pair these two integrations.

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": "steinheim-w02-publish-queue",
  "name": "W02 \u2014 Publish queue (Telegram channel)",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "id": "w02-cron",
      "name": "Every 15 min",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -220,
        0
      ]
    },
    {
      "parameters": {
        "url": "__APP_URL__/api/public/automation/approved?claim=true&channel=telegram&limit=5",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-automation-timestamp",
              "value": "={{ Date.now() }}"
            },
            {
              "name": "x-automation-nonce",
              "value": "={{ $execution.id }}-{{ Date.now() }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "neverError": true,
              "fullResponse": true
            }
          }
        }
      },
      "id": "w02-claim",
      "name": "Claim approved posts",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        0,
        0
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldToSplitOut": "body.posts",
        "options": {}
      },
      "id": "w02-split",
      "name": "One item per post",
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        220,
        0
      ]
    },
    {
      "parameters": {
        "chatId": "__TELEGRAM_CHANNEL_ID__",
        "text": "={{ $json.body_ar || $json.body_en }}{{ ($json.hashtags || []).length ? '\n\n' + $json.hashtags.join(' ') : '' }}",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "id": "w02-publish",
      "name": "Publish to channel",
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        440,
        0
      ],
      "onError": "continueErrorOutput",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "__APP_URL__/api/public/automation/published",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-automation-timestamp",
              "value": "={{ Date.now() }}"
            },
            {
              "name": "x-automation-nonce",
              "value": "={{ $execution.id }}-{{ $itemIndex }}-{{ Date.now() }}"
            },
            {
              "name": "idempotency-key",
              "value": "=publish-{{ $('One item per post').item.json.id }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ postId: $('One item per post').item.json.id, platform: 'telegram', outcome: 'published', platformPostId: String($json.result.message_id) }) }}",
        "options": {
          "response": {
            "response": {
              "neverError": true,
              "fullResponse": true
            }
          }
        }
      },
      "id": "w02-record",
      "name": "Record published",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        680,
        -110
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "__APP_URL__/api/public/automation/published",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "x-automation-timestamp",
              "value": "={{ Date.now() }}"
            },
            {
              "name": "x-automation-nonce",
              "value": "={{ $execution.id }}-err-{{ $itemIndex }}-{{ Date.now() }}"
            },
            {
              "name": "idempotency-key",
              "value": "=unknown-{{ $('One item per post').item.json.id }}"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={{ JSON.stringify({ postId: $('One item per post').item.json.id, platform: 'telegram', outcome: 'unknown', error: String($json.error || 'no confirmation from Telegram').slice(0, 500) }) }}",
        "options": {
          "response": {
            "response": {
              "neverError": true,
              "fullResponse": true
            }
          }
        }
      },
      "id": "w02-unknown",
      "name": "Record UNKNOWN (never failed)",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        680,
        110
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Every 15 min": {
      "main": [
        [
          {
            "node": "Claim approved posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claim approved posts": {
      "main": [
        [
          {
            "node": "One item per post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "One item per post": {
      "main": [
        [
          {
            "node": "Publish to channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Publish to channel": {
      "main": [
        [
          {
            "node": "Record published",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Record UNKNOWN (never failed)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "timezone": "Africa/Cairo"
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

W02 — Publish queue (Telegram channel). Uses httpRequest, telegram. Scheduled trigger; 6 nodes.

Source: https://github.com/EslaM-X/steinheim-ai-launchpad/blob/main/infra/n8n/workflows/W02-publish-queue.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

Auto Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.

HTTP Request, Google Sheets, RSS Feed Read +1
Slack & Telegram

Auto-Hunt. Uses httpRequest, googleSheets, rssFeedRead, telegram. Scheduled trigger; 78 nodes.

HTTP Request, Google Sheets, RSS Feed Read +1
Slack & Telegram

This workflow runs daily at 9 AM, uses Perplexity to compile vaping industry news, optionally captures article screenshots via Browserless, and generates a HeyGen avatar video from a template. It then

Telegram, Google Drive, HTTP Request
Slack & Telegram

. Uses googleSheets, telegram, httpRequest, wise. Scheduled trigger; 36 nodes.

Google Sheets, Telegram, HTTP Request +2
Slack & Telegram

GNCA AI News Pipeline. Uses rssFeedRead, httpRequest, telegram, errorTrigger. Scheduled trigger; 31 nodes.

RSS Feed Read, HTTP Request, Telegram +1