Routing Support Tickets by Language on Telegram
Routing Support Tickets by Language on Telegram
Telegram communities go international faster than almost any other channel. A channel that starts in English picks up Russian, Spanish, Farsi and Indonesian speakers without anyone deciding it should.
Support is where that shows up first, and multilingual Telegram support is easier than most teams assume — Telegram gives you a routing signal most teams never use.
The signal you already have
Every User object from the Bot API carries:
language_code — String, Optional. IETF language tag of the user's language
This is the language their Telegram client is set to, and you receive it with the first message — before they type a word, without asking.
Two properties matter:
It is optional. The field may simply be absent. Your code must handle a missing value as a normal case, not an error.
It is app language, not fluency. A Russian speaker in Germany may run Telegram in German. A developer anywhere may run it in English regardless of their first language. It tells you the interface they chose, which correlates with but does not equal the language they want support in.
So treat it as a strong default, never a verdict.
The pattern that works
1. Default from language_code. Open in that language if you support it.
2. Offer the switch immediately, in their language and in English:
🇬🇧 Continue in English · 🇷🇺 Продолжить на русском · 🇪🇸 Continuar en español
One tap fixes a wrong guess. This single line handles the entire "app language ≠ preferred language" problem without asking anyone to fill in a form.
3. Store the choice. Once a customer picks, remember it. Never ask twice.
4. Fall back explicitly. No language_code, or an unsupported one, means English plus the switcher — not a broken experience.
Routing to the right person
With forum topics, language routing is straightforward: put the language in the topic name.
createForumTopic accepts a name of 1–128 characters and an optional icon_color. Encode routing into both:
#4471 · RU · @username · payment
Now your Russian-speaking agent scans the supergroup and sees their tickets instantly. icon_color gives you a second visual channel — one colour per language reads faster than text. Telegram permits exactly six values (7322096, 16766590, 13338331, 9367192, 16749490, 16478047), so colour scales to six languages; past that the name prefix carries it alone.
That is your entire routing system: a naming convention plus a colour. No routing engine, no assignment rules. For teams under about ten agents it works better than most software, because everybody can see the whole queue.
When you do not have a speaker
Most teams support two or three languages and receive more than that.
Say so honestly, up front:
We answer in English and Russian. You're welcome to write in your own language — we'll use translation, so please keep it simple.
That sentence does a lot of work. It sets expectations, avoids the impression of being ignored, and invites simpler phrasing that translates better.
Practical rules for machine translation:
- Tell them you're using it. Undisclosed machine translation reads as carelessness when it goes wrong, and it will go wrong.
- Keep replies short and literal. Idioms, humour and politeness formulas translate badly. "I'll check and reply in an hour" survives translation; "let me dig into that and circle back" does not.
- Never machine-translate anything consequential. Refund terms, security instructions, anything legal or financial. Escalate those to a human speaker or state them in a language you control.
- Include the original. Send the translated reply with the English underneath. A bilingual reader can catch a mistranslation themselves, and many of your users are bilingual.
What not to do
Don't auto-detect from message text alone. Short support messages ("help", "not working", a screenshot) carry too little signal. language_code plus an explicit switcher beats text detection for this use case.
Don't run separate bots per language. Fragmented history, duplicated setup, and customers who message the wrong one. One bot, routed internally.
Don't hide the switcher after the first message. People change their minds, or the first exchange goes badly in the wrong language. Keep it reachable.
Don't translate your canned responses once and forget them. Machine-translated macros calcify — a bad translation you send five hundred times is worth an hour of a native speaker's time to fix. Have your top ten canned replies checked by a human, once.
Community-language channels
Beyond a certain size, a dedicated channel per major language beats routing — people help each other, and your load falls.
The threshold is roughly when a language group is big enough to sustain conversation without you. Below that, a quiet channel signals a dead product. Above it, it is your cheapest support resource.
Keep support tickets centralised even then. Community channels handle discussion; tickets stay in one queue where you can measure them.
The minimum worth doing
If you do nothing else:
- Read
language_code, handle it being absent - Default to it, offer a one-tap switcher
- Put the language in the forum topic name
- Say plainly which languages get a human and which get translation
That is an afternoon of work and it covers most of the value. Everything above it is refinement.
Field definition quoted from Telegram's Bot API documentation, verified September 2026.