Customize the bot's greeting
Override the default cover text and button globally, or for specific languages.
Out of the box the bot replies to /start with a plain, honest human-gate message ("confirm
you're not a bot — tap to continue") in whichever of 16 built-in languages matches the
visitor, picked from the deep-link payload first and the visitor's Telegram profile second,
falling back to English. You can override this at two levels.
Global override
greeting_text and button_text replace the localized default in every language at once:
curl -X PATCH https://app.tease.link/api/admin/tg/gate \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"greeting_text": "Tap below to reach me directly.",
"button_text": "Open chat →"
}'button_text is limited to 128 characters. Leave a field empty (or omit it) to keep using the
localized default for that field.
In the panel this is the Greeting field and Button text field on the bot's card — leaving Button text empty is labeled "Empty = localized default by user language".
Per-language overrides
greetings lets you override text and/or button for individual language codes, on top of (or
instead of) the global override:
curl -X PATCH https://app.tease.link/api/admin/tg/gate \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"greetings": {
"es": { "text": "Toca abajo para continuar." },
"pt": { "text": "Toque abaixo para continuar.", "button": "Continuar →" }
}
}'Keys must be exactly 2-letter language codes; each value is an object with only text and/or
button string fields — anything else is rejected with 422. This is a full replace: the
object you send becomes the whole greetings column, so include every language you want to keep,
not just the one you're changing. Sending {} clears all per-language overrides.
In the panel this is the collapsible Greetings by language section under the greeting field — each row picks a language and its text/button; deleting a row removes that language's override.
Precedence
For a given visitor's resolved language, the reply is built in this order (first non-empty wins):
greetings[<lang>].text/.button— the per-language override.greeting_text/button_text— the all-language override.- The built-in localized default for that language.
With every override left empty, the reply is byte-identical to the pre-customization default.
Typing delay
typing_delay_ms (0–4000) simulates Telegram's "typing…" indicator before the reply is sent —
purely cosmetic, no effect on routing or attribution:
curl -X PATCH https://app.tease.link/api/admin/tg/gate \
-H "Authorization: Bearer $TEASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "typing_delay_ms": 1200 }'How to know it worked
Message /start to your bot from a Telegram account set to the language you overrode (or with a
deep-link carrying that language code) and confirm the reply matches. The panel's greeting fields
reflect exactly what's stored — reload the tab after saving to double-check.
The webhook is tolerant of junk here by design (a broken manual edit degrades to the built-in
default rather than breaking /start), but the panel validates at save time so you find out about
a typo immediately instead of discovering it live.
What's next
- Sync or edit the bot's Telegram profile —
the bot's name/bio/avatar, as opposed to what it says on
/start.
Route different audiences with rules
Send non-premium fresh accounts to a channel, one country to a local manager, and everyone else to the DM — with named destinations and ordered rules.
Sync or edit the bot's Telegram profile
Make the bot's public Telegram identity — name, bio, avatar — match what the panel shows.