[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
3
6 435
+15

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

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
                  Здравствуй, Дедушка Мороз, борода из ваты! Ты подарки нам принёс?!
      Sem
      Sem
      20 декабря 2016, 09:01
      +2
      Ждём с нетерпением интеграции с Битрикс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
              +1
              Работает как хук 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
                                    Есть. На фронте сделайте все, что описано в документации, а в параметрах для хука и в системной настройке полей сделок укажите данное поле для передачи.
                                    Александр
                                    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. Спасибо
                                        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                        66