В работе сервисного центра часто возникает задача автоматизации информирования клиентов о ходе ремонта. Вместо того чтобы принимать десятки звонков с вопросом «Что с моим девайсом?», гораздо эффективнее предоставить клиенту прямую ссылку на актуальный статус. В рамках данной статьи мы разберем, как реализовать подобный механизм на платформе 1С 7.7, рассмотрим способы интеграции с мессенджерами и облачными таблицами, а также решим проблему стабильности при работе с внешними компонентами.
Проанализируем ситуацию: классическая отправка Email часто игнорируется, а SMS-рассылки требуют постоянных затрат на шлюзы. Наиболее удобным и бюджетным вариантом является отправка ссылки или уведомления в мессенджеры (Viber, Telegram). Рассмотрим основные подходы:
Go или PHP, который обращается к базе 1С и отдает клиенту готовую веб-страницу.Для 1С 7.7 отправка сообщений в Viber реализуется через HTTP-запросы. Разберем по шагам, как это сделать. Вместо использования устаревшей v7plus.dll, которая часто приводит к «падению» системы при работе с XML и HTTP, мы рекомендуем использовать системный объект WinHttp.WinHttpRequest.5.1.
Рассмотрим пример функции для отправки сообщения:
Процедура ОтправитьВViber(Токен, ИД_Пользователя, ТекстСообщения)
Попытка
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Open("POST", "https://chatapi.viber.com/pa/send_message", 0);
WinHttp.SetRequestHeader("X-Viber-Auth-Token", Токен);
WinHttp.SetRequestHeader("Content-Type", "application/json");
ТелоЗапроса = "{
|""receiver"":""" + ИД_Пользователя + """,
|""type"":""text"",
|""text"":""" + ТекстСообщения + """
|}";
WinHttp.Send(ТелоЗапроса);
Если WinHttp.Status <> 200 Тогда
Сообщить("Ошибка отправки: " + WinHttp.Status + " " + WinHttp.ResponseText);
КонецЕсли;
Исключение
Сообщить("Ошибка соединения с Viber API: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Если вы не хотите создавать полноценный сайт, проанализируем вариант с Google-таблицами. Это надежное «облако», которое доступно 24/7. 1С 7.7 может обновлять строку с конкретным заказом при каждом изменении документа ЗаказНаРемонт.
Использование Google API позволяет не только хранить данные, но и автоматически оповещать клиента. Выясним причину удобства этого метода: клиент получает ссылку на документ, где права доступа настроены таким образом, что он видит только свою информацию (или общую таблицу с фильтрацией по номеру телефона).
Многие разработчики на «семерке» сталкиваются с тем, что стандартная компонента v7plus.dll вызывает критические ошибки (краши) 1С при выполнении метода Анализатор.СоздатьДокумент(). Рассмотрим более стабильную альтернативу — использование MSXML2.DOMDocument. Этот объект является частью операционной системы и работает значительно быстрее.
Посмотрим на пример безопасной работы с XML:
// Вместо Анализатор = СоздатьОбъект("AddIn.XMLParser");
Попытка
xmlДок = СоздатьОбъект("MSXML2.DOMDocument");
xmlДок.async = 0;
xmlДок.resolveExternals = 0;
// Создание корневого узла
Root = xmlДок.createElement("RepairData");
xmlДок.appendChild(Root);
// Добавление информации о заказе
OrderNode = xmlДок.createElement("Order");
OrderNode.setAttribute("Number", СокрЛП(НомерДок));
OrderNode.setAttribute("Status", СокрЛП(Статус));
Root.appendChild(OrderNode);
xmlДок.save("C:\temp\order_status.xml");
Исключение
Сообщить("Ошибка при работе с MSXML: " + ОписаниеОшибки());
КонецПопытки;
Чтобы клиент не вводил длинные ссылки вручную, разберем внедрение QR-кодов в печатные формы квитанций. При приеме устройства в ремонт 1С генерирует ссылку вида mysite.ru/check?id=HEX_CODE, где HEX_CODE — зашифрованный или уникальный идентификатор документа. Этот идентификатор печатается в виде QR-кода.
Для генерации QR-кода в 1С 7.7 можно использовать вызов внешних API (например, Google Chart API) для получения картинки:
Функция ПолучитьПутьКQRКоду(ТекстСсылки)
ПутьФайла = КаталогВременныхФайлов() + "qr.png";
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
// Используем публичный сервис для генерации QR
URL = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" + ТекстСсылки;
WinHttp.Open("GET", URL, 0);
WinHttp.Send();
Если WinHttp.Status = 200 Тогда
// Сохранение бинарного ответа в файл
// (Требуется использование ADODB.Stream для сохранения картинки в 7.7)
Stream = СоздатьОбъект("ADODB.Stream");
Stream.Type = 1; // binary
Stream.Open();
Stream.Write(WinHttp.ResponseBody);
Stream.SaveToFile(ПутьФайла, 2);
Stream.Close();
Возврат ПутьФайла;
КонецЕсли;
Возврат "";
КонецФункции
Важный момент, который стоит обсудить — приватность. Мы настоятельно рекомендуем не использовать порядковые номера документов в ссылках (например, status?id=123). Проанализируем риски: конкуренты могут просто перебирать числа и видеть всю вашу клиентскую базу и объемы ремонтов.
Решение: генерируйте случайный GUID или хэш-код для каждого заказа и храните его в отдельном реквизите документа. Ссылка должна выглядеть как mysite.ru/status?id=a1b2c3d4e5f6. Это гарантирует, что информацию увидит только владелец квитанции.
Для того чтобы система работала без участия пользователя, настроим автоматический вызов процедур синхронизации. Рассмотрим два варианта:
ЗаказНаРемонт в процедуре ПриЗаписи или ОбработкаПроведения добавьте вызов вашей функции экспорта в облако.Форма.ОбработкаОжидания("ВыгрузитьСтатусы", 300) в глобальном модуле или отдельной запущенной сессии 1С, которая будет раз в 5 минут проверять измененные документы и обновлять облако.Таким образом, мы выяснили, что даже на такой почтенной платформе, как 1С 7.7, можно построить современный сервис информирования. Главное — отказаться от нестабильных старых компонент в пользу системных объектов Windows и использовать возможности API современных мессенджеров и облачных сервисов.