Чтобы извлечь контакты из MySQL SSW, необходимо подключится к ней, выбрать БД ecss_address_book и выполнить следующий запрос:Развернуть исходный код
SELECT
'external_id',
'full_name',
'first_name',
'middle_name',
'last_name',
'org',
'title',
'description',
'avatar_path',
'source',
'emails',
'phone_numbers',
'phone_description',
'phone_types'
UNION ALL
SELECT
contact.uuid,
contact.contact_name,
contact.first_name,
contact.middle_name,
contact.last_name,
contact.company,
contact.position,
contact.description,
contact.photo,
source.domain,
IFNULL((SELECT GROUP_CONCAT(DISTINCT email.email ORDER BY email.email SEPARATOR ',') FROM email WHERE email.contact_id = contact.id), ''),
IFNULL((SELECT GROUP_CONCAT(DISTINCT phone.digits ORDER BY phone.digits SEPARATOR ',') FROM phone WHERE phone.contact_id = contact.id), ''),
IFNULL((SELECT GROUP_CONCAT(DISTINCT phone.description ORDER BY phone.description SEPARATOR ',') FROM phone WHERE phone.contact_id = contact.id), ''),
IFNULL((SELECT GROUP_CONCAT(DISTINCT label.name ORDER BY label.name SEPARATOR ',') FROM label INNER JOIN phone ON label.id = phone.label_id WHERE phone.contact_id = contact.id), '')
INTO OUTFILE '/var/lib/mysql-files/your_file.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM contact
LEFT JOIN source ON source.id = contact.source_id
GROUP BY contact.id;
Название CSV файла не должно содержать кириллические символы и точки. Также файл должен иметь расширение .csv.
Чтобы сервис мог увидеть данный файл, необходимо поместить его по следующему пути:
Имя файла влияет на источник контакта. Например, для файла с именем valid_format.csv, источник (source) будет указан как csv.valid_format. В имени файла допускаются только латинские буквы и цифры, все остальные символы заменяются на нижнее подчеркивание.
Заполните значения полей в соответствии с вашей инфраструктурой и соблюдая структуру YAML:
sources: #Здесь задаются источники откуда брать данные
csv:
base_ou: "Имя компании"
# ============================
# ОБЩИЕ НАСТРОЙКИ
# ============================
additional_import_settings:
common:
include_incompletely_filled_contacts: false # | true - если выключена, при импорте будут отброшены все контакты, у которых отсутствуют обязательные поля
full_name_parsing:
enabled: false
pattern: "LFM" # L - last_name, M - middle_name, F - first_name
fallback_enabled: true # если не удалось распарсить - класть всё в fallback_field
fallback_field: "middle_name" # middle_name | first_name | last_name; по умолчанию middle_name
csv:
ignore_data: ["\\N", ""]
Важно:
Множественный импорт для csv не поддерживается.
2. При необходимости поменяйте настройки маппинга, указав в секции mappers:
# ============================
# КОНФИГУРАЦИЯ МАППИНГА
# ============================
# Конфигурация мапперов для трансформации данных из внешних источников в структуру контакта Address Book
#
# Доступные поля контакта: domain, external_id, birthday, common_name, first_name,
# last_name, middle_name, nickname, org, title, full_name, position, gender, avatar, addresses, emails, messengers,
# phones, additional_info
#
# Структура маппера:
# <источник>:
# <поле_контакта>: [<путь_к_данным_в_источнике>, <тип_данных>]
# <поле_контакта>: [[<вложенный_путь>, <тип_данных>]]
# additional_info:
# <подполе>: [<путь_к_данным>, <тип_данных>]
#
# Поддерживаемые типы данных:
# - string: строковые значения
# - url: тип аватара; означает, что аватар хранится в виде пути
# - jpeg: тип аватара; бинарные данные изображений
# - email: адреса электронной почты
# - phone: номера телефонов
# - date: даты
#
# Особенности:
# - Поле 'kind' автоматически устанавливается сервисом ('contact' или 'group')
# - Поле 'additional_info' поддерживает только одноуровневую вложенность
# - Вложенные структуры в 'additional_info' отбрасываются с записью в лог
# - Для полей emails, phones, avatar поддерживается множественное отображение
mappers:
csv:
external_id: ["external_id", "string"]
full_name: ["full_name", "string"]
first_name: ["first_name", "string"]
middle_name: ["middle_name", "string"]
last_name: ["last_name", "string"]
org: ["org", "string"]
title: ["title", "string"]
avatar: ["avatar_path", "url"]
source: ["source", "string"]
emails: ["emails", ["email", "work"]]
phones: ["phone_numbers", ["phone", "work"]]
3. Подключитесь к docker-контейнеру сервиса Address Book: