Chapar forwards incoming SMS and missed calls from an Android phone straight to your Telegram — and lets you reply from there. This guide takes you from nothing to your first forwarded message.
@BotFather and open it (it has a blue check)./newbot.bot, e.g. my_sms_relay_bot.1234567890:AAH…. Copy it and keep it somewhere safe./revoke to BotFather to get a new one.
@userinfobot in Telegram and tap Start.123456789 — that's your Chat ID. Copy it.Want the messages in a group instead? Add the bot to the group and use the group's ID here — it usually begins with -.
app-release.apk.On first launch the app asks for SMS, Contacts, Phone and Notifications. Allow all of them — without these, nothing can be read or forwarded.
✅ Chapar connected message should arrive in the bot chat. If it does, you're done — SMS forwarding starts immediately.Got a ❌ instead? See "Something's wrong?" at the bottom of this page.
Android shuts down background apps to save battery. Skip this and forwarding stops after a few hours:
Nothing is lost when the network drops — Chapar queues messages and retries until they're delivered, and it starts itself again after a reboot.
/sms 09120000000 Hello in the bot chat. Use /sms1 or /sms2 to pick the SIM.| Command | What it does |
|---|---|
/status | Current state: forwarding, OTP mode, queue size, numbers |
/pause · /resume | Pause and resume forwarding |
/otp_on · /otp_off | Forward only messages containing a verification code |
/senders | List recent numbers |
/sms <number> <text> | Send an SMS to any number |
/help | Show help |
Where api.telegram.org is filtered, instead of keeping a VPN on the phone, run a tiny free proxy on Cloudflare and point the app at it:
https://my-tg.username.workers.dev) and test it in a browser: …/bot<TOKEN>/getMe should return {"ok":true,…}.If you'd rather your message text didn't pass through Cloudflare, do the same job on a VPS outside the filtered region. With Caddy the whole configuration is a few lines, and the TLS certificate is handled for you:
tg.example.com {
reverse_proxy https://api.telegram.org {
header_up Host api.telegram.org
}
}
/etc/caddy/Caddyfile, and run systemctl reload caddy.https://tg.example.com/bot<TOKEN>/getMe should return {"ok":true,…}.https://tg.example.com.SECRET to a random string — the URL you put in the app then becomes https://…/<SECRET> and everything else gets a 403. The same trick works on Caddy with an unguessable path.
Note this takes Cloudflare out of the picture, but your messages still pass through your server — it's exactly as private as that machine is.
Check three things: did you tap Start in the bot chat? Was the token copied without stray spaces? Is the Chat ID digits only? If all three are fine and it still fails, Telegram is unreachable from that network — do step 9.
Almost always permissions. Go to Settings → Apps → Chapar → Permissions and make sure SMS and Phone are allowed. If they're greyed out, do the "Allow restricted settings" fix in step 4. Also check that Pause forwarding is off in Chapar's Settings tab.
The system killed the app in the background. Do step 6 in full: battery optimization exemption, plus Autostart on Chinese ROMs. You can check whether it's alive at any time by sending /status in Telegram.
Either the SEND_SMS permission isn't granted, or you replied to a message so old that its origin is no longer stored — reply to a more recent one. Note that service senders (like "Mellat Bank") can't be texted back at all.
No. Chapar only forwards messages that arrive after it's installed and connected. It never reads or sends your existing inbox.
Data is negligible — a few kilobytes per message. Battery use is modest, but it does keep a service running to receive your Telegram commands, so keep the phone on a charger, or at minimum do step 6 (battery optimization exemption).
No. The app only acts on messages from the Chat ID you configured; if a stranger finds the bot's username and messages it, they're ignored entirely. The one thing to protect is the bot token.
On the phone itself (a short-lived queue until delivery) and in your Telegram chat. There's no server in between — unless you set up the proxy in step 9, in which case message text passes through it.
Yes. It tells you which SIM a message arrived on and sends your replies from that same SIM. For new messages, /sms1 and /sms2 pick the SIM.
Technically yes, but don't: everything lands in one chat and replies can go to the wrong phone. Create a separate bot per phone — it takes seconds — and point each at its own chat.
No — SMS and missed calls only. The app has no access to other apps' notifications.
Usually a second or two. If the phone is offline, the message waits in the queue and goes out as soon as the network is back, retrying with a growing delay (starting at 10 seconds) until it's delivered.
No. Nothing beyond the ordinary Android permissions.
Download the new APK from Releases and install it over the old one — no need to uninstall, and your settings, numbers and token are kept. (All official builds are signed with the same key.)
Forwarding stops and the settings and queue on the phone are erased. Messages already delivered to Telegram stay there — delete the bot chat if you want those gone too.
Yes, and open source. No subscription, no ads. The only possible cost is the SMS messages you send through the bot, which your carrier bills as usual.