Отправка SMS-сообщений напрямую из 1С:Предприятие позволяет автоматизировать уведомления клиентов, подтверждение заказов, напоминания о платежах и другие бизнес-процессы. Однако многие компании сталкиваются с трудностями при настройке этой функции: от выбора SMS-шлюза до написания кода для интеграции. В этой статье мы разберём все этапы — от подготовки технической базы до тестирования отправки, — а также рассмотрим типичные ошибки и способы их устранения.

Важно понимать, что отправка SMS из 1С требует не только программистских навыков, но и правильного выбора SMS-провайдера. От этого зависит надёжность доставки, стоимость сообщений и поддерживаемые функции (например, персонализация текста или отправка через HTTPS). Мы проанализируем популярные сервисы, сравним их тарифы и покажем, как интегрировать их с 1С 8.3 и 1С 8.2.

Если вы никогда не работали с API или не настраивали внешние соединения в 1С, не переживайте: мы дадим пошаговые инструкции с примерами кода и скриншотами. А для опытных разработчиков приведём нюансы оптимизации кода и обработки ошибок, которые редко освещаются в стандартной документации.

1. Выбор SMS-шлюза: сравнение провайдеров для 1С

Первый шаг — выбор SMS-шлюза, который будет выступать посредником между вашей базой 1С и операторами сотовой связи. Ключевые критерии при выборе:

  • 📡 Надёжность доставки — процент успешно доставленных сообщений (оптимально ≥ 98%).
  • 💰 Стоимость — тарифы за одно SMS (от 0.5 до 2.5 руб. в зависимости от объёма).
  • 🔧 Поддержка API — наличие документации для интеграции с 1С (REST, SOAP, HTTP-запросы).
  • 📊 Аналитика — возможность отслеживать статус отправки и получать отчёты.
  • 🛡️ Безопасность — поддержка HTTPS, авторизация по API-ключу или логин/паролю.

Ниже представлено сравнение популярных SMS-провайдеров, которые чаще всего интегрируют с 1С:

Провайдер Стоимость SMS (руб.) Тип API Поддержка 1С Особенности
SMS.RU 0.65–1.20 HTTP/HTTPS, JSON Готовые обработки Низкие цены, но ограничения на бесплатный тестовый период.
SMSClub 0.70–1.50 REST, SOAP Документация для 1С Высокая скорость отправки, поддержка Viber.
TurboSMS 0.80–1.80 HTTP, XML/JSON Примеры кода для 1С Хорошая доставляемость, но дороже конкурентов.
IQSMS 0.55–1.10 REST API Интеграция через внешние компоненты Гибкие тарифы, но сложная настройка для новичков.

Для большинства бизнес-задач оптимальным выбором станет SMS.RU или SMSClub — они предлагают баланс между ценой и функциональностью. Если вам нужна максимальная надёжность (например, для банковских уведомлений), обратите внимание на TurboSMS, несмотря на более высокую стоимость.

⚠️ Внимание: Тарифы и условия провайдеров могут меняться. Перед подключением уточните актуальные цены и лимиты в личном кабинете выбранного сервиса.
📊 Какой SMS-провайдер вы используете в 1С?
SMS.RU
SMSClub
TurboSMS
IQSMS
Другой
Ещё не подключал

2. Подготовка 1С к интеграции с SMS-шлюзом

Прежде чем приступать к настройке, убедитесь, что ваша конфигурация 1С готова к работе с внешними сервисами. Вот что нужно проверить:

Режим "1С:Предприятие" запущен с правами администратора

Включён доступ к внешним ресурсам (настройки сетевого экрана)

Установлены последние обновления платформы 1С

Создана резервная копия базы данных

Получены API-ключи от SMS-провайдера-->

Если вы работаете в управляемом приложении (1С 8.3), убедитесь, что у вас есть права на редактирование конфигурации. Для обычного приложения (1С 8.2) потребуется доступ к модулям и внешним обработкам.

Также проверьте, поддерживает ли ваша версия 1С работу с HTTPСоединение или HTTPЗапрос. В старых релизах (ниже 8.3.6) может потребоваться установка дополнительных компонент, например, 1C:Enterprise Development Tools.

