Насколько я понимаю, разговор существует, если кто-то начал его с ботом через /start.
Да, разговор всегда инициируется пользователем :
Боты не могут начинать разговоры с пользователями. Пользователь должен либо добавить их в группу, либо сначала отправить им сообщение. Люди могут использовать telegram.me/ ссылки или поиск по имени пользователя, чтобы найти вашего бота.
Обратите внимание, что /start
здесь не единственный вариант.
Если вы попытаетесь отправить сообщение для пользователя, который не начал разговор с ботом, вы получите что-то вроде этого: {"ok":false,"error_code":400,"description":"Bad Request: chat not found"}
.
Как из моего кода начать разговор, чтобы убедиться, что chat_id доступен? (= что есть конверсия, которую я могу запросить).
Обычно вам не стоит об этом беспокоиться. Бот не запрашивает конкретные действия / запросы пользователя с помощью getUpdates
, он запрашивает все взаимодействия от всех пользователей и затем решает, что делать в соответствии с предоставленной вами внутренней логикой.
Возможно, вы захотите хранить информацию о пользователях и / или их запросах в базе данных каждый раз, когда вы получаете Update
от конкретного пользователя в getUpdates
.
Исходя из этого, бот может принять решение, например, отправить ему сообщение.
Я также уверен, что разговоры, если они существуют, не хранятся бесконечно (это еще одна причина, по которой запрос на обновление может привести к пустым результатам)
Да, В документах четко указано , что
Входящие обновления хранятся на сервере до тех пор, пока бот не получит их в любом случае, но они не будут храниться дольше, чем 24 часа .
Update
на серверах Telegram - это объект с коротким сроком службы.
Если вы не сохранили информацию о существующих пользователях или не потеряли базу данных, нет способа извлечь эти данные с серверов Telegram.
PS: в качестве примечания я бы предложил использовать длинный опрос, так как Telegram Bot API предназначен для использования с длинным опросом , если вы используете getUpdates
, Наиболее важным является параметр запроса timeout
метода getUpdates
:
(время ожидания равно) Время ожидания в секундах для длительного опроса. По умолчанию 0 , т.е. обычный короткий опрос. Должно быть положительным, короткий опрос должен использоваться только для целей тестирования .
Как написано в вопросе, вы используете короткий опрос.