Отправляем данные из форм в AmoCrm

Поступил мне заказ от человека на отправку данных форм в AmoCrm и после небольших обсуждений как лучше поступить: купить пакет или разбираться самому вынесли совместно решение купить пакет amocrm на modstore так как все пакеты, конечно же, сделаны для того чтобы быстрее внедрить в жизнь определенные решения.

Пакет заказчик купил, я сделал на нем определенные простейшие вещи, но застрял на подключении доп полей по id-шникам в amocrm и создании события к сделке, о чем я попросил заказчика задать вопрос, так как он покупал пакет на свой аккаунт, и вот спустя 5 дней после обращения и неполучения до сих пор ответа выходит моя заметка.

Первое, что надо понять — это то, что без знания хотя бы основ самой AmoCrm, названий полей, порядка действий ничего сделать у вас не получится в принципе, ни с пакетом ни без него, поэтому, если вы не сталкивались с AmoCrm, то надо потратить пару часов и просто понять основы работы в AmoCrm, просто как менеджеру, как добавлять поля, сделки и контакты, как они отображаются, как их удалить или редактировать, и после этого можно переходить к работе с Api AmoCrm

Итак, отправляем данные из форм в Амо:

Собственно все описано здесь — youtube.com/watch?v=UMFDtkzFpnw&t=618s
и вот библиотека, которая нам нужна — github.com/dotzero/amocrm-php

Единственная сложность, которая может возникнуть у многих — это скачать библиотеку с гитхаба через composer подключить ее к проекту. И чтобы вы не парились по этому поводу даю ссылку на уже скачанный проект ( test.sgusch1.beget.tech/files/amocrm.tar ) — качаете выкладываете папку «amocrm/все файлы» в корень, ну или куда вы там хотите, можете в core, главное потом правильно подключить, здесь я расскажу из корня.

Далее вызываем самые обычные наши формы, например

[[!AjaxForm?
        &snippet=`FormIt`
        &form=`treedeForm`
        &hooks=`amo,email`
        &emailTpl = `treedeEmailTpl`
        &emailSubject=`Запрос на расчет стоимости`
        &emailTo=`[[#2.admin_mail]]`
        &validate=`name:required:minLength=^2^`
        &emailFrom = `XXXX`
        &emailFromName = `XXXX`
        &validationErrorMessage=`В форме содержатся ошибки!`
        &successMessage=`Сообщение успешно отправлено`
    ]]
Поля типа XXXX естественно меняются на свои.
И здесь обращаем внимание на хук amo — он и будет делать всю работу.

В хуке amo мы первым делом подключаем нашу библиотеку, а дальше… у нас полный набор функций для работы с api AmoCrm, все есть на гитхабе, и примеры и документация, вот пример одного из моих хуков, в котором создается сделка + создается контакт + они связываются + заполняются различные поля + создается событие к сделке в виде примечания, туда поступает комментарий и наименование товара

<?php
require_once $_SERVER['DOCUMENT_ROOT'] .("/amocrm/vendor/autoload.php");
    
    $subdomain = 'XXXX';
    $login = 'XXXXX';
    $api_key = 'XXXXX';
    
    // получаем данные из формы
    $name = $hook->getValue("name");
    $tags = $hook->getValue("tags");
    $model = $hook->getValue("model");
    $city = $hook->getValue("city");
    $phone = $hook->getValue("phone");
    $email = $hook->getValue("email");
    $comment = $hook->getValue("comment");
    $model_number = $hook->getValue("model_number");
    $modnum = $hook->getValue("modnum");
    $price = $hook->getValue("price");
    $saloon = $hook->getValue("saloon");
    if($saloon == 1){
        $salon=true;
    }
    
