Интеграция amocrm и посадочной страницы.
Наш клиент обратился к нам с задачей: необходимо интегрировать созданную посадочную страницу и amocrm.
Исходные данные:
Условия: необходимо сделать быстро и с минимальными затратами времени и бюджета.
Приступаем.
Работая с amocrm, у нас есть несколько способов интеграции с сайтом/страницей:
- формы amocrm
- Интеграция через API
- Интеграция через email
Формы. Пожалуй, самый простой способ интеграции. Вы создаете форму с необходимыми полями, получаете ее код, размещаете его на сайте/лендинге и начинаете получать заявки. Просто. Есть один недостаток: сложность стилизации таких форм под внешний вид страницы. Да, есть какие-то возможности для этого, но они довольно ограничены. Сделать формы полностью "родными" для сайта довольно проблематично если не менять текущую вёрстку и стили. Все усложняется тем, что формы на целевой странице сделаны модальными (popup). Попробовали, покрутили стили, попытались поменять разметку - с ходу не вышло.
API. amocrm имеет хорошее (ну почти) API, через которое можно управлять любыми объектами CRM. Имеются и готовые библиотеки для PHP, позволяющие интегрировать amo и текущий проект. Основная проблема: трудозатраты и относительная сложность. Данный вариант отложили, но не отбросили.
Email. Работает даже проще чем формы. Вы отправляете необходимую информацию на специальный email-ящик, настраиваете amocrm на получение писем из этого ящика и они автоматически появляются в вашей CRM. Просто же!
Решили попробовать. Все, что нам необходимо - написать скрипт, обрабатывающий отправку формы с лендинга и пересылающий эту информацию на указанный email. Большинство своих проектов мы разрабатываем на Yiiframework первой и второй версии. Однако, в этот конкретный проект тащить целый большой Фреймворк нам показалось излишним. Хотелось чего-то более простого. В то же время писать на "голом" PHP, даже в эпоху composer и пакетов - нам не хотелось. Вспомнили о микрофреймворках. Silex - один из них. Основан на компонентах Symfony, активно развивается и поддерживается сообществом. Берём.
Почему:
За код!
Первым делом инициализируем новый composer-проект:
composer init
Добавляем Silex:
composer require silex/silex
Все! Можно писать нашу простейшую бизнес-логику.
В качестве URL-адреса для обработки форм выбираем путь "/feedback"
Обратите внимание, обработка идёт только для POST-запросов.
Первым делом нам необходимо проверить полученные данные на корректность.
Для этого подключим отдельную батарейку - компонент Validator от Symfony:
composer require symfony/validator
И расскажем о новом модуле сайлексу:
$app->register(new \Silex\Provider\ValidatorServiceProvider());
Обойдемся простыми проверками: имя и номер телефона должны быть обязательными для заполнения и содержать как минимум 3 символа. На данный момент нам этих правил будет достаточно, при необходимости можно реализовать более сложные проверки.
Если данные корректны - отправим их в CRM.
Подключаем еще одну батарейку:
composer require silex/mail
Подключаем установленный модуль:
$app->register(new \Silex\Provider\SwiftmailerServiceProvider());
Указываем настройки почтового (smtp) сервера:
$app['swiftmailer.options'] = array( 'host' => 'smtp.yandex.ru', 'port' => '465', 'username' => '*******', 'password' => '*******', 'encryption' => 'ssl' );
Готово!
Итоговое приложение. Всего 40 строк кода, на написание которых ушло не больше одного часа. Профит!
<?php require_once __DIR__ . '/vendor/autoload.php'; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Validator\Constraints\Collection; use Symfony\Component\Validator\Constraints\Length; $app = new \Silex\Application(); $app->register(new \Silex\Provider\ValidatorServiceProvider()); $app->register(new \Silex\Provider\SwiftmailerServiceProvider()); $app['swiftmailer.options'] = array( 'host' => 'smtp.yandex.ru', 'port' => '465', 'username' => '********', 'password' => '********', 'encryption' => 'ssl' ); $app->post('/feedback', function (Request $request) use ($app) { $constraint = new Collection([ 'phone' => new Length(['min' => 5]), 'name' => new Length(['min' => 3]) ]); $data = [ 'name' => $request->get('name'), 'phone' => $request->get('phone') ]; $errors = $app['validator']->validate($data, $constraint); if (count($errors) === 0) { $message = Swift_Message::newInstance() ->setSubject('Новая заявка с сайта') ->setFrom('********') ->setTo('********') ->setBody(sprintf('Имя - %s, телефон - %s...', $data['name'], $data['phone'])); return new JsonResponse(['result' => $app['mailer']->send($message)]); } return new JsonResponse(['result' => 0, 'message' => (string)$errors]); }); $app->run();
Возможные улучшения:
Перейдем к настройке amocrm.
Все, что нам необходимо сделать на стороне amocrm - настроить сбор почты с ящика, на который мы отправляем заявки:
Конечно, данный способ интеграции имеет ряд ограничений и недостатков, например, мы не можем передать никакой дополнительной информации (utm-метки) для их "распознавания" в CRM. Но ничто не мешает передавать эту информацию в теле отправляемого письма и обработать в ручном режиме. Интеграция получилась быстрой и дешевой, со своей задачей успешно справляется.
Для полноценной интеграции так или иначе придётся работать с API amocrm - но это тема для отдельной публикации.
Мы являемся сертифицированными партнерами amostart!
Поможем вам в настройке и интеграции любых решений с amocrm!
А если вы задумываетесь об открытии небольшого интернет-магазина и планируете обрабатывать заказы в amo - у нас для вас есть готовое решение!
Готовый интернет-магазин, интегрированный с amocrm за 1 день и 4 тысячи рублей!