Test and Deploy Your Bot

The difference between saving and deploying, how the Test panel works, what a deploy actually syncs, and where to look when the bot does not answer.

6 min read·Last updated: 2026-09-27

01Save Changes is not the same as Deploy

Two buttons, two different jobs. Confusing them is the single most common way people get stuck.

Save Changes, at the bottom of the block editor (it opens on the left), writes your change into the draft on the canvas. Nothing your users see changes.

Deploy, on the toolbar above the canvas, publishes that draft to the channel your bot runs on. Until you press it, the live bot keeps answering with the previous version.

The Version selector, the Test button and the Deploy button on the editor toolbar

So the loop is always the same: edit, Save Changes, Test, Deploy.

One helpful detail: Deploy is dimmed when there is nothing new to publish. A dim button means the live bot already matches the canvas.

02Test your bot before anyone else does

Click Test. A panel opens on the right and you talk to your bot exactly as a user would — before any channel is connected, and without opening Telegram.

The Test panel showing a test conversation with the bot, with one menu button chosen

The panel has a few controls worth knowing:

  • Private / Group / Channel simulates where the message comes from. Triggers that only fire in groups or channels will not match while you are in Private.
  • In Group you also get Mention bot (@) and a Member joins button, which fires a "user joined the group" event so you can test a welcome flow.
  • Test as runs the session as an existing contact. Their profile and saved variable values are copied into the test, so flows that depend on what the bot already knows about someone can be exercised. Changing it restarts the chat.
  • Refresh applies your latest canvas and variable changes to the running test without losing the conversation. The session starts from the draft as it was when you clicked Test, so after an edit press Save Changes, then Refresh.

Walk your own bot the way a stranger would. Press every button, type something unexpected, and fix what reads badly before it is live.

03Read the Logs tab when a step misbehaves

Next to Chat there is a Logs tab. It lists what the flow actually did in this test session, newest first: the step that ran, the time, and the message the runtime recorded. Click a row to expand it — the flow, the block, how long the step took, and for a call to an outside service the request and the response.

The Logs tab of the Test panel listing executed steps, with a failed step outlined in red

The red number on the tab is how many steps failed. Failed rows are outlined in red and carry the error text underneath, which is usually enough to tell a wrong URL from a wrong key.

04Going live for the first time

Press Deploy while no channel is connected and it does not deploy. It opens the Go live window instead: pick where people will chat with your bot.

The Go live window with the Telegram, Web chat and Email options

  • Telegram asks for the token BotFather gave you. Paste it into Bot token and press Connect & publish — that one click connects the channel and publishes your flows.
  • Web chat needs no token. It publishes a widget for your website plus a shareable link.
  • Email connects your mailbox: the bot reads incoming emails and answers them from that address.

The first deployment can take a few minutes. After that the window is gone for good.

05Every deploy after the first

One click on Deploy, and the version on your canvas goes live.

The one exception is a workspace with more than one bot — a test bot next to the production one, for example. Then Deploy opens Deploy to bots first, where you tick which bots receive this version. All of them are ticked by default, and each row shows whether it already runs this version.

06What a deploy actually changes

The bots you deployed to start running the flows from that version. That is the whole point, and it is why an edit that is only saved has no effect on anyone. For a Telegram bot, the command menu is updated too — see the end of this page.

07When the bot does not answer

Open Settings → Logs. Pick the bot and you get every step it ran, with filters for Flow, Level, Action and Contact, plus a search over the message text. Set Level to Error first — that is usually a one-line answer.

The Logs page under Settings, filtered to one bot, showing executed steps and one error row

If the logs do not explain it, the cause is almost always one of three:

  • It was never deployed. Saving is not publishing. Go back to the canvas and check whether Deploy is still active.
  • You are talking to the wrong bot. Telegram search happily shows bots with near-identical names. Open yours by the exact username BotFather gave you.
  • Nothing matched. If there is no log at all for the moment you wrote to the bot, the message never entered a flow. Open the starting step and check the trigger — a command trigger only fires on that exact command, and group triggers only fire in groups.

When none of that fits, the Test panel is the faster tool: it runs the same flows with the logs sitting one tab away, and you can repeat the failure as many times as you like without bothering real users.

08For advanced users: the Telegram command menu

When you deploy a Telegram bot, its command menu (the list of /commands people see in Telegram) is rebuilt from the command triggers in the flows you just published, so you never have to run /setcommands in BotFather. The text next to each command comes from the name of the flow it starts — which is a good reason to name flows the way you would name menu entries.

Three things about that sync are worth knowing:

  • It merges instead of replacing. Commands you set in BotFather by hand are kept; yours win when the names are the same.
  • It only adds and updates. Deleting a flow does not remove its command from the menu — clear that one in BotFather.
  • It is best effort. If Telegram refuses the update, the deploy still succeeds and your bot still answers the command; only the menu is out of date.

A trigger that is not a legal Telegram command (anything outside lowercase letters, digits and underscores, up to 32 characters) still works as a trigger, but it is skipped in the menu.

09Next up

Your bot works in Telegram — now put the same flows on your website.

Embed Web Chat on Your Site

Try it in your own bot

Build it on the free plan while the steps are fresh. No card required.

Build Your First Bot Free