Описание сервиса amoCRM доступно на странице amoCRM
Здесь мы создадим процесс позволяющий создать контакт и карточку сделки на основании данных входящего письма от сайта/сервиса содержащего строки формата:
Имя: %Имя клиента%
Телефон:+79000000000
Email: somebody@example.org
Помимо данных в письме может содержаться какая-то вёрстка или другие данные, но это не играет значительной роли, т.к. мы проверяем содержимое.
Содержание
Настройки Mailgun
Для реализации схемы будем считать что у нас уже есть аккаунт сервиса Mailgun и привязанный к нему домен, который будет использоваться для приема и пересылки писем, в рамках примера это будет example.com.
Подробнее процесс настройки описан в официальной документации сервиса.
В личном кабинете mailgun проваливаемся во вкладку Routes и создаём новый путь писем:
- Expression type — Match Recipient
- Recipient — testintegration@example.com
- Forward — отметить чекбокс и вставить ссылку на процесс (создание процесса описано ниже)
Настройки процесса
Создадим процесс с источником “Другое”. Так как это созданный нами вновь процесс и мы его используем для пересылки писем из конкретного ящика, то проверка в начальном блоке не нужна, т.к. все письма являются целевыми.
Функциональные поля, которые содержит приходящий запрос от mailgun:
- sender — кто написал письмо
- subject — тема
- from — кто написал письмо в формате Иван Петров <somemail@example.com> в случае, если письмо отправляется не напрямую, а пересылкой из ящика, здесь будет написан автор начального письма,
- body-plain — текст, содержащийся в письме
- body-html — полное содержимое письма с html-разметкой
Для достижения цели будем использовать body-plain, т.к. нам известен формат данных в письме и мы не зависим от вёрстки.
Регулярные выражения
Этот блок мы используем для того, чтобы извлечь информацию из входящих данных.
Так как у нас все данные с новой строки, то нам будет вполне достаточно простейшего выражения вида Имя: (.*)
. Создадим блок и заполним выборку для каждой строки:
Предположим что нам точно известен порядок в котором поля перечислены друг за другом, но не известен формат в котором придут данные: одно имя или несколько через пробел/запятую/другой символ, формат телефона, …
Поэтому соберём выражения с упором на порядок данных в строке:
- name —
Телефон: ([+].*)\s(?:Email)
- phone —
Телефон: ([+].*)\s(?:Email)
- email —
Email: (.*)
Если схема расположения данных или их формат отличаются, их всегда можно выделить при помощи скорректированных регулярных выражений, подробнее их синтаксис описан на странице Регулярные выражения.
Поиск контакта
Т.к. у нас есть телефон и email, то нам нужно проверить оба поля, поэтому создаём две проверки последовательно:
Создание контакта
В случае, если контакт не будет найден по одному из этих двух параметров, контакт необходимо будет создать:
Создание сделки
В каждом из трёх случаев нам надо создать сделку, для этого создадим блоки для каждой ветки, в названии укажем разницу, если контакт уже существовал:
Итог
Теперь у нас есть все схемы нужные для процесса, и схема приобрела законченный вид: