Создание заявок в amoCRM по входящему письму через сервис Mailgun


Описание сервиса 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, то нам нужно проверить оба поля, поэтому создаём две проверки последовательно:

Создание контакта

В случае, если контакт не будет найден по одному из этих двух параметров, контакт необходимо будет создать:

Создание сделки

В каждом из трёх случаев нам надо создать сделку, для этого создадим блоки для каждой ветки, в названии укажем разницу, если контакт уже существовал:

Итог

Теперь у нас есть все схемы нужные для процесса, и схема приобрела законченный вид: