Двухсторонняя синхронизация пользователей Joomla и контактов AmoCRM

WT Amo CRM library - Документация
Категория: Библиотеки

Как для всех контактов в AmoCRM создать профиль пользователя Joomla. Как для пользователей Joomla при регистрации на сайте создавать контакт в AmoCRM.

В комплект библиотеки WT AmoCRM входит плагин Пользователь - WT AmoCRM user synс, который предлагает базовые сценарии интеграции Joomla и AmoCRM в обе стороны. 

Интеграция двух различных систем - процесс сложный, в котором нужно учитывать множество нюансов и логику конкретного бизнеса. Поэтому детали каждой конкретной интеграции могут порой сильно отличаться. Возможно, что в некоторых случаях проще создать несколько собственных плагинов для решения своих задач. Данный плагин не является абсолютно универсальным инструментом и может не полностью отвечать вашим запросам. 

Включите плагин Пользователь - WT AmoCRM user synс в разделе Система - Управление - Плагины. Плагин можно найти в поиске по слогу amo или с помощью фильтров (параметры поиска).

Как найти плагин интеграции Joomla с AmoCRM
Как найти плагин интеграции Joomla с AmoCRM

Создание контактов AmoCRM при регистрации или создании пользователя Joomla

Источник данных: Joomla. Приёмник данных: AmoCRM.

Настройки плагина:

Создавать контакт в AmoCRM?
Да или нет. При создании пользователя Joomla или его самостоятельной регистрации будет создан контакт в AmoCRM.
Теги контактов
Выпадающий список с тегами, которые загружаются из AmoCRM. Если выбрано, то новым контактам будут присвоены теги AmoCRM.
Выбор тега AmoCRM для контакта при создании пользователя Joomla
Выбор тега AmoCRM для контакта при создании пользователя Joomla
Обновлять данные контакта в AmoCRM при обновлении в Joomla?
Да или нет. Если данные пользователя Joomla изменяются делать ли обновление данных в связанном контакте AmoCRM?
Поле для ссылки пользователя Joomla
Для контакта AmoCRM можно создать поле типа ссылка, в которой будет храниться ссылка на пользователя Joomla для контакта AmoCRM. Удобно использовать для быстрого перехода между интерфейсами Joomla и AmoCRM.
Поле профиля Joomla в интерфейсе контакта AmoCRM
Поле профиля Joomla в интерфейсе контакта AmoCRM
На странице редактирования пользователя Joomla добавляется вкладка "AmoCRM", где можно найти прямую ссылку на контакт этого пользователя в AmoCRM.
Ссылка на контакт AmoCRM в профиле пользователя Joomla
Ссылка на контакт AmoCRM в профиле пользователя Joomla

Настройка сопоставления полей пользователя Joomla и полей контакта AmoCRM

Настройте сопоставление полей контакта AmoCRM и пользователя Joomla. Вы можете хранить данные полей в свойстве params объекта пользователя (для разработчиков) или в пользовательских полях.

Эти настройки так же используются при работе входящих вебхуков из AmoCRM и плагином CLI-импорта контактов из AmoCRM Console - WT Import AmoCRM contacts.

Сопоставление полей данных AmoCRM и Joomla
Сопоставление полей данных AmoCRM и Joomla

В чём отличия между пользовательскими полями и свойством $user['params']?

Главное отличие - это место хранения данных и возможности их редактирования и очистки.

Хранение данных в пользовательских полях Joomla для пользователей

Пользовательские поля Joomla предварительно создаются вручную в панели администратора. После этого вы выбираете какое свойство контакта AmoCRM в какое поле пользователя Joomla попадёт. Значения полей технически хранятся в отдельной таблице в базе данных #__field_values. Поля Joomla используют ACL (Access Control List) - группы прав доступа. Это значит, что для разных уровней доступа вы можете управлять видимостью данных, полученных из AmoCRM. Вы можете изменять их, редактируя пользователя. 

В коде для получения данных полей для пользователя используется FieldsHelper.

<?php
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
 /**
     * @param   string             $context              The context of the content passed to the helper
     * @param   object|array|null  $item                 The item being edited in the form
     * @param   int|bool           $prepareValue         (if int is display event): 1 - AfterTitle, 2 - BeforeDisplay, 3 - AfterDisplay, 0 - OFF
     * @param   ?array             $valuesToOverride     The values to override
     * @param   bool               $includeSubformFields Should I include fields marked as Only Use In Subform?
     *
     * @return  array
     */
$fields = FieldsHelper::getFields('com_users.user', ['id' => $urser_id], true);

// Joomla uses Symfony vardamper
dump($fields );

Из неочевидных минусов: поскольку FieldsHelper использует ACL - ему нужна сессия для определения текущего пользователя. В некоторых случаях (внешние запросы без cookie например) сессия не создаётся и получить поле через FieldsHelper не представляется возможным. 

Хранение данных в свойстве $user['params'] объекта пользователя.

params - это ячейка таблицы #__users в Joomla, где можно хранить нужные вам данные в json формате. Плюсы такого подхода в том, что вам не требуется использовать FieldsHelper для получения данных контакта AmoCRM. Каждый раз, когда вы получаете объект пользователя - у вас уже есть эти данные сразу. Это очень удобно в случаях больших и долгих циклов, где не нужно делать отдельный запрос в базу на каждую итерацию или строить дополнительные JOIN в SQL-запросах. Учитывая, что FieldsHelper использует ACL - это прибавляет ещё несколько JOIN и дополнительных запросов в таблицы с хранением прав доступа.

В своём коде вы получаете пользователя и просто обращаетесь к его свойству params. При этом params - это json-строка, которую можно преобразовать для удобства в объект Registry самостоятельно. Однако, вы можете обратиться к "готовому" свойству через метод getParam($key, $default_value);

<?php
use Joomla\CMS\Factory;
use Joomla\CMS\User\User;

$app = Factory::getApplication();
$user = $app->getIdentity();

// Аналогично 
$user_id = 17;
$user = new User($user_id );

$telegram = $user->getParam('amocrm.telegram', null);

Минусы такого подхода: эти данные нигде недоступны в панели администратора в стандартном исполнении. Управлять этими данными можно только в коде. 

Выбор того или иного места хранения данных для каждого свойства контакта AmoCRM напрямую зависит от особенностей вашей интеграции и нюансов работы с данными.

 

Продолжение следует...

Расширения Joomla WebTolk

96 Всего расширений
12 Категорий
492 Выпущено версий
563554 Всего скачиваний
Корзина
Корзина пуста