Заметки
Поиск контакта по телефону через crm.duplicate.findbycomm
Перед созданием контакта полезно найти существующего по телефону. Для этого есть crm.duplicate.findbycomm. Он возвращает ID совпадений; сами карточки затем получают отдельным запросом.
Тело запроса ниже ищет только контакты. Номер вымышленный, замените его своим значением:
{
"entity_type": "CONTACT",
"type": "PHONE",
"values": ["+12025550107"]
} ID находятся в result.CONTACT. Для загрузки найденных контактов можно вызвать crm.item.list с entityTypeId: 3 и фильтром @id, передав массив ID.
Где заканчивается такой поиск
Не стоит считать этот метод поиском по произвольному фрагменту номера или обещать совпадение всех вариантов записи. Официальный сценарий отдельно оговаривает формат телефона. Приводите номера к согласованному виду при сохранении и поиске. Правило «взять последние десять цифр и приписать 7» портит международные номера.
В values можно передать максимум 20 значений. Есть и другая особенность: если не указать entity_type и в одном типе сущностей найдётся 20 или больше дублей, следующие типы могут не попасть в ответ. Поэтому для поиска контакта лучше явно указывать CONTACT.
Такой поиск помогает выбрать существующую карточку. Он сам не объединяет дубли и не выбирает, какой из нескольких контактов считать правильным.
Документация: crm.duplicate.findbycomm; Поиск по телефону и email.