режиме хука для Formit - ajaxform.
Проблема - не создается контакт в amo, телефон пишется в доп полях.
Создается на сколько я понял, только когда авторизован в modx.
Поковырял исходники. Там вроде как контакт создается на событие - OnUserFormSave (создание, обновление юзера).
Мне надо бы для анонимов сделать. Кто сталкивался?
Покажи вызов ajaxForm
их много. Ну например вот {'!AjaxForm' | snippet : [ 'frontend_css' => '', 'hooks' => 'nospam,email,FormItSaveForm,amoCRMAddContact', 'formName' => 'Форма санатория', 'formFields' => 'phone,name,categories,arrival_date,departure_date,count,email', 'fieldNames' => ' phone==Телефон, name==Имя, categories==Категории номера, arrival_date==Дата прибытия, departure_date==Дата отбытия, count==Кол-во человек, email==E-mail, ', 'form' => '@FILE chunks/forms/sanatorium.tpl', 'amoCRMmodxAmoFieldsEq' => 'phone||email||name||categories==1081063||arrival_date==1080875||departure_date==1080877||count==1080293||url==1080301||istochnic==1081083', 'emailTpl' => '@FILE chunks/tpls/formit/email.tpl', 'emailSubject' => 'Новая заявка с сайта', 'emailTo' => 'emailTo' | config, 'emailFrom' => 'emailFrom' | config, 'emailFromName' => 'Санатории КМВ', 'validate' => 'phone:required', 'validationErrorMessage' => 'Форма не отправлена, пожалуйста, проверьте заполненные поля.' ]}
Заполнено верно. Не так давно еще кто-то писал о такой же проблеме. Возможно механизм самого AMO изменился.
ВОт код создания контакта //Если контакт в базе AMO не найден добавляю новый. Иначе обновляю //TODO Разделить на разные методы if (empty($amoUserId)) { unset($contact['id']); //Добавляю новый контакт $response = $this->tools->invokeEvent('amocrmOnBeforeUserSend', [ 'contact' => $contact, 'action' => 'add', 'modUserId' => $modUserId, 'amoUserId' => $amoUserId, 'amoCRM' => $this, ]); $contact = array_merge($contact, $response['data']['contact']); $data = [$contact]; $result = $this->tools->sendRequest('/api/v4/contacts', $data, 'POST'); $contactData = $result['_embedded']['contacts'][0]; if (isset($contactData['id'])) { $amoUserId = $contactData['id']; if ($modUserId) { $this->setUserId($modUserId, $amoUserId); } } $this->tools->invokeEvent('amocrmOnUserSend', [ 'contact' => $contact, 'action' => 'add', 'modUserId' => $modUserId, 'amoUserID' => $amoUserId, 'amoCRM' => $this, 'amoCRMResponse' => $result, ]); return $amoUserId; } Надо попробовать подебажить его наверное
Для начала. Во-первых событие регистрации пользователя в данном случае не при чем. Инициация передачи контакта в CRM происходит из хука Во вторых для решения проблемы нужно расставить логи и посмотреть где теряются данные. Регистрацией клиента занимается класс amocrm/controllers/contacts.php Открыть метод prepareContact() и в нем по ходу процесса расставить логи. Затем то же самое в методе addContact()
О. Спасибо, уже что то! Попробую
Т.е получается вот этот код из хука не работает?
а. это как раз файл contacts.php
Это код не из хука. А из класса компонента. Я не знаю, я не работаю с АМО. Он работал точно. Возможно какие то механизмы изменились. Говорю же расставь логи и посмотри на каком шаге теряются данные
Обсуждают сегодня