[amoCRM] Интеграция с востребованным сервисом

Как многие помнят, месяц назад вместе с MODSTORE.PRO мы объявили о создании компонента для интеграции сайта на MODX Revo с популярной amoCRM. Реакция сообщества тогда обрадовала, что означало достаточно высокую востребованность такого инструмента.

И вот, теперь он готов!

Если вкратце, то AmoCRM — это простая и понятная система учета потенциальных клиентов и сделок, которая поможет контролировать и увеличивать ваши продажи. С помощью нее вы не только с легкостью сможете контролировать сделки, но и не потеряете ни одной заявки от потенциальных клиентов.

Ключевые возможности компонента:

  • Из заказа на сайте создает сделку и контакт (или привязывает существующий)
  • В свойствах заказа указывается метод оплаты и список товаров
  • При смене статуса заказа изменяет статус сделки и наоборот
  • Из любой формы обратной связи создает контакт
  • Автоматически создает новую воронку для заказов с сайта и статусы заказов в ней
  • Автоматически создает дополнительные поля сделок для списка товаров и метода оплаты
  • Автоматически создает и обновляет Контакты при сохранении Пользователей на сайте
  • Может создавать неограниченное количество дополнительных полей для контактов (упрощенный режим)

Установка и настройка

Системные настройки










НазваниеЗначение по умолчанию Описание
amocrm_account Аккаунт. Поддомен домена amocrm.ru amocrm_hashКлюч пользователя, можно получить на странице редактирования профиля пользователя amocrm_loginЛогин, с которым вы авторизуетесь в amoCRM amocrm_new_order_status_id1ID статуса нового заказа minishop2 amocrm_pipeline_idID воронки для нового заказа, заполняется автоматически при первом заказе amocrm_secret_keyСекретный ключ виджета

Как получить значение amocrm_secret_key

Ввод значения секретного ключа необходим только для создания дополнительных полей с помощью модуля. Если Вы планируете создавать поля самостоятельно, ключ вводить не требуется.
Перейдите в раздел API настроек amoCRM (YOUR_DOMAIN.amocrm.ru/settings/dev/) и добавьте новый виджет, если не создан ранее. В окне ввода кода виджета можно ввести что-то осмысленное, но самое главное, чтобы код оказался уникальным в рамках всего amoCRM.
Затем в таблице виджетов скопируйте значение из колонки «Секретный ключ» и введите в системну настройку.

Настройка Webhook

Для получения изменений из amoCRM на сайт в блоке Webhook введите адрес
<http://stite.ru>/assets/components/amocrm/webhook.php
, заменив
<http://stite.ru>
на URL Вашего сайта. После этого в выпадающем списке справа отметьте галочками события: * Изменить сделку * Смена статуса сделки

Добавление дополнительных полей Контактам

