Реализовал выбор способа получения обновлений в настройках

- Получение обновлений теперь выполняется через long polling (если не выбран вебхук)
- Периодическая проверка обновлений с помощью фонового задания
- Настройки позволяют переключаться между long polling и webhook для получения обновлений
This commit is contained in:
2025-07-01 12:53:43 +03:00
parent 69b0fc406a
commit 82272234bf
22 changed files with 317 additions and 216 deletions

View File

@@ -3,20 +3,20 @@
// Получить обновления и обработать их по расписанию
Процедура ПроверкаОбновленийПоРасписанию() Экспорт
// Проверка установлен ли вебхук
Ответ = HttpОбщегоНазначенияВызовСервера.СтрокаJsonВОбъект(ТелеграмМетодыВызовСервера.GetWebhookInfo());
Если Ответ["ok"] И ЗначениеЗаполнено(Ответ["result"]["url"]) Тогда
Возврат;
КонецЕсли;
Ответ = ТелеграмМетодыВызовСервера.GetUpdates();
Если Ответ <> Неопределено Тогда
МассивСообщенийТелеграм = ТелеграмОбщегоНазначения.ОбновленияТелеграм(Ответ);
Для каждого СообщениеТелеграм Из МассивСообщенийТелеграм Цикл
ТелеграмОбщегоНазначения.СохранитьСообщениеВБазу(СообщениеТелеграм);
ТелеграмМетодыВызовСервера.SendMessage(СообщениеТелеграм.ИдЧата, СообщениеТелеграм.Сообщение.text)
КонецЦикла;
КонецЕсли;
Пока Истина Цикл
Если ПолучитьФункциональнуюОпцию("ТелеграмИспользоватьВебХук") Тогда
Прервать;
КонецЕсли;
Ответ = ТелеграмМетодыВызовСервера.GetUpdates(30);
Если Ответ.Успех Тогда
БотОбщегоНазначения.ОбработкаКомандыБота(Ответ.Тело);
Иначе
Если СтрНайти(Ответ.Описание, "can't use getUpdates method while webhook is active") <> 0 Тогда
ТелеграмМетодыВызовСервера.DeleteWebhook();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры