Skip to content

Пользователи и личные сообщения

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

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

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

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

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

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

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

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

WARNING

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

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

TIP

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Или пользователи которых "видел" пользователь/бот

Чтобы посылать к API запросы, касающиеся пользователя, недостаточно знать только id этого пользователя: нужен еще и access hash. API отдаёт access hash, когда бот «встречает» пользователя, то есть когда API даёт информацию о профиле пользователя. Это происходит, например, если пользователь отправил сообщение боту или бот получил нужного пользователя по юзернейму.

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