Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

При создании заказа переписываются старые контакты #515

Open
panromario opened this issue Jun 6, 2023 · 8 comments

Comments

@panromario
Copy link

Добрый день!

Обнаружили проблему. При создании заказа у нас происходит поиск контакта по номеру телефона, и если найден такой – обновляется и прикрепляется к заказу, если не найден – добавляется и прикрепляется к заказу. Последнее время замечаем, что в логах появляются записи типа: Поле телефон изменен..... Имя изменено.. Выяснили, что на старый контакт был уже заказ ранее. И номер телефона там был другой, не тот, по которому производился поиск.
Прошу помощи. Возможно я не правильно делаю?
Конструкция с $contact->setId($contactId); выбрана т.к. возникала ошибка 400 при изменении контакта если ответственный удален. Ранее описывал тут #502


// Получим контакт по номеру телефона 
        $contactFilter = (new ContactsFilter())->setQuery($this->params['props']['phone']);

        try {
            $contactId = $this->client->contacts()->get($contactFilter)->current()->getId();
            $contact = new ContactModel();
            $contact->setId($contactId);
        } catch (AmoCRMApiException $e) {
            $contact = new ContactModel();
        }
        $contact->setName($this->params['props']['name']);
        $contact->setCustomFieldsValues($customFields);

        //Сохраним контакт
        try {
            if ($contact->getId()) {
                $this->contact = $this->client->contacts()->updateOne($contact);
            } else {
                $this->contact = $this->client->contacts()->addOne($contact);
            }
        } catch (AmoCRMApiException $e) {
            $this->contact = null;
        }
@PoMaH4yK
Copy link

PoMaH4yK commented Jun 7, 2023

Вы хотите искать по номеру телефона, но ищете по всем полям через setQuery().
Пробегитесь по результатам поиска и проверьте номер телефона.
Также следует обрабатывать AmoCRMApiNoContentException, а не AmoCRMApiException, иначе возможно появление дубля если ошибка не связана с отсутствием результатов.

@panromario
Copy link
Author

Спасибо! Я похоже понял в чем дело. Но мне не понятно, даже если я ищу по всем полям и номер телефона к примеру (прям вот запрос такой): +7 (702) 000 22 11 Поиск выдает несколько контактов. При этом номер совпадает только с одним из них. Он получается ищет и по 000 и по 22 и по 11 и +7 (702) ? И отдает массив контактов где это встречается?

@PoMaH4yK
Copy link

PoMaH4yK commented Jun 7, 2023

Пробелы и спецсимволы воспринимаются как пробелы и амо ищет по отдельным строкам.
Попробуйте искать контакт по 10 последним цифрам телефона. Например 9603256565

@panromario
Copy link
Author

Роман, спасибо за ответы. Вы очень помогли!

@panromario
Copy link
Author

panromario commented Jun 8, 2023

@PoMaH4yK А есть ли возможность поиска только по определенному полю (в данном случае PHONE)? И указать строку с пробелами, так чтоб было полное совпадение (с учетом пробелов), иначе ошибка.

@PoMaH4yK
Copy link

Вам лучше проконсультироваться у техподдержки аккаунта амо, либо почитать документацию. API получало обновления, с которыми я плотно не знакомился. Мне кажется, пока никак не реализовать подобный поиск. По сделкам только была beta-версия фильтра по полям.

@makeroi
Copy link
Contributor

makeroi commented Jul 17, 2023

@panromario потенциально есть, но на основе приватного апи или платной фильтрации. Сами используем приватное апи в реализации

@panromario
Copy link
Author

Благодарю за ответ. Решение уже работает) Используем стандартное апи с некоторыми доработками и проверками.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants