Just me
You talk to the portal bot. Everything lands in one Delta Chat. Good for “my stickers, my chat.”
Telegram Portal Delta Chat Portal
Pair once with a short code. Then send a sticker on Telegram — it shows up in Delta Chat. Send it back the other way. No ugly filenames. No “from Telegram” caption.

Hold on.
After you pair, this goes both ways. We keep filenames boring on purpose — no “from Telegram.”
Both ways
The still ones. They land as a sticker or a picture.
Telegram’s animated ones. You get a file, or a GIF if the converter is installed.
The short WEBM loops. They show up as video.
GIFs and Telegram animations (often MP4). They play as GIF or video.
Those premium stickers-in-text. They come through as stickers.
Normal chat stuff, same both ways. Long videos stay on their side — we cap duration.
Mode 1 — Tunnel
Everything you send the portal bot lands in one Delta Chat. Don’t use a public host unless you’re fine with that person seeing what you send. You can also start from Delta Chat with t.me/…?start=CODE. Pairing docs.
01
Message @tgdeltabridgebot and send /start in a private chat.
02
The bot replies with an invite QR/link and a short pairing code (about 30 minutes).
03
Accept the chat, send only the code. The pair becomes active: your Telegram user and that Delta Chat.
04
Stickers, GIFs, text, images, short video. Filenames stay neutral; source captions are stripped.
Mode 2 — Persona
Persona
Mode 1 is the tunnel. Mode 2 is Persona: your bot, their faces.
Pairing dumps everything into one chat with the portal. Persona is the other product: you connect a bot you made with BotFather. Friends stay out of a shared pile. Each Telegram person becomes a ghost — a real Delta Chat account with their name and photo — and opens a normal 1:1 with you. What you type there goes out as your bot.
You talk to the portal bot. Everything lands in one Delta Chat. Good for “my stickers, my chat.”
They talk to your bot. On Delta Chat Alice looks like Alice, Bob like Bob. Same person later? Same ghost, same chat.
Top to bottom. Four hops. That’s the whole trick.
1 · they write
She never opens Delta Chat. She only knows the Telegram bot you published.
2 · your bot
You registered the BotFather token with /pair-bot on the portal (after you /paired yourself).
3 · a ghost is born
Missing? Create with PERSONA_ACCOUNT_QR, copy name and photo. Exists? Reuse. Not the same table as personal pairs.
4 · you read and reply
No “via Telegram” label. Your reply goes back out through the bot. Telegram cannot puppet Alice as Alice.
mode: persona or both. Pair the portal first so it has your Delta Chat identity. Then in a private chat: /pair-bot <TOKEN>. That token lives in the database on that computer.
Turn on persona.allow_groups, add the bot, turn Group Privacy off in BotFather. The group shows up as TG: … with each speaker as their ghost. Your replies still leave as the bot.
That machine holds the token and the ghost keys. Don’t /pair-bot on a public instance you don’t run. Run it yourself.
Commands: /bots, /unpair-bot. persona docs.
That’s the version we mean when we say “use this.” One Go binary, deltachat-rpc-server on PATH. You keep the token, the database, the keys.
tar -xzf portal_*.tar.gz
chmod +x portal
./portal --version
# config.yml ← config.example.yml
# .env TELEGRAM_BOT_TOKEN=…
# PERSONA_ACCOUNT_QR=…
./portal --config config.yml init \
dcaccount:nine.testrun.org
./portal --config config.yml serve Download latest