Интеграция amocrm и посадочной страницы.
Наш клиент обратился к нам с задачей: необходимо интегрировать созданную посадочную страницу и amocrm.
Исходные данные:
- сверстанная посадочная страница в виде статичного html и файлов ресурсов
- имеющийся аккаунт в 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();
Возможные улучшения:
- более строгие и полные правила валидации
- фильтрация данных
- вынос всех настроек в конфигурационный файл
- проверка на спам и ботов
- защита от csrf-атак
Перейдем к настройке amocrm.
Все, что нам необходимо сделать на стороне amocrm - настроить сбор почты с ящика, на который мы отправляем заявки:
Конечно, данный способ интеграции имеет ряд ограничений и недостатков, например, мы не можем передать никакой дополнительной информации (utm-метки) для их "распознавания" в CRM. Но ничто не мешает передавать эту информацию в теле отправляемого письма и обработать в ручном режиме. Интеграция получилась быстрой и дешевой, со своей задачей успешно справляется.
Для полноценной интеграции так или иначе придётся работать с API amocrm - но это тема для отдельной публикации.
Мы являемся сертифицированными партнерами amostart!
Поможем вам в настройке и интеграции любых решений с amocrm!
А если вы задумываетесь об открытии небольшого интернет-магазина и планируете обрабатывать заказы в amo - у нас для вас есть готовое решение!
Готовый интернет-магазин, интегрированный с amocrm за 1 день и 4 тысячи рублей!