Для тестирования рекомендуем создать тестовую базу — это позволит избежать ошибок в рабочей среде. Если вы используете 1С:Бухгалтерию или 1С:УТ, проверьте, нет ли в типовой конфигурации готовых механизмов для SMS (например, в 1С:Розница есть встроенная поддержка уведомлений).

💡

Если вы работаете с облачной версией 1С (1C:Fresh), уточните у провайдера, поддерживает ли он интеграцию через веб-сервисы. Некоторые шлюзы требуют статического IP-адреса, который недоступен в облаке.

3. Настройка соединения с SMS-шлюзом: пошаговая инструкция

Рассмотрим универсальный способ подключения к SMS-шлюзу через HTTPЗапрос. Этот метод работает для большинства провайдеров, включая SMS.RU и SMSClub.

Шаг 1. Получите API-ключ в личном кабинете провайдера. Обычно он выглядит как набор символов, например: a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8.

Шаг 2. Создайте обработку в 1С:

  1. Откройте конфигуратор и перейдите в Объекты → Обработки.
  2. Создайте новую обработку с именем, например, ОтправкаSMS.
  3. В модуле обработки добавьте следующий код:

Процедура ОтправитьSMS(НомерТелефона, ТекстСообщения) Экспорт

// Параметры подключения к SMS.RU

АдресШлюза = "https://sms.ru/sms/send";

APIКлюч = "ВАШ_API_КЛЮЧ"; // Замените на реальный ключ

// Формируем параметры запроса

Параметры = Новый Структура;

Параметры.Вставить("api_id", APIКлюч);

Параметры.Вставить("to", НомерТелефона);

Параметры.Вставить("text", ТекстСообщения);

Параметры.Вставить("json", 1); // Формат ответа JSON

// Создаём HTTP-запрос

HTTPЗапрос = Новый HTTPЗапрос(АдресШлюза);

HTTPЗапрос.УстановитьТелоИзСтроки(ПараметрыJSON.ЗаписатьJSON(Параметры));

// Отправляем запрос

HTTPСоединение = Новый HTTPСоединение;

Ответ = HTTPСоединение.Получить(HTTPЗапрос);

// Обрабатываем ответ

Если Ответ.КодСостояния = 200 Тогда

Результат = JSON.ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());

Если Результат.Свойство("status") = "OK" Тогда

Сообщить("SMS успешно отправлено! ID: " + Результат.Свойство("sms[0].id"));

Иначе

Сообщить("Ошибка: " + Результат.Свойство("status_text"));

КонецЕсли;

Иначе

Сообщить("Ошибка соединения. Код: " + Ответ.КодСостояния);

КонецЕсли;

КонецПроцедуры

Шаг 3. Протестируйте обработку. Для этого вызовите её из любого модуля или формы, передав номер телефона и текст сообщения: ОтправкаSMS.ОтправитьSMS("79123456789", "Тестовое сообщение из 1С!").

Если вы видите ответ status: "OK", значит, интеграция прошла успешно. В противном случае проверьте:

  • 🔑 Корректность API-ключа (возможно, скопирован с пробелами).
  • 📶 Доступность шлюза (попробуйте открыть адрес в браузере).
  • 📱 Формат номера телефона (должен быть в международном формате, например, 79123456789, без + или пробелов).

Что делать, если SMS не отправляется?

Если вы получаете ошибку 403 Forbidden, проверьте:

1. Не заблокирован ли ваш IP-адрес провайдером (часто бывает при частых тестовых запросах).

2. Не истёк ли срок действия API-ключа (некоторые провайдеры требуют периодического обновления).

3. Не включена ли двухфакторная аутентификация в личном кабинете (может блокировать программные запросы).

Если ошибка 500 Internal Server Error, проблема на стороне шлюза — свяжитесь с поддержкой провайдера.

4. Автоматизация отправки SMS: примеры для типовой конфигурации

Теперь, когда соединение настроено, можно автоматизировать отправку SMS в ключевых бизнес-процессах. Рассмотрим несколько сценариев для 1С:Управление торговлей и 1С:Бухгалтерия.

4.1. Уведомление о новом заказе

Добавьте код в модуль документа ЗаказКлиента на событие ПередЗаписью:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроводки)

Если РежимЗаписи = РежимЗаписиДокумента.Запись Тогда

