Skip to content

Как Телеграм-бот управляет диалогами и пользователями

Как начинается личный диалог

Бот может написать пользователю в личный чат только с его разрешения. Если диалог уже начат, бот может отправлять сообщения в любой момент.

Бот не может писать другим ботам.

1. Когда пользователь запускает бота

Личная переписка пользователя с ботом начинается, когда пользователь открывает бота и нажимает на кнопку «Запустить».

Открыть бота впервые пользователь может, например, по ссылке или через поиск в приложении. В этот момент пользователь увидит текст «Что может этот бот» и кнопку «Запустить». В зависимости от платформы и языка пользователя кнопка эта также может называться «Начать» или «Start».

Нажатие на эту кнопку отправляет команду /start. Боту следует отвечать на неё приветствием или инструкцией по использованию.

Когда у пользователя появится переписка с ботом, он увидит бота в списке недавних чатов.

WARNING

Команда /start не обязательно означает, что это первое сообщение от пользователя. Убедитесь, что ваш бот не ломается, если пользователь отправил /start вручную уже после запуска.

Более того, первое сообщение от пользователя может не содержать команду /start. Через Telegram API пользователь может начать диалог с любого сообщения. Вряд ли у вашего бота будут такие ненормальные пользователи, но лучше проверьте, что такое действие не кладёт вашего бота.

TIP

Чтобы сообщение /start содержало дополнительную информацию, используйте диплинки.

2. В других случаях

Бот также может написать пользователю, если:

Перед диалогом пользователь видит, по какой из этих причин бот может писать пользователю.

Остановка диалога

Пользователь может вновь остановить переписку, заблокировав бота. Это значит, что бот снова не сможет отправлять пользователю сообщения, пока тот его не запустит.

Как проверить, может ли бот писать пользователю

Попробуйте показать в чате с пользователем статус «Бот печатает...». Если сервера Телеграма вернули ошибку, вы не можете писать пользователю.

Это значит, что пользователь заблокировал бота или бот никогда не мог писать этому пользователю.

Профиль пользователя

Если вы будете хранить пользователей (в базе данных, например) — учтите, что у пользователя обязательно должно быть имя, но необязательно фамилия и юзернейм. Кроме того, все эти данные пользователи могут в любой момент поменять; поэтому различать пользователей следует не по юзернейму, а по их ID.

Языки пользователей

Боты видят язык, установленный у пользователя в приложении Телеграма. Таким образом ваш бот может переписываться с пользователем на его языке.

В апдейтах не всегда отображается язык пользователя. Поэтому, если ваш бот подстраивается под языки пользователей, для пользователя с неустановленным языком документация Телеграма рекомендует использовать последний язык, который был известен для этого пользователя, или английский, если такого языка нет.

«Знакомые» пользователи

Действия бота могут касаться пользователя только в том случае, если бот «знает» этого пользователя. Чтобы «узнать» человека, бот должен получить от него сообщение или запросить его профиль по юзернейму.

Технически это работает так: кроме ID пользователя в запросе к серверу бот должен указать свой access hash этого пользователя. API отдаёт этот access hash вместе с информацией о профиле пользователя в апдейтах. Bot API и хорошие библиотеки под Telegram API кэшируют access hash, так что скорее всего вам не нужно использовать его напрямую.