При создании или изменении Контакта с сайта могут передаваться любые данные Пользователя. Единственное условие — должны быть созданы соответствующие дополнительные поля. Если секретный ключ виджета указан, то новые поля можно создать прямо с сайта. Для этого удобнее всего использовать компонент Console и выполнить в нем следующий код:
<code>if (!$amo = $modx->getService('amocrm', 'amoCRM', $modx->getOption('amocrm_core_path', null,
        $modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
) {
    return 'Could not load amoCRM class!';
}
$amo->auth();
$amo->addContactsCustomFields(array('username', 'email', 'phone'));</code>
Здесь видно, что перечень полей задается в виде стандартного массива PHP. Важно: поля должны совпадать со свойствами пользователей MODX.

Компонент написан мной, Воеводским Михаилом, совместно с нашим разработчиком Волковым Николаем.
Отдельное спасибо Павлу Гвоздю за предоставление своих наработок в этом направлении.

Пакет отправлен в магазин, доступен здесь.
Воеводский Михаил
17 декабря 2016, 13:18
modx.pro
5
10 691
+15

Комментарии: 81

Raimei
17 декабря 2016, 16:28
0
Из любой формы обратной связи создает контакт
На днях просили фичу: если письмо отправлено через AjaxForm (или FormIt) то создается отдельный контакт в CRM. Можно будет сделать такое через ваш модуль?
mngatoff
17 декабря 2016, 23:48
0
я сначала подумал, это открытое письмо Паше Гвоздю)))
Воеводский Михаил
19 декабря 2016, 12:48
+3
Компонент опубликован: modstore.pro/packages/import-and-export/amocrm
    Антон
    Антон
    20 декабря 2016, 03:33
    +1
    Когда ожидается Битрикс24?
      Воеводский Михаил
      20 декабря 2016, 04:14
      +1
      Планируем к НГ.
        Антон
        Антон
        20 декабря 2016, 04:22
        +2
        Спасибо, наш Дед Мороз.
          Антон
          Антон
          31 декабря 2016, 17:44
          0
          Наш подарок уже в пути?
            Воеводский Михаил
            31 декабря 2016, 17:47
            0
            Увы, не успели. Следующий расчетный срок — середина января. В любом случае, постараемся не затягивать :)

            С новым годом!
              Антон
              Антон
              31 декабря 2016, 17:54
              0
              Ок. Даем второй шанс — до Старого Нового Года.
              Иначе добрый Дед Мороз, станет горбатым дедом нетрадиционной ориентации.

              С Новым Годом!

                Воеводский Михаил
                31 декабря 2016, 18:53
                0
                Пожелание передано Деду Морозу ;)
                  Антон
                  Антон
                  15 января 2017, 20:02
                  0
                  Здравствуй, Дедушка Мороз, борода из ваты! Ты подарки нам принёс?!
      Семён Кудрявцев
      20 декабря 2016, 09:01
      +1
      Ждём с нетерпением интеграции с Битрикс24 — у ник как раз выкатили новый релиз, куча новых плюшек и удобностей, поэтому связка MODX + Битрикс24 = СУПЕР ДУЭТ, очень ждём!
      Александр Коваленко
      22 декабря 2016, 14:46
      +1
      Спасибо, за компонент.
      Подскажите как можно реализовать передачу контакта или создать сделку при заказе обратного звонка с сайта, через обычную форму?
        Воеводский Михаил
        22 декабря 2016, 17:01
        +1
        Сегодня-завтра дополним документацию по компоненту, там будет со скринами освещен этот вопрос.
          Александр Коваленко
          23 декабря 2016, 13:12
          0
          Спасибо. Мы всем ждем!)
            Денис Гром
            05 января 2017, 19:33
            0
            Нет еще документации? очень срочно нужно цепляться к формам на formit (через ajaxform)! Если уже есть, то где почитать?
          Воеводский Михаил
          24 декабря 2016, 03:57
          +1
          Выпущена версия 1.0.0-pl. Добавлены системные настройки для указания полей объектов msOrder и msOrderAddress, которые будут переданы в amoCRM.
          Обновляйтесь корректируйте под свои нужды.
            Антон
            Антон
            24 декабря 2016, 06:26
            0
            Из любой формы обратной связи создает контакт
            Это через ajax работает?
            Контакт или лид создает?
              Воеводский Михаил
              24 декабря 2016, 06:34
              0
              Работает как хук FormIt. Создает контакт.
                Антон
                Антон
                24 декабря 2016, 07:22
                0
                Лид нужно сразу делать.
                Наверно можно легко поправить.
            Игорь Зябко
            Игорь Зябко
            28 декабря 2016, 13:13
            0
            Михаил, в результате эксплуатации поняли, что реалтайм отправка корзины в amo медленная.
            Секунд около 10 примерно.

            Вишлист:
            опционально в настройках: реалтайм или данные в файл, в csv или json мб.
            А далее можно будет по крону как нито разобрать.

            Спасибо!
              Воеводский Михаил
              30 декабря 2016, 14:01
              0
              Игорь, 10 секунд — странно, не должно быть так. Но пожелание касательно очереди принято, в январе подумаем.
              Сергей
              25 января 2017, 06:26
              0
              Добавьте проверку на контекст — при сохранения профиля в админке — создает контакт в CRM
                Воеводский Михаил
                25 января 2017, 06:42
                +2
                Обновляйтесь.
                  Сергей
                  25 января 2017, 07:12
                  0
                  Спасибо за оперативность!)
                  А подскажите:
                  Все работает, контакт при заполнении формы создается. Но в админке сыпятся ошибки:
                  /core/cache/includes/elements/modsnippet/46.include.cache.php : 26) PHP warning: in_array() expects parameter 2 to be array, null given
                  Посмотрел — жалуется на сниппет amoCRMAddContact, а конкретно на эту строку:
                  if (in_array($key, array_keys($formFields))) {
                    Воеводский Михаил
                    25 января 2017, 07:38
                    1
                    +1
                    Добавьте в этом сниппете на 8 строке
                    $formFields = array();
                    Напишите результат.
                      Сергей
                      25 января 2017, 07:58
                      0
                      Ошибка пропала) Спасибо)
                Владимир
                27 марта 2017, 16:00
                0
                Битрикс24 не добавлен еще?
                Алексей Смирнов
                28 марта 2017, 11:34
                0
                Доброго дня. Можно от вас узнать сколько чистого времени у вас заняло разработка интеграции? ну или хотя бы с погрешностью в 20% ))) Очень хочется понять на сколько вообще подобные интеграции времязатратны. Спасибо!
                Fi1osof
                09 апреля 2017, 23:15
                +1
                Михаил, вот такой момент: в методе prepareContact() у тебя жестко прописано $default_fields = array('name'); На самом же деле дефолтных полей значительно больше developers.amocrm.ru/rest_api/contacts_set.php
                Особенно важно поле tags. Если прописать хотя бы вот так $default_fields = array('name','tags'), уже получается создавать контакты с тэгами.
                Пока же пришлось делать так:
                if($amo->auth()){
                    
                    $contact = $amo->prepareContact(array(
                        'name' => "Имя", 
                        'email'     => "email@...", 
                        'phone'     => "777777777",
                    ));
                    
                    $contact['tags'] = 'RU';
                    
                    $data = array('request' => array('contacts' => array()));
                    $data['request']['contacts']['add'] = array($contact);
                    
                    $result = $amo->sendRequest('/private/api/v2/json/contacts/set', $data);
                }
                И вот здесь всплывает еще один момент: хорошо было бы иметь возможность в метод addContext() передавать объект контакта, чтобы не приходилось формировать запрос.

                А в целом все работает, контакты создаются, список контактов из АМО получается забрать и прочий необходимый функционал есть. Спасибо за компонент! Пригодился.
                  Воеводский Михаил
                  10 апреля 2017, 02:58
                  +2
                  Николай, спасибо за замечания по полям. Изменю механизм.

                  addContext() — где такой метод? Мб, addContact()?
                    Fi1osof
                    10 апреля 2017, 03:36
                    +1
                    Не за что.

                    addContext() — где такой метод? Мб, addContact()?
                    Да, все верно, моя ошибка.
                  Fi1osof
                  10 апреля 2017, 21:47
                  0
                  Михаил, вот еще информация: создание заметок по контактам и сделкам. В контакте результат выглядит так:

                  Возможность создавать заметки особенно полезна, когда с сайта передаются не только простые поля (типа емейл, имя и т.п.), а какие-нибудь данные из более сложных форм (произвольные текстовые сообщения, информация по товару или типа того).

                  Создание События:
                  if (!$amo = $modx->getService('amocrm', 'amoCRM', $modx->getOption('amocrm_core_path', null,
                          $modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
                  ) {
                      return 'Could not load amoCRM class!';
                  }
                  
                  if($amo->auth()){
                      
                      $note = array(
                          'element_type'          => 1,  
                          'element_id'   => 123456789,  
                          'note_type'   => 4,
                          'text'   => "gfgggggff",
                      );
                      
                      $data = array('request' => array('notes' => array()));
                      $data['request']['notes']['add'] = array($note);
                      
                      $result = $amo->sendRequest('/private/api/v2/json/notes/set', $data);
                      
                      print_r($result);
                  }
                  else{
                      print "Error auth";
                  }
                  element_type: 1 — контакт, 2 — сделка.
                  element_id: id объекта (в нашем случае аккаунта).
                  note_type: 4 — это произвольная заметка по контакту.
                  Полный список типов здесь: developers.amocrm.ru/rest_api/notes_type.php

                  Получение всех Событий по контакту:
                  if (!$amo = $modx->getService('amocrm', 'amoCRM', $modx->getOption('amocrm_core_path', null,
                          $modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
                  ) {
                      return 'Could not load amoCRM class!';
                  }
                  
                  if($amo->auth()){
                      
                      $data = array(
                          'type'          => 'contact',
                          'element_id'   => 123456789,
                      );
                      
                      $result = $amo->sendRequest('/private/api/v2/json/notes/list', $data, "GET");
                      
                      print_r($result);
                  }
                  else{
                      print "Error auth";
                  }
                  Fi1osof
                  10 апреля 2017, 23:30
                  +1
                  Для пример: мой код, который создает Сделку, Контакт с тегами, связывает Контакт со Сделкой, и создает заметку по Контакту.

                  if (!$amo = $this->modx->getService('amocrm', 'amoCRM', $this->modx->getOption('amocrm_core_path', null,
                          $this->modx->getOption('core_path') . 'components/amocrm/') . 'model/amocrm/', array())
                  ) {
                      $this->modx->log(modX::LOG_LEVEL_ERROR, "[". __CLASS__ ."] Could not load amoCRM class!");
                  }
                  
                  if($amo->auth()){
                      
                      /*
                      Создаем сделку
                      */
                      $data = array(
                          'name'          => "Заявка с сайта",  
                      );
                      
                      $lead_id = $amo->addLead($data);    
                      
                      /*
                      Создаем контакт
                      */
                      $contact = $amo->prepareContact(array(
                          'name' => $this->getProperty('name'),
                          'phone' => $this->getProperty('phone'),
                          'email' => $this->getProperty('email'),
                      ));
                      
                      $contact['tags'] = 'ClientsFromWebsite,RUS';
                      $contact['linked_leads_id'] = $lead_id;
                      
                      $data = array('request' => array('contacts' => array()));
                      $data['request']['contacts']['add'] = array($contact);
                      
                      $result = $amo->sendRequest('/private/api/v2/json/contacts/set', $data);
                      
                      if(!empty($result['out']['contacts']['add'][0]['id'])){
                          $contact_id = $result['out']['contacts']['add'][0]['id'];
                      }
                      
                      /*
                      Создаем заметку по контакту
                      */
                      if(
                          $message = $this->getProperty("message")
                          AND $contact_id
                      ){
                          
                          $note = array(
                              'element_type'          => 1,  
                              'element_id'   => $contact_id,  
                              'note_type'   => 4,
                              'text'   => $message,
                          );
                          
                          $data = array('request' => array('notes' => array()));
                          $data['request']['notes']['add'] = array($note);
                          
                          $result = $amo->sendRequest('/private/api/v2/json/notes/set', $data);
                      }
                      
                  }
                  else{
                      $this->modx->log(modX::LOG_LEVEL_ERROR, "[". __CLASS__ ."] amoCRM Error auth");
                  }
                  Получается вот такой результат:

                    Denis
                    04 июня 2017, 02:40
                    0
                    Доброго времени.
                    Установил плагин. В crm передаются данные заказов и всех форм через хук formit
                    С заказами минишопа проблем нет, а вот при отправке форм в логах ошибка
                    /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: amoCRMLead from mysql.amocrmlead.
                    На работу компонента и отправку данных ошибка не влияет, но хотелось бы от нее избавиться.
                    Иван Кизименко
                    15 сентября 2017, 00:11
                    0
                    Три вопроса:

                    1. Как к вашему модулю добавить добавление Заметки, я так понимаю то-что описал Николай это его собственное решение не привязанное к модулю.
                    2. Можно ли в принципе создать задачу сразу после попадания заявки в CRM? Если это возможно то планируете ли такое улучшение модуля.
                    3. Развитие модуля прекращено?
                      Воеводский Михаил
                      15 сентября 2017, 15:46
                      0
                      1. Это его решение, основанное на методах модуля
                      2. Возможно. В будущем такое обновление появится
                      3. Не прекращено. Заявок на добавление возможностей не поступало.
                        Иван Кизименко
                        19 сентября 2017, 17:20
                        0
                        Проверки на дубли тоже нету в модуле? а то мне тут в амо прилетает по 15 заявок одинаковых.
                          Воеводский Михаил
                          19 сентября 2017, 17:41
                          0
                          Напишите в поддержку в магазине, какого плана проверки нужны.
                      fedky
                      21 сентября 2017, 13:36
                      0
                      Здравствуйте, писал в поддержке, там пока тишина. Купил вчера модуль и насколько понял, в нём, при создании контакта, реализована поддержка лишь 3-х полей — name, phone, email.
                      Вопрос: передача кастомного поля реализована в модуле? Если да, то подскажите как передать, так как я не разобрался, если нет, то надо дописывать, будете ли вы этим заниматься или это уже удел того, кто купил модуль?
                        Воеводский Михаил
                        21 сентября 2017, 16:08
                        +1
                        Добрый день.
                        Ответил в поддержке.

                        На всякий случай, дублирую:

                        Добавьте в вызов FormIt параметр:
                        &amoCRMNameField=`amoField1==formField1||amoField2==formField2||amoField3==formField3`
                        taxsin
                        11 апреля 2018, 17:47
                        1
                        0
                        Добрый день. Помогите пожалуйста разобраться. При создании сделки ответственный назначается сразу администратор и менеджеры по продажам не видят эту сделку, т.к. она автоматически ставится на меня. Каким образом можно сделать что бы сделка просто создавалась без назначенного ответственного и ее видели все.
                          Иван Кизименко
                          25 апреля 2018, 00:37
                          0
                          Как работает сниппет-хук amoCRMAddContactGeo?
                          В этой ветке документации больше чем в самой документации.
                            Воеводский Михаил
                            25 апреля 2018, 22:42
                            0
                            Данный хук смотрит на системную настройку amocrm_geo_users и выставляет ответственного для заявки на основании геоинформации из компонента GeoLocation.

                            Настройка указывается в формате:
                            {«userLogin@email.com»:«UA-43,RU-ROS,RU-KDA,RU-STA,RU-SPE»,«userLogin2@email.com»:«RU-LEN»}
                            Полина Таран
                            04 мая 2018, 17:00
                            0
                            Добрый день!
                            у меня форма с полями name, phone, email, но они называются contact_name, contact_phone, contact_email. Я прописала
                            &hooks=`email,FormItAutoResponder,amoCRMAddContact`
                            &amoCRMNameField=`name==contact_name||phone==contact_phone||email==contact_email`

                            это правильно? В amoCRM контакт не попадает :(
                            Scorp Satex
                            14 мая 2018, 18:41
                            0
                            Здравствуйте.

                            Интересует покупка вашего плагина. Возможно ли с помощью вашего плагина сделать следующие:

                            1. Пользователь заходит на сайт, находит интересующий его товар.
                            2. Заполняет форму и нажимает отправить. У формы есть дополнительное поле «Название товара».
                            3. Форма отправляется в амоцрм, в качестве Контакта.
                            4. Дальше менеджер уже работает с контактом, проводя его по ссылке.

                            В документации у вас указано «Важно: поля контактов amoCRM должны совпадать с названиями полей формы.»

                            А как в форму добавить поле «Название товара», чтобы данные из нее отправились в амоцрм? Это возможно сделать?

                            На сайте корзины нету, все заказы через формы обычные на Formit.
                              Дмитрий
                              23 мая 2018, 16:05
                              1
                              0
                              Повторю вопрос taxsin

                              Как сделать чтобы не назначался ответственный, и сделки падали в раздел неразобранное?

                              Какую настройку изменить? Очень прошу помочь! Так как никто в офисе не видит приход новых сделок.
                                Виталий
                                25 июня 2018, 10:17
                                0
                                Всем привет!
                                Купил дополнение, настроил всё что нужно, кроме отправки текста сообщения из formit. Почему-то оно не добавляется в amoCRM.

                                вызов formit
                                &hooks=`email,amoCRMAddContact`	
                                &amoCRMNameField=`name==name||phone==phone||email==email||comment==comment`
                                &validate=`name:required:minLength=`2`,phone:required, email:email:required, comment:stripTags, agree:required, site_message:blank`
                                но я так понимаю что name==name||phone==phone||email==email|| не нужно указывать, оно и так добавляется в amoCRM, а вот комментарий добавить не получается.
                                в системных настройках сделал так.
                                Шаблон формы:
                                <form id="contactform" class="form" name="contactform" action="[[~[[*id]]]]" method="post">
                                <input type="hidden" name="nospam:blank" value="" />
                                  <div class="form-group">
                                <input type="text" name="site_message" class="site_message" value="" />
                                	<input type="text" name="name" id="name" class="form-control" placeholder="Введите Ваше имя (Обязательное поле)">
                                	   <div class="invalid-feedback error_name">
                                        [[+fi.error.name]]
                                      </div>
                                  </div>
                                  <div class="form-group">
                                	<input type="text" name="email" id="email" class="form-control" placeholder="Введите адрес электронной почты (Обязательное поле)">
                                	   <div class="invalid-feedback error_email">
                                        [[+fi.error.email]]
                                      </div>
                                  </div>
                                  <div class="form-group">
                                	<input type="text" name="phone" id="phone" class="form-control " placeholder="Введите номер телефона (Обязательное поле)">
                                	   <div class="invalid-feedback error_phone">
                                        [[+fi.error.phone]]
                                      </div>
                                  </div>
                                  <div class="form-group">
                                	<textarea type="text" name="comment" id="comment" class="form-control" rows="3" placeholder="Сообщение"></textarea>
                                  </div>
                                  <div class="form-check d-flex">
                                
                                	<input type="hidden" name="agree[]" value="">
                                	<input type="checkbox" name="agree[]" id="agree" class="form-check-input" checked>
                                	<label class="form-check-label">Я согласен с <a href="[[~3]]" class="aPerson">условиями обработки персональных данных</a></label>
                                	<div class="invalid-feedback error_agree">
                                       [[+fi.error.agree]]
                                    </div>
                                
                                  </div>
                                  <button type="submit" class="btn btn-priceForm mt-2">Отправить</button>
                                </form>
                                Подскажите, кто уже это настраивал – автор дополнения не отвечает уже неделю…
                                  Иван Кизименко
                                  02 июня 2019, 20:33
                                  0
                                  В модуле есть возможность передавать visitor_uid?

                                  Интересует вот этот функционал: www.amocrm.ru/developers/content/digital_pipeline/site_visit
                                    Воеводский Михаил
                                    02 июня 2019, 21:47
                                    0
                                    Есть. На фронте сделайте все, что описано в документации, а в параметрах для хука и в системной настройке полей сделок укажите данное поле для передачи.
                                      Иван Бочкарев
                                      02 декабря 2019, 01:43
                                      +1
                                      <script>
                                        window.AMOPIXEL_IDENTIFIER_PARAMS = window.AMOPIXEL_IDENTIFIER_PARAMS || {};
                                        window.AMOPIXEL_IDENTIFIER_PARAMS.onload = function (pixel_identifier) {
                                          var visitor_uid = pixel_identifier.getVisitorUid(); // Получаем visitor_uid
                                          // console.log ( 'visitor_uid' , visitor_uid) ;
                                          if (visitor_uid) {
                                            // Записываем его в скрытое поле формы 'visitor_uid'
                                            $(document).ready(function () {
                                              $('form input[name = "visitor_uid"]').val(visitor_uid);
                                            });
                                          }
                                        };
                                      </script>
                                      Александр
                                      19 июля 2019, 20:36
                                      0
                                      Добрый день, подскажите может ли компонент добавлять товары в сделку из каталога амо? не текстовым полем, а поиск по артикулу и добавление товаров из каталога, который есть в амо црм.
                                        Воеводский Михаил
                                        20 июля 2019, 02:43
                                        0
                                        Такой возможности нет. В стандартном варианте amoCRM товары отсутствуют. Возможно, в Вашем аккаунте установлены виджеты, добавляющие каталог товаров. Если так, напишите на почту, обсудим доработку под Ваш сайт.
                                        Игорь Ткачук
                                        08 ноября 2019, 08:08
                                        0
                                        Добрый день. Я интегратор amocrm и хочу узнать вот, что. Я сейчас ставлю СРМ-ку клиенту, у них сайт на modx, вот результат из builtwith builtwith.com/sakurasimferopol.ru.
                                        Подойдёт ли данный модуль интеграции с этим сайтом? sakurasimferopol.ru. Спасибо
                                          Иван Бочкарев
                                          02 декабря 2019, 01:32
                                          +1
                                          Возможно кому то пригодится.

                                          Вместе с передачей необходимых полей нужно было передавать UTM метки, а также client ID Yandex метрики и GA.

                                          Пишу как реализовал:

                                          В наши формы добавляем скрытые поля:

                                          <input type="hidden" name="client_id_yandex" value="">
                                          <input type="hidden" name="client_id_google" value="">
                                          <input type="hidden" name="utm_source" value="">
                                          <input type="hidden" name="utm_medium" value="">
                                          <input type="hidden" name="utm_content" value="">
                                          <input type="hidden" name="utm_term" value="">
                                          <input type="hidden" name="utm_campaign" value="">
                                          В код вызова AjaxForm в параметр amoCRMmodxAmoFieldsEq добавляем соответствие полей:

                                          'amoCRMmodxAmoFieldsEq' => 'phone||email||amocrm_link==XXXXXXX||amocrm_name==XXXXXXX||amocrm_form==XXXXXXX||amocrm_nameform==XXXXXXX||amocrm__subtitle==XXXXXXX||client_id_yandex==v||client_id_google==XXXXXXX||utm_source==XXXXXXX||utm_medium==XXXXXXX||utm_content==XXXXXXX||utm_term==XXXXXXX||utm_campaign==XXXXXXX||question==XXXXXXX||visitor_uid==visitor_uid',

                                          Где XXXXXXX — номер поля в AmoCRM.

                                          Далее создаем сниппет utmSnippet — для сохранения значений UTM меток в кукки. Для чего это нужно, а чтобы отслеживать метки не только по ссылке, по которой пришел клиент с рекламы, а также при переходе по другим страницам сайта метки не терялись.

                                          <?php
                                          if (!isset($_COOKIE['utm_source']))
                                          {
                                              $utm_source = $_GET['utm_source'];
                                              setcookie("utm_source", $utm_source, time() + 60 * 60 * 24 * 5);
                                          }
                                          if (!isset($_COOKIE['utm_medium']))
                                          {
                                              $utm_medium = $_GET['utm_medium'];
                                              setcookie("utm_medium", $utm_medium, time() + 60 * 60 * 24 * 5);
                                          }
                                          if (!isset($_COOKIE['utm_content']))
                                          {
                                              $utm_content = $_GET['utm_content'];
                                              setcookie("utm_content", $utm_content, time() + 60 * 60 * 24 * 5);
                                          }
                                          if (!isset($_COOKIE['utm_term']))
                                          {
                                              $utm_term = $_GET['utm_term'];
                                              setcookie("utm_term", $utm_term, time() + 60 * 60 * 24 * 5);
                                          }
                                          if (!isset($_COOKIE['utm_campaign']))
                                          {
                                              $utm_campaign = $_GET['utm_campaign'];
                                              setcookie("utm_campaign", $utm_campaign, time() + 60 * 60 * 24 * 5);
                                          }
                                          Вызываем, в body сниппет

                                          [[!utmSnippet?]]
                                          Переходим к получению, подстановке в скрытые поля и передаче значений UTM меток, client ID в AmoCRM.

                                          Получаем значения Client ID:

                                          $(document).ready(function () {
                                          //GA Client_ID
                                          var clientId = ga.getAll()[0].get('clientId');
                                          $(document).ready(function () {
                                            $('form input[name = "client_id_google"]').val(clientId);
                                          });
                                          
                                          // Yandex.metrica client ID
                                          var clientidym = yaCounterXXXXXXX.getClientID();
                                          $(document).ready(function () {
                                            $('form input[name = "client_id_yandex"]').val(clientidym);
                                          });
                                          }

                                          Для облегчения получения значений UTM меток воспользуемся либой js-cookie

                                          $(document).ready(function () {
                                          var utm_campaign = Cookies.get('utm_campaign');
                                          $(document).ready(function () {
                                            $('form input[name = "utm_campaign"]').val(utm_campaign);
                                          });
                                          
                                          var utm_content = Cookies.get('utm_content');
                                          $(document).ready(function () {
                                            $('form input[name = "utm_content"]').val(utm_content);
                                          });
                                          
                                          var utm_medium = Cookies.get('utm_medium');
                                          $(document).ready(function () {
                                            $('form input[name = "utm_medium"]').val(utm_medium);
                                          });
                                          
                                          var utm_source = Cookies.get('utm_source');
                                          $(document).ready(function () {
                                            $('form input[name = "utm_source"]').val(utm_source);
                                          });
                                          
                                          var utm_term = Cookies.get('utm_term');
                                          $(document).ready(function () {
                                            $('form input[name = "utm_term"]').val(utm_term);
                                          });
                                          }
                                            Воеводский Михаил
                                            02 декабря 2019, 01:37
                                            0
                                            Иван, спасибо!
                                              Иван Бочкарев
                                              03 декабря 2019, 00:40
                                              0
                                              Так как удалить коммент не могу. Вот обновленный код:

                                              Сниппет: utmSnippet

                                              <?php
                                              $cookies = array('utm_source', 'utm_medium', 'utm_content', 'utm_term', 'utm_campaign');
                                              
                                              foreach ($cookies as $key) {
                                                  if (!isset($_COOKIE[$key]))
                                                  {
                                                      $val = $_GET[$key];
                                                      $_COOKIE[$key] = $val;
                                                      setcookie($key, $val, time() + 60 * 60 * 24 * 5);
                                                  }
                                              }
                                              Обновление получения данных из кук и передача в поля:

                                              <script>
                                                //GA Client_ID
                                                ga(function (tracker) {
                                                  var clientId = tracker.get('clientId');
                                                  $('form input[name=client_id_google]').val(clientId);
                                                });
                                              
                                                // Yandex.metrica client ID
                                                ym(XXXXXXXXX, 'getClientID', function (clientID) {
                                                  $('form input[name=client_id_yandex]').val(clientID);
                                                });
                                                
                                                var cookies = ['utm_campaign', 'utm_content', 'utm_medium', 'utm_source', 'utm_term'];
                                                cookies.forEach(function(key) {
                                                  $('form input[name=' + key + ']').val(Cookies.get(key));
                                                });
                                              </script>
                                              Слава
                                              16 октября 2020, 16:12
                                              1
                                              0
                                              Добрый день, подскажите пожалуйста как меняется формат списка товаров, мне нужно выводин некоторые кастомные поля из товара которые добавил. Но никак не могу разобраться где это меняется.

                                              prnt.sc/uy0m24
                                                Слава
                                                14 ноября 2020, 20:15
                                                0
                                                Вообще мертво все по поводу этого компонента?
                                                Купить купил, а извините вопрос возник ноль ответа, ни в поддержке ни тут.
                                                  Николай Савин
                                                  14 ноября 2020, 20:25
                                                  0
                                                  Здравствуйте. Поддержка должна сидеть возле компьютера круглосуточно, отходя только на обед?
                                                  Я видел ваш вопрос в магазине. Отвечу как будет возможность.

                                                  Касательно вашего вопроса здесь. Я вот ни слова не понял из вопроса.
                                                    Слава
                                                    14 ноября 2020, 20:37
                                                    0
                                                    Прошу прощения за возможный флуд во всех местах, но дело совсем не в «должна сидеть возле компьютера круглосуточно», а в том что месяц прошел с момента первого обращения в поддержку (https://prnt.sc/vj63iq), но даже если не понятно было то все же человек ждет ответа, а его не было.
                                                    Буду ждать возможно попробую как-то более понятно обьяснить всю суть проблемы.
                                                    Но большое спасибо за ответ хотя бы тут.
                                                      Иван Бочкарев
                                                      14 ноября 2020, 21:22
                                                      0
                                                      Николай забрал дополнение на поддержку неделю назад. Нужно время для адаптации под новое АПИ
                                                        Слава
                                                        14 ноября 2020, 21:27
                                                        0
                                                        Принял, спасибо, с нетерпением жду.
                                                        Хорошо что вообще к Николаю перешел компонент во владения, ранее был человек другой и он совсем не отвечал ( А тут появился хотя бы фидбек от разработчиков
                                                          Иван Бочкарев
                                                          14 ноября 2020, 21:29
                                                          1
                                                          +1
                                                          Просто Михаил отошел от работы с MODX и попросил найти человека на замену. Что и было сделано.
                                                            Слава
                                                            14 ноября 2020, 21:30
                                                            0
                                                            А сможете пожалуйста сориентировать по срокам когда планируется обновление?
                                                              Николай Савин
                                                              30 ноября 2020, 15:28
                                                              0
                                                              Иван вас вряд ли сможет сориентировать.
                                                              Вообще странно такой вопрос задавать постороннему человеку.
                                                              Обновление будет выпущено по мере свободного времени.
                                                Виталик
                                                30 ноября 2020, 13:26
                                                0
                                                Добрый день. Есть понимание, когда выйдет обновленный пакет для AMO Crm?
                                                клиенты ждут)) уже в следующем году или можно в этом ждать?
                                                  Николай Савин
                                                  30 ноября 2020, 15:29
                                                  0
                                                  Добрый день. По мере свободного времени. Не готов ответить точнее.
                                                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                  81