Автоматизация · 12 мин
Как отправить сообщение из 1С в Telegram
Как отправить сообщение из 1С в Telegram: создание бота через BotFather, получение токена и chat_id, HTTP-запросы из 1С, обработка ошибок и типовые проблемы интеграции.
Интеграция 1С с Telegram решает практическую задачу: мгновенно уведомлять сотрудников и руководителей о событиях в учётной системе — новых заказах, оплатах, ошибках обмена, критических остатках на складе. В отличие от электронной почты, сообщения в мессенджере читают быстрее, а настройка не требует почтового сервера и не зависит от спам-фильтров.
Технически отправка сводится к одному HTTP-запросу к API Telegram: 1С формирует POST-запрос с текстом сообщения, а бот доставляет его в нужный чат. Всё, что понадобится, — зарегистрированный бот, его токен и идентификатор чата получателя. Никаких внешних компонентов и платных сервисов для базового сценария не требуется.
Ниже разобран полный цикл: от создания бота до готовой процедуры на встроенном языке 1С, обработки ошибок и вариантов применения в реальных конфигурациях — как в типовых, так и в самописных.
Создание бота и получение токена
Первый шаг выполняется в самом Telegram и занимает несколько минут. Откройте диалог с официальным ботом @BotFather и отправьте команду /newbot. Сервис попросит указать название бота (произвольное, отображается в чатах) и уникальное имя пользователя, которое обязательно заканчивается на «bot», например mycompany_1c_notify_bot.
После регистрации BotFather выдаст токен — строку вида 1234567890:AAEhBOweik6ad9r_QXMENQjcrGbqCr4K-4c. Это ключ доступа к API: любой, кто знает токен, может отправлять сообщения от имени вашего бота. Храните его в защищённом месте: в 1С токен лучше держать в константе с ограниченным доступом или в безопасном хранилище, а не зашивать напрямую в код общих модулей.
Если токен скомпрометирован, его можно перевыпустить командой /revoke у BotFather — старый токен перестанет работать, и его нужно будет заменить во всех местах использования.
Получение chat_id получателя
Бот не может просто «написать пользователю по номеру телефона» — сообщение отправляется в конкретный чат, идентифицируемый числовым chat_id. Для личных уведомлений получатель должен сначала сам найти вашего бота в Telegram и нажать «Запустить» (отправить /start). Без этого действия API вернёт ошибку, и сообщение не уйдёт.
Узнать chat_id можно двумя способами. Простой: после того как пользователь написал боту, откройте в браузере адрес https://api.telegram.org/bot<токен>/getUpdates — в JSON-ответе найдите блок "chat":{"id":..., это и есть искомый идентификатор. Для личного чата это положительное число, для группы — отрицательное.
Для групповых уведомлений добавьте бота в группу и отправьте в ней любое сообщение — chat_id группы появится в том же ответе getUpdates. Если бот должен писать в канал, добавьте его администратором канала, а в качестве chat_id можно использовать @имя_канала.
- 1Создайте бота через @BotFather командой /newbot и сохраните токен
- 2Попросите получателя запустить бота командой /start или добавьте бота в группу
- 3Выполните запрос getUpdates и найдите chat_id нужного чата
- 4Сохраните токен и chat_id в настройках 1С (константа или регистр сведений)
- 5Напишите процедуру отправки через HTTPСоединение и протестируйте её
- 6Проверьте доставку сообщения и обработайте возможные ошибки
Код отправки сообщения из 1С
Для отправки используется метод sendMessage API Telegram. Из 1С запрос выполняется стандартными объектами встроенного языка — HTTPСоединение и HTTPЗапрос. Пример процедуры для клиент-серверного или файлового варианта:
Процедура ОтправитьСообщениеТелеграм(ТекстСообщения) Экспорт
Токен = "1234567890:AAEhBOweik6ad9r_QXMENQjcrGbqCr4K-4c";
ChatID = "123456789";
Сервер = "api.telegram.org";
АдресРесурса = "/bot" + Токен + "/sendMessage";
ТелоЗапроса = "{""chat_id"":""" + ChatID + """,""text"":"""
+ ТекстСообщения + """}";
Соединение = Новый HTTPСоединение(Сервер, 443, , , , ,
Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(АдресРесурса);
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса, КодировкаТекста.UTF8);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния <> 200 Тогда
ЗаписьЖурналаРегистрации("Telegram",
УровеньЖурналаРегистрации.Ошибка, , ,
"Код " + Ответ.КодСостояния + ": " + Ответ.ПолучитьТелоКакСтроку());
КонецЕсли;
КонецПроцедуры
Обратите внимание на детали. Соединение устанавливается по HTTPS (порт 443) с объектом ЗащищенноеСоединениеOpenSSL — без него платформа выдаст ошибку, так как API Telegram работает только по защищённому протоколу. Тело запроса формируется в формате JSON, а кавычки внутри строки 1С удваиваются.
Если в тексте сообщения могут встречаться кавычки, переносы строк или спецсимволы, надёжнее собирать JSON через объект ЗаписьJSON, а не конкатенацией строк — это исключит ошибки разбора на стороне API. Перенос строки в тексте сообщения передаётся символом \n.
Варианты внедрения в конфигурацию
Способ интеграции зависит от того, какая у вас конфигурация и кто будет дорабатывать код. Есть три практических подхода, отличающихся трудозатратами и гибкостью.
Сравнение вариантов
Максимальная гибкость: любые события, любой текст. Требует навыков программирования 1С и снимает конфигурацию с полной поддержки при изменении типовых модулей
Код отправки и подписки выносятся в расширение — типовая конфигурация не меняется и обновляется штатно. Оптимальный вариант для типовых решений
Быстрый старт без программирования: настройки токена, шаблоны сообщений. Ограниченная гибкость и зависимость от качества стороннего решения
Для типовых конфигураций (УТ, ERP, Бухгалтерия) рекомендуется вариант с расширением: вы добавляете общий модуль с процедурой отправки и подписки на события записи документов — например, при проведении заказа покупателя менеджеру приходит уведомление. Типовая конфигурация при этом остаётся на поддержке.
Точки подключения уведомлений выбирайте по бизнес-событиям: запись или проведение документа, изменение статуса заказа, завершение обмена данными, падение регламентного задания. Не вешайте отправку на слишком частые события — иначе получатели начнут игнорировать поток сообщений.
Форматирование и дополнительные возможности
Telegram поддерживает разметку сообщений: жирный текст, курсив, моноширинный шрифт, ссылки. Для этого в запрос добавляется параметр parse_mode со значением HTML или MarkdownV2, а текст оформляется соответствующими тегами. Например, с HTML-разметкой можно выделить номер заказа жирным: <b>Заказ № 12345</b>.
Помимо текста, API позволяет отправлять документы (метод sendDocument) — так из 1С можно высылать в чат сформированные PDF-счета или отчёты. Файл передаётся в теле multipart-запроса, что требует чуть более сложного формирования HTTP-запроса, но реализуется теми же штатными средствами платформы.
Полезная возможность — инлайн-кнопки (reply_markup с inline_keyboard): получатель может, например, подтвердить согласование прямо из чата. Однако обработка нажатий потребует уже двусторонней интеграции — 1С должна будет опрашивать getUpdates или принимать webhook, что заметно сложнее односторонней отправки.
Для согласований и уведомлений руководству обычно достаточно односторонней отправки текста с разметкой HTML. Двустороннюю интеграцию с кнопками имеет смысл делать только когда без реакции в чате процесс действительно не двигается дальше — иначе вы получите сложный в поддержке механизм без отдачи.
Обработка ошибок и типичные проблемы
API Telegram при ошибке возвращает HTTP-код, отличный от 200, и JSON с описанием причины. Самые частые ситуации: код 403 с текстом «bot was blocked by the user» (пользователь заблокировал бота или не нажал /start), код 400 «chat not found» (неверный chat_id), код 401 (неверный токен), код 429 (превышен лимит частоты запросов — нужно снизить темп отправки).
Отдельный класс проблем — сетевые. Если сервер 1С не имеет прямого доступа в интернет или выход закрыт файрволом, HTTPСоединение выбросит исключение ещё до получения ответа. В этом случае проверьте доступность api.telegram.org с сервера и при необходимости настройте прокси — HTTPСоединение поддерживает параметр прокси-сервера.
Все ошибки отправки фиксируйте в журнале регистрации или отдельном регистре — иначе «тихо» теряющиеся уведомления обнаружатся только тогда, когда кто-то не получит важное сообщение. Для критичных уведомлений полезно предусмотреть повторную попытку отправки через несколько минут.
Проверка результата и ограничения
После внедрения проверьте полный цикл: создайте тестовое событие (например, запишите тестовый документ) и убедитесь, что сообщение пришло в нужный чат с корректным текстом и разметкой. Проверьте также поведение при недоступном интернете — процедура не должна «ронять» основной бизнес-процесс, отправка должна выполняться в попытке/исключении.
Учитывайте ограничения платформы Telegram: бот не может первым написать пользователю, который его не запустил; есть лимиты на частоту отправки (при массовых рассылках нужны паузы между сообщениями); максимальная длина одного текстового сообщения — 4096 символов, более длинный текст нужно разбивать на части.
Если прямой доступ к api.telegram.org из вашей сети затруднён, рассмотрите альтернативы: отправку через промежуточный сервис-шлюз внутри инфраструктуры или использование корпоративных мессенджеров с аналогичным API. Логика кода 1С при этом меняется минимально — отличаются только адрес сервера и формат тела запроса.
Что важно запомнить
Отправка сообщения из 1С в Telegram — это один HTTPS-запрос к методу sendMessage с токеном бота и chat_id. Создайте бота через BotFather, храните токен в безопасности, выполняйте отправку на сервере с обработкой ошибок, а для типовых конфигураций оформляйте доработку расширением.
Частые вопросы
Можно ли отправлять сообщения из 1С без программирования?
Частично — с помощью готовых внешних обработок и подсистем, где достаточно указать токен и chat_id в настройках. Но привязка уведомлений к конкретным событиям вашей конфигурации всё равно обычно требует минимальной доработки, поэтому полностью без кода обходятся редко.
Почему бот не отправляет сообщение пользователю, хотя chat_id верный?
Наиболее вероятная причина — пользователь ни разу не запускал бота командой /start или заблокировал его. Попросите получателя найти бота в поиске Telegram и нажать «Запустить», затем повторите отправку и проверьте код ответа API.
Как отправить сообщение сразу нескольким получателям?
Метод sendMessage работает с одним чатом, поэтому для рассылки нужно вызывать его в цикле по списку chat_id. Список получателей удобно хранить в регистре сведений. При большом количестве адресатов добавляйте паузы между запросами, чтобы не получить ограничение 429.
Работает ли отправка из файловой базы 1С?
Да, файл-серверный вариант ничем не ограничивает HTTP-запросы — они выполняются с того компьютера, где запущен сеанс 1С. Важно лишь, чтобы с этого компьютера был доступ в интернет и к api.telegram.org. Для стабильности в файловой базе отправку часто выносят в отдельный сеанс или выполняют по расписанию.
Можно ли прикрепить к сообщению файл, например PDF-счёт?
Да, для этого используется метод sendDocument: файл передаётся в теле multipart-запроса или сначала загружается, а затем отправляется по file_id. Это требует более сложного формирования HTTP-запроса, но реализуется штатными средствами платформы без внешних компонентов.
Безопасно ли передавать данные из 1С через Telegram?
Трафик между сервером 1С и API Telegram шифруется по HTTPS, однако содержимое сообщений проходит через серверы мессенджера. Не отправляйте в чаты персональные данные, пароли и коммерческую тайну в открытом виде — ограничьтесь уведомлениями с минимально необходимой информацией и ссылками на объекты в 1С.