Отправка 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, несмотря на более высокую стоимость.
⚠️ Внимание: Тарифы и условия провайдеров могут меняться. Перед подключением уточните актуальные цены и лимиты в личном кабинете выбранного сервиса.
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С:
- Откройте конфигуратор и перейдите в
Объекты → Обработки. - Создайте новую обработку с именем, например,
ОтправкаSMS. - В модуле обработки добавьте следующий код:
Процедура Отправить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 не поддерживают