Как для всех контактов в AmoCRM создать профиль пользователя Joomla. Как для пользователей Joomla при регистрации на сайте создавать контакт в AmoCRM.
В комплект библиотеки WT AmoCRM входит плагин Пользователь - WT AmoCRM user synс, который предлагает базовые сценарии интеграции Joomla и AmoCRM в обе стороны.
Интеграция двух различных систем - процесс сложный, в котором нужно учитывать множество нюансов и логику конкретного бизнеса. Поэтому детали каждой конкретной интеграции могут порой сильно отличаться. Возможно, что в некоторых случаях проще создать несколько собственных плагинов для решения своих задач. Данный плагин не является абсолютно универсальным инструментом и может не полностью отвечать вашим запросам.
Включите плагин Пользователь - WT AmoCRM user synс в разделе Система - Управление - Плагины. Плагин можно найти в поиске по слогу amo или с помощью фильтров (параметры поиска).
Как найти плагин интеграции Joomla с AmoCRM
Создание контактов AmoCRM при регистрации или создании пользователя Joomla
Источник данных: Joomla. Приёмник данных: AmoCRM.
Настройки плагина:
Создавать контакт в AmoCRM?
Да или нет. При создании пользователя Joomla или его самостоятельной регистрации будет создан контакт в AmoCRM.
Теги контактов
Выпадающий список с тегами, которые загружаются из AmoCRM. Если выбрано, то новым контактам будут присвоены теги AmoCRM.
Выбор тега AmoCRM для контакта при создании пользователя Joomla
Обновлять данные контакта в AmoCRM при обновлении в Joomla?
Да или нет. Если данные пользователя Joomla изменяются делать ли обновление данных в связанном контакте AmoCRM?
Поле для ссылки пользователя Joomla
Для контакта AmoCRM можно создать поле типа ссылка, в которой будет храниться ссылка на пользователя Joomla для контакта AmoCRM. Удобно использовать для быстрого перехода между интерфейсами Joomla и AmoCRM. Поле профиля Joomla в интерфейсе контакта AmoCRM
На странице редактирования пользователя Joomla добавляется вкладка "AmoCRM", где можно найти прямую ссылку на контакт этого пользователя в AmoCRM. Ссылка на контакт AmoCRM в профиле пользователя Joomla
Настройка сопоставления полей пользователя Joomla и полей контакта AmoCRM
Настройте сопоставление полей контакта AmoCRM и пользователя Joomla. Вы можете хранить данные полей в свойстве params объекта пользователя (для разработчиков) или в пользовательских полях.
Эти настройки так же используются при работе входящих вебхуков из AmoCRM и плагином CLI-импорта контактов из AmoCRM Console - WT Import AmoCRM contacts.
Сопоставление полей данных 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 напрямую зависит от особенностей вашей интеграции и нюансов работы с данными.