При организации массовых email-рассылок из системы 1С одним из критически важных функциональных блоков является механизм отписки. Это необходимо не только для лояльности клиентов, но и для соблюдения законодательства о рекламе, а также для предотвращения попадания ваших писем в спам-фильтры крупных почтовых провайдеров. В этой статье мы подробно разберем, как реализовать этот процесс «от и до».
Для реализации отписки нам потребуется связать три компонента: само HTML-письмо, доступный извне веб-сервис на стороне 1С и механизм хранения отказов в базе данных. Рассмотрим стандартную схему взаимодействия:
Первым делом проанализируем необходимость публикации базы. Чтобы ссылка в письме сработала, ваша информационная база должна быть доступна внешним запросам. Для этого используется публикация на веб-сервере (Apache или IIS). Разберем создание самого сервиса в конфигураторе:
HTTPСервис (например, с именем UnsubscribeService).unsubscribe)./process.GET и назначим ему обработчик в модуле сервиса.Рассмотрим пример кода обработчика GET, который будет принимать идентификатор клиента и тип рассылки:
Функция processGet(Запрос)
ПараметрыURL = Запрос.ПараметрыЗапроса;
ИдентификаторКлиента = ПараметрыURL.Получить("id");
ТипРассылки = ПараметрыURL.Получить("type");
Если ЗначениеЗаполнено(ИдентификаторКлиента) Тогда
// Вызываем процедуру фиксации отказа в базе
ЗафиксироватьОтказОтРассылки(ИдентификаторКлиента, ТипРассылки);
// Формируем ответ пользователю в виде HTML
Ответ = Новый HTTPСервисОтвет(200);
ТекстHTML = "<html><body><h3>Вы успешно отписаны от рассылки!</h3></body></html>";
Ответ.УстановитьТелоИзСтроки(ТекстHTML, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
Иначе
Возврат Новый HTTPСервисОтвет(400); // Ошибка: не передан ID
КонецЕсли;
КонецФункции
Теперь выясним, как правильно сформировать ссылку, которую мы вставим в HTML-макет письма. Как было предложено в обсуждении, лучше всего использовать GUID (уникальный идентификатор) объекта 1С, чтобы однозначно идентифицировать получателя.
Пример структуры ссылки:
http://yourserver.com/base_name/hs/unsubscribe/process?id=5ec0d3e5-8f4b-11eb-a2a3-00155d010101&type=News
В коде 1С при формировании рассылки мы можем получить строковое представление GUID следующим образом:
ИдентификаторСтрокой = Строка(КонтрагентСсылка.УникальныйИдентификатор());
СсылкаНаОтписку = "http://myserver.ru/hs/unsubscribe/process?id=" + ИдентификаторСтрокой + "&type=Promo";
Затем эта переменная вставляется в тег <a href="..."> вашего HTML-шаблона.
Проанализируем вопрос безопасности. Передача чистого GUID в ссылке теоретически позволяет злоумышленнику подобрать идентификатор и отписать других пользователей. Чтобы этого избежать, профессиональным подходом считается использование хэшированных токенов.
Вместо передачи id контрагента напрямую, создадим в 1С регистр сведений ТокеныДляОтписки. При отправке письма генерируем случайный длинный ключ (токен), записываем его в регистр со ссылкой на контрагента и сроком действия, а в письме передаем именно этот ключ. При переходе по ссылке сервис найдет контрагента по токену в регистре.
Посмотрим на требования современных почтовых систем (Gmail, Mail.ru). Наличие ссылки в тексте — это минимум. Для того чтобы в интерфейсе почтовика появилась кнопка «Отписаться», необходимо добавить специальные заголовки в само письмо (headers).
POST-запрос на ваш сервер, чтобы отписать пользователя без открытия браузера.В 1С при использовании объекта ИнтернетПочтовоеСообщение это реализуется через коллекцию Заголовки:
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Заголовки.Вставить("List-Unsubscribe", "<http://myserver.ru/hs/unsubscribe/process?id=token>");
Письмо.Заголовки.Вставить("List-Unsubscribe-Post", "List-Unsubscribe=One-Click");
Важно помнить, что согласно Федеральному закону «О рекламе» (ФЗ-38), вы обязаны прекратить рассылку немедленно после получения отказа. Мы рекомендуем создать в 1С регистр сведений ИсключенияРассылок, в котором будут храниться:
Перед каждой отправкой писем ваш запрос в 1С должен обязательно проверять наличие адресата в этом «черном списке» (используя левое соединение в запросе или проверку в цикле).
Вместо того чтобы просто показывать текст «Вы отписаны», мы можем сделать страницу более функциональной. Рассмотрим возможность внедрения Центра управления подписками. После перехода по ссылке HTTP-сервис может отдавать HTML-страницу, где пользователю предлагается выбрать категории интересов (например, оставить только «Уведомления о заказах», но отключить «Рекламные акции»). Это поможет сохранить часть аудитории, которая хочет получать только важные сообщения.
Подведем итог. Реализация отписки в 1С — это комплексная задача, требующая навыков работы с HTTP-сервисами, понимания структуры почтовых заголовков и ответственного подхода к хранению персональных данных. Использование GUID или токенов в параметрах GET-запроса является наиболее эффективным способом автоматизации этого процесса.