Маппинг полей при интеграции Drupal с Salesforce

Как интегрировать Drupal с Salesforce и не переносить секретные данные

создать функциональность для маппинга полей
настроить возможность переотправки данных в Salesforce
Хотите так же?

О клиенте

Клиент производит и монтирует фасадные материалы: сайдинг, фасадные панели и плитку, черепицу, водостоки. На сайте, разработанном на Drupal, пользователи смотрят ассортимент, запрашивают оценку работы, заказывают обслуживание ранее установленных материалов или делятся возникшей проблемой. Функциональности для платежей на сайте нет — специфика товаров требует индивидуального подхода и заранее снятых мерок. Но вместо этого здесь есть очень много форм.

Проблема и задача

Данные собираются через форму, передаются в админ-панель Drupal, а оттуда — в систему управления клиентами Salesforce для дальнейшей обработки. У Drupal есть интеграция с Salesforce через набор модулей Salesforce Suite. С её помощью можно авторизоваться в сервисе и использовать API для работы с Salesforce. API поддерживает как отправку данных из Drupal в Salesforce, так и импорт данных Salesforce в Drupal. Однако опция импорта нам была не нужна — клиент не планировал хранить данные Salesforce на стороне сайта, ему нужна только отправка данных с определённых полей для определённых веб-форм.

У Drupal на этом проекте две роли:

  • загружать в себя данные через контактные формы;
  • отправлять данные в Salesforce повторно или вручную, если автоматическую отправку данных прервала ошибка. Вводить эти данные снова пользователю не нужно.

Интеграция Drupal c Salesforce

У Drupal и Salesforce разные поля для хранения данных, и нужно было сделать так, чтобы они соответствовали друг другу, то есть настроить маппинг. В модуле Salesforce есть встроенный стандартный маппинг, но он был не нужен.

Интеграция с Salesforce — это легаси-код, который работал ещё в сайте на Drupal 7. Соответственно, проблема была в том, что работа форм была захардкожена — код находился в Git-репозитории, и клиент с ним никак не мог взаимодействовать. Маппинг для веб-форм тоже был захардкожен. В результате внутри тянулись бесконечные портянки кода, где прописаны соответствия полей в десятках разных форм, и в случае каждой проблемы нужно было лезть в код.

В итоге наши задачи свелись к тому, чтобы:

  • создать функциональность в админ-панели Drupal для маппинга полей в веб-формах Drupal и в Salesforce,
  • настроить возможность переотправки данных в Salesforce в случае ошибки.

Решение

Маппинг полей

Поскольку мы ничего не берём с Salesforce, у нас есть настройка в кастомном webform handler — обработчике, который запускается сразу после отправки заполненной формы, чтобы сформировать массив полей из Drupal и отправить их в Salesforce. Список полей, которые планируем использовать, мы перечисляем в самом хэндлере.

Рассмотрим это на конкретной форме.

разработка формы для заявок
 

Тут нужно указать номер заказа, заполнить данные о проблеме и о себе, оставить контактную информацию и нажать на кнопку Request Service. После нажатия все эти поля сохраняются на сайте, а Drupal сопоставляет свои поля с полями в Salesforce через маппинг и отправляет в CRM данные. Если при отправке произошла ошибка, она трекается и отправляется на почту техническому специалисту клиента.

Настройка маппинга полей

  1. Во вкладке build админ-панели Drupal создаём и позже редактируем поля для форм.
  2. В настройках веб-формы settings > emails/handlers создаём наш кастомный хэндлер под названием salesforce mapping, которое запускает маппинг после отправки формы. В режиме редактирования хэндлера для маппинга есть общие параметры, не требующие маппинга, и специальные поля, которые его требуют. Редактор сайта выбирает из этих выпадающих меню поле формы, а напротив — поле из Salesforce. Список полей редактируется во вкладке build. 
  3. Сохраняем.

Центральный участник этого процесса — PHP-класс webform handler. В нём прописываются поля, действия при отправке сабмита и логика отправки на Salesforce. 

настройка маппинга полей

Повторная отправка данных на Salesforce

Все отправленные формы можно посмотреть на странице Results. Но среди них будут и те, из которых данные ушли на Salesforce, и те, из которых передача данных сорвалась из-за сбоя в работе интернета, устаревшего токена авторизации или другой ошибки. Клиент очень дорожит этими данными, ведь это и информация о клиентах, и жалобы на неисправности в продукции. Поэтому мы сделали страницу Salesforce failed submissions — здесь лежат заявки только с ошибками. Если был какой-то ответ от сервера, то ошибка сопровождается описанием.

Теперь клиент может выбрать какую-то определёную или несколько форм и отправить их заново.

интеграция друпал и salesforce

Результаты работы

  • не надо лезть в код — клиент сам может добавлять поля и настраивать маппинг из админки Drupal;
  • из кода удалены сотни строк с маппингом и логикой; 
  • появилась возможность переотправить заявку заново.

Работа с клиентом продолжается.


 

Напишите нам!

Мы регулярно просматриваем не только почту, но и спам. Ваша заявка от нас не ускользнёт.

Напишите нам!

Но сначала правильно заполните обязательные поля.