Если НЕ ЗначениеЗаполнено(Телефон) Тогда

Возврат;

КонецЕсли;

ТекстSMS = "Ваш заказ №" + Номер + " на сумму " + ИтогСуммаДокумента + " руб. принят в обработку!";

ОтправкаSMS.ОтправитьSMS(Телефон, ТекстSMS);

КонецЕсли;

КонецПроцедуры

Это позволит клиенту получать уведомление сразу после оформления заказа. Важно: не забывайте проверять согласия клиентов на обработку персональных данных (ФЗ-152) — отправка SMS без согласия может привести к штрафам.

4.2. Напоминание о просроченной задолженности

Для 1С:Бухгалтерия можно настроить отправку напоминаний контрагентам. Создайте регламентное задание, которое будет запускаться раз в неделю:

Процедура ВыполнитьПоРасписанию()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Наименование КАК Контрагент,

| Контрагенты.Телефон КАК Телефон,

| СУММА(Документ.СуммаДокумента) КАК Долг

|ИЗ

| Документ.РеализацияТоваровУслуг КАК Документ

| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты

| ПО Документ.Контрагент = Контрагенты.Ссылка

|ГДЕ

| Документ.Статус = Значение(Перечисление.СтатусыДокументов.Просрочен)

| И НЕ Контрагенты.ПометкаУдаления";

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл

ТекстSMS = "Уважаемый " + Выборка.Контрагент + "! Ваша задолженность составляет " + Формат(Выборка.Долг, "ЧДЦ=2") + " руб. Просим погасить её в ближайшее время.";

ОтправкаSMS.ОтправитьSMS(Выборка.Телефон, ТекстSMS);

КонецЦикла;

КонецПроцедуры

Для такого сценария лучше использовать отложенные задания, чтобы не нагружать сервер в пиковые часы. Также рекомендуем добавить проверку на минимальную сумму долга (например, отправлять SMS только при задолженности свыше 5 000 руб.).

💡

Автоматизация SMS должна быть гибкой: всегда предоставляйте пользователям возможность отключить уведомления или изменить их частоту.

5. Обработка ошибок и логирование

При массовой отправке SMS неизбежно возникают ошибки: недоступность шлюза, неверные номера телефонов, превышение лимитов. Чтобы не потерять данные, необходимо настроить логирование и повторную отправку.

Добавьте в модуль обработки функцию записи лога:

Процедура ЗаписатьЛог(ТекстОшибки, НомерТелефона, ТекстSMS)

Лог = Новый ТекстовыйДокумент;

Лог.ДобавитьСтроку(ТекущаяДата() + " | Ошибка: " + ТекстОшибки);

Лог.ДобавитьСтроку("Номер: " + НомерТелефона);

Лог.ДобавитьСтроку("Текст: " + ТекстSMS);

Лог.ДобавитьСтроку("----------------------------------");

ПутьКФайлу = "C:\Logs\SMS_Errors.log";

Лог.Записать(ПутьКФайлу, КодировкаТекста.UTF8, Истина);

КонецПроцедуры

Теперь модифицируйте процедуру отправки, чтобы она записывала ошибки:

Если Ответ.КодСостояния <> 200 Тогда

ЗаписатьЛог("Ошибка соединения. Код: " + Ответ.КодСостояния, НомерТелефона, ТекстСообщения);

Иначе

Результат = JSON.ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());

Если Результат.Свойство("status") <> "OK" Тогда

ЗаписатьЛог(Результат.Свойство("status_text"), НомерТелефона, ТекстСообщения);

КонецЕсли;

КонецЕсли;

Для повторной отправки можно создать обработку, которая будет считывать лог и отправлять SMS повторно. Например:

Процедура ПовторнаяОтправка()

Чтение = Новый ЧтениеТекста;

Чтение.Открыть("C:\Logs\SMS_Errors.log", КодировкаТекста.UTF8);

Пока Чтение.ПрочитатьСтроку() Цикл

Если Найти(Чтение.ТекущаяСтрока, "Ошибка:") > 0 Тогда

Номер = СтрЗначение(Сред(Чтение.ПрочитатьСтроку(), 8)); // Извлекаем номер

Текст = СтрЗначение(Сред(Чтение.ПрочитатьСтроку(), 7)); // Извлекаем текст

