Exodus
Project · Telegram

Text your boat.
Have it text you back.

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.

Meet BotFather

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.

Creating one, start to finish

  1. Send /newbot
  2. Give it a display name — anything you like, this is what shows at the top of the chat
  3. Give it a username — 5 to 32 characters, and it must end in bot. This one is unique across all of Telegram, so the good ones are long gone.
  4. BotFather hands you an API token

The token is the bot

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.

The other BotFather commands worth knowing

CommandWhat it does
/mybotsThe menu for everything below — start here
/tokenIssue a new token and kill the old one
/setnameChange the display name
/setdescriptionUp to 512 characters, shown on an empty chat
/setabouttextUp to 120 characters, shown on the profile
/setuserpicProfile picture
/setcommandsPopulates the menu button with your commands
/setprivacyControls what it sees in groups — see below
/setjoingroupsWhether it can be added to groups at all
/setinlineEnables inline mode
/deletebotDeletes 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.

Connecting it to the boat

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:

You can't use both at once — long polling won't return anything while a webhook is set. Clear the webhook first if you switch.

Getting your chat ID

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.

What ours actually does

How the AI side works →

What it can do

More than most people realise

Send almost anything

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.

Inline keyboards

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.

Custom keyboards

Replace the phone keyboard with your own buttons. Good for a fixed set of boat commands you don't want to type.

A commands menu

Set it once with /setcommands and every command is listed with a description behind the menu button.

Inline mode

Type your bot's username inside any chat and pull content from it without leaving the conversation.

Mini Apps

A full web interface launched inside Telegram. If you've already built a dashboard page, it can live here.

And it's free

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.

Talking to the boat

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.

The loop

  1. You speak. A Telegram voice note, from anywhere.
  2. The bot downloads it. Just a file, same as a photo.
  3. Whisper turns it into text. Running locally, no internet.
  4. The local model answers — it already has every instrument reading and every manual aboard.
  5. Text-to-speech turns the answer back into audio. Also local.
  6. The bot sends you a voice note back.

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

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.

VersionWhy 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.

And talking back

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 whole chain is free and local. Telegram carries the audio, but the listening, the thinking and the speaking all happen on hardware you own. Nothing you say to your boat gets uploaded to anybody's service for processing.

Worth thinking about first

The AI that answers →

What it can't do

The limits, before you design around them

LimitDetail
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.

Outside the box

Things worth stealing

Think hard before it controls anything

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.

Open BotFather in Telegram ← All projects