try{
    $amo = new \AmoCRM\Client($subdomain, $login, $api_key);
    
    // регистрируем события сделки и заполняем поля сделки
    $lead = $amo->lead; 
    $lead['name'] = $name;
    $lead['price'] = $price;
    $lead['responsible_user_id'] = 374842;
    $lead['tags'] = $tags;
    $lead['pipeline_id'] = 1938876;
    $lead->addCustomField(1784764, $model);
    $lead->addCustomField(1801364, $city);
    $lead->addCustomField(1675857, $modnum); 

    if($salon){
        $lead->addCustomField(1784224, [
            [4176514], // выбор из выпадающего списка
        ]);
    }
    $id = $lead->apiAdd(); // добавляем сделку
    
    
    // добавляем контакт
    $contact = $amo->contact;
    
    $contact["name"] = $name;
    $contact["phone"] = $phone;
    $contact['linked_leads_id'] = [(int)$id]; // по этому параметру связывается сделка и контакт
    $contact->addCustomField(1666265, $phone, 'WORK');
    $contact->addCustomField(1666267, $email, 'WORK');
    $contact['responsible_user_id'] = 374842;
    
    $id = $contact->apiAdd(); // добавили контакт
    
    // примечание
    $note = $amo->note;
    $note['element_id'] = $id;
    $note['element_type'] = 1;//\AmoCRM\Models\Note::TYPE_CONTACT; // 1 - contact, 2 - lead
    $note['note_type'] = 4; // \AmoCRM\Models\Note::COMMON @see https://developers.amocrm.ru/rest_api/notes_type.php
    if(!empty($model_number)){
        $mnum = " <br /><strong>Вариант комплектации: </strong>".$model_number;
    }else{
        $mnum="";
    }
    $note['text'] = $comment.$mnum;
    $id = $note->apiAdd(); // добавили примечание
    
    
}catch (\AmoCRM\Exception $e) {
    printf('Error (%d): %s', $e->getCode(), $e->getMessage());
}
Пользуйтесь на здоровье.
Гущин Сергей
22 сентября 2019, 00:15
modx.pro
4
350
+4
Поблагодарить автора Отправить деньги

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

Николай Савин
22 сентября 2019, 11:59
+1
А почему вы задаете вопрос магазину здесь, а не в самом магазине? Это же разные проекты.
    Гущин Сергей
    22 сентября 2019, 12:21
    0
    Думаете совсем разные?
    Я задаю вопрос сюда, потому что вот есть тема где магазин отвечает на такой же вопрос, по этому же пакету и этому же разработчику modx.pro/help/17167

    А вообще действительно, завтра скажу клиенту чтобы написал вопрос на email магазина.
      srs
      srs
      22 сентября 2019, 18:01
      0
      Вы конечно большой молодец, спору нет.
      Я задаю вопрос сюда, потому что вот есть тема где магазин отвечает на такой же вопрос
      Ну вот, да. В этой теме отвечаю на этот вопрос, магазин без проблем предлагает вернуть деньги. Вы наверняка все комментарии там прочитали, просто решили лишний раз «уколоть» магазин или разработчика. Ну да ладно -) у каждого свои тараканы в голове.
        Гущин Сергей
        22 сентября 2019, 18:16
        0
        То есть вы считаете, что основанием поста и проделанной работы послужил указанный пост?
        К магазину-то какие претензии?
        Действительно, у каждого свои тараканы.
          srs
          srs
          22 сентября 2019, 21:02
          0
          Нет! Просто мне последняя часть данного поста показалось немного лишней. Но вы художник — вам видней.
            Гущин Сергей
            22 сентября 2019, 21:07
            +1
            Соглашусь с вами и уберу эту часть, по причине «не несет отношения к инструкции»
    Кирилл
    23 сентября 2019, 13:56
    0
    Можно использовать
    $allFormFields = $hook->getValues();
    для получения всех значений, это сократит код. Так же, не особо понятно, что вот это такое и для чего:
    if($saloon == 1){
            $salon=true;
        }
      Иван Кизименко
      24 сентября 2019, 14:11
      0
      Использую данный компонент на нескольких проектах. Никаких проблем с подключением доп. полей не наблюдал.
      Создания примечания не хватает конечно. Но можно опять же для этого Доп поле использовать.

      'hooks' => 'amoCRMAddContact'
      'amoCRMmodxAmoFieldsEq'=>'phone==phone||email==email||visitor_uid==visitor_uid||utm_source==utm_source'
      Плюсом в компоненте реализована передача visitor_uid, которая позволяет самой AmoCRM отслеживать повторное посещение сайта пользователем и через диджитал воронку настраивать дополнительную логику.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8