[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
3
4 793
+15

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

Hiddenski
17 декабря 2016, 16:28
0
Из любой формы обратной связи создает контакт
На днях просили фичу: если письмо отправлено через AjaxForm (или FormIt) то создается отдельный контакт в CRM. Можно будет сделать такое через ваш модуль?
Алексей Бгатов
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>
Подскажите, кто уже это настраивал – автор дополнения не отвечает уже неделю…