Боты телеграмм должны иметь человекоподобное взаимодействие. Поэтому мой совет, чтобы избежать вашей проблемы, было бы определить константу TYPINGSPEED
и объединить ее с вызовом бота api sendChatAction()
, чтобы, если «чувствует», как ваши сообщения на самом деле написаны человеком с быстрой записью.
В рубина, это дало бы что-то вроде этого:
your_msg.split("\n").each do |line|
writing_time=line.length/TYPINGSPEED
TelegramBot.client.api.sendChatAction(chat_id: chat_id, action: "typing")
sleep(writing_time)
TelegramBot.client.api.sendMessage(your_options)
end
sendChatAction красиво отображает "nameofyourbot пишет ..." на экране пользователя.
Конечно, недостатком этого кода является то, что процесс обработки ответа не будет возвращен до нескольких секунд, если ваше сообщение длинное (из-за использования функции sleep
). Таким образом, в зависимости от количества одновременных пользователей, использующих ваш бот, вам нужно выполнить планирование емкости и создать столько процессов, сколько необходимо, чтобы убедиться, что ваш бот может обрабатывать количество параллельных обсуждений.
Я делаю это сам, и я никогда не сталкивался с проблемой, которую вы описываете.
Вы отправляете сообщения асинхронно? –
Да. Через API. – Guy
Вы пробовали метод invokeAfterMsg? Он доступен и для ботов? –