Telegram
Chats
Nima
12:04
ok see you at 8
Sticker dump
11:40
you: that cat one
Work
Yesterday
Sara: deck is in the drive
Portal
Tap to start
Pizza night
Mon
who’s bringing drinks
Tunnel mode
Persona mode
Telegram
Chats
Nima
12:04
ok see you at 8
Sticker dump
11:40
you: that cat one
Work
Yesterday
Sara: deck is in the drive
Portal
Tap to start
Pizza night
Mon
who’s bringing drinks
Your Delta Chat
Chats
Ada
10:12
sent you a file
Family
Sun
mom: call later
Fox
Sat
haha
What’s actually happening
Simple mode: you, the portal bot, one Delta Chat. Nothing moves until this pair is on.
This is just your normal Telegram. Fake chats, same mess as always. Portal is sitting in the list — you haven’t opened it yet.
Nothing is paired. The right phone is your Delta Chat, also just a list. No extra bot chat until you tap Portal.
You open Portal. Empty private chat. This is where /start goes — not a group.
A pairing code is a secret. If you typed /start in a group, anyone there could steal it. So we only do this in a 1:1.
Type /start (or /pair). That’s you asking the bot to pair you.
Still nothing on Delta Chat. The bot hasn’t given you a code yet.
The bot replies with a Delta Chat invite (QR + link) and a short code such as K7H2MQNP.
The invite is how you meet the bot’s Delta Chat account. The code sits in the database on that computer for about 30 minutes. Whoever types it in Delta Chat gets linked to your Telegram. The person running the program can see that — that’s why running it yourself is safer.
Open the invite in Delta Chat or ArcaneChat and accept the chat. Right phone lights up: you are talking to Portal.
Until you accept, there is no Delta Chat conversation to attach the pair to. You are not paired yet — you only opened the door. Anyone else with the same invite would also get a chat with the bot, but they cannot steal your pair without the code.
In that Delta Chat, send only the code. Case does not matter. Do not add extra words.
The bot looks up that code in the database. If it’s still fresh, your Telegram is tied to that Delta Chat. After you’re paired, a message that just looks like a code is only text — it won’t steal the link.
Send a sticker on Telegram. It appears in the same Delta Chat with a neutral filename and no “from Telegram” caption.
The program downloads the file from Telegram and sends it into Delta Chat. While that’s happening, the computer running it can see the file. It renames it so extra Telegram info doesn’t leak.
Reply from Delta Chat. The same sticker or text comes back to your private Telegram chat with the portal bot.
Personal mode is one dump chat: everything you bridge lives in this single 1:1 with Portal. Friends do not get their own faces here. That is what persona mode is for (next two stories).
What’s actually happening
Persona is the other product. Stay paired, then attach a BotFather bot that’s yours. Do it on a machine you run.
Same Telegram as always. Portal is already in the list — you paired in the first story. BotFather is sitting there too. You haven’t opened either yet.
Persona starts from a pair that already exists. The right phone is still just your normal Delta Chat. No ghost chats yet.
Finish story 1 first. A ghost has to know how to write to you. That comes from when you /pair.
No second invite. When you paired, the program saved your Delta Chat identity. New ghosts use that to open a chat with you. Skip /pair and /pair-bot just fails.
Talk to @BotFather — Telegram’s official bot maker — and create a new bot. Copy the token.
The token is the password for that bot. Whoever has it can read every update and send as the bot. Never put it in a GitHub issue, group chat, or someone else’s public Portal.
Back on the portal bot, in private, send /pair-bot and the token. Optional: the t.me link.
/pair links you. /pair-bot registers a bot you own. Different commands. Groups are refused so the token isn’t leaked. The token is stored in the database on that computer, and the program starts listening for messages on your bot.
The portal says your bot is on. Anyone who DMs @YourBot can get a ghost.
The program keeps asking Telegram “any new messages?” and passes them on. Your friends never see @tgdeltabridgebot. They only know @YourBot.
On the machine that runs portal, set PERSONA_ACCOUNT_QR and mode: persona or both.
A ghost is a real Delta Chat account. To create one you tell the program which Delta Chat provider to use (PERSONA_ACCOUNT_QR). You can cap how many. List: /bots. Stop: /unpair-bot.
After /pair-bot, each person who DMs you becomes a ghost on Delta Chat — their name, their photo, same account next time.
This is Alice’s Telegram — her mess, not yours. @YourBot is just another row. Your Delta Chat still has no Alice.
She never installed Delta Chat. She doesn’t see Portal. Your side is still the same chat list as after /pair-bot: Portal, friends, no ghosts.
Alice never installs Delta Chat. She only opens @YourBot and writes a DM.
From Alice’s point of view this is a normal Telegram bot. She does not see Portal, pairing codes, or your chatmail provider.
The program checks the database: have we seen this bot + Alice before?
No? It makes a new Delta Chat account with her Telegram name and photo and saves it. Yes? Same account as last time. This is separate from you pairing the public portal.
A new 1:1 opens on your Delta Chat. The contact is named Alice, with her photo. The message has no “via Telegram” prefix.
The ghost is a real Delta Chat identity. To you it looks as if Alice herself joined chatmail and wrote. That is the point of persona: people, not a labeled dump.
You answer in Delta Chat like any other contact.
The program watches this chat and sends your reply out as @YourBot. Telegram won’t let it speak as Alice — only as the bot.
Alice sees the sticker from @YourBot. If Bob DMs later, you get a second chat: Bob, not Alice.
One ghost per Telegram id, forever. Groups are optional (persona.allow_groups) and become a DC group named TG: … — your replies there are still the bot, not each speaker.
Flip back to the lists. Alice’s Telegram still looks like a bot chat. Yours now has a real row: Alice, her face, her last line.
That new row is the ghost. Next time she writes, same chat. If Bob DMs @YourBot, a second row appears — Bob, not mixed into Alice.
Step 1 of 8