Telegram
output.telegram Output v0.2.0 Works with the Telegram Bot API: send/edit/delete/pin messages, chat actions, media uploads (photo, document, audio, video, animation, sticker — from a URL/file_id or binary input), locations and media groups, chat management, callback/inline-query answers, and binary-safe file downloads. Leave the text blank on sendMessage to send the input payload as pretty-printed JSON.
Ports
| Direction | Port | Label |
|---|---|---|
| Input | input | Payload |
| Output | output | Result |
Properties
| Property | Type | Default | Description |
|---|---|---|---|
CredentialcredentialId | credential | "" | Use a stored credential for this connection — its fields are filled in at run start. Pick "None" to enter the connection details manually. accepts credential templates: telegram-bot |
Bot tokentoken | string | "" | Telegram bot token — use ${credential.telegram-bot.botToken}. Empty is allowed here; it must resolve by run time. |
Operationoperation | select | "sendMessage" | The Bot API method to call: messages (send/edit/delete/pin/unpin/chat action), media sends, location, media groups, chat management, callback/inline-query answers, or a binary-safe file download. sendMessageeditMessageTextdeleteMessagepinChatMessageunpinChatMessagesendChatActionsendPhotosendDocumentsendAudiosendVideosendAnimationsendStickersendLocationsendMediaGroupgetChatgetChatAdministratorsgetChatMembersetChatTitlesetChatDescriptionleaveChatanswerCallbackQueryanswerInlineQuerygetFile |
Chat IDchatId | string | "" | Target chat/channel ID (or @channelusername). Shown when TG_CHAT_OPS.includes(tgOp(c)) |
Texttext | string | "" | Message text. On sendMessage, leave blank to send the input payload as pretty-printed JSON. On answerCallbackQuery, the (optional) toast/alert text. Shown when ["sendMessage", "editMessageText", "answerCallbackQuery"].includes(tgOp(c)) |
Parse modeparseMode | select | "none" | How Telegram renders the text or caption: plain, MarkdownV2, or HTML. noneMarkdownV2HTML Shown when ["sendMessage", "editMessageText", ...TG_CAPTION_OPS].includes(tgOp(c)) |
Reply markupreplyMarkup | json | null | Keyboard JSON: { "inline_keyboard": [[{ "text": "OK", "callback_data": "ok" }]] }, a reply keyboard, remove, or force-reply object. Leave null for none. Shown when ["sendMessage", "editMessageText", ...TG_MEDIA_OPS].includes(tgOp(c)) |
Reply to message IDreplyToMessageId | string | "" | Send as a reply to this message ID. Leave blank for a normal message. Shown when ["sendMessage", ...TG_MEDIA_OPS].includes(tgOp(c)) |
Disable link previewsdisableWebPagePreview | boolean | false | Suppress the link preview for URLs in the message. Shown when tgOp(c) === "sendMessage" |
SilentdisableNotification | boolean | false | Send (or pin) without a notification sound. Shown when ["sendMessage", ...TG_MEDIA_OPS, "sendLocation", "sendMediaGroup", "pinChatMessage"].includes(tgOp(c)) |
Message IDmessageId | string | "" | The message to edit/delete/pin/unpin (unpin: blank = the most recent pinned message). Shown when ["editMessageText", "deleteMessage", "pinChatMessage", "unpinChatMessage"].includes(tgOp(c)) |
Actionaction | select | "typing" | The chat action to broadcast (typing, upload_photo, …) — shows for ~5 seconds or until the next message. typingupload_photorecord_videoupload_videorecord_voiceupload_voiceupload_documentchoose_stickerfind_locationrecord_video_noteupload_video_note Shown when tgOp(c) === "sendChatAction" |
Media (URL or file_id)media | string | "" | An HTTP(S) URL Telegram fetches, or a file_id already on Telegram's servers. Leave blank when uploading from the binary field below. Shown when TG_MEDIA_OPS.includes(tgOp(c)) |
Binary fieldbinaryField | string | "" | Dot-path to binary input to UPLOAD (a binary blob, base64 envelope, or { name, contentType, data } object) — uploaded as real multipart bytes. Takes precedence over the URL/file_id. Shown when TG_MEDIA_OPS.includes(tgOp(c)) |
File namefileName | string | "" | Override the upload's filename. Blank = the binary carrier's own name. Shown when TG_MEDIA_OPS.includes(tgOp(c)) |
Captioncaption | string | "" | Caption for the media (rendered per the parse mode). Stickers don't support captions. Shown when TG_CAPTION_OPS.includes(tgOp(c)) |
Latitudelatitude | string | "" | Latitude of the location. Shown when tgOp(c) === "sendLocation" |
Longitudelongitude | string | "" | Longitude of the location. Shown when tgOp(c) === "sendLocation" |
Media itemsmediaGroup | json | [] | JSON array of InputMedia descriptors, e.g. [{ "type": "photo", "media": "https://…", "caption": "One" }]. An item's media may also be a binary carrier — it is uploaded via attach://. Shown when tgOp(c) === "sendMediaGroup" |
Titletitle | string | "" | The new chat title. Shown when tgOp(c) === "setChatTitle" |
Descriptiondescription | string | "" | The new chat description (blank clears it). Shown when tgOp(c) === "setChatDescription" |
User IDuserId | string | "" | The user to look up in the chat. Shown when tgOp(c) === "getChatMember" |
Callback query IDcallbackQueryId | string | "" | The callback_query.id from the inline-keyboard update being answered. Shown when tgOp(c) === "answerCallbackQuery" |
Show alertshowAlert | boolean | false | Show the text as a modal alert instead of a toast. Shown when tgOp(c) === "answerCallbackQuery" |
Inline query IDinlineQueryId | string | "" | The inline_query.id from the update being answered. Shown when tgOp(c) === "answerInlineQuery" |
Resultsresults | json | [] | JSON array of InputQueryResult descriptors, e.g. [{ "type": "article", "id": "1", "title": "Hi", "input_message_content": { "message_text": "Hi" } }]. Shown when tgOp(c) === "answerInlineQuery" |
File IDfileId | string | "" | The file_id to download (from a message's photo/document/… entry). The bytes come back binary-safe: text stays text, small binary inline base64, large binary as a blob. Shown when tgOp(c) === "getFile" |
Base URLbaseUrl | string | "https://api.telegram.org" | Telegram API base URL (override for testing). |
Timeout (ms)timeoutMs | int | 15000 | Abort the request after this many milliseconds. |
Examples
Echo a message back, timestamped
The send half of the shipped Telegram Echo demo — {{ }} expressions straight in the text
field, credential fields as vault references:
{
"id": "tg-out",
"type": "output.telegram",
"config": {
"credentialId": "cred_…",
"token": "${credential.telegram-bot.botToken}",
"chatId": "${credential.telegram-bot.chatId}",
"operation": "sendMessage",
"text": "⏰ {{ $json.receivedAt }} — You said: {{ $json.message.text }}",
"parseMode": "none"
}
}
Reply to whoever messaged the bot
Pair with the Telegram Trigger and take the chat id from the update itself:
{ "chatId": "{{ $json.message.chat.id }}", "operation": "sendMessage", "text": "Got it, {{ $json.message.from.first_name }}!" }
Tips
- Blank text = JSON dump. Leave
textempty onsendMessageand the node sends the input payload pretty-printed — a zero-config debug notifier. - Media from upstream binaries.
sendPhoto/sendDocument/… accept a URL, a Telegramfile_id, or binary data flowing in from a previous node (setbinaryField). parseModegotchas are Telegram’s.MarkdownV2requires escaping characters like.and-; with plain interpolated user text,noneis the safe default.- Downloads are binary-safe. The
getFiledownload operation emits a real binary item that S3/Write File/Gmail consume as-is.
This page is generated from the node registry by gen-node-docs.mjs on every
site build — ports, properties, defaults and visibility rules cannot drift from the code.
The examples above are hand-authored and merged in.