Twenty minutes of setup and your boat can message you from anywhere in the world, for nothing. No app to write, no server to rent, no subscription. Here's exactly how, and — just as useful — what it can't do.
A bot that makes bots
Telegram's bots are created by talking to another bot. It's called @BotFather, and it's the official one.
Open Telegram, search @BotFather, start a chat. There's no
website, no sign-up form, no developer account. You already have a
Telegram account, so you already have everything you need.
/newbotbot. This one is unique across
all of Telegram, so the good ones are long gone.That token is not a password you can change later without consequences — it is the bot. Anyone who has it can read everything your bot receives and send anything as your bot.
Never paste it into a chat, a screenshot, a video, or a public code
repository. Put it in a file only your user can read, or an
environment variable. If it leaks, send BotFather
/token immediately and it issues a new one, killing the
old.
| Command | What it does |
|---|---|
/mybots | The menu for everything below — start here |
/token | Issue a new token and kill the old one |
/setname | Change the display name |
/setdescription | Up to 512 characters, shown on an empty chat |
/setabouttext | Up to 120 characters, shown on the profile |
/setuserpic | Profile picture |
/setcommands | Populates the menu button with your commands |
/setprivacy | Controls what it sees in groups — see below |
/setjoingroups | Whether it can be added to groups at all |
/setinline | Enables inline mode |
/deletebot | Deletes it and frees the username |
/setcommands is the one people skip and shouldn't. It
gives the chat a proper menu button, so you don't have to remember
what you called things at two in the morning.
The shape of it
Your bot is just an HTTP endpoint with a token. Something on the boat — a script, Node-RED, a Signal K plugin, whatever you like — talks to Telegram's API using that token. Two ways round:
To send you a message, the bot needs to know which chat. Send it anything, then read your bot's updates — your chat ID is in the reply. Store it alongside the token and the bot now knows where "home" is.
More than most people realise
Text, photos, video, animations, audio, voice notes, stickers, documents, contacts, locations and venues. A bilge alarm with a photo and a position attached is entirely normal.
Buttons under a message that don't post anything to the chat — they call back to your code. "Generator is hot. [Stop] [Ignore] [Details]" is a few lines of work.
Replace the phone keyboard with your own buttons. Good for a fixed set of boat commands you don't want to type.
Set it once with /setcommands and every command is
listed with a description behind the menu button.
Type your bot's username inside any chat and pull content from it without leaving the conversation.
A full web interface launched inside Telegram. If you've already built a dashboard page, it can live here.
No charge for the bot, the API, or the messages — within the rate limits below. For a boat sending a handful of alerts a day that is comfortably free forever.
Voice in, voice out — and none of it leaves the boat
Telegram handles voice notes natively. That turns out to be the whole trick.
You hold the microphone button, say "what's the house bank doing", and let go. Telegram delivers that as an audio file your bot can download like any other. Everything after that happens aboard.
Hands full, dark, raining, halfway up the companionway — that is when you actually want to ask the boat something, and it is exactly when typing is useless.
Whisper is OpenAI's speech recognition model, and they open-sourced it. It is free, the weights are published, and it runs entirely on your own machine. No API key, no per-minute charge, no audio leaving the boat.
It is also remarkably good in bad conditions — engine noise, wind, an accent, a mumble. It was trained on a very large amount of messy real-world audio and it shows.
| Version | Why you'd pick it |
|---|---|
| faster-whisper | Several times quicker than the original for the same accuracy. This is the one we run. |
| whisper.cpp | Plain C++, no Python, tiny dependencies. The one to try if you want it on a Raspberry Pi — the small models will run, slowly. |
| openai/whisper | The original reference implementation. |
Model size is the trade. The tiny models are fast and make mistakes; the large ones are accurate and want real hardware. For boat commands — a short phrase from a known vocabulary — a small model is usually plenty.
For the other direction, Piper is the one to know. Open source, fast enough to run on a Raspberry Pi in real time, and the voices are far better than the robotic text-to-speech you may be picturing. Also completely offline.
The limits, before you design around them
| Limit | Detail |
|---|---|
| It can't message you first | A bot can never start a conversation. The human has to send it something once, ever. After that it can message freely. |
| One message per second, per chat | Go faster and you'll get throttled. |
| 20 messages a minute to a group | Hard ceiling for group chats. |
| About 30 messages a second overall | Across everything, for bulk sending. |
| Downloads capped at 20 MB | Files the bot fetches from Telegram. |
| Uploads capped at 50 MB | Files the bot sends you. |
| It can't see other bots | Bots never receive messages from other bots, in any mode. |
| Privacy mode in groups | By default a bot in a group only sees commands aimed at it,
replies to its own messages, and messages right after its own.
Turn privacy off with /setprivacy if it needs to
read everything. |
None of these matter much for a boat. The one that catches people out is the first: you must message the bot once before it can ever message you. Do it the moment you create it, and get everyone else who should receive alarms to do the same.
Things worth stealing
Reading is safe. Writing is not. The moment a bot can switch something on, anyone who gets your token can too — and a mistyped command has physical consequences.
If you do give it control, restrict it to known chat IDs, require a confirmation step, and keep a physical disable on anything that moves or heats.