На готовых решениях (например, Аспро) форма обратной связи обычно сохраняет все отправки в инфоблоке. Это удобно для хранения, но чтобы сразу же заводить лиды или контакты в amoCRM, потребуется автоматическая интеграция.
В этой статье мы подробно расскажем, как реализовать это на примере сайта на Bitrix (редакция "Старт"), используя официальный PHP SDK amoCRM.
Задача
- Пользователь заполняет форму на сайте (контактная форма, заказ звонка и.т.д.)
- Форма сохраняет данные в инфоблок (стандартное поведение)
- При этом автоматически создаётся контакт в amoCRM
Будем использовать стандартное событие . Оно срабатывает сразу после создания нового элемента, мы подпишемся на это событие и в нём вызовем метод для создания контакта в amoCRM.
Подготовка
- Зарегистрируйтесь и получите домен вашего аккаунта (например, yourcompany.amocrm.ru).
- Создайте интеграцию в amoCRM, получите ID интеграции, секрет и код авторизации.
- Получите долгосрочный токен.
Для решения нашей задачи мы решили не заморачиваться с обновлением токенов и применили долгосрочный токен который выдается на период от 1 дня до 5 лет.
Устанавливаем официальную библиотку amocrm/amocrm-api-php
- Ставим библиотеку через composer - composer require amocrm/amocrm-api-php
- Скачиваем из репозитория -
Создаем фуцнкцию для создания контакта
/**
* Функция для создания лида в amo crm
*/
function amoCrmLeadCreate($name, $phone, $email)
{
$accessToken = 'ВАШ_ДОЛГОСРОЧНЫЙ_ТОКЕН';
$apiClient = new AmoCRMApiClient();
$longLivedAccessToken = new LongLivedAccessToken($accessToken);
$apiClient->setAccessToken($longLivedAccessToken)->setAccountBaseDomain('youcompany.amocrm.ru');
$contact = new ContactModel();
$contact->setName($name);
// Добавляем кастомные поля
$customFields = new CustomFieldsValuesCollection();
// Телефон
$phoneField = new MultitextCustomFieldValuesModel();
$phoneField->setFieldCode('PHONE')
->setValues(
(new MultitextCustomFieldValueCollection())
->add(
(new MultitextCustomFieldValueModel())->setValue($phone),
),
);
$customFields->add($phoneField);
// Email
$emailField = new MultitextCustomFieldValuesModel();
$emailField->setFieldCode('EMAIL')
->setValues(
(new MultitextCustomFieldValueCollection())
->add(
(new MultitextCustomFieldValueModel())->setValue($email),
),
);
$customFields->add($emailField);
$contact->setCustomFieldsValues($customFields);
try {
$apiClient->contacts()->addOne($contact);
} catch (AmoCRMApiException $e) {
AddMessage2Log($e);
die;
}
}
Вешаем обработчик события
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("IblockEvents", "OnAfterIBlockElementAddHandler"));
class IblockEvents
{
public static function OnAfterIBlockElementAddHandler(&$arFields)
{
// ID инфоблоков для форм
$formsIblockIds = [5,6,7,8,9,10,11,12,13,14,15,16,17];
if($arFields['RESULT'] > 0) {
if (in_array($arFields['IBLOCK_ID'], $formsIblockIds)) {
$name = $arFields['PROPERTY_VALUES']['NAME'];
$phone = $arFields['PROPERTY_VALUES']['PHONE'];
$email = $arFields['PROPERTY_VALUES']['EMAIL'];
amoCrmLeadCreate($name, $phone, $email);
}
}
}
}
Результат интеграции
- Пользователь отправляет форму на сайте
- Форма сохраняется в инфоблоке (ID инфоблока из массива $formsIblockIds)
- Срабатывает событие OnAfterIBlockElementAdd
- Получаем все заполненные поля
- Вызываем amoCRM API и создаём контакт
Заключение
Таким образом, даже на типовом решении Битрикс-Аспро вы можете настроить интеграцию с amoCRM без покупки дорогих модулей. Форма отправляется, Bitrix записывает в инфоблок, а ваш хук сразу отправляет данные в amoCRM через официальный API.
Это надёжный и гибкий способ построить настоящую автоматизацию на сайте.