2015-08-16 4 views
8

Я строю telegram bot.Telegram API сообщения заказать

Это означает, что я управляю несколькими чатами сразу (каждый с уникальным идентификатором чата).

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

Я использую API телеграмм, который по HTTP.

Однако, когда я хочу отправить несколько сообщений, они иногда поступают в неправильном порядке, поскольку неясно, какой запрос HTTP будет принят первым.

Есть ли какой-либо недокументированный способ отправки параметра последовательности в API телеграммы или я должен обрабатывать HTTP-запросы в очереди?

+0

Вы отправляете сообщения асинхронно? –

+0

Да. Через API. – Guy

+0

Вы пробовали метод invokeAfterMsg? Он доступен и для ботов? –

ответ

0

Я построил бота с телеграммой-кли и получил ту же проблему. Так что я думаю, что Telegram специально для отправки сообщений с коротким временем дельта как набор

+0

Как комплект? Вы имеете в виду concat их вручную? – Guy

0

Боты телеграмм должны иметь человекоподобное взаимодействие. Поэтому мой совет, чтобы избежать вашей проблемы, было бы определить константу 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). Таким образом, в зависимости от количества одновременных пользователей, использующих ваш бот, вам нужно выполнить планирование емкости и создать столько процессов, сколько необходимо, чтобы убедиться, что ваш бот может обрабатывать количество параллельных обсуждений.

Я делаю это сам, и я никогда не сталкивался с проблемой, которую вы описываете.

0

Вы должны позаботиться о том, чтобы отправить их в нужном порядке для себя и, следовательно, поставить их в очередь, если вы не хотите, чтобы они выходили из строя. Официальный HTTP API-интерфейс HTTP не обеспечивает правильного порядка сообщений.

0

В настоящее время API Telegram Bot не предоставляет такой параметр. Чтобы это существо, вам нужно дождаться ответа сервера и проверить, прошло ли оно до того, как отправить следующее сообщение.

Если вы используете NodeJs, есть модуль под названием tgfancy, который обрабатывает ordered message sending (наряду с опросом и так много других вещей) для вас.

Ответ Тибауда добавляет очень хорошее предложение использовать метод sendChatAction, чтобы сделать взаимодействие более разговорным. Мое единственное замечание состоит в том, что бот не должен притворяться, что это человек, поэтому нет необходимости делать его похожим на то, что вы печатаете. Это означает, что sendChatAction будет служить для указания того, что ваш бот получил сообщение пользователя и обрабатывает его.