3itech
Общая информация
Примечание
Интеграция с данным сервисом работает в связке с другими интеграциями.
Сервис 3itech берет необходимые файлы прослушки, cdr-записи и прочее, и забирает оттуда указанные переменные для работы с ними.
Чтобы успешно использовать интеграцию необходимо уметь самостоятельно настраивать шаблон на Jinja2, который превращает данные звонка в итоговый TXT/XML/JSON файл для выгрузки в 3iTech.
Выберите способ доставки файлов. Задайте минимальное время биллинга для отправки. Выберите когда производить отправку и статус.
Укажите хост, порт и путь до размещения файлов на сервере, а также имя пользователя и и пароль для передачи. Нажмите кнопку
Ниже с помощью кнопки
Затем заполните шаблон метаданнах в удобном формате (TXT, XML, JSON) с сопоставлением тех полей, которые Вам необходимо передавать.
После настройки интеграции нажмите кнопку для сохранения данных. Кнопка удаляет интеграци. Кнопка сбрасывает все введенные изменения и переводит на основную страницу раздела.
Доступные данные в шаблоне
CDR (основные данные звонка)
cdr.uniqueid |
|
cdr.dt_iso |
Дата/время начала в ISO |
cdr.link |
Ссылка на запись |
cdr.src / cdr.dst |
|
cdr.direction |
Направление |
cdr.duration |
|
cdr.billsec |
|
cdr.hangup_initiator |
Инициатор завершения |
cdr.user_vars |
Пользовательские переменные |
cdr.dpe_vars |
Переменные обработчиков |
cdr.ig_call_session_data |
Данные межинтеграционного контекста (если есть) |
Прочие верхнеуровневые переменные
talks |
Список участников (агенты/клиент) с временными интервалами |
holds |
Список удержаний |
related |
Список связанных вызовов |
extra_data |
Внешние данные, переданные в интеграцию |
domain_user_id, user_id, user_uid, user_full_name |
Данные оператора |
client_phone_number |
Номер клиента |
startDate, endDate, startRecordDate |
Временные маркеры |
operatorChannel |
Канал оператора в логике интеграции |
hangup_initiator |
Строковое значение для шаблона (Agent/Client) |
Пример базового XML-шаблона
<?xml version="1.0" encoding="UTF-8"?>
<analysisTask cc-task="{{ cdr.uniqueid }}">
<timestamp>{{ cdr.dt_iso }}</timestamp>
<filename>{{ cdr.link }}</filename>
<talks>
{% for talk in talks %}
{% if talk.type == "a" %}
<talk
channel="{{ talk.channel }}"
ccAgentID="{{ talk.phone_number }}"
on="{{ talk.on }}"
off="{{ talk.off }}"
type="a"
name="{{ talk.name|default('')|e }}"
login="{{ talk.login|default('')|e }}">
{% for hold in holds %}
{% if hold.on >= talk.on and hold.on <= talk.off and hold.uid == talk.phone_number %}
<hold on="{{ hold.on }}" off="{{ hold.off }}"/>
{% endif %}
{% endfor %}
{% for rel in related %}
{% if rel.on >= talk.on and rel.on <= talk.off and rel.src == talk.phone_number %}
<relate on="{{ rel.on }}" off="{{ rel.off }}"/>
{% endif %}
{% endfor %}
</talk>
{% else %}
<talk
channel="{{ talk.channel }}"
ccAgentID="{{ talk.phone_number }}"
on="{{ talk.on }}"
off="{{ talk.off }}"
type="c" />
{% endif %}
{% endfor %}
</talks>
<metadata
recs="{{ cdr.duration }}"
bils="{{ cdr.billsec }}"
direction="{{ cdr.direction }}"
disconnect="{{ cdr.hangup_initiator }}" />
</analysisTask>
Безопасный стиль шаблонов
Рекомендуется использовать:
|default(„“) для необязательных полей;
|e для строк, которые могут содержать спецсимволы;
проверку массивов перед доступом по индексу;
явное разделение логики для inbound и outbound, если формат 3iTech требует разного тайминга.
Пример безопасной проверки CRM-данных:
{% if cdr.get("ig_call_session_data", [])|length > 0
and cdr.ig_call_session_data[0].data.main_crm_entity is not none %}
client_id="{{ cdr.ig_call_session_data[0].data.main_crm_entity.extra_data.NrbClientSiteCode|default('') }}"
client_name="{{ cdr.ig_call_session_data[0].data.main_crm_entity.name|default('')|e }}"
{% endif %}
Частые ошибки при рисовании шаблонов
Ошибка синтаксиса Jinja ({% if %}, {% for %}, {% endif %} не закрыты).
Доступ к отсутствующему полю без default.
Несоответствие логики related: ожидание, что это «время агента», а не связанного вызова.
Жесткая привязка к одному направлению звонка без ветки if cdr.direction.
Невалидный XML из-за неэкранированных символов.
Как проверять перед запуском в прод
Минимальный чеклист:
1 входящий и 1 исходящий звонок проверены;
есть кейс с удержанием (hold) и кейс без удержания;
есть кейс со связанным вызовом (relate) и без него;
итоговый файл проходит XML/JSON валидацию;
3iTech принимает файл без ошибок.
Полезные шаблонные фрагменты
Пустое значение вместо None
{{ talk.department|default('') }}
Условный атрибут
{% if talk.login %}
login="{{ talk.login|e }}"
{% endif %}
Фильтрация элементов по диапазону времени
{% if item.on >= talk.on and item.on <= talk.off %}
...
{% endif %}
Рекомендации по сопровождению
Версионируйте шаблоны (храните копии с датой изменения).
Изменяйте по одному блоку и проверяйте на тестовых звонках.
Если меняете логику relate, согласуйте с аналитиками 3iTech ожидаемую семантику.
Для сложных шаблонов держите отдельный «эталонный» пример входящего и исходящего XML.