ОтправитьSMS(Номер, Текст);

КонецЕсли;

КонецЦикла;

Чтение.Закрыть();

КонецПроцедуры

⚠️ Внимание: При повторной отправке учитывайте лимиты SMS-провайдера. Некоторые шлюзы блокируют аккаунты за слишком частые запросы (например, более 100 SMS в минуту).

6. Оптимизация и безопасность

При массовой рассылке SMS из 1С важно следить за производительностью и безопасностью. Вот несколько рекомендаций:

  • Пакетная отправка. Если нужно отправить SMS тысячам клиентов, разбивайте список на пакеты по 50–100 штук с задержкой в 1–2 секунды. Это снизит нагрузку на сервер и уменьшит риск блокировки со стороны провайдера.
  • 🔒 Шифрование API-ключа. Не храните ключ в открытом виде в коде. Используйте ХранилищеЗначений или внешние файлы с ограниченным доступом:
    APIКлюч = ХранилищеЗначений.Получить("SMS_API_Key");
  • 📉 Контроль расходов. Настройте уведомления о низком балансе на SMS-шлюзе. Например, в SMSClub можно задать пороговое значение (например, 500 руб.), при достижении которого придёт email.
  • 🛡️ Защита от спама. Добавьте в 1С справочник "Чёрный список" номеров, на которые запрещена отправка. Это поможет избежать жалоб от клиентов.

Если вы работаете с 1С:Управление холдингом или другими распределёнными системами, рассмотрите вариант выноса SMS-рассылок на отдельный сервер. Это разгрузит основную базу и ускорит работу пользователей.

Для повышения доставляемости:

  • 📱 Используйте альфа-имена (например, "ВашаКомпания" вместо номера). Это увеличивает открываемость SMS на 20–30%. Уточните у провайдера, поддерживает ли он эту функцию.
  • ⏰ Отправляйте сообщения в оптимальное время: с 10:00 до 18:00 по местному времени получателя.
  • 📌 Сокращайте ссылки (через bit.ly или cutt.ly), если нужно вставить их в SMS. Длинные URL могут обрезаться операторами.

7. Типичные ошибки и их решения

Даже при правильной настройке могут возникать проблемы. Разберём самые распространённые:

Ошибка Возможная причина Решение
401 Unauthorized Неверный API-ключ или истёкший токен. Проверьте ключ в личном кабинете провайдера. При необходимости сгенерируйте новый.
400 Bad Request Неверный формат номера телефона или текста SMS. Убедитесь, что номер в международном формате (например, 79123456789), а текст не содержит запрещённых символов.
503 Service Unavailable Шлюз временно недоступен. Повторите запрос через 5–10 минут. Если ошибка повторяется, свяжитесь с поддержкой провайдера.
SMS не доходит до получателя Блокировка оператором или низкое качество маршрута. Попробуйте отправить SMS на другой номер. Если проблема сохраняется, смените провайдера.
Превышен лимит отправки Исчерпан суточный или месячный лимит SMS. Пополните баланс или свяжитесь с провайдером для увеличения лимита.

Если вы получаете ошибку Ошибка соединения с сервером в 1С, проверьте:

  • 🌐 Настройки прокси-сервера (если используете корпоративную сеть).
  • 🔌 Доступность портов 80 и 443 (может блокироваться фаерволом).
  • 📡 Стабильность интернет-соединения (попробуйте отправить запрос вручную через Postman).

Для диагностики сетевых проблем в 1С можно использовать следующий код:

Процедура ПроверитьСоединение()

Попытка

HTTPЗапрос = Новый HTTPЗапрос("https://sms.ru/sms/send?api_id=test");

HTTPСоединение = Новый HTTPСоединение;

Ответ = HTTPСоединение.Получить(HTTPЗапрос);

Сообщить("Соединение успешно! Код: " + Ответ.КодСостояния);

Исключение

Сообщить("Ошибка соединения: " + ОписаниеОшибки());

КонецПопытки;

КонецПроцедуры

⚠️ Внимание: Если вы используете 1С:Предприятие в файловом варианте, частые HTTP-запросы могут приводить к блокировкам базы. В этом случае рассмотрите переход на клиент-серверный вариант или вынос SMS-рассылок на отдельный сервер.

8. Альтернативные способы отправки SMS из 1С

Помимо прямой интеграции через API, существуют альтернативные методы:

  • 📧 Email-to-SMS. Некоторые операторы (например, Мегафон или Билайн) позволяют отправлять SMS на короткие номера через email. Например, сообщение на номер 79123456789 можно отправить на адрес 79123456789@sms.beeline.ru. Минус — ограниченная длина сообщения (70–160 символов) и низкая надёжность.
  • 📱 USB-модем. Можно подключить GSM-модем (например, Huawei E3372) к серверу 1С и отправлять SMS через AT-команды. Этот способ подходит для небольших объёмов (до 100 SMS/день), но требует физического доступа к серверу.
  • 🤖 Облачные сервисы. Сервисы вроде Twilio или Plivo предлагают гибкие API для SMS, но могут быть дороже российских провайдеров. Подходят для международных рассылок.
  • 🔄 Готовые обработки. На сайте Infostart или 1С-Интерес можно найти бесплатные и платные обработки для интеграции с популярными SMS-шлюзами. Например, обработка "Универсальная отправка SMS из 1С" поддерживает более 10 провайдеров.

Если вы выбираете USB-модем, вот пример кода для отправки SMS через AT-команды (требуется подключение модема к COM-порту):

Процедура ОтправитьЧерезМодем(Номер, Текст)

Порт = Новый COMПорт("COM3", 9600, 8, 0, 0); // Настройки порта

Порт.Открыть();

// Отправляем AT-команды

Порт.ЗаписатьСтроку("AT" + Символы.ПС);

Пауза(1);

Порт.ЗаписатьСтроку("AT+CMGF=1" + Символы.ПС); // Текстовый режим

Пауза(1);

Порт.ЗаписатьСтроку("AT+CMGS="" + Номер + """" + Символы.ПС);

Пауза(1);

Порт.ЗаписатьСтроку(Текст + Символы.ПС + Символы.ВК + "Z"); // Ctrl+Z для отправки

Пауза(3);

Ответ = Порт.ПрочитатьСтроку();

Если Найти(Ответ, "OK") > 0 Тогда

Сообщить("SMS отправлено через модем!");

Иначе

Сообщить("Ошибка: " + Ответ);

КонецЕсли;

Порт.Закрыть();

КонецПроцедуры

Процедура Пауза(Секунды)

Начало = ТекущаяДата();

Пока ТекущаяДата() < Начало + Секунды Цикл

Состояние = Состояние; // Задержка

КонецЦикла;

КонецПроцедуры

Этот способ требует настройки драйверов модема и может быть нестабилен при больших объёмах. Рекомендуем использовать его только как резервный вариант.

FAQ: Частые вопросы по настройке SMS в 1С

Можно ли отправлять SMS из 1С:Бухгалтерия 3.0 без программирования?

Да, но с ограничениями. В типовой конфигурации нет встроенного механизма для SMS, но можно использовать готовые обработки (например, с сайта Infostart). Они обычно требуют минимальной настройки: достаточно указать API-ключ провайдера и номер телефона. Также некоторые провайдеры (например, SMSClub) предлагают плагины для 1С, которые устанавливаются как внешние обработки.

Сколько стоит отправка SMS из 1С?

Стоимость зависит от провайдера и объёма. Средние цены:

  • 0.6–1.2 руб. за SMS при отправке до 10 000 сообщений/месяц.
  • 0.4–0.8 руб. при оптовых тарифах (от 50 000 SMS/месяц).
  • Дополнительно может взиматься плата за аренду короткого номера (от 1 000 руб./месяц).

Уточняйте актуальные тарифы на сайтах провайдеров, так как цены часто меняются.

Как отправить SMS с кириллическими символами?

Для отправки SMS на русском языке используйте кодировку UTF-8. В большинстве провайдеров это настраивается автоматически, но некоторые (например, TurboSMS) требуют явного указания кодировки в параметрах запроса:

Параметры.Вставить("charset", "utf-8");

Учтите, что SMS с кириллицей занимают больше места: 1 сообщение может содержать до 70 символов (вместо 160 для латиницы).

Можно ли отправить SMS с вложением (фото, документ)?

Нет, стандартные SMS не поддерживают