Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

1C_TELEGRAM_API_FAIL 1С:Предприятие и СУБД

Настройка интеграции 1С с Telegram Bot API: отправка уведомлений и опрос

Обновлено: 26.08.2026 · Официальная документация ↗

При взаимодействии 1С с Telegram Bot API возникают проблемы:

  • Ошибка HTTP 400 Bad Request: can't parse entities при использовании Markdown/HTML форматирования.
  • Ошибка HTTP 429 Too Many Requests: retry after X при массовой рассылке уведомлений сотрудникам.
  • Сложности с отправкой бинарных файлов (PDF-счетов, Excel-отчетов) методом sendDocument.
  • Задержки обработки входящих сообщений при использовании режима Long Polling в однопоточном задании.

1. Методы получения обновлений: Webhook vs Long Polling

Для production-систем с белым IP предпочтительнее Webhook (Telegram сам отправляет запросы на HTTP-сервис 1С). Если сервер 1С находится за NAT без внешнего адреса, используется регламентное задание с методом Long Polling (getUpdates).

2. Отправка форматированного текстового сообщения с кнопками

&НаСервере
Процедура ОтправитьСообщениеВTelegram(ТокенБота, ChatID, ТекстСообщения)
    
    ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL();
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org", 443,,,, 15, Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS));
    
    Путь = "/bot" + ТокенБота + "/sendMessage";
    HTTPЗапрос = Новый HTTPЗапрос(Путь);
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
    
    // Формирование структуры Inline-клавиатуры
    Кнопка = Новый Структура("text, callback_data", "Согласовать", "approve_doc_123");
    СтрокаКнопок = Новый Массив;
    СтрокаКнопок.Добавить(Кнопка);
    Клавиатура = Новый Структура("inline_keyboard", Новый Массив);
    Клавиатура.inline_keyboard.Добавить(СтрокаКнопок);
    
    ТелоЗапроса = Новый Структура;
    ТелоЗапроса.Вставить("chat_id", ChatID);
    ТелоЗапроса.Вставить("text", ТекстСообщения);
    ТелоЗапроса.Вставить("parse_mode", "HTML");
    ТелоЗапроса.Вставить("reply_markup", Клавиатура);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, ТелоЗапроса);
    
    HTTPЗапрос.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
    
    Если HTTPОтвет.КодСостояния <> 200 Тогда
        ЗаписьЖурналаРегистрации("Telegram", УровеньЖурналаРегистрации.Ошибка,,, 
            HTTPОтвет.ПолучитьТелоКакСтроку());
    КонецЕсли;
    
КонецПроцедуры

3. Отправка печатной формы (PDF) через multipart/form-data

&НаСервере
Процедура ОтправитьСчетВTelegram(ТокенБота, ChatID, ДвоичныеДанныеPDF, ИмяФайла)
    
    Разделитель = "----Boundary" + СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
    
    ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL();
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org", 443,,,, 30, Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS));
    
    HTTPЗапрос = Новый HTTPЗапрос("/bot" + ТокенБота + "/sendDocument");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary=" + Разделитель);
    
    // Сборка multipart тела
    Поток = Новый ПотокВПамяти;
    ЗаписьДанных = Новый ЗаписьДанных(Поток, КодировкаТекста.UTF8);
    
    // Поле chat_id
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку("Content-Disposition: form-data; name=""chat_id""");
    ЗаписьДанных.ЗаписатьСтроку("");
    ЗаписьДанных.ЗаписатьСтроку(Строка(ChatID));
    
    // Поле document
    ЗаписьДанных.ЗаписатьСтроку("--" + Разделитель);
    ЗаписьДанных.ЗаписатьСтроку(СтрШаблон("Content-Disposition: form-data; name=""document""; filename=""%1""", ИмяФайла));
    ЗаписьДанных.ЗаписатьСтроку("Content-Type: application/pdf");
    ЗаписьДанных.ЗаписатьСтроку("");
    
    ЗаписьДанных.Закрыть();
    
    // Объединение заголовков с двоичными данными файла
    ИтоговыеДанные = Поток.ЗакрытьИПолучитьДвоичныеДанные();
    ИтоговыеДанные = СоединитьДвоичныеДанные(ИтоговыеДанные, ДвоичныеДанныеPDF);
    
    ПотокОкончания = Новый ПотокВПамяти;
    ЗаписьКонца = Новый ЗаписьДанных(ПотокОкончания, КодировкаТекста.UTF8);
    ЗаписьКонца.ЗаписатьСтроку("");
    ЗаписьКонца.ЗаписатьСтроку("--" + Разделитель + "--");
    ЗаписьКонца.Закрыть();
    
    ИтоговыеДанные = СоединитьДвоичныеДанные(ИтоговыеДанные, ПотокОкончания.ЗакрытьИПолучитьДвоичныеДанные());
    
    HTTPЗапрос.УстановитьТелоИзДвоичныхДанных(ИтоговыеДанные);
    HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
    
КонецПроцедуры
💡 Практика специалистов: При реализации Long Polling (getUpdates) всегда передавайте параметр offset = LastUpdateID + 1, иначе Telegram будет бесконечно возвращать массив уже прочитанных сообщений, что приведет к зацикливанию алгоритмов 1С.

Частые вопросы (FAQ)

Как избежать ошибки HTTP 429 Too Many Requests?

Telegram API ограничивает отправку сообщений до 30 сообщений в секунду суммарно и не более 1 сообщения в секунду в один чат. Добавляйте паузы (ПриостановитьРаботу) в циклах массовой рассылки.

Почему спецсимволы в HTML/Markdown вызывают ошибку 400 Bad Request?

В режиме HTML символы '<', '>' и '&' должны экранироваться как &lt;, &gt; и &amp;. В MarkdownV2 требуется экранировать слэшем все знаки пунктуации: '_', '*', '[', ']', '(', ')' и т.д.

Как сохранять состояние диалога (FSM) пользователя в 1С?

Используйте регистр сведений 'СостоянияДиалоговTelegram' с измерением ChatID и ресурсами 'ТекущийШаг', 'КонтекстныеДанныеJSON'.

Как безопасно регистрировать Webhook для Telegram?

При вызове метода setWebhook обязательно передавайте параметр secret_token и сверяйте его значение из заголовка X-Telegram-Bot-Api-Secret-Token во входящем HTTP-сервисе 1С.

Полезные материалы
Рекомендуем