Telegram Markdown to JSON — Split Long Messages
Pricing
$10.00 / 1,000 prepared texts
Telegram Markdown to JSON — Split Long Messages
Prepare long AI responses for Telegram: split Markdown into ordered text/entities payloads with supported formatting. No bot token needed; sending stays in your workflow. $0.01 per text bundle. API and Python examples included.
Pricing
$10.00 / 1,000 prepared texts
Rating
0.0
(0)
Developer
Stefan Schellen
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 hours ago
Last modified
Categories
Share
Prepare long AI responses and Markdown reports for Telegram. Get ordered text + entities payloads that preserve supported formatting across message boundaries, without manually escaping MarkdownV2 in your sending step.
$0.01 per successfully prepared text bundle, up to 64 KiB UTF-8 input and 20 messages. The price is per input bundle, not per Telegram message. No additional platform-usage charge.
Try it in one minute
- Click Try for free and run the example using available Apify credit; otherwise the displayed price applies.
- Open the dataset and expand
messages. - Your workflow sends those messages sequentially with its own bot. This Actor never sends messages or requests a bot token.
Input and exact output example
Input:
{"markdown":"😀 **HTTP example** and `x_y`"}
The synchronous API returns an array containing this envelope:
[{"schema_version": "1.0","message_count": 1,"messages": [{"index": 1,"text": "😀 HTTP example and x_y","entities": [{"type": "bold","offset": 3,"length": 12},{"type": "code","offset": 20,"length": 3}]}],"warnings": ["MARKDOWN_RENDERED_NOT_LOSSLESS_SOURCE","SEND_SEQUENTIALLY_WITHOUT_PARSE_MODE"]}]
index is for ordering. Give Telegram only text, entities and your own chat_id; do not include index or parse_mode.
Why use this instead of a free splitter?
A character-only splitter can cut formatting spans or mishandle emoji offsets. This service converts Markdown and splits the resulting text/entities together, with bounded input and explicit rejection of unsupported cases. It uses the free telegramify-markdown and pyromark libraries; self-hosting those is a valid alternative. The paid convenience is a hosted API for workflows that do not want to manage Python dependencies.
Workflow: AI response to Telegram-ready payloads
HTTP POST:
https://api.apify.com/v2/acts/creatieve_naald~telegram-message-preparer/run-sync-get-dataset-items?memory=256&timeout=20&maxTotalChargeUsd=0.01
Store Authorization: Bearer <APIFY_TOKEN> in workflow credentials. Body: {"markdown":"your response text"}. Read the first response envelope's messages array.
- n8n recipe: HTTP Request (POST, Header Auth, JSON body, timeout 35 seconds, retries off) → Split Out
messages→ your sequential Telegram sender usingtextandentities, withoutparse_mode. - Make recipe: JSON/Create JSON → HTTP request → parse first response envelope → Iterator
messages→ your Telegram HTTP sender. Keep entity objects as JSON arrays, not quoted JSON strings. - These are configuration recipes. The importable n8n example below was tested locally with fixtures; a live Apify-to-n8n run and Make import are not verified. Saved cloud HTTP output and eight real synthetic Telegram messages were accepted with exact text and expected entities.
Copyable Python preparation workflow
Python 3 standard library only. Set APIFY_TOKEN through a secret manager. This example prepares payloads and does not send them. Request construction and result mapping were tested offline against saved acceptance output.
"""Two copyable workflow adapters. No network calls on import."""import json, os, urllib.requestfrom pathlib import Pathdef call_actor(slug, field, text, price):url = f'https://api.apify.com/v2/acts/creatieve_naald~{slug}/run-sync-get-dataset-items?memory=256&timeout=20&maxTotalChargeUsd={price}'request = urllib.request.Request(url, data=json.dumps({field: text}).encode(), headers={'Authorization': 'Bearer '+os.environ['APIFY_TOKEN'], 'Content-Type': 'application/json'}, method='POST')# A timeout can mean the job ran. Never automatically start a replacement job.with urllib.request.urlopen(request, timeout=35) as response:rows = json.load(response)if not isinstance(rows,list) or len(rows)!=1 or rows[0].get('schema_version')!='1.0':raise ValueError('Unexpected response; inspect existing run before retrying')return rows[0]def telegram_payloads(envelope):"""Ordered sendMessage body fragments; no bot token/chat ID or sending."""messages=envelope['messages']if [m['index'] for m in messages]!=list(range(1,len(messages)+1)):raise ValueError('Unexpected message order')return [{'text': m['text'], 'entities': m['entities']} for m in messages]result = call_actor('telegram-message-preparer', 'markdown',Path('answer.md').read_text(encoding='utf-8'), '0.01')payloads = telegram_payloads(result)# Your sender adds chat_id and submits one payload at a time.
Importable n8n workflow: Markdown to ordered Telegram payloads
Copy the JSON below to n8n-telegram.json, then import that file into n8n. This is a standalone example from Agent Tools, not an approved n8n template-directory listing.
- Select an HTTP Header Auth credential on Prepare using Apify. Set header name
Authorizationand valueBearerfollowed by your own Apify token. Never put the token in the shared JSON. - Replace the deliberately long synthetic text in Synthetic Markdown with your report. The long sample exercises message splitting.
- Run manually. The workflow calls this paid Actor once, with a $0.01 Actor charge cap and automatic retries disabled, and validates the response before exposing ordered items.
- Connect your own sender only after reviewing the output. Preserve
sequence,textandentities, add yourchat_id, and do not setparse_mode. Keep your bot token in the sender's credentials.
Your sender must handle rate limits and partial delivery. A timeout is ambiguous: inspect the existing run before starting another. The workflow has no Telegram sending node.
Test scope: imported and executed locally with n8n 2.43.8 using HTTP fixtures, including invalid output and HTTP failure. No live Apify-to-n8n roundtrip or end-to-end Telegram delivery was performed for this workflow. Separate Actor acceptance tests do not prove this entire integration.
Copy the complete importable workflow JSON
{"name":"Prepare Markdown as ordered Telegram payloads with Apify","nodes":[{"id":"start","name":"Run manually","type":"n8n-nodes-base.manualTrigger","typeVersion":1,"position":[0,0],"parameters":{}},{"id":"input","name":"Synthetic Markdown","type":"n8n-nodes-base.set","typeVersion":3.4,"position":[240,0],"parameters":{"mode":"raw","jsonOutput":"{\"markdown\": \"**AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA**\"}","options":{}}},{"id":"prepare","name":"Prepare using Apify","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[480,0],"parameters":{"method":"POST","url":"https://api.apify.com/v2/acts/creatieve_naald~telegram-message-preparer/run-sync-get-dataset-items?memory=256&timeout=20&maxTotalChargeUsd=0.01","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","sendBody":true,"specifyBody":"json","jsonBody":"={{ {markdown: $json.markdown} }}","options":{"timeout":35000,"response":{"response":{"responseFormat":"json"}}}},"retryOnFail":false},{"id":"validate","name":"Validate and expose ordered payloads","type":"n8n-nodes-base.code","typeVersion":2,"position":[720,0],"parameters":{"jsCode":"const rows = $input.all().map(item => item.json);\nif (rows.length !== 1) throw new Error('Expected one result; inspect the existing Apify run before retrying.');\nconst result = rows[0];\nif (result.schema_version !== '1.0' || !Array.isArray(result.messages) || result.messages.length < 1 || result.messages.length > 20 || result.message_count !== result.messages.length) throw new Error('Unexpected result schema.');\nreturn result.messages.map((m, i) => {\n if (m.index !== i + 1 || typeof m.text !== 'string' || !m.text.trim() || m.text.length > 4096 || !Array.isArray(m.entities)) throw new Error('Invalid message or sequence.');\n for (const e of m.entities) {\n if (!Number.isInteger(e.offset) || !Number.isInteger(e.length) || e.offset < 0 || e.length < 1 || e.offset + e.length > m.text.length) throw new Error('Invalid UTF-16 entity bounds.');\n }\n return {json: {sequence: m.index, text: m.text, entities: m.entities, warnings: result.warnings || []}};\n});"}},{"id":"guide","name":"Read before running","type":"n8n-nodes-base.stickyNote","typeVersion":1,"position":[-20,-700],"parameters":{"content":"## Prepare Telegram payloads with Apify\nFor workflow builders who want hosted Markdown conversion without installing a parser. This is our paid Apify Actor; free local parsers and community nodes are alternatives.\n\n1. Import this workflow and configure Header Auth: header name Authorization, value Bearer followed by your Apify token. Store it in credentials, never in this export.\n2. Replace the synthetic Markdown in the input node.\n3. A manual run calls Apify once and validates the result. Each output item contains a sequence number, text and explicit entities. It does not send messages.\n4. Your sender must preserve sequence and use entities without parse_mode. Handle partial delivery and Telegram rate limits in that sender.\n\nApify account required. Current Actor price: $0.01 per successful input bundle; maximum 64 KiB and 20 messages. Check the live pricing before running. The request caps Actor charges at $0.01 and has no automatic retries. A timeout may still leave a completed run: inspect that run before trying again.\n\nOnly supported Markdown is accepted; HTML and images are rejected. No custom nodes or LLM calls are required.\n\nValidated with n8n 2.43.8 CLI import and local HTTP fixtures, including invalid output and HTTP failure. A live Apify-to-n8n run has not been performed. No Telegram delivery is included.","height":660,"width":1020,"color":1}}],"connections":{"Run manually":{"main":[[{"node":"Synthetic Markdown","type":"main","index":0}]]},"Synthetic Markdown":{"main":[[{"node":"Prepare using Apify","type":"main","index":0}]]},"Prepare using Apify":{"main":[[{"node":"Validate and expose ordered payloads","type":"main","index":0}]]}},"active":false,"settings":{"executionOrder":"v1"}}
The JSON contains only synthetic input and standard n8n nodes, with no saved credentials. A manual execution uses your Apify account and the Actor's current price. Free local parsers are alternatives if you prefer to maintain them.
More bounded workflow tools: Agent Tools portfolio.
Limits and delivery responsibility
Maximum 64 KiB UTF-8 input, 20 messages, 4096 UTF-16 units and 100 entities per message. Images and raw HTML are rejected. Only HTTP(S) text links without embedded credentials are supported. Markdown rendering may change whitespace and source notation; not a lossless archive or full grapheme-preservation guarantee. Detected unsafe Unicode boundaries are rejected.
No AI calls, external link fetching, diagram rendering, streaming or delivery. Your sender handles Telegram rate limits, retries and partial delivery. Do not blindly resend a whole bundle after a network timeout; a fresh Apify request is a new potentially billable job. Inspect the existing run first.
Frequently asked questions
Will this fix every Telegram formatting error? No. It avoids a separate parse_mode parsing step by returning entities. You must pass those entities correctly and obey Telegram's delivery rules.
What do ten output messages cost? $0.01 when they come from one successful input bundle within the limits. 100 successful input bundles cost $1, before any applicable taxes or account-specific discounts.
Does it send to my chat? No. Your own bot and workflow handle delivery. Never submit a bot token or chat ID to this Actor.
Privacy and support
Apify stores input/output according to account/platform retention settings; no zero-retention promise. Submit only the markdown field and avoid sensitive content. No input is sent to an AI provider. Library license notices are included.
Report reproducible problems through the Apify Issues tab using synthetic text, with tokens and personal information removed. Custom bot hosting and bespoke workflow integrations are outside scope.