TEASEDocs
ProductsLinkTelegram gate

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):

  1. greetings[<lang>].text / .button — the per-language override.
  2. greeting_text / button_text — the all-language override.
  3. 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

On this page