Custom commands
Text commands and button commands are built from the same modal in the dashboard's **Commands** tab. A command saved with buttons attached is a button…
Text commands and button commands are built from the same modal in the dashboard's Commands tab. A command saved with buttons attached is a button command; one without is a text command.
Creating a bot command
The Commands tab lists every command for the bot and adds new ones with Add Command. The response is rich text.
Editing can flip a command either way: remove every button to make it a text command, or add one to make it a button command.
Custom commands answer in any chat the bot is in — they don't check the allowed-groups list.
The response editor
Selecting text inside the response field pops up a formatting toolbar.
Selection toolbar
| Button | Does |
|---|---|
| Bold, Italic, Underline, Strikethrough | Standard text formatting |
| Monospace | Code formatting |
| Spoiler | Telegram spoiler |
| Hyperlink | Turns the selection into a link — the URL must start with https:// |
| Remove link | Strips a link back to plain text |
The modal toolbar also has Undo / Redo, a premium emoji inserter and a divider inserter.
The button board
Each button has a label, a URL, a colour, a layout and an optional premium-emoji icon.
Button board limits
| Setting | Value |
|---|---|
| Buttons per command | 12 |
| Label length | 64 characters |
| URL scheme | https:// only. A bare host gets https:// added; an http:// URL is rejected on save: Button URLs must use HTTPS |
| Colours | Gray (default), Blue, Green, Red |
| Layout | Horizontal or Stacked — Stacked is the default |
A button can carry one premium emoji next to its label, picked from your own emoji packs or pasted as a premium emoji ID (5 to 32 digits).
Handling duplicate command triggers
A trigger must be unique across every text command, button command and character trigger on the same bot.
Trigger validation errors
| Situation | Message |
|---|---|
| Bad format | Trigger must be alphanumeric (letters, numbers, underscore only) |
| Matches a character's trigger | Trigger cannot be the same as a character command (/x) |
| Matches another text command | Command with trigger "x" already exists |
| Matches another button command | Button command with trigger "x" already exists |
| A text and a button command would share one trigger | A button command with trigger "x" already exists. Triggers must be unique across text and button commands. |
Slash optional
| Input | Output |
|---|---|
| Saved trigger | ca |
| All of these match | /ca /ca@yourbotusername ca |
Built-in commands are matched first, so a custom command whose trigger matches one of them doesn't get to answer.
Reserved trigger words
A character's trigger command can't be renamed to one of these 7 built-in words:
- start
- commands
- getid
- holders
- ban
- mute
Limits
Per-command limits
| Setting | Value |
|---|---|
| Visible reply length | 4096 characters — Telegram's cap |
Over the limit, saving fails with Response exceeds Telegram's 4096 character limit (N visible characters).
Hyperlink navigation entries
Beta
Hyperlink navigation is currently in beta.
The Commands tab can create and edit a hyperlink navigation entry. A nav entry can't be converted to a button command.
