· 6 min read

Преобразование экспорта vCard в список для массовой проверки номеров

Извлечение записей TEL из vCard в файл по одному номеру на строку с сохранением идентификаторов контактов, меток и исключений для проверки.

Извлечение записей TEL из vCard в файл по одному номеру на строку с сохранением идентификаторов контактов, меток и исключений для проверки.

Чтобы превратить экспорт vCard в список для массовой проверки номеров телефонов, извлеките каждую запись TEL, сохраните ссылку на исходный контакт и нормализуйте номер телефона в отдельный файл с одним номером на строку. Карточка контакта может содержать несколько телефонных полей, поэтому количество входных данных для проверки не обязательно будет равно числу карточек. Сохраняйте связь с исходной карточкой перед дедупликацией или загрузкой каких-либо данных.

→ Познакомьтесь с CheckNumber.AI →

Что представляет собой запись TEL в vCard

vCard specification определяет TEL как свойство телефона внутри карточки контакта. Карточка может содержать несколько свойств TEL с метками или параметрами типа, которые обозначают рабочий, мобильный, домашний или иной номер. Некоторые экспорты представляют значение в виде текста, другие используют формат URI. Имя в карточке служит контекстом контакта, а не частью проверяемого номера. Аналогично, отметка предпочтительного контакта указывает лишь на то, какой номер адресная книга может отображать первым, но не гарантирует действительность предпочтительного номера.

Обычные руководства по CSV часто начинаются уже после того, как контактные данные приведены к плоской структуре. Преобразование vCard сталкивается с проблемой на более раннем этапе: одна карточка может разворачиваться в ноль, одну или множество строк с номерами телефонов. Если команда сохранит только первое значение TEL, она может пропустить нужный рабочий номер. Если же скопировать всю карточку в одну ячейку таблицы, сервис проверки не сможет распознать входные данные в формате «один номер на строку». Этап конвертации должен сохранить как сам номер, так и его связь с карточкой.

Создание таблицы извлечения с сохранением источника

Сохраните исходный экспорт .vcf и создайте рабочую таблицу со стабильным идентификатором карточки, идентификатором вхождения TEL, исходным текстом TEL, отображаемым именем карточки (если оно необходимо для внутренней проверки), меткой типа TEL, определенной страной, нормализованным кандидатом и статусом проверки. Это предлагаемые локальные поля, а не документированные поля загрузки или результатов CheckNumber.AI. Одна карточка с записями TEL для рабочего и мобильного номеров превращается в две строки таблицы с общим идентификатором карточки, но отдельными идентификаторами вхождений.

По возможности используйте парсер с поддержкой vCard. Формат включает правила экранирования и переноса строк; простое разделение по символу новой строки может повредить длинные свойства. Сохраняйте исходное значение TEL рядом с распарсенным значением, чтобы проверяющий специалист мог отличить ошибку парсинга от некорректной исходной записи. Если значение TEL представляет собой URI tel:, обработайте его нотацию URI в локальном парсере и сохраните исходное значение для аудита. Не предполагайте, что исходная адресная книга использовала единую страну или сохраняла каждый номер в международном формате.

Нормализация кандидатов и изолирование сомнительных записей

Для каждого вхождения TEL определите, достаточно ли контекста страны для формирования международного номера телефона. Для местного номера без телефонного кода страны может потребоваться страна, связанная с контактом или исходной системой; одного языка контакта недостаточно. Не угадывайте страну по знакомому префиксу и не подгоняйте номер под корректный вид искусственно. Помещайте неполные значения, добавочные номера, сервисные коды и неоднозначные записи в очередь на проверку. Если номер содержит добавочный номер АТС, сохраните его в таблице соответствий и передавайте на проверку только публичный базовый номер, если такое разделение поддерживается источником.

ITU E.164 numbering plan задает структуру международных номеров. Для массовой обработки в CheckNumber.AI файлы со списками телефонов должны содержать одну страну на файл и по одному номеру на строку с кодом страны; знак плюс можно опускать. Создайте отдельный файл только с номерами для каждой страны. Карточка, содержащая номера двух стран, может добавить по одной записи в каждый файл, оставаясь единой карточкой в исходной таблице соответствий. Никогда не добавляйте имена контактов, метки TEL или идентификаторы в строки, предназначенные только для номеров.

Дедупликация входных данных без объединения контактов

Несколько карточек контактов могут ссылаться на один и тот же коммутатор компании или семейный номер. Нормализуйте значения-кандидаты, затем постройте сопоставление каждого уникального проверяемого номера со всеми идентификаторами вхождений TEL, из которых он был получен. Это помогает сократить избыточные проверки, однако исходные строки должны оставаться разделенными. Дублирующийся номер не доказывает, что карточки принадлежат одному и тому же человеку. Точно так же наличие двух номеров в одной карточке не означает, что эти номера имеют одинаковые сигналы действительности или активности.

Перед загрузкой сравните количество данных на каждом этапе: обработанные карточки, извлеченные свойства TEL, записи, требующие проверки, нормализованные кандидаты и подготовленные уникальные номера. Проанализируйте любое неожиданное уменьшение количества записей. Выборочно проверьте карточки с несколькими значениями TEL и убедитесь, что им соответствует несколько строк в таблице соответствий. Проверьте несколько записей от начала до конца: исходное свойство vCard, локальный нормализованный кандидат, строка для загрузки и ключ сопоставления. Это дает гораздо больше информации, чем простая проверка того, открывается ли файл CSV или TXT.

Проверка и повторное объединение результатов

Выберите документированный продукт для массовой проверки телефонных номеров, который отвечает на задачу команды; CheckNumber.AI’s product catalog разграничивает различные сигналы проверки. Результат проверки формата или действительности, сигнал регистрации на платформе и сигнал активности имеют разное значение. Не рассматривайте один сигнал как доказательство другого и не делайте на их основе выводов о принадлежности контакта. Сохраняйте дату проверки и выбранный продукт вместе с локальным результатом.

После экспорта результатов сопоставьте проверенный номер с нормализованным ключом в таблице извлечения, а затем перенесите эту связь обратно на каждое вхождение TEL и карточку. Не полагайтесь на порядок строк в файле и не предполагайте, что каждая строка загрузки сформировала идентичную строку результата. Проанализируйте несопоставленные, дублирующиеся или сомнительные результаты перед обновлением адресной книги или CRM. Сохраняйте исходную метку TEL, чтобы команда могла понять, относится ли результат к рабочему или мобильному номеру. Затем в рамках пользовательской проверки можно решить, пометить, исправить или сохранить каждое значение контакта. Сервис проверки предоставляет сигнал на уровне номера; сверка и сопоставление с карточками контактов остаются задачей команды.

Часто задаваемые вопросы

Как командам обрабатывать несколько записей TEL в одной vCard?

Разверните каждое свойство TEL в отдельную локальную строку с собственным идентификатором вхождения, сохранив исходный идентификатор карточки. Подготовьте каждый подходящий номер как отдельный элемент входных данных для проверки.

Следует ли удалять дублирующиеся номера в разных карточках?

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

Что делать, если в записи TEL нет кода страны?

Используйте надежный контекст источника для определения страны или отправьте запись на проверку вручную. Не угадывайте страну только для того, чтобы значение прошло проверку формата.

Может ли проверка номера подтвердить имя в vCard?

Нет. Сигнал проверки на уровне номера не подтверждает личность владельца карточки или актуальную связь между номером и указанным контактом.