Your first workflow
We’ll build the classic Flowdrome demo: a Telegram bot that echoes whatever you send it, stamped with the current time. Three nodes, one expression, zero glue code.
Telegram Trigger ──▶ Date & Time ──▶ Telegram (send)
"Bot updates" "Now (NY time)" "Echo reply"
You’ll need a Telegram bot token. The Telegram bot guide covers creating one with BotFather in two minutes — or follow along with any trigger and an Inject node instead.
1. Create the workflow
In Studio (the default view of the Nucleus), click New workflow. The node library on the left groups all 71 nodes into Input, Processing, Logic, Error Handling, AI, Storage, Output, Utility and Workflow.
2. Add the trigger
Drag Telegram Trigger from Input onto the canvas. In its properties panel:
- Credential — pick (or create) a
telegram-botcredential holding your bot token. The config stores a reference like${credential.telegram-bot.botToken}, never the token itself. - Mode —
pollingworks anywhere with outbound internet; no public URL required.
3. Stamp the time
Drag Date & Time from Processing and wire the trigger’s output to it. Set:
- Operation:
now - Format:
yyyy-MM-dd HH:mm:ss - Timezone: your IANA timezone, e.g.
America/New_York - Output field:
receivedAt
The node adds receivedAt to the item flowing through — the rest of the Telegram update passes
through untouched.
4. Reply, with expressions
Drag Telegram from Output, wire it in, pick the same credential, keep the operation
sendMessage, and set Text to:
⏰ {{ $json.receivedAt }} — You said: {{ $json.message.text }}
{{ }} expressions work in every string field of every node — they are real JavaScript
against the current item ($json), the run ($runId, $now, …) and the full wire envelope
($envelope). No script node needed for templating.
5. Test it live
Click Test workflow, then message your bot. The run lights up the executed path on the canvas; the bot replies in Telegram:
⏰ 2026-06-12 16:45:09 — You said: hello flowdrome
Click any node to see its exact input and output — Flowdrome records the whole envelope on every wire, so what you debug is what actually flowed. The Runs tab keeps the history; a failed run can be retried from the failing node with its recorded inputs.
6. What you just used
- A real trigger — in a deployed app, the Telegram trigger serves continuously. In the editor it runs against the same Bot API. How triggers work →
- A credential reference — the token resolved at run start from the vault. Credentials & variables →
- Universal expressions —
{{ $json.… }}in a plain config field. - Whole-envelope run data — every wire, inspectable. Runs & run data →
Next
Deploy it: compile the workflow and push it to a host — the same three nodes become a standalone executable that polls Telegram from your own machine.