Skip to main content

Action Nodes

Actions are nodes that do something — send messages, edit content, interact with Telegram, or call external APIs.


📤 Universal Send (action.send)

The recommended way to send ANY type of message. This single node handles all Telegram message types by changing its "Mode".

Supported Modes

ModeWhat It SendsKey Inputs
TextPlain or formatted textText, ParseMode
PhotoImagesURL or FileID, Caption
VideoVideo filesURL or FileID, Caption
DocumentFiles (PDF, ZIP, etc.)URL or FileID, Caption
AudioAudio filesURL or FileID
VoiceVoice messagesURL or FileID
LocationMap locationLatitude, Longitude
ContactPhone contactPhoneNumber, FirstName
PollPoll/QuizQuestion, Options

Configuration

SettingDescription
ModeType of message to send
Text/CaptionMessage content (supports templates like {{var.name}})
ParseModeMarkdown, MarkdownV2, or HTML formatting
ReplyMarkupAttach keyboards (inline or reply)
ChatIDOverride target chat (default: current user)

Dynamic Inputs

The node is smart — input sockets appear based on your mode:

  • Photo Mode: URL, Caption, FileID inputs appear
  • Location Mode: Latitude, Longitude inputs appear
  • Poll Mode: Question, Options (array) inputs appear

action.send node showing Mode dropdown with Photo selected, revealing URL and Caption input sockets

Examples

Send Welcome Message:

Mode: Text
Text: Hello {{user.first_name}}! Welcome to our bot. 🎉
ParseMode: Markdown

Send Product Photo:

Mode: Photo
URL: https://example.com/product.jpg
Caption: **{{var.product_name}}** - Only ${{var.price}}!

Send Location:

Mode: Location
Latitude: 40.7128
Longitude: -74.0060
(Above inputs connected from data nodes)

✏️ Edit Message (action.edit)

Updates an existing message. Perfect for interactive menus where you want to change content without cluttering chat history.

Modes

ModeWhat It DoesUse Case
TextChange message textUpdate status message
CaptionChange media captionUpdate photo description
ReplyMarkupChange buttons onlyUpdate menu options
MediaChange the media fileSwap image/video

Configuration

SettingDescription
ModeWhat to edit
MessageIDID of message to edit (from trigger or previous send)
Text/CaptionNew content
ReplyMarkupNew buttons

Example: Progress Tracker

[Send] "Processing... 0%" --> Save MessageID to var.progress_msg

[Edit] var.progress_msg --> "Processing... 25%"

[Edit] var.progress_msg --> "Processing... 50%"

[Edit] var.progress_msg --> "✅ Complete!"

Message being edited to show progress updates


🗑️ Delete Message (action.delete)

Removes a message from the chat.

Configuration

SettingDescription
MessageIDID of message to delete
ChatIDChat where message exists (default: current)

Use Cases

  • Remove old menu messages
  • Clean up bot commands after processing
  • Delete sensitive information after use

Example: Clean Command

User sends: /secret_code ABC123
Bot saves code, then deletes the user's message for privacy

💬 Chat Info (action.chat)

Retrieves information about chats, members, and administrators.

Modes

ModeReturnsUse Case
GetChatChat detailsGet group title/description
GetMemberUser's status in chatCheck if user is admin
GetMemberCountNumber of membersDisplay group size
GetAdminsList of all adminsAdmin-only features

Configuration

SettingDescription
ModeWhat info to get
ChatIDTarget chat (optional)
UserIDUser to check (for GetMember)

Outputs (Mode-Specific)

GetChat:

  • Chat (Object): Full chat info
  • Title (String): Chat name
  • Type (String): "private", "group", "supergroup", "channel"

GetMember:

  • Member (Object): Member object
  • Status (String): "creator", "administrator", "member", "restricted", "left", "kicked"
  • IsAdmin (Boolean): Quick admin check

GetMemberCount:

  • Count (Number): Total members

GetAdmins:

  • Admins (Array): List of admin user objects

Example: Admin-Only Command

[Command /admin_panel]

[action.chat - GetMember]

[Condition: Status == "administrator" OR Status == "creator"]
↓ Yes
[Show Admin Panel]
↓ No
[Send: "Sorry, admin access only"]

action.chat node with GetMember mode showing Status output connected to condition


📁 File Operations (action.file)

Gets file information and download paths for files sent to your bot.

Configuration

SettingDescription
FileIDTelegram file identifier

Outputs

OutputTypeDescription
FileObjectFull file info
FilePathStringDownload path fragment
FileSizeNumberSize in bytes
FileURLStringComplete download URL

Use Case: Save User's Photo

[trigger.on - filter: message:photo]
↓ FileID output
[action.file]
↓ FileURL output
[HTTP Request - Download file to your server]

[Save URL to database]

↗️ Forward Message (action.forward_msg)

Forwards an existing message to another chat.

Configuration

SettingDescription
MessageIDMessage to forward
FromChatIDSource chat
ToChatIDDestination chat
DisableNotificationSilent forward

Use Case: Customer Support

User sends message to bot

[Forward to support group chat]

Support team sees message with user info

⌨️ Typing Indicator (action.send_chat_action)

Shows a status like "Typing..." or "Uploading photo..." to make the bot feel more human.

Available Actions

ActionShows
typing"Typing..."
upload_photo"Sending photo..."
upload_video"Sending video..."
upload_document"Sending file..."
record_voice"Recording voice..."
upload_voice"Sending voice..."
find_location"Sending location..."

Configuration

SettingDescription
ActionType of indicator
ChatIDTarget chat

Example: Realistic Delay

[User asks complex question]

[send_chat_action: "typing"]

[Delay 2 seconds]

[Process answer with HTTP/AI]

[Send response]

Telegram chat showing "Bot is typing..." indicator

Pro Tip: The indicator automatically disappears after 5 seconds or when you send a message!


🌐 HTTP Request (http.request)

Call external APIs and web services. This is how you integrate with anything outside Telegram.

Configuration

SettingDescription
MethodGET, POST, PUT, DELETE, PATCH
URLAPI endpoint
HeadersCustom headers (auth, content-type)
BodyRequest payload (JSON/form data)
TimeoutMax wait time (seconds)

Inputs

InputTypeDescription
InFLOWTrigger
URLStringDynamic URL
BodyAnyDynamic request body
ParamsObjectQuery parameters

Outputs

OutputTypeDescription
NEXTFLOWSuccess
ErrorFLOWFailed request
ResponseStringRaw response
DataAnyParsed JSON response
StatusCodeNumberHTTP status (200, 404, etc.)

Examples

Get Weather:

Method: GET
URL: https://api.weather.com/forecast?city={{var.city}}
Headers: { "Authorization": "Bearer YOUR_KEY" }

[data.transform - Extract temperature]

[Send: "Temperature in {{var.city}}: {{temperature}}°C"]

Post to CRM:

Method: POST
URL: https://api.crm.com/leads
Headers: { "Content-Type": "application/json" }
Body: {
"name": "{{user.first_name}} {{user.last_name}}",
"telegram_id": "{{user.id}}",
"message": "{{ctx.Input}}"
}

http.request node showing URL, Method, Headers, and Body configuration


Quick Reference

NodeUse When You Need To...
action.sendSend ANY message type
action.editUpdate existing message
action.deleteRemove messages
action.chatGet chat/member info
action.fileDownload user files
action.forward_msgForward messages
action.send_chat_actionShow "typing..."
http.requestCall external APIs

Next Steps