Telegram linking

Link a Telegram account to your dashboard account.

Link your Telegram account to your Busymate identity so the bot knows who you are. Once linked, the BusyBro assistant greets you by name and tailors every answer to your role — and capability-gated write actions become available at your permission level. See what BusyBro can do in the BusyBro ask API.

TL;DR

Start linkingRun /login in the Busymate Telegram bot.
Bot repliesA link: https://dash.busymate.net/account?tglink=<code>.
FinishOpen the link → the /account Telegram tab consumes the code → linked.
Check identity/me in the bot — shows who you're linked to and your role.
Unlink/logout in the bot.
ProgrammaticMCP tools link_telegram({ code }), unlink_telegram({ confirm: true }), get_telegram_link.

The flow

Telegram botyou run /loginbot replies a link/account?tglink=<code>/account → Telegramtab consumes codelinkedbot confirms · /me shows identity
  1. Run /login in the Busymate Telegram bot.
  2. The bot replies with a one-time dash.busymate.net/account?tglink=<code> link.
  3. Open the link in a browser where you're signed in to the dashboard. The /account page's Telegram tab reads the tglink query param and consumes the code, binding your Telegram account to your signed-in Busymate user.
  4. The bot confirms the link. From then on the bot knows your identity and role.

If you open the link without being signed in, you'll be sent through /login first, then bounced back to /account to finish — the code is still consumed by the Telegram tab.

CommandEffect
/loginBegin (or re-issue) the link flow; replies the ?tglink=<code> link.
/meShow your linked identity (display name + role) — confirms the link took.
/logoutUnlink your Telegram account from your Busymate user.

What linking changes

  • BusyBro greets you by name and tailors answers to your role — a viewer gets read-only guidance; a user with edit capabilities sees the write actions they're allowed to run.
  • Capability-gated writes become available to you in chat at your role level, scoped to devices you own (set Live Activity message, rename device, VPN on/off, connection type, service groups, tags). Destructive fleet operations are never exposed. Full detail in BusyBro ask API.

Downstream: BusyBro inherits your identity & role

Linking is the gate for everything BusyBro (the /ask assistant) does on your behalf — once /me shows your identity, the assistant resolves your Busymate user and applies your role's capabilities to every turn:

  • Read help respects your capabilities. BusyBro answers about the sections your role can view; it won't surface data or guidance for areas you have no access to.
  • Write actions run only at your level — and only on your devices. A capability-gated action (rename device, VPN on/off, connection type, Live Activity message, service groups, tags) fires only if your role grants the matching edit capability, and only against devices you own.
  • Destructive fleet operations are never exposed. Unpair, wipe, send-push, role mutations and the like are never offered through chat, regardless of role.

Until you link, BusyBro has no identity to bind to and stays read-only/anonymous. See BusyBro ask API for the full capability surface.

Programmatic parity (MCP)

The same link lifecycle is exposed as tools on the busymate-net MCP server:

ToolWhat it does
get_telegram_linkReturns your current Telegram link state (linked? to whom?).
link_telegramConsume a code (the one from /login) to link, programmatically — { code }.
unlink_telegramUnlink — { confirm: true } (confirm-gated, equivalent to /logout).
json
{"jsonrpc":"2.0","id":1,"method":"tools/call",
 "params":{"name":"link_telegram","arguments":{"code":"<code-from-/login>"}}}
json
{"jsonrpc":"2.0","id":2,"method":"tools/call",
 "params":{"name":"unlink_telegram","arguments":{"confirm":true}}}

Troubleshooting

SymptomCause / fix
Link says "code expired" / "already used"The tglink code is single-use and short-lived. Run /login again for a fresh one.
/me says you're not linked after opening the linkYou opened it in a browser not signed in to the dashboard, and didn't finish the bounce through /login. Sign in, re-run /login, open the new link.
Bot doesn't tailor answers to your roleLinking only takes effect once /me shows your identity. Re-link if needed.
unlink_telegram rejectedIt requires { confirm: true } — it's confirm-gated.