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-bot credential holding your bot token. The config stores a reference like ${credential.telegram-bot.botToken}, never the token itself.
  • Modepolling works 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.