# Бонусы (/bonusy) Для тех, кто дочитал инструкцию до конца, у нас есть бонусы: * itgro5gb – добавляет на диск +5Гб свободного места (на 12 месяцев). Промокод активируется там же, где активируются купоны. # Change log (новые версии) itgrix_amo (/changelog-amo) Подписывайтесь на канал в Telegram [Itgrix\_news](https://t.me/itgrix_news), где публикуются изменения Itgrix. ## Версии [#versii] | Версия (новый функционал) | Тип | Актуальный релиз (патч) | | ----------------------------------- | -------------- | ------------------------------------------------- | | [3.1](/changelog-amo#id-3.1.0).\* | Актуальная | [3.1.9](/changelog-amo#id-3.1.9) - 23.06.2026 | | [3.0](/changelog-amo#id-3.0.0).\* | Поддерживается | [3.0.16](/changelog-amo#id-3.0.16) - 03.02.2026 | | [2.13](/changelog-amo#id-2.13.0).\* | Поддерживается | [2.13.16](/changelog-amo#id-2.13.16) - 16.02.2026 | Версии обозначаются тремя числами `X.Y.Z`: * `X` - мажорная версия, крупные изменения с нарушением совместимости * `Y` - минорная версия, новый функционал и доработка старого * `Z` - патч, исправления ошибок Последние 3 минорные версии обновляются патчами. Актуальная минорная версия содержит самый новый функционал и все применимые исправления. Поддерживаемые версии получают только совместимые с ними исправления. Обновиться на версию `X.Y.Z`: `/opt/itgrix_amo/update.sh --version=X.Y.Z` ## Лог изменений [#log-izmenenii] Версии упорядочены по дате релиза. ### 3.1.9 [#id-3.1.9] > 23.06.2026 **Админка** * В админку добавлены альтернативные ссылки на документацию * Исправлено отображение настройки использования Click-to-Call сервера в админке * На странице состояния добавлены подробные сообщения об отсутствии необходимых прав пользователя AMI **Исправлены ошибки** * Исправлено ошибочное изменение типа звонка при некорректном расположении номеров в событии завершения звонка * Исправлены ошибки без детального описания в состоянии приложения (наблюдалось с версии [3.1.5](/changelog-amo#id-3.1.5)) * Исправлен парсинг кастомных полей CRM для типа поля "файл" * В статистику ошибок включены ошибки кастомизатора * В вывод `/status` добавлено состояние парсера телефонов ### 3.1.8 [#id-3.1.8] > 29.04.2026 **Исправлены ошибки** * Исправлено редкое нарушение порядка обработки событий дозвона и ответа на C2C звонках (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлена ошибка кастомизации номеров телефонов на звонках, которые инициализируются на локальных каналах (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлена задержка проверки лицензии после сетевых проблем * Исправлена опечатка в выводе флага `--help` * Улучшена процедура проверки пользователя AMI * При авторизации в портале, его адрес автоматически добавляется в список разрешённых доменов CORS **Кастомизатор** * В файле конфигурации перечисляются все точки кастомизации, в том числе отключенные ### 3.1.7 [#id-3.1.7] > 19.02.2026 **Исправлены ошибки** * Исправлено падение при загрузке сущности CRM из кэша звонков (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Отсутствие юзера на C2C и автораспределении считается ошибкой * Настройки logrotate службы supervisor приведены в соответствие с настройками logrotate для Itgrix, обновлены комментарии ### 2.13.16 [#id-2.13.16] > 16.02.2026 **Админка** * Исправлено отображение названия CRM * Исправлен формат вывода минимальной версии Asterisk в статусах в админке **Исправлены ошибки** * Исправлена обработка "certified" версий Asterisk * Исправлено формирование адресов записей с не-HTTP(S) схемой ### 3.1.6 [#id-3.1.6] > 11.02.2026 **Исправлены ошибки** * При установке задаются права на конфиг logrotate в соответствии с требованиями современных ОС * Исправлено некорректное значение поля source при создании звонка/заметки/неразобранного * При выборе номера пользователя на автораспределении и C2C приоритетно выбираются самые короткие номера ### 3.0.16 [#id-3.0.16] > 03.02.2026 **Исправлены ошибки** * Исправлено формирование адресов записей с не-HTTP(S) схемой * Улучшено логирование бэкапов и добавлена поддержка симлинков при бэкапе ### 3.1.5 [#id-3.1.5] > 29.01.2026 **Админка** * Добавлена возможность скачать вывод команд на странице БД Itgrix в формате CSV * Улучшена вёрстка таблиц в админке * Из списков пользователей в админке исключены неактивные пользователи * Улучшено отображение ошибок переобработки звонков в админке * Исправлены ошибки выполнения команд state в админке (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлена редкая ошибка формирования CSV файлов * Добавлена опция переобработки звонков с очисткой state **Исправлены ошибки** * Исправлена ошибка работы с данными звонка при показе карточки на ответе (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Оптимизирован запрос поиска связанных звонков (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлена ошибка переподключения к БД при сетевых проблемах * Исправлена работа с автоматическими статусами пропускаемых шагов обработки звонка (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлен статус шага отображения карточки звонка на пропущенных звонках (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлено формирование адресов записей с не-HTTP(S) схемой * При формировании данных карточки для выбора направления проверяются все телефоны юзера (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) **Кастомизатор** * Исправлено отсутствие пустых полей `is_new` и `raw` при кодировании в JSON * Данные кастомизаций `custom_data` восстанавливаются при повторной обработке звонка * В данных кастомизации `customize_recording_query` поле "CallID" переименовано в "call\_id" ### 3.1.4 [#id-3.1.4] > 30.09.2025 **Админка** * Списки пользователей в админке отображают только активных пользователей * Более компактная вёрстка в админке **Исправлены ошибки** * При создании заметок ответственный пользователь также указывается создателем (наблюдалось с версии [3.1.3](/changelog-amo#id-3.1.3)) * Ч/б список по внутренним номерам не применяется при совпадении номера с транком (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлен устаревший запрос поиска звонков за время простоя * Исправлена некорректная проверка прав на таблицу CDR в момент изменения названия базы данных в настройках (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) ### 3.1.3 [#id-3.1.3] > 14.08.2025 **Админка** * Опция регистрации звонка "В сущность и все открытые сделки" заменена на "Всегда в сущность" **Исправлены ошибки** * Исправлено зависание при параллельном формировании данных для карточки звонка (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) ### 3.1.2 [#id-3.1.2] > 12.08.2025 **Админка** * В админку добавлено отображение статуса проблем файла конфигурации **Исправлены ошибки** * Исправлено редкое падение при коллизии ID разговоров между звонками (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлены потенциальные ошибки при конвертации JSON данных * Исправлен вывод ошибки таймаута в лог при очень быстром выполнении SQL запросов (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлена работа таймаута при проверке соединения с БД Asterisk (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Исправлено выполнение поиска сущности при повторной обработке звонка (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Улучшено логирование бэкапов и добавлена поддержка симлинков при бэкапе ### 3.0.15 [#id-3.0.15] > 15.07.2025 **Исправлены ошибки** * Исправлено редкое падение при переводах * Исправлен возврат нефильтрованных результатов поиска сущностей **Кастомизатор** * Функции логирования в кастомизаторе принимают значения любого типа, а не только строки * Добавлено определение ID звонка (`2_call_id`) в кастомизациях `process_record_file_path` и `customize_autodistribution` ### 3.1.1 [#id-3.1.1] > 03.07.2025 **Исправлены ошибки** * Исправлен цикл переподключения сокета в админке (наблюдалось с версии [3.1.0](/changelog-amo#id-3.1.0)) * Оптимизировано выполнение API запроса `/status` * Улучшено логирование API запроса `/status` ### 3.1.0 [#id-3.1.0] > 26.06.2025 **Внимание! Изменения в кастомизаторе нарушают обратную совместимость с кастомизациями, написанными для версий ниже v[2.13.0](/changelog-amo#id-2.13.0)!** В версии v[2.13.0](/changelog-amo#id-2.13.0) был добавлен новый [формат данных звонка](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh) `call_full`, но старые поля в корне данных кастомизаций были временно оставлены для совместимости. Теперь эти старые поля убраны и данные, которые присутутвуют в `call_full`, более не дублируются в корне. Если у вас есть кастомизации, написанные для версий ниже v[2.13.0](/changelog-amo#id-2.13.0), вам может быть нужно обновить их код. Обратитесь за дополнительной информацией в техподдержку. **Что нового** * Вместо файла состояния `state.json` теперь используется SQLite база данных `state.db`. Благодаря этому: * Во время низкой активности приложение повторно обрабатывает звонки, при обработке которых возникли ошибки * Результат каждого действия при обработке звонка сохраняется и используется при повторной обработке для предотвращения дублирования * При восстановлении работы после перезапуска, звонки за время с момента остановки обрабатываются в отдельном потоке с меньшим приоритетом и не блокируют обработку текущих звонков, так же как при повторной обработке во время низкой активности * Уменьшен объём логирования, и теперь по умолчанию данные звонка выводятся в лог только в конце звонка * Добавлена конвертация записей в основной логике (не через кастомизацию) при помощи сторонних конвертеров, в том числе `ffmpeg` в поставке модуля * Добавлена возможность передавать произвольные данные между кастомизациями без использования специальной базы данных * Добавлен чёрный/белый список транков в админке * Добавлена опция регистрации звонка во все сделки и сущность, добавлена кастомизация заметок * При закрытии задач в них пишется текст с данными о звонке * Добавлена возможность работы без подключения к интерфейсу AMI * Улучшено логирование: добавлены ID для сквозного отслеживания процессов * В вывод узла API `/status` добавлено время запуска приложения и системы **Обработка данных звонков** * Реализована обработка C2C звонков на несколько устройств по протоколу PJSIP * Исправлено отсутствие завершения разговора в одном из звонков управляемого перевода * Исправлена обработка неотвеченных FollowMe звонков * Реализована обработка звонков на локальных каналах без номеров (обратные на группу, авто-обзвоны) **Админка** * На страницу статусов добавлены новые проверки: * Наличие/активность в CRM всех пользователей, выбранных в настройках * Права на обновление данных в таблице CDR * Точность [синхронизации системного времени](/how-to-fix/time-sync) * Добавлены настройки конвертации записи * Добавлена страница "Itgrix DB" для доступа к `state.db` * Улучшена работа списков * Улучшена работа с веб-сокетами * Исправлено отображение неактивных пользователей в списках * Список разрешённых пользователей в админке отображается независимо от текущей лицензии * В меню админки добавлен скролл, обновлён стиль основного скролла * Улучшена вёрстка страницы запросов к БД Asterisk **Исправлены ошибки** * В карточку звонка передаются данные о сущности, сделках, задачах, воронках, стадиях, типах и дедлайнах задач, направлении звонка - это снижает нагрузку на REST API CRM * При ошибке CRM 401 делается попытка обновить токен * Добавлен таймаут для процедуры остановки приложения * Улучшена обработка ошибок в коннекторе CRM * Улучшено логирование ошибок запросов к CRM * Исправлена замена экранированных символов Юникод при выводе в лог * Исправлено отображение кастоимзаций в админке в зависимости от настроек логики и лицензии * Исправлен возврат нефильтрованных результатов поиска сущностей **Кастомизатор** * Добавлены новые кастомизации: * запроса поиска записи звонка * результата Click-to-Call * параметров конвертации записи * полей создания заметки о звонке (при регистрации звонка во все сделки и в сущность) * обновления контакта * обновления сделки * игнорируемых событий звонка * после каждой стадии обработки звонка * Убраны устаревшие поля во входных данных кастомизаций (в пользу нового поля `call_full`) * Обновлена документация в кастомизациях * Данные из сообщения AMI OriginateResponse включены в данные о регистрации звонка * В кастомизациях на автораспределении добавлены данные звонка * ID звонка используется при логировании в кастомизаторе **Служба Supervisor** * Добавлена поддержка HTTPS ### 3.0.14 [#id-3.0.14] > 04.03.2025 **Админка** * Исправлено сохранение пароля AMI * Исправлено отображение доступных обновлений * Исправлен формат вывода минимальной версии Asterisk в статусах в админке **Исправлены ошибки** * Исправлено сравнение времени завершения разговоров на x32 системах * Исправлена ошибка создания задач с указанием типа задачи (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлена загрузка ID пользователей в сохранённых звонках при возобновлении работы после остановки * Из установочного файла конфигурации убраны примеры заполнения разрешённых пользователей ### 3.0.13 [#id-3.0.13] > 04.02.2025 **Админка** * Исправлено отображение паролей * Обновлена справка по выбору ответственных **Исправлены ошибки** * Обновлён способ добавления тегов в сущности * Исправлена обработка "certified" версий Asterisk * Исправлено зависание при одновременном сбое AMI и MySQL * Исправлен вывод старых логов в ответ на запрос переобработки звонка (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Улучшена обработка ошибок запросов API во время остановки модуля ### 3.0.12 [#id-3.0.12] > 21.11.2024 **Исправлены ошибки** * Исправлена регулярная потеря соедиения с вебсокетом для обновления статуса приложения в админке (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено чтение целочисленных значений в диагностических запросах к БД Asterisk **Кастомизатор** * В кастомизаторе исправлены методы получения списков сделок и контактов (`Amo::getLeadList` и `Amo::getContactList`) ### 2.13.15 [#id-2.13.15] > 21.11.2024 **Исправлены ошибки** * Исправлена ошибка создания сущностей для исходящих звонков когда включено неразобранное * Улучшена обработка ошибок соединения с C2C-сервером * Исправлено чтение целочисленных значений в диагностических запросах к БД Asterisk ### 3.0.11 [#id-3.0.11] > 09.10.2024 **Исправлены ошибки** * Исправлено падение при получении неразобранного после его создания * Исправлена ошибка чтения метаданных неразобранного (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * В ответ на запрос `/crm/request` добавлен ID запроса * Включен вывод в лог сообщения об успешном переводе звонка ### 3.0.10 [#id-3.0.10] > 18.09.2024 **Исправлены ошибки** * Исправлено падение при ошибке поиска звонка в управляемом переводе (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлен перезапуск при ошибке чтения события файла токена (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) ### 3.0.9 [#id-3.0.9] > 03.09.2024 **Исправлены ошибки** * Исправлена обработка ошибок чтения запросов от сервера C2C * Исправлен вывод в лог специальных символов HTML * Исправлена ошибка логирования входящих запросов (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 3.0.8 [#id-3.0.8] > 29.07.2024 **Исправлены ошибки** * В админке убрана возможность выбирать технические статусы воронок * Исправлено создание лишних повторных сделок когда есть неразобранное (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) * Исправлен пропуск создания сущностей для исходящих звонков когда включено неразобранное (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.14 [#id-2.13.14] > 04.07.2024 **Исправлены ошибки** * Исправлено падение на получении записи разговора без одного из номеров (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Дополнен список прав AMI по умолчанию * Добавлен вывод в лог момента отправки запроса Originate * Исправлено редкое падение при чтении данных AMI * Исправлено редкое зависание при продолжительных сетевых проблемах связи с AMI ### 3.0.7 [#id-3.0.7] > 03.07.2024 **Исправлены ошибки** * Исправлено редкое падение на звонках с пустыми номерами в переводах (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено редкое падение при определении ответственного за звонки, неотвеченные на IVR (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено редкое зависание при продолжительных сетевых проблемах связи с AMI * Более подробный вывод в лог результата регистрации звонка * Более точное соответствие между поиском сущностей и регистрацией звонка в сущности * Добавлен метод API `/crm/format_crm_numbers` для форматирования номеров всех сущностей в CRM настроенными автозаменами и кастомизациями ### 3.0.6 [#id-3.0.6] > 17.06.2024 **Исправлены ошибки** * Исправлено редкое падение при работе с пользавателем без внутреннего номера (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлена ошибка в альтернативном способе поиска ID разговора при управляемом переводе (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) ### 3.0.5 [#id-3.0.5] > 03.06.2024 **Исправлены ошибки** * Исправлена ошибка скрытия карточки после длинных звонков * Исправлена некорректная фильтрация при поиске неразобранного (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлен многократный перезапуск при обновлении токена CRM когда открыта админка (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Поиск сущностей по номеру телефона приведён в соответствие поиску в CRM (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Улучшена обработка ошибок запросов к CRM * Дополнен список прав AMI по умолчанию * В настройках `logrotate` по умолчанию указано использовать даты в расширениях * Исправлены редкие ошибки валидации настроек * Исправлены ошибки расписания проверки лицензии (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено редкое падение при чтении данных AMI * Добавлен вывод в лог момента отправки запроса Originate **Кастомизатор** * Исправлена обработка отмены запросов создания сущности, сделки и звонка через кастомизации ### 3.0.4 [#id-3.0.4] > 12.04.2024 **Исправлены ошибки** * Исправлено падение при завершении звонка, где не известно направление последнего разговора (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) * Исправлен пропуск события закрытия карточки звонка (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * При ошибке авторизации в CRM делаются повторные попытки запроса * Исправлена ошибка передачи кода авторизации в CRM при смене портала * В запрос API `/pbx/read_cel` добавлена поддержка входных данных в формате JSON ### 2.13.13 [#id-2.13.13] > 08.04.2024 **Исправлены ошибки** * Добавлена отмена создания задачи из кастомизации задачи * Исправлена ошибка обновления кэша неразобранного при его ручном удалении сразу после создания (наблюдалось с версии [2.2.3](/changelog-amo#id-2.2.3)) * Исправлено определение пути к файлу `fmc_patterns` для нестандартных установок * Исправлено лишнее обновление кэша неразобранного в звонках где оно не создаётся (наблюдалось с версии [2.12.3](/changelog-amo#id-2.12.3)) * Исправлен некорректный вывод адреса сервера авторизации при сетевых ошибках доступа к нему * Исправлено потенциальное зависание при ошибках проверки лицензии (наблюдалось с версии [2.11.0](/changelog-amo#id-2.11.0)) * Исправлена ошибка закрытия карточки звонка при большой продолжительности разговора ### 3.0.3 [#id-3.0.3] > 04.04.2024 **Админка** * Исправлены редкие ошибки живого обновления статусов на главной странице (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Подсказки в админке дополнены ссылками на актуальную документацию **Исправлены ошибки** * Исправлены ошибки чтения не-строковых кастомных полей сущностей (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлена ошибка обработки управляемых переводов где событие перевода находится во втором звонке (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено потенциальное зависание при ошибках проверки лицензии (наблюдалось с версии [2.11.0](/changelog-amo#id-2.11.0)) ### 3.0.2 [#id-3.0.2] > 14.03.2024 **Исправлены ошибки** * Исправлен ряд редких багов админки при неожиданных состояниях файла настроек * Исправлено отображение имени CRM в админке * Исправлена невозможность сохранения изменений при удалении некоторых настроек в админке * Исправлено падение админки при открытии страницы транков ### 3.0.1 [#id-3.0.1] > 13.03.2024 **Исправлены ошибки** * Исправлено отсутствие привязки сделки к контакту/компании (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Исправлено неожиданное принятие неразобранного при обновлении ответственного (наблюдалось с версии [3.0.0](/changelog-amo#id-3.0.0)) * Устранена задержка обработки управляемых переводов при участии локальных каналов (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлена ошибка определения результата звонка (наблюдалось с версии [2.8.0](/changelog-amo#id-2.8.0)) * Исправлена некорректная проверка лицензии при запуске опциональных кастомизаций (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлено выполнение повторных попыток запроса в CRM когда отозван токен авторизации * Исправлен некорректный вывод в лог при формировании ссылки для авторизации в CRM * Исправлен некорректный вывод адреса сервера авторизации при сетевых ошибках доступа к нему ### 3.0.0 [#id-3.0.0] > 20.02.2024 **Внимание! В релизе присутствуют важные изменения, которые могут повлиять на работу. Подробности - в документации.** В связи с обновлением REST API amoCRM с версии v2 до версии v4, следующие аспекты работы приложения изменились: 1. Для работы [карточки звонка](/ustanovka-modulya/itgrix-amo-setup/kartochka-zvonka-v-amocrm) теперь необходимо настроить и обеспечить возможность подключения пользователей к модулю интеграции по протоколу WSS. Новая версия API amoCRM не предоставляет возможности управления показом/скрытием карточки звонка, поэтому вместо использования REST API управление карточкой звонка будет осуществляться через Web Socket. Адрес для подключения имеет вид `wss://:8078/crm/cardws`. Его можно настроить в виджете приложения в интерфейсе amoCRM. Необходимые условия для корректной работы: * адрес доступен с компьютера пользователя, это может быть адрес в локальной сети, адрес доступный через VPN или (не рекомендуется) внешний адрес; * настройки всех узлов маршрута между пользователем и адресом сокета карточки разрешают устанавливать соединение по протоколу WSS, это может потребовать дополнительной настройки имеющегося сервера Nginx или другого прокси-сервера; * на сервере где установлен модуль интеграции настроен валидный SSL-сертификат, который успешно верифицируется браузером пользователя, и этот сертификат указан в интерфейсе настройки модуля интеграции `http://:8077/config/module`; * сервер на котором установлен модуль интеграции и промежуточные узлы маршрута настроены для одновременной поддержки необходимого количества соединений, по одному на каждую вкладку браузера с открытым интерфейсом amoCRM для каждого пользователя. *(для примера здесь указаны порты по умолчанию 8077 и 8078, индивидуальные настройки могут отличаться)* 2. Кастомизации с использованием REST API amoCRM могут потребовать обновления. Данные запросов и набор возможностей в новой версии API изменились. Среди прочих изменений, сузился набор параметров связанных с прикреплением звонка в дополнительные сущности. Добавление информации о звонке всё ещё возможно, но вид звонка будет отличаться, и код кастомизации с использованием этой возможности необходимо обновить. **Если вы ранее заказывали у нас кастомизации - обратитесь в нашу техподдержку за помощью в их обновлении.** **Что нового** * Выполнен переход с устаревшей версии REST API v2 на актуальную v4 * Отображение/скрытие карточки звонка выполняется через веб-сокет вместо REST API * Карточка звонка отображается независимо от результата создания сущности * Переводы звонка обрабатываются отдельно от разговоров, что позволяет более детально контролировать длительности разговоров * При ошибке AMI "connection reset by peer" по возможности выполняется быстрое переподключение без полного перезапуска * Добавлено обновление ответственного у повторных сделок * Реализована синхронизация номеров `from` между начальными исходящими PJSIP разговорами * В настройки по умолчанию (при начальной установке) добавлена автозамена номера клиента на C2C: удаление не-цифровых символов * В настройках по умолчанию (при начальной установке) отключена автозамена FMC номеров * Добавлен флаг запуска `--report` для формирования отчёта для техподдержки * В вывод запроса API `/status` добавлен раздел `stats` с количеством ошибок и звонков за сутки и за час **Админка** * Реализовано обновление лицензии в реальном времени * При отсутствии соединения с CRM, требующие такого соединения элементы заменяются на плейсхолдеры * Статусы зафиксированы вверху неосновных страниц админки * Обновлены подсказки * Мелкие правки вёрстки **Исправлены ошибки** * Исправлено некорректное обновление номера при завершении разговора (наблюдалось с версии [2.13.2](/changelog-amo#id-2.13.2)) * Исправлено некорректное отображение статуса авторизации в CRM * Исправлено падение на обработке разговоров с нераспознанными FMC номерами * Исправлено лишнее обновление кэша неразобранного в звонках где оно не создаётся (наблюдалось с версии [2.12.3](/changelog-amo#id-2.12.3)) * Исправлена ошибка обновления кэша неразобранного при его ручном удалении сразу после создания (наблюдалось с версии [2.2.3](/changelog-amo#id-2.2.3)) * Исправлена ошибка передачи ответственного в контакт и сущность после создания неразобранного (наблюдалось с версии [2.12.4](/changelog-amo#id-2.12.4)) * Исправлены лишние запросы лицензии при обновлении токена CRM (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлено определение пути к файлу `fmc_patterns` для нестандартных установок * Исправлено некорректное форматирование `uniqueid` в тексте ошибки создания канала (наблюдалось с версии [2.12.4](/changelog-amo#id-2.12.4)) * Исправлена утечка лимита открытых файлов при обновлении конфига (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Добавлен вывод понятной ошибки при использовании несуществующей воронки **Кастомизатор** * Реализованы запросы к CRM через REST API v4 * Запросы к CRM выполняются через модуль, с соблюдением лимитов * Добавлены кастомизации обновления контакта и сделки * Добавлена отмена создания задачи из кастомизации задачи * Обновлена документация по кастомизатору ### 2.11.10 [#id-2.11.10] > 24.11.2023 **Админка** * В выводе MySQL в админке исправлено отображение `NULL` значений **Исправлены ошибки** * Добавлена поддержка чтения из CEL колонки `extra` со значениями `NULL` * Исправлена ошибка смены ответственного при управляемых переводах * Исправлено падение при получении нестандартной структуры кастомных полей сущностей * Исправлен редкий кейс циклического перезапуска C2C-клиента ### 2.12.8 [#id-2.12.8] > 24.11.2023 **Админка** * В выводе MySQL в админке исправлено отображение `NULL` значений **Исправлены ошибки** * Добавлена поддержка чтения из CEL колонки `extra` со значениями `NULL` * Исправлена ошибка смены ответственного при управляемых переводах * Исправлено редкое зависание при отключении от AMI * Исправлено падение при получении нестандартной структуры кастомных полей сущностей * Исправлен редкий кейс циклического перезапуска C2C-клиента ### 2.13.12 [#id-2.13.12] > 22.11.2023 **Исправлены ошибки** * Исправлено дублирование звонков при создании неразобранного * Исправлены избыточные запросы обновления сущностей после создания неразобранного (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.11 [#id-2.13.11] > 14.11.2023 **Админка** * Исправлена ошибка сохранения настроек при первом запуске * Обновлён текст статуса при отсутствии недавних записей звонков в таблице CDR **Исправлены ошибки** * Исправлено редкое зависание при отключении от AMI (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Расширена обработка ошибок соединения с AMI * Добавлена поддержка чтения из CEL колонки `extra` со значениями `NULL` * Исправлено падение при получении нестандартной структуры кастомных полей сущностей * Исправлен редкий кейс циклического перезапуска C2C-клиента (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.10 [#id-2.13.10] > 15.09.2023 **Админка** * В настройках шаблонов имён сущностей в админке добавлено отображение значений по умолчанию * На странице MySQL добавлена возможность менять размер поля запроса * Исправлены ошибки сохранения настроек автозамен и создания задач в админке * Исправлены мелкие проблемы вёрстки страниц админки **Исправлены ошибки** * Исправлено повторное чтение событий звонка, находящихся в очереди обработки в момент перезапуска ### 2.13.9 [#id-2.13.9] > 05.09.2023 **Исправлены ошибки** * Исправлена проблема чтения ответственных пользователей из `state.json` (наблюдалось с версии [2.13.8](/changelog-amo#id-2.13.8)) ### 2.13.8 [#id-2.13.8] > 05.09.2023 **Исправлены ошибки** * Исправлено значения поля `is_new` в данных звонка для контакта и сделки при создании неразобранного (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлена редкая проблема приоритизации разговоров в звонке (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * В выводе MySQL в админке исправлено отображение `NULL` значений * Исправлена ошибка выбора ответственного за сущности при переводах (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.7 [#id-2.13.7] > 15.08.2023 **Админка** * Язык интерфейса в админке сохраняется между сессиями **Исправлены ошибки** * Исправлена ошибка редактирования портов в админке * Исправлен вывод статуса CRM в запросе API `/status` * Изменён уровень логирования некоторых событий ### 2.12.7 [#id-2.12.7] > 15.08.2023 **Исправлены ошибки** * `last_id` не сбрасывается при рестарте когда отключен `state.json` * Исправлена ошибка редактирования портов в админке * Исправлен вывод статуса CRM в запросе API `/status` ### 2.11.9 [#id-2.11.9] > 15.08.2023 **Исправлены ошибки** * `last_id` не сбрасывается при рестарте когда отключен `state.json` * Исправлен вывод статуса CRM в запросе API `/status` ### 2.13.6 [#id-2.13.6] > 08.08.2023 **Админка** * Исправлена ошибка редактирования адреса C2C в админке **Исправлены ошибки** * Исправлено лишнее завершение разговоров при слепом переводе * Исправлен показ карточки звонка пользователям, не связанным с текущим звонком (наблюдалось с версии [2.13.5](/changelog-amo#id-2.13.5)) * Исправлена проблема сохранения сущностей в `state.json` (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.5 [#id-2.13.5] > 19.07.2023 **Админка** * Исправлено не отображение поля шаблона имени сделки в админке когда отключены повторные сделки (наблюдалось с версии [2.13.4](/changelog-amo#id-2.13.4)) **Исправлены ошибки** * Исправлено отсутствие карточки звонка (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.4 [#id-2.13.4] > 13.07.2023 **Админка** * Добавлена настройка шаблонов имён сущностей (в конфиге настройка есть с версии [2.13.0](/changelog-amo#id-2.13.0)) **Исправлены ошибки** * Исправлен сброс `last_id` при рестарте без `state.json` * В вывод запроса `/status` добавлена информация о токене авторизации в CRM * Исправлено некорректное имя переменной в шаблоне имени сделки по умолчанию (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.3 [#id-2.13.3] > 21.06.2023 **Исправлены ошибки** * Исправлена ошибка чтения запросов от C2C-сервера (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.2 [#id-2.13.2] > 20.06.2023 **Исправлены ошибки** * Исправлено многократное создание сделок в звонках с несколькими разговорами (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) **Кастомизатор** * Исправлено значение поля `is_new` в сделках в данных кастомизаций (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.1 [#id-2.13.1] > 15.06.2023 **Админка** * Исправлено отображение переключения портала в интерфейсе **Исправлены ошибки** * Исправлено падение при чтении сделок из `state.json` (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) * Исправлено определение пути к файлу `state.json` на неосновных инстансах приложения (наблюдалось с версии [2.13.0](/changelog-amo#id-2.13.0)) ### 2.13.0 [#id-2.13.0] > 24.05.2023 **Внимание! В релизе присутствуют важные изменения, которые могут повлиять на работу. Подробности - в документации.** 1. Минимальная версия Астериск увеличена до `13.0.0`. Начиная с этой версии, в CEL присутствует поле `extra` в ожидаемом нами формате. На более старых версиях приложение будет работать, но с предупреждениями. Обработка переводов звонков будет выполняться в режиме совместимости, а перехваты звонка не будут обрабатываться. 2. Изменилась схема логики и запуска кастомизаций, что особенно важно для нестандартных кастомизаций номеров телефонов, кастомизации `need_registration` и проверки ч/б списком. `need_registration` и ч/б список теперь вызываются в начале каждого этапа обработки звонка, кроме CallStarted. Кастомизации номеров теперь вызываются только в момент их получения - на CallStarted и ConversationRequested. 3. Изменились данные кастомизаций, но оставлены legacy данные для обратной совместимости. Кастомизации "по умолчанию" обновятся автоматически, но если в них вносились изменения, то необходимо их переписать вручную. Главное изменение - во все кастомизации теперь приходит объект `call_full` с более полными данными. Все данные теперь нужно брать из него. **Если вы ранее заказывали у нас кастомизации - обратитесь в нашу техподдержку за помощью в их обновлении.** 4. Изменён формат логов: новые имена полей и новый формат времени. Если были настроены дополнительные приложения для обработки логов, например для мониторинга ошибок, то необходимо их перенастроить. 5. Изменения в файлах `/etc/itgrix_amo/config.json` и `/opt/itgrix_amo/token.json` теперь отслеживаются в реальном времени. Для внесения изменений в эти файлы больше не нужно останавливать и перезапускать приложение, но и незаконченные изменения будут применяться сразу же. Если во время работы сохранить некорректный конфиг, то приложение продолжит работу с предыдущими настройками, но при следующем запуске выдаст ошибку и не заработает. 6. При некорректном файле конфига приложение теперь не игнорирует ошибочные данные, а отказывается запускаться. **Что нового** * Усилена стандартизация логики работы приложения * Добавлена настройка белого списка CORS (для управления правами на выполнение запросов к приложению с внешних ресурсов, таких как ваш сайт) * Добавлен запрос API `/crm/request` для отправки запросов к CRM через общую очередь коннектора, что снижает замедление работы при дополнительных запросах из кастомизаций * Добавлены новые кастомизации: кастомизация создания неразобранного, кастомизация после регистрации звонка * Реализовано слежение за файлами конфига и токена в реальном времени * Оптимизарована процедура запуска приложения * Изменён формат лога * Добавлены шаблоны для имён контактов, компаний и сделок * Добавлены отдельные автозамены для транков, FMC номеров и C2C * В запрос `/status` добавлен параметр `path` * Улучшена поддержка регистрации пропущенных звонков на FMC номера * Добавлена проверка успеха Originate по событию AMI * Добавлены флаги запуска для более детальной очистки данных * Добавлено сжатие данных кастомизаций при обработке объёмных звонков * Реализована поддержка управляемых переводов без ответа между сотрудниками **Админка** * Добавлена автоматическая сортировка ч/б списка * Добавлено отображение наличия несохранённых изменений * Добавлено автоформатирование адреса портала * Добавлено отображение ошибки загрузки цен на лицензию * Обновлена разметка таблиц логов * Добавлен вывод ошибок при нажатии на неактивные кнопки * Исправлена ошибка некорректного позиционирования кнопки чата * Обновлена справка по кастомизациям **Исправлены ошибки** * Реализована плавная процедура остановки приложения * Реализовано централизованное синхронное хранение данных звонка * Исправлена проблема перечитывания звонков/зависания `state.json` * Исправлено некорректное прикрепление ссылок на записи в некоторых случаях (разделена логика обрезания номеров телефонов) * Исправлено зависание на переподключении AMI после разрыва соединения * Исправлена редкая ошибка, из-за которой иногда ставилось неправильное время завершения разговора * При C2C номер `to` обновляется по результатам кастомизации * Добавлена проверка версии удалённого Астериска через AMI * Исправлено сохранение CEL со спецсимволами через админку * Исправлена ошибка формирования списка номеров при поиске файла записи * Исправлена редкая утечка памяти при превышении лимита времени обработки событий * Исправлены редкие зависания при многократной обработке одного события звонка * Исправлена утечка MySQL-соединений * Исправлено отсутствие этапа обработки звонка CallStarted на некоторых C2C звонках * Исправлена проблема переподключения к AMI при смене авторизационных данных * Исправлена проблема переподключения к Apix при смене портала * Способ отправки тегов в CRM изменён на более универсальный * Исправлены редкие проблемы работы с префиксами * Добавлен учёт временной зоны в отметках времени в CEL * Текст статуса приложения выводится в `/status` всегда в Title Case * Исправлена задержка очистки кэша пользователей при смене портала **Кастомизатор** * В кастомизации передаются полные данные звонка `call_full` вместе с legacy-данными для обратной совместимости * В кастомизатор добавлены и задействованы запросы к CRM через модуль * В автораспределении обрабатывается транк и в кастомизацию отправляются все данные запроса и полные данные сущности * В статусе (/status) кастомизатора отображается `false` у всех методов если кастомизатор отключен * В кастомизацию `need_registration` и кастомизации номеров добавлены этап и данные звонка * Убраны дублирующиеся кастомизации номеров, теперь они выполняются при появлении номера на CallStarted или ConversationRequested * Добавлена кастомизация после регистрации звонка * Добавлена кастомизация неразобранного * Добавлена возможность отмены запросов в CRM кастомизациями * При выполнении кастомизаций используется комбинированный вывод * Обновлён формат логов кастомизатора * Кастомизатор приоритетно использует новые данные звонка * Обновлены стандартные кастомизации * В кастомизацию пути записи разговора добавлены новые варианты устранения дублирования пути **Supervisor** * При ошибке обновления выводится абсолютный путь до `update.log` * Исправлен вывод версии supervisor в API ### 2.12.6 [#id-2.12.6] > 03.05.2023 **Исправлены ошибки** * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках * Исправлена ошибка переподключения к AMI при смене авторизационных данных ### 2.11.8 [#id-2.11.8] > 03.05.2023 **Исправлены ошибки** * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках ### 2.10.9 [#id-2.10.9] > 03.05.2023 **Исправлены ошибки** * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках ### 2.12.5 [#id-2.12.5] > 15.02.2023 **Исправлены ошибки** * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` **Кастомизатор** * В кастомизацию пути записи разговора добавлены новые варианты устранения дублирования пути ### 2.11.7 [#id-2.11.7] > 15.02.2023 **Исправлены ошибки** * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` ### 2.10.8 [#id-2.10.8] > 15.02.2023 **Исправлены ошибки** * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` ### 2.11.6 [#id-2.11.6] > 20.01.2023 **Исправлены ошибки** * Обновлены адреса серверов авторизации **Кастомизатор** * Добавлена поддержка дублирующихся путей записей без двойного слэша ### 2.10.7 [#id-2.10.7] > 20.01.2023 **Исправлены ошибки** * Обновлены адреса серверов авторизации **Кастомизатор** * Добавлена поддержка дублирующихся путей записей без двойного слэша ### 2.11.5 [#id-2.11.5] > 19.01.2023 **Исправлены ошибки** * Исправлена проверка статуса разговора в конце звонка, из-за которой иногда ставилось неправильное время завершения разговора * При C2C номер `to` обновляется по результатам кастомизации * Улучшено логирование ### 2.10.6 [#id-2.10.6] > 19.01.2023 **Исправлены ошибки** * Исправлена проверка статуса разговора в конце звонка, из-за которой иногда ставилось неправильное время завершения разговора * При C2C номер `to` обновляется по результатам кастомизации * Улучшено логирование ### 2.12.4 [#id-2.12.4] > 15.11.2022 **Админка** * Исправлено сохранение `.CSV` CEL со спецсимволами **Исправлены ошибки** * Обновлены адреса серверов авторизации * При Originate обновляется номер `to` по результатам кастомизации * Исправлена проверка статуса разговора в конце звонка, из-за которой иногда ставилось неправильное время завершения разговора * Apix connector показывает последнюю ошибку при превышении лимита переподключений ### 2.12.3 [#id-2.12.3] > 30.09.2022 **Админка** * Добавлена автоматическая сортировка ч/б списка * Добавлено автоматическое форматирование и проверка правильности адреса портала * Добавлено отображение ошибки при проблеме получения актуальных цен на лицензию **Исправлены ошибки** * Исправлено падение при большой нагрузке при использовании офлайн-лицензии (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Bсправлено использование некорректного номера транка при автораспределении (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) * Исправлено отображение успешного статуса у звонков пропущенных на IVR (наблюдалось с версии [2.8.0](/changelog-amo#id-2.8.0)) * Исправлено зависание после восстановления связи с AMI (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) ### 2.11.4 [#id-2.11.4] > 30.09.2022 **Исправлены ошибки** * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Исправлено отображение успешного статуса у звонков пропущенных на IVR (наблюдалось с версии [2.8.0](/changelog-amo#id-2.8.0)) ### 2.10.5 [#id-2.10.5] > 30.09.2022 **Исправлены ошибки** * Исправлено отображение статуса неотвеченных звонков на IVR (наблюдалось с версии [2.8.0](/changelog-amo#id-2.8.0)) ### 2.12.2 [#id-2.12.2] > 11.08.2022 **Админка** * Обновлена страница оплаты лицензии **Исправлены ошибки** * Исправлена проблема авторизации в AMI в мастере настроек (наблюдалось с версии [2.12.0](/changelog-amo#id-2.12.0)) * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [2.10.0](/changelog-amo#id-2.10.0)) **Кастомизатор** * Исправлены ошибки выбора временной зоны в кастомизаторе ### 2.11.3 [#id-2.11.3] > 11.08.2022 **Админка** * Обновлена страница оплаты лицензии **Исправлены ошибки** * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [2.10.0](/changelog-amo#id-2.10.0)) ### 2.10.4 [#id-2.10.4] > 11.08.2022 **Админка** * Обновлена страница оплаты лицензии **Исправлены ошибки** * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [2.10.0](/changelog-amo#id-2.10.0)) ### 2.12.1 [#id-2.12.1] > 21.07.2022 **Что нового** * В кастомизацию автораспределения добавлена обработка транка и других полей запроса `/forward` **Админка** * Исправлено отображение результата авторизации в CRM * Исправлено отображние поля ручного ввода кода авторизации ### 2.11.2 [#id-2.11.2] > 01.07.2022 **Админка** * Обновлена справка по автозамене номеров * Исправлено отображение доступных обновлений **Исправлены ошибки** * Исправлено редкое падение при нескольких одновременных C2C звонках **Кастомизатор** * В автораспределение добавлена автозамена и кастомизация номера клиента ### 2.10.3 [#id-2.10.3] > 01.07.2022 **Админка** * Обновлена справка по автозамене номеров * Исправлено отображение доступных обновлений **Исправлены ошибки** * Исправлено редкое падение при нескольких одновременных C2C звонках **Кастомизатор** * В автораспределение добавлена автозамена и кастомизация номера клиента ### 2.12.0 [#id-2.12.0] > 29.06.2022 **Что нового** * Добавлена опция создания повторных сделок (создавать сделку для имеющейся сущности если нет открытых сделок) **Админка** * Добавлена кнопка перезапуска служб * Отображаются обязательные кастомизации * Обновлены тексты справки по кастомизациям и автозамене * Исправлен эскейпинг в `csv` файлах * Исправлены ошибки отображения доступных обновлений * Правки дизайна **Исправлены ошибки** * Исправлено зависание при неправильном пароле AMI * Исправлены редкие ошибки запуска/остановки * Исправлено редкое падение при нескольких одновременных C2C звонках * Исправлено замедление работы при использовании лицензионного ключа * Улучшено логирование при подключении к БД * В автораспределение добавлена автозамена и кастомизация номера клиента * В отчёт для техподдержки добавлены данные: системный лог, данные о PHP и MySQL, наличие sudo, настройки временной зоны, данные о пользователе * Улучшена обработка ошибок при формировании отчёта для техподдержки * Исправлены конфликты обращения к общим ресурсам при формировании отчёта для техподдержки **Кастомизатор** * Настройки кастомизатора [вынесены в `json` файл](/custom_common/customizer-settings-update) * Добавлена [настройка таймаута запросов](/custom_common/customizer-settings-update#novoe-pole-requesttimeoutsec) * Кастомизатор штатно возвращает исключения * Опциональные кастомизации не запускаются в бесплатном режиме 2.12.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. Начиная с версии 2.12.0, опциональные кастомизации будут запускаться только с оплаченной лицензией: ``` process_call_params.php process_contact_creation_params.php process_task_creation_params.php process_lead_creation_params.php customize_autodistribution.php ``` ### 2.11.1 [#id-2.11.1] > 06.04.2022 **Исправлены ошибки** * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [2.7.1](/changelog-amo#id-2.7.1)) * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [2.7.0](/changelog-amo#id-2.7.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [2.8.6](/changelog-amo#id-2.8.6)) ### 2.10.2 [#id-2.10.2] > 06.04.2022 **Админка** * Обновлена справка по настрйкам создания задач * Исправлен визуальный баг кнопки авторизации **Исправлены ошибки** * Исправлено автозакрытие задач с транком в названии (наблюдалось с версии [2.8.6](/changelog-amo#id-2.8.6)) * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [2.7.1](/changelog-amo#id-2.7.1)) * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [2.7.0](/changelog-amo#id-2.7.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [2.8.6](/changelog-amo#id-2.8.6)) **Кастомизатор** * Параметры запроса C2C [передаются в кастомизацию Originate](/custom_common/c2c) * В кастомизацию `need_registration` передаётся параметр `is_ivr` ### 2.9.3 [#id-2.9.3] > 06.04.2022 **Админка** * Обновлена справка по настрйкам создания задач **Исправлены ошибки** * Исправлено автозакрытие задач с транком в названии (наблюдалось с версии [2.8.6](/changelog-amo#id-2.8.6)) * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [2.7.1](/changelog-amo#id-2.7.1)) * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [2.7.0](/changelog-amo#id-2.7.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [2.8.6](/changelog-amo#id-2.8.6)) **Кастомизатор** * Параметры запроса C2C [передаются в кастомизацию Originate](/custom_common/c2c) * В кастомизацию `need_registration` передаётся параметр `is_ivr` ### 2.11.0 [#id-2.11.0] > 15.03.2022 **Что нового** * Выполнен переход на новый C2C-сервер "Apix v2"; старые C2C-сервера более не используются **Админка** * Обновлена логика UI при переходе между страницами мастера настройки * Добавлено поле порта службы Supervisor * Исправлено некорректное отображение кнопки на странице авторизации в CRM * Обновлены тексты подсказок **Исправлены ошибки** * Исправлена обработка звонков с управляемым переводом когда каналы в CEL не отмечены как локальные **Кастомизатор** * Добавлена возможность кастомизации автораспределения звонков * Параметры запроса C2C [передаются в кастомизацию Originate](/custom_common/c2c) * В кастомизацию `need_registration.php` передаётся параметр `is_ivr` Старый C2C-сервер по адресу `c2c.bx24asterisk.ru`, начиная с версии 2.11.0, более не используется.\ Убедитесь что с сервера, где установлен модуль интеграции Itgrix, разрешён доступ к новому C2C-серверу `apix.itgrix.ru`. 2.11.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. ### 2.10.1 [#id-2.10.1] > 11.02.2022 **Исправлены ошибки** * Ошибки запроса API сервера лицензирования при автоматической проверке лицензии приводят к понижению лицензии не сразу, а только если проблема сохраняется 3 часа * Исправлена регистрация неуспешных C2C звонков * Данные запроса API `/status` периодически выводится в лог для диагностики проблем * Исправлен запуск без указания портала * Улучшено логирование при обработке запросов C2C **Кастомизатор** * Исправлена работа с временной зоной ОС в кастомизаторе ### 2.9.2 [#id-2.9.2] > 11.02.2022 **Исправлены ошибки** * Ошибки запроса API сервера лицензирования при автоматической проверке лицензии приводят к понижению лицензии не сразу, а только если проблема сохраняется 3 часа * Исправлена регистрация неуспешных C2C звонков * Исправлена ошибка авторизации при отключении всех опций C2C-сервера (наблюдалось с [2.9.0](/changelog-amo#id-2.9.0)) * Исправлен запуск без указания портала * В [шаблон имени задачи](/settings/additional/parametry-sozdaniya-zadach) добавлена поддержка переменной `#TRUNK#` * Улучшено логирование при чтении файлов конфигурации Asterisk ### 2.8.6 [#id-2.8.6] > 10.02.2022 **Исправлены ошибки** * Если номер не найден (`hangupcause` 1 или 20) но был ответ, то звонок считается успешным * Исправлена регистрация неуспешных C2C звонков * В [кастомизацию сделки](/custom_amo#5-process_lead_creation_params) добавлены данные звонка * В [шаблон имени задачи](/settings/additional/parametry-sozdaniya-zadach) добавлена поддержка переменной `#TRUNK#` * Исправлен запуск без указания портала * Улучшено логирование при использовании узла API `/pbx/read_call` ### 2.10.0.1 [#id-2.10.0.1] > 27.01.2022 **Исправлены ошибки** * Исправлена загрузка админки когда не указан портал ### 2.10.0 [#id-2.10.0] > 26.01.2022 **Что нового** * Добавлена функция [автозамены номеров телефонов](/for-admins/autoreplacement) * Добавлен интерфейс загрузки звонков по `LinkedID` * Добавлена опция создания задач по неуспешным исходящим звонкам * Запросы группируются перед отправкой в CRM, скорость работы увеличена на \~40% **Админка** * Наличие обновлений проверяется автоматически при загрузке главной страницы * В левом нижнем углу на всех страницах отображаются версия модуля и подключенный портал * Улучшена вёрстка и обновлена цветовая схема * Проверки статусов для главной страницы выполняются по возможности независимо, статусы которые не удалось проверить из-за таймаута предыдущих статусов отображаются как `Skipped` * Язык по умолчанию соответствует настройкам языка браузера * Исправлен адрес сервера лицензирования на главной странице * Исправлены ошибки работы с логами модуля **Исправлены ошибки** * Если номер не найден (`hangupcause` 1 или 20) но был ответ, то звонок считается успешным * В вывод запроса API Данные запроса API `/status` периодически добавлено время для диагностики проблем * Исправлено дублирование логов в отчёте для техподдержки * В отчёт для техподдержки добавлены `uptime` и `whoami` * Старые отчёты для техподдержки (старше двух недель и более трёх последних) удаляются автоматически при формировании нового отчёта * Исправлены ошибки сохранения настроек * Улучшено логирование запросов в CRM * Добавлены ограничения на частоту подключений к Apix * Улучшено логирование при запуске * В [шаблон имени задачи](/settings/additional/parametry-sozdaniya-zadach) добавлена поддержка переменной `#TRUNK#` * Добавлены новые описания ошибок на главной странице 2.10.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. ### 2.9.1 [#id-2.9.1] > 14.01.2022 **Исправлены ошибки** * В [кастомизацию сделки](/custom_amo#5-process_lead_creation_params) добавлены данные звонка * Улучшено логирование при использовании узла API `/pbx/read_call` * Улучшено логирование при запуске ### 2.9.0 [#id-2.9.0] > 14.12.2021 **Что нового** * Добавлена возможность лицензирования оффлайн по лицензионному ключу (только для версии `x64` с правами `root`) * Авторизация в CRM теперь выполняется без ручного копирования кода * Добавлено [распознавание FMC номеров](/settings/additional/fmc-numbers) по файлу с Wildcard масками и по номерам указанным в CRM * Добавлен узел API `/status` для [автоматизации мониторинга состояния приложения](/for-admins/status-monitoring) * Узел API для ручной загрузки CEL `/pbx/read_cel` поддерживает `.csv` данные * В узел API `/pbx/read_call` добавлено получение логов * Переподключение к AMI при разрыве соединения выполняется без перезапуска приложения * Добавлен флаг `--cleanlist` для выборочной очистки: `l` внешних линий и `s` - `state.json` **Логика обработки звонка** * При отрицательном ответе кастомизации `need_registration` не создаётся задача и не регистрируется звонок * Если выбрано назначение ответственных за звонок по сущности (вариант по умолчанию), то ответственный из сущности используется при регистрации не тольно успешных, но и пропущенных звонков * Исправлено назначение ответственных при пропущенных на IVR * Исправлен порядок работы с сущностями при пропущенных на IVR **Админка** * Добавлена возможность скачивания MySQL таблиц в формате `.csv` * При обновлении добавлена возможность выбора между только установкой патчей или обновлением с новым функционалом * Админка предлагает обновиться через консоль, если следующая версия - "специальная", и на неё нельзя обновиться из админки * Исправлено подвисание интерфейса обновления после неуспешного обращения к службе supervisor * Исправлена блокировка кнопок "Купить" на странице оплаты лицензии * Исправлен баг смены состояния админки при переключении портала * Исправлено подвисание админки при переключении на несуществующий портал * Добавлен статус службы supervisor вместо статуса ОС * Ссылки на документацию открываются в новых вкладках * Добавлены тексты новых статусов * Мелкие правки в админке **Исправлены ошибки** * Исправлена ошибка многократного подключения к C2C-серверу * Исправлена ошибка прикрепления вчерашнего лога к отчёту для техподдержки * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [2.7.1](/changelog-amo#id-2.7.1)) * При запросе несуществующей записи больше не спрашивается пароль * Исправлена проверка статсуса доступности серверов при запрете использования `raw socket` * При Originate звонок запускается даже если номер занят * В логи обновления добавлено больше вывода * Исправлено неожиданное удаление существующей установки при её фактическом отсутствии * Исправлена проверка `logrotate` при установке * Исправлена обработка запроса `/read_cel` при пустом теле запроса (проблема наблюдалась с [2.7.1](/changelog-amo#id-2.7.1)) * Исправлено название задач по умолчанию для исходящих звонков * Исправлены ошибки проверки чисел в файле конфигурации * Исправлена очистка ошибок проверки файла конфигурации * Исправлено сохранение пустых массивов в файл конфигурации * Убран устаревший флаг `hostory-date`, его функционал [заменён](/for-admins/obrabotka-zvonkov-za-period) узлом API `/pbx/read_call` * Исправлена повторная обработка недавних звонков при частых перезапусках **Кастомизатор** * В кастомизацию пути записи добавлено удаление дублирования элементов пути 2.9.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. ### 2.7.4 [#id-2.7.4] > 06.12.2021 **Исправлены ошибки** * Исправлена обработка ошибок API с пустым ID * Исправлена отправка параметров сущности в кастомизацию регистрации звонка * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [2.8.0](/changelog-amo#id-2.8.0)) ### 2.8.5 [#id-2.8.5] > 06.12.2021 **Исправлены ошибки** * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [2.8.0](/changelog-amo#id-2.8.0)) * Исправлено подвисание админки при переключении на несуществующий портал * Исправлена обработка ошибок API с пустым ID * Исправлена отправка параметров сущности в кастомизацию регистрации звонка ### 2.8.4 [#id-2.8.4] > 10.11.2021 **Исправлены ошибки** * Исправлено использование алиасов полей MySQL с флагом `-T` * Исправлено отображение ошибки при запросе несуществующей записи разговора * Исправлен баг чтения массивов в запросах API модуля * Исправлена возможность падения при сохранении `state.json` (могло наблюдаться с [2.7.1](/changelog-amo#id-2.7.1)) * C2C звонки отправляются на Asterisk даже если канал указанного номера занят * Исправлен порядок обработки полей запроса CallBack при использовании Apix * Увеличен таймаут обработки событий CEL * В API `/pbx/read_call` добавлено получение логов по обработанным звонкам **Кастомизатор** * В кастомизации Originate теперь можно добавлять параметры, не предусмотренные конфигом модуля ### 2.7.3 [#id-2.7.3] > 10.11.2021 **Исправлены ошибки** * Исправлено использование алиасов полей MySQL с флагом `-T` * Исправлено отображение ошибки при запросе несуществующей записи разговора * Исправлен баг чтения массивов в запросах API модуля * C2C звонки отправляются на Asterisk даже если канал указанного номера занят * Исправлена возможность падения при сохранении `state.json` (могло наблюдаться с [2.7.1](/changelog-amo#id-2.7.1)) * Исправлен порядок обработки полей запроса CallBack при использовании Apix **Кастомизатор** * В кастомизации Originate теперь можно добавлять параметры, не предусмотренные конфигом модуля ### 2.7.2 [#id-2.7.2] > 14.10.2021 **Исправлены ошибки** * Исправлено зависание авторизации запросов к API модуля после большого числа авторизаций (порядка тысячи) (наблюдалось с версии [2.7.1](/changelog-amo#id-2.7.1)) ### 2.8.3 [#id-2.8.3] > 14.10.2021 **Исправлены ошибки** * Исправлено зависание авторизации запросов к API модуля после большого числа авторизаций (порядка тысячи) (наблюдалось с версии [2.8.0](/changelog-amo#id-2.8.0)) ### 2.7.1 [#id-2.7.1] > 13.10.2021 **Админка** * Исправлено отображение пустого вывода на странице MySQL * Лого - ссылка на главную страницу * Обновлены заголовки страниц мастера * Исправления вёрстки * Автоматическая перезагрузка при смене версии * Исправление многократного запроса пароля в админке * Исправлены ошибки некорректного типа портов * Исправлены чаты **Исправлены ошибки** * Исправлена работа с некорректными MySQL таблицами * Исправлена сортировка при поиске записей в CDR * Исправлено подключение к AMI в мастере * Исправлены заголовки запроса при проверке лицензии по кнопке в админке * state сохраняется только во время простоя * Исправлена проверка статуса БД после предыдущей успешной проверки * Исправлена отправка сущности в кастомизацию регистрации звонка * При ответе обновляется номер принимающей стороны, если он не был известен ранее, при этом проверяется, внутренний ли он * Исправлено отображение ошибок токена **Кастомизатор** * Исправлена ошибка формирования URL при запросах в CRM * Добавлена возможность выбора версии API в запросах * Добавлены функции для упрощения запросов на модуль * Добавлены функции поиска контактов, получения сущностей и добавления заметок * Исправлена проблема превышения лимитов API CRM запросами из кастомизаций (возможность превышения появилась с версии [2.6.0](/changelog-amo#id-2.6.0)) * В логе кастомизатора используется местное время (с версии [2.6.0](/changelog-amo#id-2.6.0) было UTC) ### 2.8.2 [#id-2.8.2] > 11.10.2021 **Админка** * Мелкие улучшения интерфейса **Исправлены ошибки** * При обновлении поля принимающего номера при ответе проверяется, внутренний ли он * Исправлена блокировка сохранения `state.json` * Неотвеченные но "успешные" звонки считаются пропущенными (были успешными с версии [2.8.0](/changelog-amo#id-2.8.0)) * Добавлена обработка [статуса звонка](/faq/detalnye-statusy-zvonka) с ошибкой "Bearer capability not presently available" * Исправлена проблема превышения лимитов API CRM запросами из кастомизаций (возможность превышения появилась с версии [2.6.0](/changelog-amo#id-2.6.0)) * В логе кастомизатора используется местное время (с версии [2.6.0](/changelog-amo#id-2.6.0) было UTC) ### 2.8.1 [#id-2.8.1] > 23.09.2021 **Админка** * Исправлена вёрстка на странице авторизации в CRM * Исправления в статусах приложения, связянных с состоянием токена **Исправлены ошибки** * Исправлен баг смены адреса C2C-сервера с нестандартного обратно на стандартный ### 2.8.0 [#id-2.8.0] > 13.09.2021 **Что нового** * Добавлена возможность обновляться по кнопке из админки. Для этого устанавливается отдельная служба `itgrix_amo_supervisor`. В отдельных случаях, например когда вносятся изменения в `itgrix_amo_supervisor`, потребуется использовать старый способ обновления * Добавлена поддержка детальных статусы звонка: Разговор состоялся, Не дозвонился, Номер занят, Нет на месте, Перезвонить позже, Неверный номер **Админка** * Лицензия обновляется при проверке кнопкой из админки и получении статусов без перезагрузки страницы * При обновлении версии на сервере, админка перезагружается * Исправлена загрузка изменений статусов на странице результатов Мастера * Исправлены заголовки статусов на страницах Мастера * Исправлен баг падения страницы MySQL при пустом выводе * Лого в админке - ссылка на главную страницу * Исправление многократного запроса пароля в админке * По умолчанию логи отображаются с конца файла * Исправлены ссылки на чаты в админке **Исправлены ошибки** * Исправлена неполная остановка когда пользователь не администратор в CRM * Исправлен баг сохранения порта БД при начальной настройке * Исправлен баг проверки настроек БД после предыдущей успешной проверки (присутствовал с 2.7.0) * Исправления редких проблем, препятствовавших сохранению `state.json` * Исправлена отправка сущности в кастомизацию `process_call_params` звонка (присутствовала с 2.6.0) * Исправлена обработка событий перехвата звонка (ошибка с 2.6.0) * Исправление чтения ответов от некорректных MySQL-таблиц * Исправлена сортировка в запросах к CDR * Исправления проверок настроек в мастере * Расширено содержание бэкапа * Исправлены ответы на неизвестные запросы * Логирование неудачной авторизации в админку **Кастомизатор** * Исправлена ошибка формирования URL * Добавлен выбор версии API * Добавлены функции для формирования адресов записей, поиска контактов, добавления заметок, получения сущностей по ID **Изменение требований к системе: требуется поле CEL "extra"** В таблице CEL в базе данных Asterisk теперь требуется наличие поля `extra`. При отсутствии или некорректном заполнении этого поля модуль будет запускаться и работать, но: 1. не будут использоваться детальные статусы звонка (будут только Успешный и Пропущенный); 2. не будут корректно обрабатываться перехваты звонка (набор **\*8**). ### 2.7.0 [#id-2.7.0] > 28.07.2021 **Что нового** * Изменён прокси-сервер C2C по умолчанию (старый доступен опционально) **Админка** * Мелкие улучшения интерфейса **Исправлены ошибки** * Исправлена регистрация пропущенных звонков на IVR * Исправлена регистрация звонков followme с переадресацией на сотовый * Исправлена ошибка при получении сущностей с прикреплёнными сделками и клиентами * Исправлена ошибка, вызывавшая задержку добавления новых пользователей * Исправлена ошибка из-за которой игнорировались таймауты некоторых запросов * Исправлена ошибка остановки сервера при изменении настроек * В запросе read\_call используется местное время вместо UTC и убрано ограничение в 100 записей CEL на звонок * При получении отчёта для техподдержки используется ограничение по времени Переход на новый прокси-сервер C2C состоит из двух частей: * обновление модуля интеграции на версию 2.7.0 * обновление приложения в amoCRM Обновление модуля интеграции осуществляется Вами самостоятельно, либо при содействии нашей техподдержки.\ Обновление приложения в amoCRM произойдёт автоматически. Если обновлён только один из двух компонентов, функция Click-2-Call не будет работать. Мы рекомендуем обновить модуль интеграции до 2.7.0 и дождаться автоматического обновления приложения в amoCRM, но если вы оказались в промежуточной ситуации когда Click-2-Call не работает и требуется срочно восстановить работу, обратитесь в нашу техподдержку, и мы поможем вам временно решить проблему ручной настройкой адреса прокси-сервера. ### 2.6.0 [#id-2.6.0] > 08.06.2021 **Что нового** * Улучшение производительности до 2x за счёт одновременной обработки множества звонков * Добавлены настройки ответственных и этапов воронок для транков * Добавлены [настройки создания задач](/settings/additional/parametry-sozdaniya-zadach) * [Кастомизатор переписан](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0) и теперь поддерживает запросы в CRM, улучшено логирование и обработка ошибок * Максимальная длина внутренних номеров теперь настраивается * В кастомизацию `process_call_params` добавлены данные сущности и сам звонок * Запрос API `/pbx/read_call` поддерживает загрузку звонков по датам **Админка** * Originate по умолчанию выполняется в асинхронном режиме, что предотвращает задержки при частых звонках * Оптимизирована работа с полями выбора пользователей * Статусы для главной странице проверяются быстрее и имеют ограничение по времени проверки * Исправлен баг отображения цен для новых клиентов на странице оплаты лицензии * У воронок статусы переименованы в этапы * Исправлены баги отображения логов * Мелкие исправления текстов и вёрстки в админке **Исправлены ошибки** * Исправлено множество потенциальных багов * Исправлено зависание при ошибке во время штатного перезапуска * Исправления багов кастомизатора * Исправлен баг поиска записей без номера ### 2.5.3 [#id-2.5.3] > 30.04.2021 **Админка** * Обновлены ограничения бесплатной версии * Исправлен многократный запрос списка пользователей * Добавлена настройка асинхронного выполнения Click-to-Call * Настройка `server.host` теперь доступна только для изменения вручную в файле конфигурации * Исправлен выход вспплывающих подсказок за границы страницы * Исправлено отображение опций кастомизаций при отключённом кастомизаторе * В списке внутренних номеров пользователей теперь отображаются все пользователи CRM, улучшена сортировка списка * Мелкие исправления текстов и вёрстки ### 2.5.2 [#id-2.5.2] > 19.04.2021 **Админка** * Исправлено отображение номера новой версии при наличии обновлений * Исправлена вёрстка списка разрешённых пользователей в бесплатном режиме * Исправлен баг загрузки страницы бизнес-логики при указании в настройках пользователя, которого нет в CRM * Добавлена страница оплаты лицензии, видимая при приближении истечения лицензии * Мелкие исправления интерфейса **Исправлены ошибки** * Откат изменения "*считать звонки с номерами `from` и `trunk` но без номера `to` входящими*" (версия 2.5.1) в связи с нарушением работы Click-to-Call и регистрации звонков с переводами * Ответственный сотрудник у новых контактов и сделок не обновляется, если уже правильный * Карточка звонка не отображается при обработке старых звонков * Исправлен баг выбора воронки по транку * Разрешено указывать транку пустую воронку * Исправлено падение при завершении звонка без сущности * Обновлены ограничения бесплатной версии: * Чёрный/белый список отключен * Воронку можно выбрать только одну для всех звонков * Первый ответственный - у кого звонит телефон * Ответственный за пропущенные звонки - по сущности звонящего * Исправлена загрузка svg файлов * Теперь нельзя удалить всех пользователей из списка внутренних номеров, должен быть хотя бы один * Улучшено описание ошибок Click-to-Call * Click-to-Call по умолчанию выполняется асинхронно (настраивается) * Исправлена ошибка доступа к базе данных при сборе отчёта для техподдержки ### 2.5.1 [#id-2.5.1] > 24.03.2021 **Админка** * Поиск пользователей теперь не регистрозависимый * Список пользователей с внутренними номерами на странице бизнес-логики сортируется по алфавиту * Исправления вёрстки **Исправлены ошибки** * Исправлено зависание при обрыве связи с Asterisk AMI * Исправлена проверка версии Asterisk * Звонки с номерами `from` и `trunk` но без номера `to` теперь обрабатываются как входящие * Исправлена работа с файлами при использовании админки ### 2.5.0 [#id-2.5.0] > 19.03.2021 **Что нового** * Добавлена настройка воронки/статуса по умолчанию * Воронка по умолчанию используется для транков, где отдельная воронка не задана * Статус по умолчанию используется всегда **Логика** * При пропущенном звонке на IVR создаётся не только контакт, но и сделка **Админка** * Добавлена возможность настроить более одного внутреннего номера на пользователя * При получении токена, портал сохраняется автоматически * Исправлены ошибок выбора пользователей * Исправлена ошибка сохранения разрешённых пользователей * Исправлено отсутствие полей настройки разрешённых пользователей * Исправлена блокировка сохранения настроек после авторизации в CRM **Исправления** * Убрана неиспользуемая кастомизация номера пользователя * Исправлено отображение карточки звонка когда первым ответственным выбран пользователь по умолчанию * Если в событии\*\* \*\*CEL `CHAN_START` отсутствует поле `cid_num`, то внутренний номер сотрудника будет извлекаться из поля `channame` * Завершение звонка теперь разрешено не только во время разговора, но и на этапе дозвона * Содержание ошибок AMI теперь отображается и выводится в лог * Повторные запросы при сетевых ошибках проверки лицензии * Повторные запросы при сетевых ошибках CRM * Кастомизация пути до записей звонков теперь имеет отдельный фиксированный таймаут 10 секунд, его нельзя изменить * Обновлены настройки подключения к Apix ### 2.4.0 [#id-2.4.0] > 20.02.2021 **Что нового:** * Добавлена опция автоматического завершения задач после звонка с ответом **Админка** * SQL-запросы ограничены только немодифицирующими **Исправления** * Исправлено редкое падение модуля, вызываемое действиями пользователя в админке * Улучшено логирование ошибок кастомизаций * Обновлена кастомизация Originate * Добавлен таймаут соединения с Asterisk AMI * Исправлено зависание при ошибке соединения AMI * Исправлена работа ч/б списка при пропущенных звонках ### 2.3.0 [#id-2.3.0] > 28.01.2021 **Что нового:** * Добавлен выбор начального ответственного для новых сущностей: пользователь, на которого поступил звонок, либо ответственный по умолчанию **Логика обработки звонков** * Изменён расчёт длительности звонков при переводах: вместо длительности последнего разговора, время от первого ответа до конца звонка * Исправлена обработка переводов исходящих звонков **Админка** * На странице бизнес-логики при выборе ответственного по умолчанию работает поиск * На страницу с логами добавлено чтение последних `n` строк лога модуля * На странице статусов отображается состояние сервера авторизации CRM и сервера C2C * Обновлены тексты ошибок * Мелкие исправления и улучшения **Исправления** * Перезапуск при ошибках чтения БД и соединения с Asterisk AMI * Добавлен таймаут запросов в CRM * Исправлена регистрация исходящих звонков на пользователя по умолчанию * Исправлена повторная обработка недавних завершённых звонков при перезапуске модуля * Исправлен сбор отчётов для техподдержки на дополнительных копиях модуля * Установлен минимальный таймаут кастомизаций: 100 мс * Исправлены повторные запросы поиска сущности при назначении ответственного за пропущенный * Улучшено логирование ### 2.2.3 [#id-2.2.3] > 18.12.2020 **Исправления** * Исправлено переподключение к Apix при ошибках * Исправлено редактирование транков в админке ### 2.2.2 [#id-2.2.2] > 16.12.2020 **Что нового:** * На странице статусов отображается какой подключен портал **Исправления** * Исправлено падение при проблемах проверки соединения с базой данных * Обновлено значение variable в Originate для автоответа при конвертации старой версии конфига * Исправлена логика регистрации пропущенного на IVR (регистрация на пользователя по умолчанию при звонке на транк) * Исправлены ошибки в админке * Улучшена обработка ошибок запросов в CRM * Исправлен поиск записей в CDR когда в номерах есть буквы ### 2.2.1 [#id-2.2.1] > 19.11.2020 **Исправления** * Исправлена работа чёрного/белого списка ### 2.2.0 [#id-2.2.0] > 19.11.2020 **Новое** * Добавлена настройка чёрного/белого списка * Добавлен интерфейс настройки префиксов номеров телефонов * Добавлены параметры для использования https порта и своего сертификата * На странице статусов отображается состояние модуля * Добавлена функция формирования отчёта для техподдержки * Корневой адрес перенаправляет на страницу статусов **Исправления** * Улучшен вывод ошибок запросов в CRM * Добавлен вывод ошибок кастомизаций * Исправлена регистрация неотвеченного звонка на IVR * Исправлен перенос блока кастомизации из старого конфига * Исправлена загрузка старых звонков * Исправлено форматирование вывода с флагом `-h` ### 2.1.1 [#id-2.1.1] > 03.11.2020 **Исправления** * Исправлен тип ID ответственного по умолчанию в админке ### 2.1.0 [#id-2.1.0] > 30.10.2020 **Новое** * Originate поддерживает параметры Variable и Codecs, по умолчанию - автоответ * Поддержка префиксов * Поддержка регистрации звонков и записей followme **Исправления** * Расширено логирование запросов в CRM и операций обработки звонка * Исправлены специфические для CRM настройки по умолчанию * Восстановлен скрипт обновления * Исправлено отображение лога в админке * Исправлено формирование записей о неотвеченных звонках * Исправлена ошибка формирования данных C2C * Исправлен баг с продолжением работы Asterisk после остановки модуля ### 2.0.0 [#id-2.0.0] > 25.09.2020 **Новое** * Добавлен чат * Удалены скрипты update.sh и install.sh **Исправления** * Исправлены проблемы с сохранением токена * Исправлена ошибка с созданием множества сделок * Добавлен параметр `call_id` в логах API запросов * При создании звонка используется продолжительность последнего разговора ### 1.1.8 [#id-1.1.8] > 08.05.2020 **Баги:**\ 1\. Не запускается модуль с пустым порталом 2. Падение при перезапуске подключения к CRM **Фичи:**\ 1\. Убрали время из запроса к БД\ 2\. Обработка ошибок подключения к БД ### 1.1.7 [#id-1.1.7] > 22.01.2020 **Лог:**\ 1\. Добавили самари\ 2\. Более информативные сообщение при поиске сущности **Админка:**\ 1\. Кнопка в админке для повторного запроса лицензии\ 2\. Отображение типа и срока лицензии в админке\ 3\. Исправление ошибок и недочётов вёрстки ### 1.1.6 [#id-1.1.6] > 20.12.2019 Исправлены ошибки в работе админки\ 1\) Ошибки мастера\ 2\) Ошибки при переподключении к зависимым сервисам\ 3\) Мелкие ошибки на странице с логами и sql запросами ### 1.1.5 [#id-1.1.5] > 12.12.2019 **Админка:**\ 1\. Изменили вид списка сопоставления пользователей и номеров, теперь можно указывать произвольные номера (не только sip peers)\ 2\. Исправлена ошибка удаления объектов при сохранении (например, часть originate при исправлении одного поля)\ 3\. Добавлен лоадер при ожидании ответа модуля (переподключение к зависимым службам)\ 4\. Починили страницу лога\ 5\. Вернули и поместили на место чатик\ 6\. Подсвечиваем красным пустые поля\ 7\. Убрали поле "history\_start\_date"\ 8\. Поправили внешний вид в ограниченном режиме **Прочее:**\ 1\. В скрипте установки указан в тексте сервиса указали путь до бинарника\ 2\. Удаляем переменную окружения LD\_LIBRARY\_PATH при вызове кастомизатора и Астериска, чтобы избежать конфликтов ### 1.1.4 [#id-1.1.4] > 28.10.2019 **Исправление ошибок:**\ Не создаём контакт и сделку, если пользователь не найден **Кастомизации:**\ Добавлена кастомизация номера перед созданием контакта и сделки ### 1.1.3 [#id-1.1.3] > 15.10.2019 **Добавлены ограничения в бесплатном режиме:**\ 1\) Работа ведётся для двух пользователей (заполняются в аминке)\ 2\) Кастомизации отключены\ 3\) Всегда включено создание контактов и сделок **Новая логика создания контактов и сделок:**\ 1\) Один раз за весь звонок проверяем, нужно ли его решистрировать.\ 2\) Задачу по пропущенному звонку станвится на сотрудника, ответсвенного за сущность. **Исправления ошибок:**\ 1\) Исправлена работа флага "-c, --clean"\ 2\) Вернули отладочный вывод для результатов кастомизаций **Возможности кастомизации:**\ 1\) Добавлены новые методы:\ \- process\_call\_params + соответствующий параметр в конфиге\ \- process\_contact\_creation\_params + соответствующий параметр в конфиге\ \- need\_registration\ 2\) Данные звонка и разговора добавлены в кастомизацию контакта, сделки, звонка и задачи.\ Подробности [здесь](/custom_amo#id-1-need_registration).\ 3\) Удалили методы:\ \- get\_update\_activity\_fields\ \- get\_update\_lead\_fields\ \- process\_search\_params\ \- process\_final\_params **Изменение параметров в конфиге:**\ 1\) Удалили:\ \- search\_in\_2gis\ \- customize\_final\_params\ 2\) Переименовали параметры:\ \- create\_contact\_for\_incoming ⇒ create\_contact**s**\_for\_incoming\ \- create\_contact\_for\_outgoing ⇒ create\_contact**s**\_for\_outgoing\ \- create\_lead\_for\_incoming ⇒ create\_lead**s**\_for\_incoming\ \- create\_lead\_for\_outgoing ⇒ create\_lead**s**\_for\_outgoing ### 1.0.4.0 [#id-1.0.4.0] > 18.07.2019 **Баги:**\ 1\) Исправлена ошибка в файле сервиса: неверное имя бинарника\ 2\) Исправлено сохранение списка сопоставления пользователей и пиров ### 1.0.3.0 [#id-1.0.3.0] > 05.07.2019 **Возможости:** 1. Добавлено создание неразобранного для новых входящих. 2. Добавлен флаг "testcall" для запуска модуля с одним звонком. **Админка:** 1. Починили поиск ответственного. 2. Исправлен вид выпадающих списков пользователей. 3. Исправлено отображение логотипа. 4. Исправлена вёрстка на странице результата проверки. ### 1.0.2.0 [#id-1.0.2.0] > 02.07.2019 **❗ Очень важные изменения:** 1. Изменили имя бинарника на itgrix\_amo **Админка:** 1. Исправлена работа списка соответсвия пользователей и номеров 2. Исправлено описание опций ### 1.0.1.0 [#id-1.0.1.0] > 01.07.2019 Первая запись. Ура. **Кастомизация:** 1. Номер телефона кастомизируется перед созданием задачи. 2. Номер телефона кастомизируется перед поиском и созданием сущностей. ...\ \ **Логика:** 1. Поиск сущностей по номеру выполняется без префикса. 2. Создание сделки в начале звонка. 3. Перенаправляем http-запросы к модулю на https. 4. Добавлено соответствие транков и воронок. 5. Обновление конфига с виджета в CRM. 6. Убрали utc\_offset. ...\ \ **Админка:** 1. Добавлена галочка "Создавать дело на каждый перевод". 2. Исправлена вёрстка. 3. Добавлен перевод Админки. 4. Исправлено сохранение даты. 5. Исправлено время. 6. Переместили стили на страницу HTML. # Change log (новые версии) itgrix_bx (/changelog-bx) Подписывайтесь на канал в Telegram [Itgrix\_news](https://t.me/itgrix_news), где публикуются изменения Itgrix. ## Версии [#versii] | Версия (новый функционал) | Тип | Актуальный релиз (патч) | | ---------------------------------- | -------------- | ------------------------------------------------ | | [3.13](/changelog-bx#id-3.13.0).\* | Актуальная | [3.13.16](/changelog-bx#id-3.13.16) - 23.06.2026 | | [3.12](/changelog-bx#id-3.12.0).\* | Поддерживается | [3.12.11](/changelog-bx#id-3.12.11) - 29.01.2026 | | [3.11](/changelog-bx#id-3.11.0).\* | Поддерживается | [3.11.14](/changelog-bx#id-3.11.14) - 15.07.2025 | Версии обозначаются тремя числами `X.Y.Z`: * `X` - мажорная версия, крупные изменения с нарушением совместимости * `Y` - минорная версия, новый функционал и доработка старого * `Z` - патч, исправления ошибок Последние 3 минорные версии обновляются патчами. Актуальная минорная версия содержит самый новый функционал и все применимые исправления. Поддерживаемые версии получают только совместимые с ними исправления. Обновиться на версию `X.Y.Z`: `/opt/itgrix_bx/update.sh --version=X.Y.Z` ## Лог изменений [#log-izmenenii] Версии упорядочены по дате релиза. ### 3.13.16 [#id-3.13.16] > 23.06.2026 **Админка** * В админку добавлены альтернативные ссылки на документацию * На странице состояния добавлены подробные сообщения об отсутствии необходимых прав пользователя AMI **Исправлены ошибки** * Исправлено ошибочное изменение типа звонка при некорректном расположении номеров в событии завершения звонка * Исправлена ошибка сохранения/загрузки статистики количества звонков (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * В статистику ошибок включены ошибки кастомизатора * В вывод `/status` добавлено состояние парсера телефонов * Добавлена локализация для текста "Download recording" в ссылках на скачивание записи звонка ### 3.13.15 [#id-3.13.15] > 29.04.2026 **Исправлены ошибки** * Исправлено редкое нарушение порядка обработки событий дозвона и ответа на C2C звонках (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена ошибка кастомизации номеров телефонов на звонках, которые инициализируются на локальных каналах (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена задержка проверки лицензии после сетевых проблем * Исправлена опечатка в выводе флага `--help` * При регистрации звонка используется поле `EXTERNAL_CALL_ID` * Улучшена процедура проверки пользователя AMI * При авторизации в портале, его адрес автоматически добавляется в список разрешённых доменов CORS * При установке файл конфигурации logrotate создаётся с более строгими правами доступа `0600` * Обновлена устоновочная версия файла конфигурации logrotate: хранить 7 ротаций вместо 5, использовать "вчерашнюю" дату в именах файлов, обновлены комментарии **Кастомизатор** * В файле конфигурации перечисляются все точки кастомизации, в том числе отключенные ### 3.12.11 [#id-3.12.11] > 29.01.2026 **Исправлены ошибки** * Исправлена проверка прав БД со старыми настройками в момент изменения настроек подключения * Исправлено формирование адресов записей с не-HTTP(S) схемой * Оптимизирован запрос поиска связанных звонков * Улучшено логирование бэкапов и добавлена поддержка симлинков при бэкапе ### 3.13.14 [#id-3.13.14] > 28.01.2026 **Админка** * Улучшена вёрстка таблиц в админке * Улучшено отображение ошибок переобработки звонков в админке * Исправлены ошибки выполнения команд state в админке (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена редкая ошибка формирования CSV файлов * Добавлена опция переобработки звонков с очисткой state **Исправлены ошибки** * Исправлена ошибка работы с данными звонка при показе карточки на ответе (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Оптимизирован запрос поиска связанных звонков (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена ошибка переподключения к БД при сетевых проблемах * Исправлено формирование адресов записей с не-HTTP(S) схемой **Кастомизатор** * Данные кастомизаций `custom_data` восстанавливаются при повторной обработке звонка * В данных кастомизации `customize_recording_query` поле "CallID" переименовано в "call\_id" ### 3.13.13 [#id-3.13.13] > 16.10.2025 **Админка** * Добавлена возможность скачать вывод в формате CSV на странице БД Itgrix * В списках пользователей в админке отображаются только активные * Исправлена проверка прав БД со старыми настройками в момент изменения настроек подключения (наблюдалось с версии [3.13.10](/changelog-bx#id-3.13.10)) **Исправлены ошибки** * Исправлена циклическая переобработка звонка при ошибке регистрации (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлено срабатывание фильтра по внутренним номерам на транке ### 3.13.12 [#id-3.13.12] > 20.08.2025 **Исправлены ошибки** * Исправлено редкое падение при коллизии ID разговоров между звонками (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлен устаревший запрос поиска звонков за время простоя (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлен вывод ошибки таймаута в лог при очень быстром выполнении SQL запросов (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена работа таймаута при проверке соединения с БД Asterisk (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Улучшено логирование бэкапов и добавлена поддержка симлинков при бэкапе ### 3.11.14 [#id-3.11.14] > 15.07.2025 **Админка** * Обновлён порядок, названия и логотипы приложений на странице авторизаци в CRM * Исправлен формат вывода минимальной версии Asterisk в статусах в админке * Исправлена обработка "certified" версий Asterisk **Исправлены ошибки** * Исправлено зависание при одновременном сбое AMI и MySQL * Добавлена поддержка параметра `path` в узле API `/get_config` ### 3.12.10 [#id-3.12.10] > 14.07.2025 Обратите внимание на изменения в лицензировании для лицензии по подписке Маркет Битрикс24: * 5 пользователей вместо 6; * только базовые кастомизации вместо всех кастомизаций. Для работы с лицензией по подписке необходим доступ к серверу лицензирования lk.bx24asterisk.ru, иначе действует бесплатная лицензия с меньшим функционалом. **Админка** * В статусы на главной странице добавлена проверка прав на обновление таблицы CDR * Исправлена проблема сохранения логина AMI * Исправлена проблема отображения статуса лицензии * Обновлён формат минимальной версии Астера в текстах в админке * Исправлены ошибки сохранения настроек **Исправлены ошибки** * Исправлена загрузка ID пользователей в сохранённых звонках при возобновлении работы после остановки * Исправлено редкое падение при переводах * Изменены условия бесплатной лицензии по подписке Маркет Битрикс24: 5 пользователей, только базовые кастомизации * Улучшено логирование API запроса `/status` ### 3.13.11 [#id-3.13.11] > 03.07.2025 **Исправлены ошибки** * Исправлен цикл переподключения сокета в админке (наблюдалось с версии [3.13.10](/changelog-bx#id-3.13.10)) * Исправлено падение при обработке ошибки дублирования регистрации звонка (наблюдалось с версии [3.13.10](/changelog-bx#id-3.13.10)) * Улучшено логирование API запроса `/status` ### 3.13.10 [#id-3.13.10] > 01.07.2025 **Что нового** * В статусы на главной странице добавлена проверка прав на обновление таблицы CDR * В вывод API запроса `/status` добавлены поля `app.launched_at` и `app.system_up_since` **Админка** * Исправлена редкая ошибка переподключения к сокету и использование некорректного порта для сокета * Улучшена вёрстка на странице БД Asterisk * Обновлены плейсхолдеры полей запросов в админке **Исправлены ошибки** * Исправлено отсутствие события начала звонка при обработке звонков, включающих дозвон самому себе * Улучшена работа со `state.db` при пропуске шагов обработки звонка и при работе с зависимыми шагами * Исправлена задержка применения настроек ч/б фильтров (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Добавлена обработка ошибок отсутствия звонка в CRM на момент завершения звонка **Кастомизатор** * ID звонка используется при логировании в кастомизаторе * В кастомизации при автораспределении добавлены данные звонка ### 3.13.9 [#id-3.13.9] > 29.04.2025 **Исправлены ошибки** * Исправлено обновление пути до записи в таблице CDR когда исходное значение recordingfile не содержит полный путь (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * В запрос API `/state` добавлена поддержка заголовка `Accept: application/json` * Обновление пути до записи в таблице CDR не выполняется если алиас поля recordingfile совпадает с другим полем **Кастомизатор** * В кастомизацию `customize_record_conversion` добавлены параметры `initial_cdr_recordingfile` и `updated_cdr_recordingfile` * Функции логирования в кастомизаторе принимают значения любого типа, а не только строки * Добавлено определение ID звонка (`2_call_id`) в кастомизациях `process_record_file_path` и `customize_autodistribution` ### 3.13.8 [#id-3.13.8] > 10.04.2025 **Админка** * В админке на странице БД Itgrix добавлена история запросов **Исправлены ошибки** * Исправлено обновление имени записи в таблице CDR при конвертации в mp3 (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) ### 3.13.7 [#id-3.13.7] > 02.04.2025 **Админка** * В админке добавлена обработка ошибки настройки доступа к службе Supervisor по HTTPS (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * В админке исправлено отображение новых кастомизаций (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Обновлена всплывающая подсказка о включении конвертации записей в mp3 **Исправлены ошибки** * Исправлено падение при отключении от БД Asterisk во время выполнения запроса (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлен порядок создания таблиц в БД Itgrix при использовании флага `--sql` (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Добавлен регулярный вывод в лог статистики звонков в БД Itgrix ### 3.13.6 [#id-3.13.6] > 17.03.2025 **Исправлены ошибки** * Исправлена работа ч/б списка по транкам: применятся только ко входящим звонкам (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * По умолчанию отключена конвертация записей через кастомизацию, вместо этого используются настройки конвертера в админке * Путь к исполняемому файлу ffmpeg по умолчанию изменён с относительного на абсолютный ### 3.13.5 [#id-3.13.5] > 11.03.2025 **Админка** * Исправлено отображение кастомизаций в админке в режиме по подписке (наблюдалось с версии [3.13.4](/changelog-bx#id-3.13.4)) **Исправлены ошибки** * Исправлено падение при чтении устаревших данных регистрации звонка из БД (наблюдалось с версии [3.13.4](/changelog-bx#id-3.13.4)) * Добавлен порт HTTPS Supervisor по умолчанию ### 3.13.4 [#id-3.13.4] > 10.03.2025 Обратите внимание на изменения в лицензировании для лицензии по подписке Маркет Битрикс24: * 5 пользователей вместо 6; * только базовые кастомизации вместо всех кастомизаций. Для работы с лицензией по подписке необходим доступ к серверу лицензирования lk.bx24asterisk.ru, иначе действует бесплатная лицензия с меньшим функционалом. **Админка** * Исправлена ошибка проверки статуса БД Asterisk до создания таблиц в БД Itgrix (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) **Исправлены ошибки** * Улучшена процедура повторной регистрации звонка при переобработке * Исправлена обработка обратных звонков с коротких номеров * Изменены условия бесплатной лицензии по подписке Маркет Битрикс24: 5 пользователей, только базовые кастомизации ### 3.13.3 [#id-3.13.3] > 03.03.2025 **Исправлены ошибки** * Исправлена загрузка ID пользователей в сохранённых звонках при возобновлении работы после остановки (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена работа флагов очистки данных приложения (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Добавлена статистика по времени выполнения операций с БД * Улучшено логирование при таймауте операций с БД ### 3.13.2 [#id-3.13.2] > 27.02.2025 **Админка** * Исправлено выполнение пользовательских SQLite запросов типа update из админки (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) **Исправлены ошибки** * Исправлено падение при проверке наличия регистрации в данных звонка (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) ### 3.13.1 [#id-3.13.1] > 26.02.2025 **Админка** * Исправлено отображение устаревшей версии страницы ч/б списков в админке (наблюдалось с версии [3.13.0](/changelog-bx#id-3.13.0)) * Исправлена проблема отображения обновлений в админке (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Исправлен формат вывода минимальной версии Asterisk в статусах в админке **Исправлены ошибки** * Из установочного файла конфигурации убраны примеры заполнения разрешённых пользователей ### 3.13.0 [#id-3.13.0] > 24.02.2025 **Внимание! Изменения в кастомизаторе нарушают обратную совместимость с кастомизациями, написанными для версий ниже v[3.10.0](/changelog-bx#id-3.10.0)!** В версии v[3.10.0](/changelog-bx#id-3.10.0) был добавлен новый [формат данных звонка](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh) `call_full`, но старые поля в корне данных кастомизаций были временно оставлены для совместимости. Теперь эти старые поля убраны и данные, которые присутутвуют в `call_full`, более не дублируются в корне. Если у вас есть кастомизации, написанные для версий ниже v[3.10.0](/changelog-bx#id-3.10.0), вам может быть нужно обновить их код. Обратитесь за дополнительной информацией в техподдержку. **Что нового** * Вместо файла состояния `state.json` теперь используется SQLite база данных `state.db`. Благодаря этому: * Во время низкой активности приложение повторно обрабатывает звонки, при обработке которых возникли ошибки * Результат каждого действия при обработке звонка сохраняется и используется при повторной обработке для предотвращения дублирования * При восстановлении работы после перезапуска, звонки за время с момента остановки обрабатываются в отдельном потоке с меньшим приоритетом и не блокируют обработку текущих звонков, так же как при повторной обработке во время низкой активности * Уменьшен объём логирования, и теперь по умолчанию данные звонка выводятся в лог только в конце звонка * Добавлена конвертация записей в основной логике (не через кастомизацию) при помощи сторонних конвертеров, в том числе `ffmpeg` в поставке модуля * Добавлена возможность передавать произвольные данные между кастомизациями без использования специальной базы данных * Добавлен чёрный/белый список транков в админке * Добавлены новые кастомизации: параметров конвертации записи, запроса поиска записи, обработки ответа на Originate **Админка** * На страницу статусов добавлен статус наличия/активности в CRM всех пользователей, выбранных в настройках * Добавлены настройки конвертации записи * Добавлена страница "Itgrix DB" для доступа к `state.db` * Улучшена работа списков * Улучшена работа с веб-сокетами * Исправлено отображение неактивных пользователей в списках **Обработка данных звонков** * Реализована обработка C2C звонков на несколько устройств по протоколу PJSIP * Исправлено отсутствие завершения разговора в одном из звонков управляемого перевода * Исправлена обработка неотвеченных FollowMe звонков **Исправлены ошибки** * Исправлена замена экранированных символов Юникод при выводе в лог * Исправлено использование параллельных батч-запросов при их низком заполнении * При ошибке CRM 401 делается попытка обновить токен * Добавлен таймаут для процедуры остановки приложения * Улучшена обработка ошибок в коннекторе CRM * Улучшено логирование ошибок запросов к CRM **Кастомизатор** * Данные из сообщения AMI OriginateResponse включены в данные о регистрации звонка * Обновлена документация в кастомизациях * Убраны устаревшие поля во входных данных кастомизаций (в пользу нового поля `call_full`) **Служба Supervisor** * Добавлена поддержка HTTPS ### 3.12.9 [#id-3.12.9] > 19.02.2025 **Админка** * Исправлены ошибки сохранения данных в мастере настройки * Исправлена обработка "certified" версий Asterisk **Исправлены ошибки** * Добавлена поддержка параметра `path` в узле API `/get_config` * Исправлена ошибка при сравнении таймштампов времени завершения разговоров на x32 системах * Добавлена защита от потенциальных зависаний в процесе остановки приложения ### 3.12.8 [#id-3.12.8] > 13.01.2025 **Админка** * Обновлён порядок, названия и логотипы приложений на странице авторизаци в CRM * Исправлено отображение кнопки перезапуска служб * В Мастере настройки исправлено сохранение настроек при переходах между шагами * Исправлено отображение паролей **Исправлены ошибки** * Исправлены ответы на запросы `/pbx/read_call`, `/pbx/read_cel` и `/crm/request` при остановке модуля * Исправлено редкое зависание при переобработке частично обработанных звонков (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) ### 3.12.7 [#id-3.12.7] > 17.12.2024 **Админка** * Исправлен вывод старых логов в ответ на запрос переобработки звонка (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) **Исправлены ошибки** * Исправлено зависание при одновременном сбое AMI и MySQL * Исправлено редкое падение при одновременном наполнении и выводе данных статистики (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Добавлена попытка автоматического обновления токена при ошибке авторизации в CRM * Улучшено логирование ошибок запросов к CRM ### 3.12.6 [#id-3.12.6] > 20.11.2024 **Админка** * Исправлена регулярная потеря соедиения с вебсокетом для обновления статуса приложения в админке (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) **Исправлены ошибки** * Исправлено чтение целочисленных значений в диагностических запросах к БД Asterisk (наблюдалось с версии [3.12.3](/changelog-bx#id-3.12.3)) * Исправлена обработка неактивных пользователей: при поиске по номеру телефона отдавать приоритет активным (наблюдалось с версии [3.12.3](/changelog-bx#id-3.12.3)) ### 3.11.13 [#id-3.11.13] > 19.11.2024 **Админка** * Обновлена документация кастомизаций в Админке **Исправлены ошибки** * Добавлено кэширование неактивных пользователей * Улучшена обработка ошибок соединения с C2C-сервером * Включен вывод в лог результата управляемого перевода (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено чтение целочисленных значений в диагностических запросах к БД Asterisk ### 3.10.19 [#id-3.10.19] > 19.11.2024 **Админка** * Обновлена документация кастомизаций в Админке **Исправлены ошибки** * Дополнен список прав AMI по умолчанию * Более подробный вывод в лог данных регистрации звонка * Исправлено редкое падение при чтении данных AMI * Исправлена ошибка чтения ID при создании задачи * Улучшена обработка ошибок соединения с C2C-сервером * Исправлено чтение целочисленных значений в диагностических запросах к БД Asterisk **Кастомизатор** * Разрешено увеличивать таймаут для кастомизации пути записи ### 3.12.5 [#id-3.12.5] > 08.10.2024 **Исправлены ошибки** * Исправлен вывод в лог содержимого файла записи при таймауте запроса прикрепления записи * В ответ на запрос `/crm/request` добавлен ID запроса * При обработке запроса `/pbx/read_call` логируется ID запроса, добавлен вывод в лог если найдено ноль записей CEL * Включен вывод в лог сообщения об успешном переводе звонка ### 3.12.4 [#id-3.12.4] > 03.09.2024 **Админка** * Обновлена документация кастомизаций в Админке **Исправлены ошибки** * Исправлены ошибки поиска неактивных пользователей в API модуля (наблюдалось с версии [3.12.3](/changelog-bx#id-3.12.3)) * Исправлена обработка ошибок чтения запросов от сервера C2C * Исправлено поведение по умолчанию для кастомизаций ссылки на запись и показа карточки: вместо отмены запроса ничего не менять (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен вывод в лог специальных символов HTML * Исправлена ошибка логирования входящих запросов (наблюдалось с версии [3.10.10](/changelog-bx#id-3.10.10)) ### 3.12.3 [#id-3.12.3] > 18.07.2024 **Исправлены ошибки** * Исправлено потенциальное зависание авторизации HTTP-сервера при одновременном таймауте и успехе * Добавлено кэширование неактивных пользователей ### 3.11.12 [#id-3.11.12] > 04.07.2024 **Исправлены ошибки** * Исправлено редкое падение при определении ответственного за звонки, неотвеченные на IVR * Исправлена ошибка в альтернативном способе поиска ID разговора при управляемом переводе * Исправлена ошибка чтения ID при создании задачи (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено редкое зависание при продолжительных сетевых проблемах связи с AMI (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) ### 3.12.2 [#id-3.12.2] > 03.07.2024 **Админка** * Исправлено отображение успеха при нажатии кнопки Обновить список пользователей (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) **Исправлены ошибки** * Исправлено редкое падение на звонках с пустыми номерами в переводах (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Исправлено редкое падение при определении ответственного за звонки, неотвеченные на IVR (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Исправлено редкое зависание при продолжительных сетевых проблемах связи с AMI (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлена ошибка подсчёта данных статистики на час (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Расширена статистика запросов к CRM ### 3.12.1 [#id-3.12.1] > 26.06.2024 **Исправлены ошибки** * Исправлена ошибка редактирования источников транков в админке (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) * Исправлена ошибка загрузки пользователей в админке (наблюдалось с версии [3.12.0](/changelog-bx#id-3.12.0)) ### 3.12.0 [#id-3.12.0] > 18.06.2024 **Что нового** * События CEL с `channame` вида `Local/...` обрабатываются и используются для обработки управляемых переводов * Добавлено обновление ответственных в повторных лидах * Повышена производительность за счёт отправки нескольких запросов `batch` в CRM одновременно * Создание сущности считается успешным если получен ID но не сама сущность * Изменён формат внутренних ID в логах * Добавлено сквозное логирование с использованием внутренних ID в обработке автораспределения, C2C и запросов от кастомизаций * Улучшена обработка и вывод ошибок запросов в CRM * Отчёт для техподдержки можно генерировать запуском приложения с флагом `--report`, даже если нормальный запуск проходит неуспешно * В запросе `/pbx/read_call` можно указывать настройки интервалов между событиями звонка и добавлять связанные звонки * В запрос `/pbx/read_cel` добавлена поддержка данных в формате `.json` * В запросе `/crm/request` можно указывать ID звонка **Админка** * На главной странице добавлена поддержка вывода нескольких сообщений в одном статусе приложения * Добавлена страница настройки FMC * Улучшено обновление статусов приложения в реальном времени **Исправлены ошибки** * В настройках `logrotate` при установке явно указывается использование даты в именах файлов * Улучшена обработка временных зон при чтении CEL * Звонки неизвестного типа не удаляются из кэша на ответе * Процедура обновления номеров телефонов в звонке сделана более безопасной * Исправлена ошибка в альтернативном способе поиска ID разговора при управляемом переводе **Кастомизатор** * Добавлена кастомизация отклонённых событий звонка, с помощью которой можно обрабатывать звонки между сотрудниками, нераспознанные звонки, дубликаты звонков и звонки с некорректными данными * Переводы звонков хранятся в данных звонка как отдельные объекты * В запросе пользователей можно пользоваться кэшем для поиска по ID и телефону * Параметр ActionID для Originate включён в кастомизацию ### 3.11.11 [#id-3.11.11] > 30.05.2024 **Исправлены ошибки** * Исправлено отображение успеха авторизации в CRM * Исправлены редкие ошибки валидации настроек * Исправлен многократный перезапуск при обновлении токена CRM когда открыта админка (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлена ошибка скрытия карточки после длинных звонков (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Улучшена обработка ошибок авторизации в CRM * Дополнен список прав AMI по умолчанию * Исправлены ошибки расписания проверки лицензии (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено редкое падение при чтении данных AMI * Более подробный вывод в лог данных регистрации звонка * Добавлен вывод в лог момента отправки запроса Originate ### 3.10.18 [#id-3.10.18] > 08.04.2024 **Исправлены ошибки** * Запрос пользователей может работать на основе кэша когда нет соединения с CRM * Исправлен сброс кэша пользователей при выполнении запроса с фильтром (наблюдалось с версии [3.8.0](/changelog-bx#id-3.8.0)) * Исправлено потенциальное зависание при ошибках проверки лицензии (наблюдалось с версии [3.8.0](/changelog-bx#id-3.8.0)) * Исправлена ошибка закрытия карточки звонка при большой продолжительности разговора ### 3.11.10 [#id-3.11.10] > 04.04.2024 **Что нового** * Добавлено новое опциональное разрешение приложения `user.userfield` для доступа к кастомным полям пользователей **Админка** * Подсказки в админке дополнены ссылками на актуальную документацию **Исправлены ошибки** * Исправлен сброс кэша пользователей при выполнении запроса с фильтром (наблюдалось с версии [3.8.0](/changelog-bx#id-3.8.0)) * Исправлена ошибка регистрации звонка с внешней линией, не принадлежащей текущему инстансу (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлена задержка обработки управляемых переводов при наличии локальных каналов (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлена редкая ошибка определения статуса звонка при его завершении (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлена ошибка проверки лицензии при запуске кастомизаций (наблюдалось с версии [3.10.14](/changelog-bx#id-3.10.14)) * Исправлено потенциальное зависание при ошибках проверки лицензии (наблюдалось с версии [3.8.0](/changelog-bx#id-3.8.0)) ### 3.11.9 [#id-3.11.9] > 12.02.2024 **Админка** * Обновлены подсказки в админке **Исправлены ошибки** * Реализована синхронизация номеров `from` между начальными исходящими PJSIP разговорами * В настройки по умолчанию (при начальной установке) добавлена автозамена номера клиента на C2C: удаление не-цифровых символов * В настройках по умолчанию (при начальной установке) отключена автозамена FMC номеров * Исправлены лишние запросы лицензии при обновлении токена CRM * Исправлено определение пути к файлу `fmc_patterns` для нестандартных установок **Логи** * Исправлен некорректный вывод ошибки поиска сущности в `OriginatedConversationRequested` * Исправлено некорректное логирование ID в ошибке создания канала ### 3.11.8 [#id-3.11.8] > 18.12.2023 **Исправлены ошибки** * Исправлено падение при дозвоне на FMC номер не распознанный как FMC (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.11.7 [#id-3.11.7] > 11.12.2023 **Админка** * Исправлены ошибки отображения списка внешних линий в админке (наблюдалось с версии [3.11.5](/changelog-bx#id-3.11.5)) **Исправлены ошибки** * При завершении звонка может находиться не только номер пользователя, но и номер клиента (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * При запуске исходящего звонка PJSIP номер пользователя используется во всех разговорах начатых одновременно, а не только в одном * Исправлена таймзона при парсинге времени создания канала (наблюдалось с версии [3.11.3](/changelog-bx#id-3.11.3)) * Запрос пользователей может работать на основе кэша когда нет соединения с CRM * В запрос `/status` добавлен раздел со статистикой ошибок и звонков ### 3.9.11 [#id-3.9.11] > 24.11.2023 **Админка** * В выводе MySQL в админке исправлено отображение `NULL` значений **Исправлены ошибки** * Исправлено редкое зависание при отключении от AMI (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен редкий кейс циклического перезапуска C2C-клиента (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.10.17 [#id-3.10.17] > 24.11.2023 **Админка** * Обновлён текст статуса при отсутствии недавних записей звонков в таблице CDR **Исправлены ошибки** * Исправлено редкое зависание при отключении от AMI (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Добавлена поддержка чтения из CEL колонки `extra` со значениями `NULL` * Исправлен редкий кейс циклического перезапуска C2C-клиента (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Расширена обработка ошибок соединения с AMI ### 3.11.6 [#id-3.11.6] > 15.11.2023 **Админка** * Исправлена ошибка при редактировании списка транков (наблюдалось с версии [3.11.5](/changelog-bx#id-3.11.5)) * Улучшена валидация значений хостов CORS и адреса портала ### 3.11.5 [#id-3.11.5] > 14.11.2023 **Админка** * Исправлена ошибка сохранения настроек при первом запуске (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Обновлено форматирование таблицы на странице MySQL * Обновлён текст статуса при отсутствии недавних записей звонков в таблице CDR **Исправлены ошибки** * Улучшена синхронизация звонков при обработке перехвата * Исправлены лишние перезапуски при обновлении токена по расписанию (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен редкий кейс циклического перезапуска C2C-клиента (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Расширена обработка ошибок соединения с AMI * Исправлена редкая ошибка интерпретации причины завершения звонка (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.11.4 [#id-3.11.4] > 17.10.2023 **Админка** * Исправлено сохранение списка префиксов и ч/б списка в админке **Исправлены ошибки** * Исправлена ошибка определения направления управляемого перевода на части входящих звонков (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Добавлена поддержка чтения из CEL колонки `extra` со значениями `NULL` * Улучшен вывод ошибок в логе ### 3.11.3 [#id-3.11.3] > 11.10.2023 **Исправлены ошибки** * Исправлена ошибка сохранения изменений в списке транков в админке (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено редкое зависание при отключении от AMI (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен сброс последнего прочитанного из CEL ID при рестарте * Исправлена редкая ошибка определения таймзоны при чтении CEL * Исправлена постановка в очередь события начала звонка при определении номера на ответе (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено зависание при повторном завершения разговора во время управляемого перевода (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено некорректное завершение разговора при управляемом переводе (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено падение при отсутствии разговора на управляемом переводе (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлена отмена создания задачи из кастомизации (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) ### 3.10.16 [#id-3.10.16] > 13.09.2023 **Админка** * В выводе MySQL в админке исправлено отображение `NULL` значений * На странице MySQL добавлена возможность менять размер поля запроса * Исправлены мелкие проблемы вёрстки страниц админки **Исправлены ошибки** * Исправлена редкая проблема приоритизации разговоров в звонке (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлено некорректное логирование ошибок создания сущностей при C2C звонках (наблюдалось с версии [3.10.11](/changelog-bx#id-3.10.11)) * Исправлено повторное чтение событий звонка, находящихся в очереди обработки в момент перезапуска **Кастомизатор** * Исправлена обработка отмены создания задачи из кастомизации (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.11.2 [#id-3.11.2] > 13.09.2023 **Админка** * Исправлена задержка отображения статусов на главной странице (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * На странице MySQL добавлена возможность менять размер поля запроса * Исправлены мелкие проблемы вёрстки страниц админки **Исправлены ошибки** * Исправлена утечка лимита открытых файлов при работе с файлом токена (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.11.1 [#id-3.11.1] > 06.09.2023 **Исправлены ошибки** * Исправлено сохранение настроек автозамены в админке (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) * Исправлено падение при ошибках подключения к базе данных (наблюдалось с версии [3.11.0](/changelog-bx#id-3.11.0)) ### 3.11.0 [#id-3.11.0] > 31.08.2023 **Что нового** * Добавлены отдельные автозамены для FMC номеров, транков и Originate запросов * Добавлена настройки языка отправки данных в CRM * Расширена поддержка управляемых переводов в различных конфигурациях * При управляемом переводе время разговора между сотрудниками не считается ни в один из разговоров * Реализована обработка звонков, где номер `to` в разговорах становится известен не при дозвоне, а при ответе или завершении * При работе нескольких экземпляров приложения на одном портале между ними отслеживается владение/использование обработчиков событий и внешних линий * Звонки, поставленные модулем на паузу, сохраняются при перезапуске службы модуля * Добавлено прикрепление записей в звонки, неотвеченные на IVR * Добавлена обработка события AMI `OriginateResponse` * C2C запросы из CRM сопоставляются со звонками в Asterisk по ID вместо телефонов * Для очень объёмных звонков реализовано сжатие данных при передаче звонка в кастомизации **Админка** * Реализовано обновление статуса модуля в реальном времени и отображение проблемных статусов на всех страницах * Добавлено отображение оффлайн лицензии модуля * Добавлена настройка внешних линий отдельно от транков * При успешном завершении мастера настройки автоматически выполняется переход на страницу бизнес-логики * Настройка префиксов перемещена на страницу настроек модуля вместо бизнес-логики * Кнопка перезапуска служб на главной странице отображает состояние процесса перезапуска **Кастомизатор** * Таймаут выполнения кастомизаций теперь можно настраивать отдельно для каждой кастомизации * Разрешено включать/отключать все кастомизации, даже те которые ранее были "обязательными" * Логи кастомизатора оформлены аналогично логам запросов в CRM **Логи** * Поля в логе форматируются отступами для улучшения читаемости * Запросы к CRM, сгруппированные в батчи, выводятся в лог отдельно по одному с ID связанных звонков * Более подробное логирование обработки событий CEL * При сохранении звонков в `state.json` выводится общее число звонков и число активных звонков * Добавлен вывод в лог "Processing finished" в случаях когда обработка конца звонка не выполняется * В запросе `/crm/request` добавлен вывод в лог uuid запроса **Исправлены ошибки** * Таймаут обработки событий CEL увеличен до 3 часов * В выводе MySQL в админке исправлено отображение `NULL` значений * При поиске ответственного на автораспределении игнорируются неактивные пользователи * FMC номера обновляются вместе с кэшем пользователей * Исправлены отступы плейсхолдеров в админке * Ошибка 500 от CRM больше не считается проблемой соединения * Исправлена обработка спецсимволов в номерах C2C звонков * Исправлена задержка смены портала в левом нижнем углу страниц админки * Исправлено отсутствие перезапуска при изменении файла токена извне * Улучшена обработка ошибок при завершении работы приложения ### 3.10.15 [#id-3.10.15] > 15.08.2023 **Исправлены ошибки** * Исправлена ошибка редактирования портов в админке * Изменён уровень логирования некоторых событий ### 3.9.10 [#id-3.9.10] > 15.08.2023 **Исправлены ошибки** * `last_id` не сбрасывается при рестарте когда отключен `state.json` * В админке исправлено падение при редактировании адреса C2C (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) * Исправлена ошибка редактирования портов в админке ### 3.8.9 [#id-3.8.9] > 15.08.2023 **Исправлены ошибки** * `last_id` не сбрасывается при рестарте когда отключен `state.json` ### 3.10.14 [#id-3.10.14] > 24.07.2023 **Исправлены ошибки** * `last_id` не сбрасывается при рестарте когда отключен `state.json` * В ответ на запрос `/status` добавлены сведения об авторизации в CRM * Исправлено повторное завершение разговоров при слепом переводе * В админке исправлено падение при редактировании адреса C2C (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) ### 3.10.13 [#id-3.10.13] > 27.06.2023 **Исправлены ошибки** * Исправлены потенциальные проблемы проверки лицензии * При управляемом переводе запускается не только обработка ответа, но и дозвона * Добавлена поддержка управляемых переводов без ответа между сотрудниками * Исправлена проблема определения пути к `state.json` на не новых не основных инстансах приложения (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлено логирование запросов от C2C-сервара ### 3.10.12 [#id-3.10.12] > 02.05.2023 **Исправлены ошибки** * Исправлена утечка MySQL-соединений * Оптимизирована работа с сущностями при автораспределении * Статус звонка без ответа определяется направлением: входящий - пропущенный, исходящий - временно недоступен * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках * Исправлена проблема переподключения к AMI при смене авторизационных данных * Исправлена проблема переподключения к Apix при смене портала * Улучшено логирование обработки CEL ### 3.9.9 [#id-3.9.9] > 02.05.2023 **Исправлены ошибки** * Оптимизирована работа с сущностями при автораспределении * Статус звонка без ответа определяется направлением: входящий - пропущенный, исходящий - временно недоступен * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках * Исправлена проблема переподключения к AMI при смене авторизационных данных ### 3.8.8 [#id-3.8.8] > 02.05.2023 **Исправлены ошибки** * Оптимизирована работа с сущностями при автораспределении * Статус звонка без ответа определяется направлением: входящий - пропущенный, исходящий - временно недоступен * Исправлено отсутствие этапа обработки звонка `CallStarted` на некоторых C2C звонках ### 3.10.11 [#id-3.10.11] > 23.03.2023 **Исправлены ошибки** * Исправлена некорректная проверка минимальной версии Астериск (**13.0.0**) * Исправлено падение при отсутствии целевого разговора при управляемом переводе исходящего (наблюдалось с версии [3.10.10](/changelog-bx#id-3.10.10)) * Оптимизирована процедура запуска (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен регистр при выводе статуса приложения через API `/status` **Кастомизатор** * Исправлено отсутствие сущности в структуре звонка при C2C (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) ### 3.10.10 [#id-3.10.10] > 07.03.2023 **Исправлены ошибки** * Исправлено редкое зависание при обработке C2C звонков (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлена загрузка записей звонков, неотвеченных на IVR (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Статус неотвеченного звонка зависит от направления: входящий - пропущенный, исходящий - временно недоступен (наблюдалось с версии [3.10.5](/changelog-bx#id-3.10.5)) * Исправлена обработка управляемых переводов нестандартной конфигурации (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлена обработка входящих отвеченных звонков с распределением на FMC номера (наблюдалось с версии [3.10.9](/changelog-bx#id-3.10.9)) * Восстановлен флаг запуска `--legal` (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Оптимизирован поиск сущностей при автораспределении (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) * Улучшено логирование **Кастомизатор** * В кастомизацию прикрепления ссылки на запись звонка добавлены поля `old_description` и `record_url` ### 3.10.9 [#id-3.10.9] > 14.02.2023 **Админка** * Исправлено падение страницы настроек модуля **Исправлены ошибки** * Исправлена обработка управляемых переводов на исходящих (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` * Исправлена остановка обработки C2C-запросов при ошибках доступа к данным звонков * Исправлена редкая проблема обработки неотвеченных исходящих звонков **Кастомизатор** * Добавлены недостающие данные в ряд кастомизаций ### 3.9.8 [#id-3.9.8] > 14.02.2023 **Исправлены ошибки** * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` ### 3.8.7 [#id-3.8.7] > 14.02.2023 **Исправлены ошибки** * Улучшена обработка ошибок при проверке лицензионного ключа * Исправлена проблема установки соединения на некоторых маршрутах отдельных провайдеров, вызывавшая ошибку `TLS Handshake timeout` ### 3.10.8 [#id-3.10.8] > 31.01.2023 **Исправлены ошибки** * Улучшена обработка ошибок при проверке лицензионного ключа ### 3.9.7 [#id-3.9.7] > 31.01.2023 **Исправлены ошибки** * Улучшена обработка ошибок при проверке лицензионного ключа ### 3.10.7 [#id-3.10.7] > 31.01.2023 **Админка** * Исправлены мелкие ошибки вёрстки в админке **Исправлены ошибки** * Исправлена ошибка проверки лицензионного ключа сразу после запуска приложения (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) * Исправлены редкие зависания при многократной обработке одного события звонка (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Улучшено логирование ### 3.9.6 [#id-3.9.6] > 31.01.2023 **Исправлены ошибки** * Исправлена ошибка проверки лицензионного ключа сразу после запуска приложения (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) * Улучшено логирование ### 3.10.6 [#id-3.10.6] > 23.01.2023 **Исправлены ошибки** * Исправлено зависание при перезапуске * Улучшено логирование ### 3.9.5 [#id-3.9.5] > 19.01.2023 **Исправлены ошибки** * Опция проверки статуса рабочего дня доступна в бесплатном приложении * Исправлена проверка статуса разговора в конце звонка, из-за которой иногда ставилось неправильное время завершения разговора * Статус входящего неотвеченного звонка изменён с 480 (временно недоступен) на 304 (пропущенный), дело создаётся незакрытым * При C2C номер `to` обновляется по результатам кастомизации * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Исправлено некорректное отображение ошибки "пользователь не является администратором" в статусе CRM * Исправлено автораспределение на неактивных пользователей * FMC номера из CRM теперь обновляются одновременно с кэшем пользователей (раз в час) * Исправлен эскейпинг в `csv` файлах * Улучшен вывод ошибок запросов * Улучшено логирование **Кастомизатор** * В кастомизацию пути записи разговора добавлены новые варианты устранения дублирования пути ### 3.8.6 [#id-3.8.6] > 19.01.2023 **Исправлены ошибки** * Опция проверки статуса рабочего дня доступна в бесплатном приложении * Исправлена проверка статуса разговора в конце звонка, из-за которой иногда ставилось неправильное время завершения разговора * Статус входящего неотвеченного звонка изменён с 480 (временно недоступен) на 304 (пропущенный), дело создаётся незакрытым * При C2C номер `to` обновляется по результатам кастомизации * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Исправлено некорректное отображение ошибки "пользователь не является администратором" в статусе CRM * Исправлено автораспределение на неактивных пользователей * FMC номера из CRM теперь обновляются одновременно с кэшем пользователей (раз в час) * Улучшен вывод ошибок запросов * Улучшено логирование **Кастомизатор** * В кастомизацию пути записи разговора добавлены новые варианты устранения дублирования пути ### 3.10.5 [#id-3.10.5] > 18.01.2023 **Исправлены ошибки** * Исправлена редкая утечка памяти при превышении лимита времени обработки событий (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлено автораспределение на неактивных пользователей * FMC номера из CRM теперь обновляются одновременно с кэшем пользователей (раз в час) * Увеличена частота автоматического логирования статуса приложения (раз в час) * Исправлены некорректные записи в логе **Кастомизатор** * В кастомизацию пути записи разговора добавлены новые варианты устранения дублирования пути ### 3.10.4 [#id-3.10.4] > 28.12.2022 **Исправлены ошибки** * Исправлено падение при обработке неотвеченного звонка на FMC номер когда включена загрузка записей файлами (наблюдалось с версии [3.10.2](/changelog-bx#id-3.10.2)) ### 3.10.3 [#id-3.10.3] > 28.12.2022 **Исправлены ошибки** * Исправлены падения при переводах без ответа на FMC номера (наблюдалось в версии [3.10.2](/changelog-bx#id-3.10.2)) * Добавлена регистрация неотвеченных звонков, распределённых на FMC номера ### 3.10.2 [#id-3.10.2] > 26.12.2022 **Админка** * Исправлена ошибка редактирования списка разрешённых пользователей * В статусы CEL на главной странице добавлена проверка на устаревание на 15 часов с приоритетом отображения выше, чем отсутствие поля `extra` * Добавлена проверка устаревания CDR на час * В примеры MySQL запросов добавлено поле `extra` **Исправлены ошибки** * Обработка номеров телефонов в звонке выполняется в начале каждой стадии звонка, если ещё не выполнена * Исправлена ошибка обновления номера `to` звонка (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлено подвисание при проблемах сохранения `state.json` (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлена ошибка удаления старых звонков из `state.json` (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлен порядок номеров `from`/`to` в ссылках на записи (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлены ошибки обновления внешних линий (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) * При регистрации звонка для определения внешней линии и настроек транка используется исходный номер транка вместо кастомизированного * Добавлена регистрация пропущенных звонков на FMC номера аналогично пропущенным на IVR, когда нельзя получить номер телефона * Исправлено редкое падение при проблемах чтения токена * Исправлена ошибка работы с конфигом при формировании отчёта для техподдержки (наблюдалось с версии [3.10.0](/changelog-bx#id-3.10.0)) **Кастомизатор** * Убран лишний запуск кастомизации `post_registration` после завершения регистрации * Исправлено формирование legacy данных о сущности в кастомизациях ### 3.10.1 [#id-3.10.1] > 12.12.2022 **Исправлены ошибки** * Исправлена ошибка формирования списка номеров при поиске файла записи (наблюдалось в версии [3.10.0](/changelog-bx#id-3.10.0)) * Исправлено зависание при поиске записей для звонков без разговоров (наблюдалось в версии [3.10.0](/changelog-bx#id-3.10.0)) * В запрос API `/status` добавлен параметр `path` ### 3.10.0 [#id-3.10.0] > 08.12.2022 **Внимание! Эти изменения могут повлиять на работу приложения:** 1. Минимальная версия Астериск увеличена до `13.0.0`. Начиная с этой версии, в CEL присутствует поле `extra` в ожидаемом нами формате. На более старых версиях приложение будет работать, но с предупреждениями. Обработка переводов звонков будет выполняться в режиме совместимости, а перехваты звонка не будут обрабатываться. 2. Изменилась схема логики и запуска кастомизаций, что особенно важно для нестандартных кастомизаций номеров телефонов, кастомизации `need_registration` и проверки ч/б списком. `need_registration` и ч/б список теперь вызываются в начале каждого этапа обработки звонка, кроме CallStarted. Кастомизации номеров теперь вызываются только в момент их получения - на CallStarted и ConversationRequested. 3. Изменились данные кастомизаций, но оставлены legacy данные для обратной совместимости. Кастомизации "по умолчанию" обновятся автоматически, но если в них вносились изменения, то необходимо их переписать вручную. Главное изменение - во все кастомизации теперь приходит объект `call_full` с более полными данными. Все данные теперь нужно брать из него. **Если вы ранее заказывали у нас кастомизации - обратитесь в нашу техподдержку за помощью в их обновлении.** 4. Изменён формат логов: новые имена полей и новый формат времени. Если были настроены дополнительные приложения для обработки логов, например для мониторинга ошибок, то необходимо их перенастроить. 5. Изменения в файлах `/etc/itgrix_bx/config.json` и `/opt/itgrix_bx/token.json` теперь отслеживаются в реальном времени. Для внесения изменений в эти файлы больше не нужно останавливать и перезапускать приложение, но и незаконченные изменения будут применяться сразу же. Если во время работы сохранить некорректный конфиг, то приложение продолжит работу с предыдущими настройками, но при следующем запуске выдаст ошибку и не заработает. 6. При некорректном файле конфига приложение теперь не игнорирует ошибочные данные, а отказывается запускаться. 7. В запросах к CRM через функции кастомизатора более недоступны данные помимо результата и ошибок. Такие данные, как время выполнения запроса на стороне CRM, теперь отсутствуют. Если вы опирались на них в своих кастомизациях, то необходимо переписать их. **Что нового** * Усилена стандартизация логики работы приложения * Добавлена опция показа карточки звонка на дозвоне либо при ответе * Опция проверки статуса рабочего дня доступна в бесплатном приложении * Добавлена настройка белого списка CORS (для управления правами на выполнение запросов к приложению с внешних ресурсов, таких как ваш сайт) * Добавлен запрос API `/crm/request` для отправки запросов к CRM через общую очередь коннектора, что снижает замедление работы при дополнительных запросах из кастомизаций * Добавлены новые кастомизации: показа карточки, прикрепления URL записи звонка, кастомизация после регистрации разговора * Реализовано слежение за файлами конфига и токена в реальном времени * Оптимизарована работа с настройкой обработчиков событий CRM и начальными запросами при запуске приложения * Оптимизированы запросы списков из CRM (сущности, дела, задачи) * Изменён формат лога **Админка** * Добавлена автоматическая сортировка ч/б списка * Добавлено отображение наличия несохранённых изменений * Добавлено автоформатирование адреса портала * Добавлено отображение ошибки загрузки цен на лицензию * На главную страницу добавлен статус настройки внутренних номеров пользователей * Обновлена разметка таблиц логов * Добавлен вывод ошибок при нажатии на неактивные кнопки * Исправлена ошибка некорректного позиционирования кнопки чата * Обновлена справка по кастомизациям **Исправлены ошибки** * Реализована плавная процедура остановки приложения * Реализовано централизованное синхронное хранение данных звонка * Исправлена проблема перечитывания звонков/зависания `state.json` * Исправлено редкое падение при работе с оффлайн лицензией * При получении дела запрашивается специфичный для него набор полей * При сбросе списка пользователей также сбрасываются FMC номера * Исправлено некорректное прикрепление ссылок на записи и/или файлов записей в некоторых случаях (разделена логика обрезания номеров телефонов) * Если записи хранятся ссылками, то кастомизация дела выполняется после прикрепления записи, а не одновременно * Исправлено зависание на переподключении AMI после разрыва соединения * Исправлена редкая ошибка, из-за которой иногда ставилось неправильное время завершения разговора * Статус входящего неотвеченного звонка изменён с 480 (временно недоступен) на 304 (пропущенный), дело создаётся незакрытым * При C2C номер `to` обновляется по результатам кастомизации * Добавлена проверка версии удалённого Астериска через AMI * Исправлено сохранение CEL со спецсимволами через админку **Кастомизатор** * В кастомизации передаются полные данные звонка `call_full` вместе с legacy-данными для обратной совместимости * В кастомизатор добавлены и задействованы запросы к CRM через модуль * В автораспределении обрабатывается транк и в кастомизацию отправляются все данные запроса * В автораспределении в кастомизацию передаются все данные сущности, имя сущности передаётся даже когда пользователь недоступен * В статусе (`/status`) кастомизатора отображается `false` у всех методов если кастомизатор отключен * Кастомизация сущности запускается всегда, а не только на новых сущностях * В кастомизацию `need_registration` и кастомизации номеров добавлены этап и данные звонка * В кастомизацию дела добавлены поля дела * Убраны дублирующиеся кастомизации номеров, теперь они выполняются при появлении номера на CallStarted или ConversationRequested * Добавлена кастомизация прикрепления ссылки на запись * Добавлена автозамена и кастомизация номеров на C2C * Добавлена кастомизация показа карточки * Добавлена кастомизация после регистрации разговора * Добавлена возможность отмены запроса кастомизацией на регистрации звонка, завершении регистрации, прикреплении ссылки и показе карточки * При выполнении кастомизаций используется комбинированный вывод * Регистрация звонка теперь возможна в кастомизации завершения звонка * Обновлён формат логов кастомизатора * Кастомизатор приоритетно использует новые данные звонка * Обновлены стандартные кастомизации **Supervisor** * При ошибке обновления выводится абсолютный путь до `update.log` * Исправлен вывод версии supervisor в API ### 3.9.4 [#id-3.9.4] > 30.09.2022 **Админка** * Добавлена автоматическая сортировка ч/б списка * Добавлено автоматическое форматирование и проверка правильности адреса портала * Добавлено отображение ошибки при проблеме получения актуальных цен на лицензию **Исправлены ошибки** * Исправлено падение при большой нагрузке при использовании офлайн-лицензии (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Исправлены некорректные поля в запросе дела * Исправлено зависание после восстановления связи с AMI (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) ### 3.8.5 [#id-3.8.5] > 30.09.2022 **Исправлены ошибки** * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов * Исправлены некорректные поля в запросе дела ### 3.7.4 [#id-3.7.4] > 30.09.2022 **Исправлены ошибки** * Исправлена ошибка обработки номера телефона при получении записи звонка по ссылке, когда начало номера совпадает с одним из префиксов ### 3.9.3 [#id-3.9.3] > 11.08.2022 **Админка** * Убрана возможность авторизации в архивном приложении * Обновлена страница оплаты лицензии * Исправлены ошибки обновления через админку **Исправлены ошибки** * Исправлена проблема авторизации в AMI в мастере настроек (наблюдалось с версии [3.9.0](/changelog-bx#id-3.9.0)) ### 3.8.4 [#id-3.8.4] > 11.08.2022 **Админка** * Убрана возможность авторизации в архивном приложении **Исправлены ошибки** * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [3.7.0](/changelog-bx#id-3.7.0)) * Исправлено закрытие пользовательских дел (теперь закрываются только дела, созданные по факту звонка) **Кастомизатор** * В кастомизацию автораспределения добавлена обработка транка и остальных данных запроса ### 3.7.3 [#id-3.7.3] > 11.08.2022 **Админка** * Убрана возможность авторизации в архивном приложении **Исправлены ошибки** * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [3.7.0](/changelog-bx#id-3.7.0)) ### 3.9.2 [#id-3.9.2] > 08.08.2022 **Исправлены ошибки** * Исправлена проблема изменения настроек автозамены (наблюдалось с версии [3.7.0](/changelog-bx#id-3.7.0)) * Исправлено закрытие пользовательских дел (теперь закрываются только дела, созданные по факту звонка) **Кастомизатор** * В кастомизацию автораспределения добавлена обработка транка и остальных данных запроса * Исправлены ошибки выбора временной зоны в кастомизаторе ### 3.9.1 [#id-3.9.1] > 01.07.2022 **Админка** * Исправлены нередактируемые поля ввода в админке * Исправлено отображение доступных обновлений ### 3.8.3 [#id-3.8.3] > 01.07.2022 **Админка** * При успешном сбросе кэша пользователей отображается подтверждение * Исправлено отображение доступных обновлений * Обновлена справка по автозамене номеров **Исправлены ошибки** * Из поиска лидов при автораспределении исключены закрытые лиды * Ошибка соединения с сервером авторизации Bitrix вызывает перезапуск вместо остановки * Исправлено редкое падение при нескольких одновременных C2C звонках **Кастомизатор** * В автораспределение добавлена автозамена и кастомизация номера клиента ### 3.7.2 [#id-3.7.2] > 01.07.2022 **Админка** * Обновлены тексты справки по автозамене * Исправлено отображение доступных обновлений * Обновлена справка по автозамене номеров **Исправлены ошибки** * Ошибка соединения с сервером авторизации Bitrix вызывает перезапуск вместо остановки * Исправлено редкое падение при нескольких одновременных C2C звонках **Кастомизатор** * В автораспределение добавлена автозамена и кастомизация номера клиента ### 3.9.0 [#id-3.9.0] > 23.06.2022 **Админка** * Добавлена кнопка перезапуска служб * Отображаются обязательные кастомизации * Обновлены тексты справки по кастомизациям и автозамене * При успешном сбросе кэша пользователей отображается подтверждение * Исправлена проблема сохранения адреса C2C * Исправлен эскейпинг в `csv` файлах * Убрано поле таймаута кэша * Правки дизайна **Исправлены ошибки** * Исправлено зависание при неправильном пароле AMI * Ошибка соединения с сервером авторизации Bitrix вызывает перезапуск вместо остановки * Исправлены редкие ошибки запуска/остановки * Улучшено логирование при подключении к БД * Из поиска лидов при автораспределении исключены закрытые лиды * Исправлено редкое падение при нескольких одновременных C2C звонках * Исправлено замедление работы при использовании лицензионного ключа * В отчёт для техподдержки добавлены данные: системный лог, данные о PHP и MySQL, наличие sudo, настройки временной зоны, данные о пользователе * Улучшена обработка ошибок при формировании отчёта для техподдержки * Исправлены конфликты обращения к общим ресурсам при формировании отчёта для техподдержки **Кастомизатор** * Настройки кастомизатора [вынесены в `json` файл](/custom_common/customizer-settings-update) * Добавлена [настройка таймаута запросов](/custom_common/customizer-settings-update#novoe-pole-requesttimeoutsec) * В кастомизацию сущности передаются: звонок, параметры сущности, регистрация * Исправлен вывод данных в кастомизацию автораспределения при остановленном рабочем дне * Опциональные кастомизации не запускаются в бесплатном режиме * В автораспределение добавлена автозамена и кастомизация номера клиента * Кастомизатор штатно возвращает исключения 3.9.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. Начиная с версии 3.9.0, опциональные кастомизации будут запускаться только с оплаченной лицензией: ``` process_final_params.php customize_entity.php customize_activity.php process_registration_params.php customize_autodistribution.php process_task_creation_params.php ``` ### 3.8.2 [#id-3.8.2] > 14.04.2022 **Исправлены ошибки** * Исправлена проблема сохранения настроек (наблюдалось с версии [3.8.0](/changelog-bx#id-3.8.0)) ### 3.8.1 [#id-3.8.1] > 06.04.2022 **Исправлены ошибки** * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [3.5.0](/changelog-bx#id-3.5.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлено логирование создания задач с именами по умолчанию ### 3.7.1 [#id-3.7.1] > 06.04.2022 **Админка** * Исправлен визуальный баг кнопки авторизации **Исправлены ошибки** * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [3.3.4](/changelog-bx#id-3.3.4)) * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [3.5.0](/changelog-bx#id-3.5.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлено автозакрытие задач с транком в названии (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлена ошибка чтения настроек TCP порта Apix (наблюдалось с версии [3.7.0](/changelog-bx#id-3.7.0)) * Исправлена редкая ошибка проверки подключения к серверу авторизации Bitrix24 (наблюдалось с версии [3.7.0](/changelog-bx#id-3.7.0)) * Исправлено логирование создания задач с именами по умолчанию * Улучшено логирование подключения к C2C-серверу **Кастомизатор** * В кастомизацию `need_registration` передаётся параметр `is_ivr` ### 3.6.3 [#id-3.6.3] > 06.04.2022 **Админка** * Обновлена справка по настрйкам создания задач **Исправлены ошибки** * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [3.3.4](/changelog-bx#id-3.3.4)) * Исправлена редкая ошибка обработки событий CEL при чтении C2C звонков (наблюдалось с версии [3.5.0](/changelog-bx#id-3.5.0)) * Исправлено некорректное определение типа C2C звонка при смене внутреннего номера на ответе (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлено автозакрытие задач с транком в названии (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлена проверка группы разрешений `user` **Кастомизатор** * Параметры запроса C2C передаются в [кастомизацию Originate](/custom_common/c2c) * В кастомизацию `need_registration` передаётся параметр `is_ivr` ### 3.8.0 [#id-3.8.0] > 29.03.2022 **Что нового** * Обновлена работа с пользователями: теперь все пользователи кэшируюся раз в час и никогда не запрашиваются по одному * Добавлена кастомизация автораспределения `customize_autodistribution` **Админка** * Обновлена логика UI при переходе между страницами мастера настройки * Поле кода авторизации появляется если код не был получен в первые 10 секунд * В браузерах с языком, который не поддерживается админкой, будет использоваться Английский **Исправлены ошибки** * Исправлена проблема обновления файла `state.json` при задержке обработки событий CEL (наблюдалось с версии [3.3.4](/changelog-bx#id-3.3.4)) * Исправлена обработка звонков с управляемым переводом когда каналы в CEL не отмечены как локальные * Номера телефонов при поиске записей разговоров сделаны опциональными, возможен поиск только по ID звонка * Исправлено автозакрытие задач с транком в названии (наблюдалось с версии [3.6.2](/changelog-bx#id-3.6.2)) * Исправлено создание задач с именами по умолчанию (наблюдалось в версии [3.7.0](/changelog-bx#id-3.7.0)) * Добавлены новые статусы звонков * Улучшено логирование при определении ответственных за пропущенные звонки **Кастомизатор** * В кастомизацию `need_registration` передаётся параметр `is_ivr` * В кастомизацию `process_final_params` передаются данные регистрации разговора ### 3.7.0 [#id-3.7.0] > 22.02.2022 **Что нового** * Добавлена функция [автозамены номеров телефонов](/for-admins/autoreplacement) * Выполнен переход на новый C2C-сервер "Apix v2"; старые C2C-сервера более не используются * Добавлена опция создания задач по неуспешным исходящим звонкам **Админка** * В левом нижнем углу на всех страницах отображаются версия модуля и подключенный портал * Язык по умолчанию соответствует настройкам языка браузера * Проверки статусов для главной страницы выполняются по возможности независимо, статусы которые не удалось проверить из-за таймаута предыдущих статусов отображаются как `Skipped` * В настройки БД добавлен алиас поля `extra` * В мастер добавлено поле адреса получения записей * Обновлена вёрстка * Добавлены/исправлены тексты статусов * Добавлено поле порта службы Supervisor * Обновлены тексты подсказок **Исправлены ошибки** * Исправлена проверка доступности сервера авторизации (наблюдается на версии [3.6.2](/changelog-bx#id-3.6.2) и более ранних с момента запрета запросов ping на `oauth.bitrix.info`) * Исправлена проверка группы разрешений `user` (в будущем может наблюдаться на версии [3.6.2](/changelog-bx#id-3.6.2) и более ранних при установке новой версии приложения на портале) * Данные запроса API `/status` периодически выводится в лог для диагностики проблем * Улучшено логирование ошибок запросов C2C-сервера **Кастомизатор** * Исправлена ошибка времменой зоны в кастомизаторе * Параметры запроса C2C передаются в [кастомизацию Originate](/custom_common/c2c) Старый C2C-сервер по адресу `c2c.bx24asterisk.ru`, начиная с версии 3.7.0, более не используется.\ Убедитесь что с сервера, где установлен модуль интеграции Itgrix, разрешён доступ к новому C2C-серверу `apix.itgrix.ru`. 3.7.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. ### 3.6.2 [#id-3.6.2] > 11.02.2022 **Исправлены ошибки** * Ошибки запроса API сервера лицензирования при автоматической проверке лицензии приводят к понижению лицензии не сразу, а только если проблема сохраняется 3 часа * Исправлена регистрация неуспешных C2C звонков * Исправлена ошибка авторизации при отключении всех опций C2C-сервера (наблюдалось с [3.6.0](/changelog-bx#id-3.6.0)) * Исправлено падение при использовании узла API `/status` когда не задан портал (наблюдалось с [3.6.0](/changelog-bx#id-3.6.0)) * В [шаблон имени задачи](/settings/additional/parametry-sozdaniya-zadach) добавлена поддержка переменной `#TRUNK#` * Улучшено логирование при запуске * Улучшено логирование при чтении файлов конфигурации Asterisk * Улучшено логирование при использовании узла API `/pbx/read_call` ### 3.5.7 [#id-3.5.7] > 11.02.2022 **Исправлены ошибки** * Исправлена регистрация неуспешных C2C звонков * Если номер не найден (`hangupcause` 1 или 20) но был ответ, то звонок считается успешным * В [шаблон имени задачи](/settings/additional/parametry-sozdaniya-zadach) добавлена поддержка переменной `#TRUNK#` * Улучшено логирование при использовании узла API `/pbx/read_call` ### 3.4.9 [#id-3.4.9] > 11.02.2022 **Исправлены ошибки** * Исправлена регистрация неуспешных C2C звонков ### 3.6.1 [#id-3.6.1] > 14.12.2021 **Админка** * Ссылки на доки открываются в новых вкладках **Исправлены ошибки** * Исправлено переподключение к C2C-серверу при проблемах соединения * Исправлено сохранение пустых массивов в файл конфигурации * Исправлена повторная обработка недавних звонков при частых перезапусках **Кастомизатор** * В кастомизацию пути записи добавлено удаление дублирования элементов пути ### 3.4.8 [#id-3.4.8] > 06.12.2021 **Исправлены ошибки** * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [3.5.1](/changelog-bx#id-3.5.1)) * Исправлена работа со структурой данных CallBack при использовании Apix * Исправлено название задач по умолчанию для исходящих звонков ### 3.5.6 [#id-3.5.6] > 06.12.2021 **Исправлены ошибки** * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [3.5.1](/changelog-bx#id-3.5.1)) * Исправлено подвисание админки при переключении на несуществующий портал ### 3.6.0 [#id-3.6.0] > 29.11.2021 **Что нового** * Добавлена возможность лицензирования оффлайн по лицензионному ключу (только для версии `x64` с правами `root`) * Авторизация в CRM теперь выполняется без ручного копирования кода * Добавлено [распознавание FMC номеров](/settings/additional/fmc-numbers) по файлу с Wildcard масками и по номерам указанным в CRM * Добавлен узел API `/status` для [автоматизации мониторинга состояния приложения](/for-admins/status-monitoring) * Узел API для ручной загрузки CEL `/pbx/read_cel` поддерживает `.csv` данные * В узел API `/pbx/read_call` добавлено получение логов * Переподключение к AMI при разрыве соединения выполняется без перезапуска приложения * Добавлен флаг `--cleanlist` для выборочной очистки: `h` обработчиков Bitrix24, `l` внешних линий и `s` - `state.json` **Админка** * Добавлена возможность скачивания MySQL таблиц в формате `.csv` * При обновлении добавлена возможность выбора между только установкой патчей или обновлением с новым функционалом * Админка предлагает обновиться через консоль, если следующая версия - "специальная", и на неё нельзя обновиться из админки * Исправлено подвисание интерфейса обновления после неуспешного обращения к службе supervisor * Исправлена блокировка кнопок "Купить" на странице оплаты лицензии * Исправлен баг смены состояния админки при переключении портала * Исправлено подвисание админки при переключении на несуществующий портал * Добавлен статус службы supervisor вместо статуса ОС * Добавлены тексты новых статусов * Обновлены имена приложений * Мелкие правки в админке **Исправлены ошибки** * Исправлена ошибка многократного подключения к C2C-серверу * Исправлена ошибка прикрепления вчерашнего лога к отчёту для техподдержки * Исправлено зависание сохранения `state.json` при задержке обработки событий CEL (наблюдалось с [3.5.1](/changelog-bx#id-3.5.1)) * Исправлена проверка статсуса доступности серверов при запрете использования `raw socket` * В логи обновления добавлено больше вывода * Ускорено прикрепление записей разговоров * Ускорена загрузка списка пользователей * Исправлена проверка `logrotate` при установке * Исправлена обработка запроса `/read_cel` при пустом теле запроса (проблема наблюдалась с [3.5.1](/changelog-bx#id-3.5.1)) * Исправлено название задач по умолчанию для исходящих звонков * Исправлены ошибки проверки чисел в файле конфигурации (присутствовали с [3.1.4](/changelog-bx#id-3.1.4)) * Исправлена очистка ошибок проверки файла конфигурации (проблема наблюдалась с [3.1.4](/changelog-bx#id-3.1.4)) * Убран устаревший флаг `hostory-date`, его функционал [заменён](/for-admins/obrabotka-zvonkov-za-period) узлом API `/pbx/read_call` 3.6.0 - "специальная" версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами `root`, а не через админку. ### 3.5.5 [#id-3.5.5] > 11.11.2021 **Исправлены ошибки** * Исправлена работа со структурой данных CallBack при использовании Apix ### 3.5.4 [#id-3.5.4] > 10.11.2021 **Админка** * Обновлены имена приложений на странице авторизации в CRM * В ошибку разрешений приложения на странице статусов добавлена ссылка на статью о проблеме **Исправлены ошибки** * Исправлен запуск автосохранения токена * Исправлено использование алиасов полей MySQL с флагом `-T` * Исправлен баг чтения массивов в запросах API модуля * C2C звонки отправляются на Asterisk даже если канал указанного номера занят (они отменялись с [3.3.3](/changelog-bx#id-3.3.3)) * Исправлена возможность падения при сохранении `state.json` (могло наблюдаться с [3.5.1](/changelog-bx#id-3.5.1)) * Увеличен таймаут обработки событий CEL * Исправлен порядок обработки полей запроса CallBack при использовании Apix * Исправлено отображение ошибки при запросе несуществующей записи разговора * Исправлено неожиданное удаление существущей установки при её фактическом отсутствии * В API `/pbx/read_call` добавлено получение логов по обработанным звонкам **Кастомизатор** * В кастомизации Originate теперь можно добавлять параметры, не предусмотренные конфигом модуля ### 3.4.7 [#id-3.4.7] > 09.11.2021 **Админка** * Обновлены имена приложений на странице авторизации в CRM * В ошибку разрешений приложения на странице статусов добавлена ссылка на статью о проблеме **Исправлены ошибки** * Исправлен запуск автосохранения токена * Исправлено использование алиасов полей MySQL с флагом `-T` * Исправлен баг чтения массивов в запросах API модуля * C2C звонки отправляются на Asterisk даже если канал указанного номера занят (они отменялись с [3.3.3](/changelog-bx#id-3.3.3)) * Исправлена возможность падения при сохранении `state.json` (могло наблюдаться с [3.5.1](/changelog-bx#id-3.5.1)) * Увеличен таймаут обработки событий CEL * Исправлен порядок обработки полей запроса CallBack при использовании Apix **Кастомизатор** * В кастомизации Originate теперь можно добавлять параметры, не предусмотренные конфигом модуля ### 3.4.6 [#id-3.4.6] > 19.10.2021 **Админка** * Исправление многократного запроса пароля в админке * Лого в админке - ссылка на главную страницу * Исправления обработки данных при начальной настройке * Мелкие правки вёрстки, текстов и ссылок на документацию **Исправлены ошибки** * Исправлена обработка пустых и некорректных ответов на MySQL-запросы * Исправлена ошибка регистрации внешних линий при наличии пустого транка * Исправлен баг проверки CDR при большом размере таблицы * Проверка статуса рабочего дня не отображается на версиях, где не доступна * Исправлена блокировка сохранения `state.json` * Исправлен баг проверки настроек БД после предыдущей успешной проверки (присутствовал с [3.4.0](/changelog-bx#id-3.4.0)) * При ответе обновляется номер принимающей стороны, если он не был известен ранее, при этом проверяется, внутренний ли он * Исправлен баг смены адреса C2C-сервера с нестандартного обратно на стандартный * Исправлена ошибка прикрепления вчерашнего лога к отчёту для техподдержки * Исправлено отображение ошибки при запросе несуществующей записи разговора **Кастомизатор** * Кастомизация номера клиента применяется при создании и при закрытии задачи * Добавлены функции обновления контакта, запуска бизнес-процесса, формирования ссылок на модуль и записи разговоров * В логе кастомизатора используется местное время (с версии [3.4.0](/changelog-bx#id-3.4.0) было UTC) * Исправлена проблема превышения лимитов API CRM запросами из кастомизаций (возможность превышения появилась с версии [3.4.0](/changelog-bx#id-3.4.0)) ### 3.5.3 [#id-3.5.3] > 14.10.2021 **Админка** * Мелкие исправления в админке **Исправлены ошибки** * Добавлен флаг `--cleanlist`, определяющий какие элементы очищаются флагом `--clean` * Перезапуск при изменении настроек CRM приводит к удалению только обработчиков, но не внешних линий * При обновлении поля принимающего номера при ответе проверяется, внутренний ли он (в версии [3.5.2](/changelog-bx#id-3.5.2) номер все считался внешним) * Исправлена блокировка сохранения `state.json` * Если в файле конфигурации указан нестандартный адрес сервера C2C, то он используется не только для подключения, но и при регистрации обработчиков * Неотвеченные но "успешные" звонки (IVR) считаются пропущенными (были успешными с версии [3.5.1](/changelog-bx#id-3.5.1)) * Добавлена обработка [статуса звонка](/faq/detalnye-statusy-zvonka) с ошибкой "Bearer capability not presently available" * Исправлена проблема превышения лимитов API CRM запросами из кастомизаций (возможность превышения появилась с версии [3.4.0](/changelog-bx#id-3.4.0)) * В логе кастомизатора используется местное время (с версии [3.4.0](/changelog-bx#id-3.4.0) было UTC) * Исправлено зависание авторизации запросов к API модуля после большого числа авторизаций (порядка тысячи) (наблюдалось с версии [3.5.0](/changelog-bx#id-3.5.0)) ### 3.5.2 [#id-3.5.2] > 16.09.2021 **Исправлены ошибки** * Если в начале звонка не было принимающего номера, то при ответе на звонок проверяется номер принимающей стороны даже если он внутренний * Расширено содержание отчётов для техподдержки ### 3.5.1 [#id-3.5.1] > 13.09.2021 **Что нового** * Расширена поддержка статусов звонка Битрикс24: помимо Успешного и Пропущенного, теперь поддерживаются Занято, Отклонено, Временно недоступен, Не найдено и Неизвестная ошибка * Добавлена опция отправки оповещений о звонках в чат Битрикса - ранее оповещения отправлялись всегда, а теперь их можно отключить в админке **Админка** * Лицензия обновляется при проверке кнопкой из админки и получении статусов без перезагрузки страницы * Тип приложения в админке корректно переключается при получении нового токена без перезагрузки страницы * При переходе на страницу получения токена не перезагружается страница * При обновлении версии на сервере, админка перезагружается * На странице получения токена добавлены ссылки на приложения на портале * Исправлена загрузка изменений статусов на странице результатов Мастера * Исправлены заголовки статусов на страницах Мастера **Исправлены ошибки** * Исправлена неполная остановка когда пользователь не администратор портала * Управление внешними линиями синхронизировано с управлением транками - создание/удаление транка вызывает такое же действие со внешней линией * Исправлен баг сохранения порта БД при начальной настройке * Исправлен баг проверки настроек БД после предыдущей успешной проверки (присутствовал с [3.4.0](/changelog-bx#id-3.4.0)) * Исправлены редкие проблемы, препятствовавшие сохранению `state.json` * Исправлена ошибка регистрации звонка на неправильный номер при перехвате звонка **Кастомизатор** * Добавлена функция запуска бизнес-процесса * Добавлены функции для работы со ссылками на записи разговоров * Кастомизация номера клиента применяется при создании и при закрытии задачи **Изменение требований к системе: требуется поле CEL "extra"** В таблице CEL в базе данных Asterisk теперь требуется наличие поля `extra`. При отсутствии или некорректном заполнении этого поля модуль будет запускаться и работать, но: 1. не будут использоваться детальные статусы звонка (будут только Успешный и Пропущенный); 2. не будут корректно обрабатываться перехваты звонка (набор **\*8**). 3.5.1 - специальная версия, поэтому [обновление](/faq/update) на неё необходимо выполнять скриптом с правами root, а не через админку. ### 3.5.0.2 [#id-3.5.0.2] > 16.08.2021 **Админка** * В мастере настройки исправлен баг проверки подключения к Asterisk (AMI) от лица существующего пользователя (наблюдался с версии 3.4.0 в виде статуса Error) ### 3.5.0.1 [#id-3.5.0.1] > 11.08.2021 **Админка** * Исправление сохранения настроек в некоторых случаях * Мелкие исправления текстов и вёрстки ### 3.5.0 [#id-3.5.0] > 06.08.2021 **Что нового** * Добавлена возможность обновляться по кнопке из админки. Для этого устанавливается отдельная служба `itgrix_bx_supervisor`. В отдельных случаях, например когда вносятся изменения в `itgrix_bx_supervisor`, потребуется использовать старый способ обновления **Админка** * Добавлена ссылка на список пользователей телефонии на портале * Лого в левом верхнем углу - ссылка на страницу состояния * Частично исправлена проблема повторного запроса авторизации * По умолчанию логи отображаются с конца файла * Проверка статуса рабочего дня не отображается на версиях, где не доступна * Мелкие исправления текстов и вёрстки **Исправлены ошибки** * Обновлены скрипты установки, удаления, службы, резервного копирования * Расширено содержание резервных копий * Исправлена ошибка регистрации внешних линий при наличии пустого транка * Исправлена работа с некорректными MySQL-таблицами * Запросы с неуспешной авторизацией пишутся в лог * Исправлен баг проверки CDR при большом размере таблицы * Исправлен баг падения страницы MySQL при пустом выводе ### 3.4.5 [#id-3.4.5] > 15.07.2021 **Исправлены ошибки** * Исправлен баг выгрузки файла записи разговора в CRM (наблюдался с версии v3.4.3 в виде пустых запросов) ### 3.4.4 [#id-3.4.4] > 12.07.2021 **Админка** * Улучшено форматирование статусов на главной странице **Исправлены ошибки** * Исправлена ошибка из-за которой игнорировались таймауты некоторых запросов * Исправлена ошибка остановки сервера при изменении настроек * В запросе read\_call используется местное время вместо UTC и убрано ограничение в 100 записей CEL на звонок * Исправлена ошибка сохранения, приводившая к повторной обработке звонков после перезапуска (наблюдается с v3.4.2) * Исправлена ошибка при регистрации звонка с созданием компании * При получении отчёта для техподдержки используется ограничение по времени * Исправлена регистрация звонков followme с переадресацией на сотовый ### 3.4.3 [#id-3.4.3] > 07.07.2021 **Что нового** * В кастомизатор добавлены функции обновления лидов и создания сделок **Админка** * Мелкие исправления текстов и вёрстки в админке **Исправлены ошибки** * Исправлен формат запросов в CRM * Ускорена загрузка записи в CRM * Исправлена регистрация пропущенных звонков на IVR (не регистрировались с версии 3.4.0) * Оптимизирована проверка статуса рабочего дня * Из файла конфигурации убрана неактуальная настройка адреса сервера C2C ### 3.4.2 [#id-3.4.2] > 16.06.2021 **Что нового** * В кастомизатор добавлена функция создания лидов **Админка** * Переделано отображение статусов на главной странице, теперь они более понятны и содержательны * Результат авторизации в CRM теперь отображается так же как статус, лучше описаны возможные ошибки и действия для их решения * Исправления вёрстки страницы логов модуля * Добавлена проверка отставания CEL от модуля **Исправлены ошибки** * Исправлена ошибка при авторизации в CRM `profile check failed: Not connected` (наблюдалась с версии 3.4.0) * Убрано извлечение внутреннего номера из поля CEL `channame` при его отсутствии в `cid_num` из-за проблем при переключении транка (введено в версии 3.3.1) * В кастомизацию регистрации звонка добавлены данные разговора ### 3.4.1 [#id-3.4.1] > 08.06.2021 **Админка** * Исправлены баги отображения логов * Добавлены недостающие тексты на английском **Исправлены ошибки** * Исправлен баг поиска записей без номера * Исправлен баг чтения настроек кастомизаций (появился в 3.4.0, кастомизации не включались) ### 3.4.0 [#id-3.4.0] > 31.05.2021 **Что нового** * [Улучшение производительности](/for-admins/work_acceleration) до 10x за счёт одновременной обработки множества звонков и группировки запросов к Битрикс24 * Добавлены [настройки ответственных за транки](/settings/additional/trunk-responsible) * Добавлена возможность [проверки статуса рабочего дня](/settings/autodistribution/autodistribution-and-timeman) сотрудника при автораспределении * Добавлены настройки [параметров создания задач](/settings/additional/parametry-sozdaniya-zadach) * [Кастомизатор переписан](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0) и теперь поддерживает запросы в CRM, улучшено логирование и обработка ошибок * Максимальная длина внутренних номеров теперь настраивается * В кастомизации `process_final_params.php` теперь доступны данные лида/контакта * Запрос API /pbx/read\_call поддерживает загрузку звонков по датам **Админка** * Оптимизирована работа с полями выбора пользователей * Статусы для главной странице проверяются быстрее и имеют ограничение по времени проверки * Исправлен баг отображения цен для новых клиентов на странице оплаты лицензии * Мелкие исправления текстов и вёрстки в админке **Исправлены ошибки** * Исправлено множество потенциальных багов * Исправлено зависание при ошибке во время штатного перезапуска * Исправлена ошибка при создании задачи без лида/контакта * Исправления багов кастомизатора * Исправлены устаревшие данные в кастомизациях * Улучшено логирование ### 3.3.5 [#id-3.3.5] > 29.04.2021 **Админка** * Исправлен выход всплывающих подсказок за границы страницы * Исправлено отображение опций кастомизаций при отключённом кастомизаторе * Исправлена вёрстка страниц логов и MySQL * Мелкие исправления интерфейса **Исправлены ошибки** * Лицензия по подписке Маркетплейса теперь работает с отдельным приложением * Лицензия по подписке работает без ограничений по времени ### 3.3.4 [#id-3.3.4] > 16.04.2021 **Админка** * Мелкие исправления интерфейса **Исправлены ошибки** * Исправлена ошибка обращения к базе данных при сборе отчёта для техподдержки * Исправлен баг поиска сущности при автораспределении на ответственного (наблюдался с 3.3.3) * Исправлен баг загрузки файла записи разговора в CRM (наблюдался с 3.3.3) ### 3.3.3 [#id-3.3.3] > 09.04.2021 **Админка** * Добавлена страница оплаты лицензии, видимая при приближении истечения лицензии * Добавлена возможность ручного контроля списка обработчиков событий Bitrix24 * Исправлена загрузка `.svg` файлов * Исправлен баг сохранения настроек при первичной конфигурации (присутствовал с 3.3.1) * Мелкие исправления интерфейса **Исправлены ошибки** * Улучшена полнота логов на уровне вывода `info` * Новая динамическая система обновлений (**если у вас версия ниже 3.3.2.1, то для перехода на новую систему придётся запустить обновление дважды**) * Группировка запросов для последующего ускорения работы * Исправлен баг авторизации на коробочных версиях с переадресацией запросов * Обновлены ограничения бесплатной версии * хранение записей только в CRM * отключено использование внешних линий (сквозная аналитика) * источник лида всегда "Звонок" * отключён чёрный/белый список * первый ответственный всегда определяется по разговору * ответственный за пропущенный звонок всегда определяется по сущности * Флаги запуска `-T` и `-sql` корректно завершают работу после выполнения * Обработчики событий удаляются из CRM при запуске автоматически по известному списку адресов, а затем регистрируются заново * При установке вызова на удержание не озвучивается номер места парковки * Снятие вызова с удержния теперь поддерживает автоответ и остальные параметры Originate * Originate возвращает ошибку "номер занят", если номер разговаривает или находится на дозвоне * Originate по умолчанию выполняется в асинхронном режиме, что предотвращает задержки при частых звонках * Исправлена обработка ошибок AMI при использовании Apix (проблема с 3.3.1) ### 3.3.2.1 [#id-3.3.2.1] > 24.03.2021 **Исправлены ошибки** * Обработка звонков без номера `to` как входящих в версии 3.3.2 нарушила регистрацию исходящих звонков с переводами и Originate, изменение отменено ### 3.3.2 [#id-3.3.2] > 24.03.2021 **Админка** * Исправления вёрстки **Исправлены ошибки** * Исправлено зависание при обрыве связи с Asterisk AMI * Исправлена проверка версии Asterisk * Звонки с номерами `from` и `trunk` но без номера `to` теперь обрабатываются как входящие * Исправлена работа с файлами при использовании админки ### 3.3.1 [#id-3.3.1] > 19.03.2021 **Админка** * Исправления в интерфейсе мастера настройки * Исправлены ошибки при выборе пользователей * В мастере настройки на шаге авторизации в CRM, портал сохраняется автоматически * Исправлена проблема сохранения настроек после авторизации в CRM **Исправлены ошибки** * Если в событии\*\* \*\*CEL `CHAN_START` отсутствует поле `cid_num`, то внутренний номер сотрудника будет извлекаться из поля `channame` * Завершение звонка теперь разрешено не только во время разговора, но и на этапе дозвона * Содержание ошибок AMI теперь отображается и выводится в лог * Повторные запросы при сетевых ошибках проверки лицензии * Повторные запросы при сетевых ошибках запросов CRM * Кастомизация пути до записей звонков теперь имеет отдельный фиксированный таймаут 10 секунд, его нельзя изменить * Обновлены настройки подключения к Apix ### 3.3.0 [#id-3.3.0] > 20.02.2021 **Что нового** * Добавлена опция автоматического завершения дел и задач после звонка с ответом **Админка** * Исправлена ошибка сохранения пользователя по умолчанию и разрешённых пользователей * Исправлена ошибка сохранения настроек после авторизации в портале (наблюдалось в 3.2.3) * Исправлена задержка смены лицензии после авторизации в портале **Исправлены ошибки** * Исправлено зависание при ошибке соединения AMI * Исправлена работа ч/б списка при пропущенных звонках * Мелкие исправления в админке ### 3.2.3 [#id-3.2.3] > 12.02.2021 **Админка** * Закреплены кнопки на странице результатов мастера * Новый способ проверки установки приложения **Исправлены ошибки** * Исправлено зависание при повторном получении токена после ошибки авторизации * Обновлены настройки по умолчанию * Обновлена кастомизация Originate * Исправлено форматирование лога * Добавлен таймаут соединения с Asterisk AMI * Исправлена проверка версии Астера ### 3.2.2 [#id-3.2.2] > 04.02.2021 **Исправлены ошибки** * Исправлено отображение карточки звонка когда первым ответственным выбран пользователь по умолчанию * Исправлен поиск пользователя при C2C при отключённом кэшировании * Исправление логирования при регистрации разговора * Отчёт для техподдержки можно получить даже если модулю не удаётся его сохранить * Мелкие исправления в админке ### 3.2.1 [#id-3.2.1] > 02.02.2021 **Админка** * SQL-запросы ограничены только немодифицирующими **Исправлены ошибки** * Исправлен баг http-заголовков, нарушавший работу с карточкой звонка * Исправлено редкое падение модуля, вызываемое действиями пользователя в админке * При обработке C2C используется кэш пользователей * Улучшено логирование ошибок кастомизаций ### 3.2.0 [#id-3.2.0] > 28.01.2021 **Что нового** * Добавлен выбор начального ответственного для новых сущностей: пользователь, на которого поступил звонок, либо ответственный по умолчанию **Логика обработки звонков** * Изменён расчёт длительности звонков при переводах: вместо длительности последнего разговора, время от первого ответа до конца звонка * Исправлена обработка переводов исходящих звонков * Смена ответственного за новую сущность при переводах звонков осуществляется в начале нового разговора **Админка** * На странице статусов отображается состояние сервера авторизации CRM и сервера C2C * На страницу с логами добавлено чтение последних `n` строк лога модуля * Разрешено отключение кэширования пользователей CRM * Обновлены тексты ошибок * Мелкие исправления и улучшения **Исправлены ошибки** * Исправлена повторная обработка недавних завершённых звонков при перезапуске модуля * Установлен минимальный таймаут кастомизаций: 100 мс * Убраны некорректные запросы `crm..list` * Обработчики удаляются из CRM при изменении настроек C2C и устанавливаются заново * Перезапуск при ошибках чтения БД и соединения с Asterisk AMI * Добавлен таймаут запросов в CRM * Исправлен сбор отчётов для техподдержки на дополнительных копиях модуля * Исправлено закрытие карточки при удержании вызова * Исправлено удержание вызова при переводах * Улучшено логирование ### 3.1.5.1 [#id-3.1.5.1] > 30.12.2020 **Исправлены ошибки** * Исправлено подключение к Apix ### 3.1.5 [#id-3.1.5] > 18.12.2020 **Исправлены ошибки** * Исправлено переподключение к Apix при ошибках * Исправлено редактирование транков в админке ### 3.1.4 [#id-3.1.4] > 16.12.2020 **Исправлены ошибки** * Исправлено падение при проблемах проверки соединения с базой данных * Обновлено значение variable в Originate для автоответа при конвертации старой версии конфига ### 3.1.3 [#id-3.1.3] > 11.12.2020 **Что нового:** * На странице статусов отображается какой подключен портал **Исправлены ошибки** * Исправлен поиск записей в CDR когда в номерах есть буквы * Улучшена обработка ошибок запросов в CRM * Исправлена ошибка авторизации `NO_AUTH_FOUND`, возникавшая на некоторых коробочных версиях Битрикса * Исправлена проблема конвертации формата токена при обновлении с 3.0.6.1 (и ранних версий), вызывавшая ошибку `token_expired` в течение нескольких первых часов после обновления * Исправлена регистрация звонков с followme при отключённых внутренних номерах * Убран вывод неактуальных отладочных данных ### 3.1.2 [#id-3.1.2] > 20.11.2020 **Исправлены ошибки** * Улучшен поиск логов для отчётов техподдержки * Исправлена ошибка авторизации ### 3.1.1 [#id-3.1.1] > 19.11.2020 **Что нового:** * Отчёты для поддержки формируются в сжатом формате **Админка** * Обновлены ссылки на инструкцию по обновлению и на changelog * Корневой адрес перенаправляет на страницу конфига **Исправлены ошибки** * Исправлена проблема с обновлением токена * Исправлено форматирование вывода с флагом -h * Исправлена загрузка старых звонков * Исправлена проблема с частой проверкой лицензии ### 3.1.0 [#id-3.1.0] > 18.11.2020 Что нового: * Добавлены параметры для использования https порта и своего сертификата * Добавлена функция формирования отчёта для техподдержки * Ошибки кастомизатора выводятся в лог **Админка** * В английской версии мастера снова две версии приложения ### 3.0.7 [#id-3.0.7] > 13.11.2020 **Что нового:** * Интерфейс для чёрного/белого списков через админку * При поиске записей в CDR используются префиксы, это упрощает поиск, если номер в CEL и CDR был в разных форматах. * Добавлена поддержка followme (перевод на сотовый сотрудника, указанный в профиле).\ Нужно только добавить свои транки в настройки для корректной работы. * Расширено логирование ошибок запросов * Интервал проверки лицензии 3 часа (бесплатный режим) или 24 часа (платный) **Админка** * На странице статусов отображается состояние модуля (работает, перегружается, остановлен) * Сохранение списка кастомизаций в новом формате **Исправлены ошибки** * Исправлен баг с зависанием callback * Исправлены проблемы с блоком customizer при конвертации конфига из старого формата * Исправлен запуск с ошибками запросов * Исправления в админке ### 3\*\*.0.6.1\*\* [#id-3-.0.6.1] > 09.10.2020 **Что нового:** * Параметр Variable в Originate (по умолчанию - автоответ) * Новый способ создания задач в соответствии с новым API Битрикса * Добавлено значение по умолчанию для времени кэширования **Админка** * Добавлена кнопка переключения портала на странице настроек Bitrix в админке * В логах даты/время отображаются корректно в Firefox **Исправлены ошибки** * Исправлена кастомизация задачи * Остановка при ошибке авторизации, вместо циклического перезапуска * Исправления в интерфейсе ### **3.0.5** [#id-3.0.5] > 17.09.2020 **Что нового:** * Исправлены ошибки в админке * Добавлен разговор в кастомизацию завершения разговора * Исправлено обновление транков * Добавлен Apix-клиент. Теперь модуль может использовать в качестве c2c-сервера Apix-сервер. ### **3.0.4** [#id-3.0.4] > 07.09.2020 **Исправлены ошибки** * Бэкап конфига в скрипте установки * Селектор пользователя в админке показывает список доступных пользователей * Добавлена работа с c2c-сервером * Добавлен флаг --clean * Улучшили вывод --help ### **3.0.3** [#id-3.0.3] > 28.08.2020 **Что нового**\ 1\. За исходящий без ответа ответственный тот, кто звонил (Исходящий не отвеченный - не пропущенный).\ 2\. Удаление обработчиков и внешних линий по флагу --clean\ \ **Исправления:**\ 1\. Ошибка с получением токена из мастера\ 2\. Обработка ошибок из AMI\ 3\. Исправили ошибки в вызове кастомизаций ### **3.0.2** [#id-3.0.2] > 18.08.2020 **Админка:**\ 1\. Улучшили страницу админки с логами\ 2\. Поправили проверку версии модуля\ \ **Логи:**\ 1\. Логируем параметры originate\ \ **Доработки:**\ 1\. Добавляем номер клиента в задачи\ 2\. Решили проблему затягивания записи с "+7"\ 3\. Вернули работу чёрно-белых списков ### **3.0.1** [#id-3.0.1] > 06.08.2020 **Что нового:** * Поправили ошибку с получением записей * Добавили сохранение типа приложения с токеном * Немного изменили лог для лучшего чтения * Добавили в админку выбор логики пропущенны **Теперь пропущенные звонки могу быть зарегистрированы по 3м сценариям:**\ 1\. На ответственного за сущность пользователя (так он увидит, что его клиент звонил) - включено по-умолчанию.\ 2\. На того, кому звонили (подходит если клиенты не закреплены за сотрудниками).\ 3\. На ответственного по-умолчанию. ### **3.0.0** [#id-3.0.0] > 13.07.2020 **Перешли на новый стек технологий.**\ \*\*\*\*Переименовали сервис itgrix\_bx вместо bx24asterisk\ \- Решены проблемы с совместимостью старых ОС.\ \- Решены проблемы с библиотеками.\ \- Упростили логику регистрации звонков: убрали параметр "дело на каждый перевод".\ \ Для обновления с версии 2.15 нужно будет установить новую версию коннектора отдельно.\ И с помощью вспомогательного скриптов перенести конфиг и кастомизации.\ [Инструкция для самостоятельного обновления](https://docs.google.com/document/d/15hgCKH3L2Nad5y9eSPUhzh6xVzM6zqPuhrIXmGzdg7I/edit)\ \ Для обновления все же советуем обратиться в нашу техническую поддержку. ### **2.15.6** [#id-2.15.6] > 20.07.2020 * **Реализован механизм oauth авторизации (без логина и пароля)** ### **2.15.5** [#id-2.15.5] > 30.06.2020 * Исправлена ошибка чтения БД (загрузка записей с начала БД) ### **2.15.4** [#id-2.15.4] > 24.04.2020 **Производительность:**\ Изменили формат запроса к базе. Теперь в запросе нет времени, только id последней записи. Ускоряет получение ответа.\ \ Исправление ошибок:\ 1\. Исправлена ошибка в кастомизации параметров регистрации звонка\ 2\. Исправлена обработка в C2C клиенте (логическая ошибка, обрабатывались не все ответы сервера) ### **2.15.3** [#id-2.15.3] > 26.03.2020 **Админка:**\ 1\. Правильное отображение элементов админки в бесплатном режиме\ 2\. Добавили английский чатик в админке в английском интерфейсе.\ \ **Исправления, доработки:**\ 1\. Регистрацией пропущенного на IVR\ 2\. Поиск пользователей по сотовому\\ ### **2.15.2** [#id-2.15.2] > 28.02.2020 **Админка:**\ 1\. Доработан интерфейс для работы с транками, внешними линиями и источниками лидов.\ 2\. Починили сохранение настроек кастомизатора.\ 3\. Отображается актуальный срок действия лицензии в админке. **Мастер-настройки**\ 1\. Починили автоматический поиск данных для подключения к Астеру и БД ### **2.15.1** [#id-2.15.1] > 18.02.2020 **Админка:**\ 1\. Новый интерфейc для работы с транками, внешними линиями и источниками лидов (бета-версия)\ 2\. Добавлено отображение срока действия лицензии в админке\ 3\. Добавлена возможность проверить лицензию прямо из админки,\ 4\. Исправлены ошибки на странице с логами,\ 5\. Исправлена ошибка с сохранением пользователей в бесплатном режиме,\ 6\. Исправлена ошибка сохранения настроек кастомизатора,\ \ **Исправление ошибок:**\ 1\. При отключенном кастомизаторе регистрируем все звонки (результат need\_registration всегда true)\ 2\. Улучшена работа с Базой данных\ 3\. Определение ответственного при переводе на группу ### **2.15.0** [#id-2.15.0] > 30.12.2019 **Логика:**\ Регистрация звонков и создание сущностей теперь полностью происходит через API телефонии Битрикс24. Это позволяет работать со сквозной аналитикой в Битрикс24 ([**Статья про сквозную аналитику**](/settings/additional/end-to-end-analytics))\ \ Из-за этого произошли существенные\*\* \*\*[**изменения в кастомизациях**:](https://docs.google.com/document/d/1WtuEhW-uV24VqFakHJDpGvzApqYtHH0M4KJ3bXDEvig/edit#heading=h.v3l93q5khlrx)\ 1\) Добавили метод "need\_registration" для реализации чёрных и белых списков. Теперь решение о регистрации (или НЕ регистрации звонка) принимается в одном месте\ 2\) Удалили методы: "process\_entity\_creation\_params", "process\_search\_params"\ 3\) В метод кастомизации параметров создания задачи добавили данные о звонке\ 4\) В методе "process\_final\_params" убрали блок с информацией о сущности\ \ **Важно:** Если у вас были настроены кастомизации черных/белых списков, то при переходе на эту версию необходимо перенести их в другой метод. [**Подробнее о переносе кастомизаций**](https://docs.google.com/document/d/1WtuEhW-uV24VqFakHJDpGvzApqYtHH0M4KJ3bXDEvig/edit#heading=h.69k2w7w0g6q4)\ Если пока сложно разбираться, то обновляйтесь только после окончания праздников. ### **2.14.11** [#id-2.14.11] > 26.12.2019 Общее:\ 1\. Выполняем повторный запрос лицензии при изменении данных подключения к Б24\ 2\. Подробный лог ошибок при выполнении запроса в CRM\ \ Исправление ошибок в Админке:\ 1\. На странице логов\ 2\. На странице sql-запросов\ 3\. С вводом имени для внешних линий\ 4\. В мастере для 32х (приводило к падению модуля) ### **2.14.10** [#id-2.14.10] > 18.12.2019 1\. Исправление критические ошибки при подключении к базе данных.\ 2\. Убрали websocket. ### **2.14.9** [#id-2.14.9] > 09.12.2019 Улучшения и багфиксы в Админке:\ 1\. Исправлена ошибка удаления объектов при сохранении.\ 2\. Добавлен лоадер при ожидании ответа модуля (переподключение к зависимым службам)\ 3\. Вернули функционал на страницу с логами\ 4\. Вернули чат в админку\ 5\. Подсвечиваем красным пустые поля\ 6\. Добавили выпадающий Список пользователей для бесплатного режима\ 7\. Исправлена ошибка со страницей локализации.\ 8\. Убрали поле "history\_start\_date" ### **2.14.8** [#id-2.14.8] > 07.11.2019 Логика:\ Убрали ограничение по транкам для бесплатного режима (restricted mode). Осталось в ограничения 2 пользователя, загрузка файлов в CRM, невозможность отключить создание лидов/контактов.\ \ Админка:\ Добавлена возможность указать путь до кастомизатора в админке\ \ Исправление ошибок:\ Исправлена ошибка при поиске клиента: добавили номер без префикса в список номеров для поиска. ### **2.14.7** [#id-2.14.7] > 14.10.2019 Решение проблемы с конфликтом библиотек при запуске подпроцессов (php, asterisk). ### **2.14.6** [#id-2.14.6] > 10.10.2019 Исправление ошибок:\ 1\) Исправлено использование галочек "создавать сделку для ..."\ 2\) Исправлена ошибка в мастере: данные подключения не подтягивались автомиатически\ 3\) Вернули connector.js ### **2.14.5** [#id-2.14.5] > 03.10.2019 Исправление ошибок:\ 1\) Критические ошибки, приводящие к зависанию модуля\ 2\) Проверка версий в админке\ 3\) Ошибки в админке ### **2.14.1** [#id-2.14.1] > 11.09.2019 Админка:\ 1\) Добавлена новая возможность - выбрать словарь для текстовых полей, создаваемые в Битриксе (название лида, комментарий, название задачи). Сейчас можно выбрать русский язык, английский язык либо создать свой словарь на основе этих двух.\ 2\) Изменили порядок левого меню: перенесли Бизнес-логику выше.\ 3\) Исправили ряд ошибок\ 4\) Добавили новые шаги в мастер настройки (настройка пути до папки с записями, выбор режима работы CRM, настройка клика) Логи:\ 1\) Добавлено саммари-сообщение по звонку\ 2\) В дефолтном кастомизаторе добавили сообщение на ошибку 127 (нет lame)\ 3\) Изменили сообщение при отмене регистрации сущности по параметру в конфиге ("Создавать лид для входящих" и подобные) ### **2.13.6** [#id-2.13.6] > 06.08.2019 Исправление ошибок: 1. Обработка ситуации, когда у сущности в CRM нет ответственного (такое почему-то бывает в коробках Битрикс24). 2. Добавлен id звонка при выводе ошибок в лог (помогает для отладки работы). 3. При ошибке кастомизатора используются некастомизированные параметры. ### **2.13.5** [#id-2.13.5] > 11.07.2019 Админка: 1. Изменили поведение при нажатии кнопки "Повторить" на странице "Проверка подключений". 2. Теперь админка не дает нажать кнопку "Повторить" пока серверное приложение не закончит проверку состояния. Баги: 1. Исправили ошибку в работе с БД. ### **2.13.4.0** [#id-2.13.4.0] > 02.07.2019 Доработки: 1. Добавлена возможность перевода служебных сообщений и названий на другие языки (работает в тестовом режиме). 2. Исправлена ошибка в работе с повторными лидами. Админка: 1. Появилась возможность выбора английского языка для интерфейса админки. 2. Изменили логику работы при сохранении настроек: после нажатия кнопки "Сохранить" админка сохраняет настройки в конфиг-файл, перезапускает модуль, и только после этого позволяет вносить изменения. Исправлены баги админки: * Вернули настройку "Внешних линий в Битрикс24". * Исправили формат отправки даты. * Исправили логику выбора в селекторах. * Исправили сохранение настройки "Кастомизация полей лида". ### **2.12.0.1** [#id-2.12.0.1] > 20.05.2019 **Важное** изменение логики поиска сущности в Б24:\ Теперь при начале звонка перебираем все сущности (лиды, контакты, компании) и добавляем звонок самую новую.\ Если модуль нашел только лиды, то учитываем их статус. Убираем из выборки сконвертированные и некачественные лиды, после чего регистрируем звонок в самый новый лид в рабочем статусе. (Ранее выбиралась самая старая сущность).\ \ Исправлены баги: * Ошибка скрипта обновления: при отказе от бэкапа прерывает выполнение обновления. * В админке Нулевая дата при загрузке страницы и 30 часов в сутках на странице логов. Дополнительно в админке перенесли стили на html страницу, чтобы избавиться от ошибок загрузки. ### **2.11.9.18** [#id-2.11.9.18] > 30.04.2019 Функционал: 1. Реализовали режим работы "без лидов", подходящий для режима в Битрикс24 - Простая CRM. По звонкам новых клиентов создаётся не лид, а контакт + сделка. После ответа на звонок ответственный меняется у контакта и сделки. 2. Добавили новые параметры настройки в админку: можно создавать либо игнорировать создание контакта для выходящих и исходящих звонков. И если создается контакт, то выбрать, создавать ли сделку. 3. Доработали метод кастомизации - создания сущности. **Важно:** Если вы использовали кастомизацию создания лида, то сейчас название метода изменилось с "process\_lead\_creation\_params" на "process\_entity\_creation\_params". ### **2.11.8.4** [#id-2.11.8.4] > 11.04.2019 Админка:\ 1\) Исправлена ошибка с сохранением времени хранения кэша для Битрикса. 2) Добавили демонстрацию порта для https запросов (поменять можно только через файл конфига).\ \ Админка для бесплатного приложения:\ 1\) Отображается "Ограниченный режим".\ 2\) Добавили возможность выбора разрешенных пользователей.\ \ Логика:\ 1\) Поменяли порядок обработки номера: в начала звонка обрезаем нули перед отправкой в Битрикс, затем выполняем кастомизацию.\ \ Возможности:\ 1\) Стала возможным обрабатывать входящего звонка с технологией DAHDI\ 2\) При обновлении модуля на сервере скрипт (update.sh) предлагает сделать бэкап ### **2.11.7.6** [#id-2.11.7.6] > 15.03.2019 Возможности:\ 1\) Пользователь по умолчанию автоматические попадет в список разрешенных пользователей для бесплатной версии.\ 2\) Для отладки добавили флаг --testcall \<linkedid> для обработки одного звонка из CEL. ### **2.11.7.0** [#id-2.11.7.0] > 11.03.2019 Возможности:\ 1\) Новая возможность: использовать в кастомизаторе запросы в CRM через модуль (дополнительные запросы имени пользователя, клиента, сущностей).\ 2\) В админку добавлена ссылка на страницу с описанием новых версий.\ 3\) Упростились методы кастомизации номера телефона и последующего поиска сущности в CRM.\ 4\) Для регистрации пропущенных без номеров доделываем разговор по завершению. Оптимизации:\ 1\) Улучшена работа с префиксами. ### **2.11.6.3** [#id-2.11.6.3] > 27.02.2019 Особенности:\ Доработали сервер лицензирования, теперь модуль одинаково работает как с бесплатной, так и с платной версией приложения в Битрикс24.\ Добавили кэширование. Багфикс:\ При ошибке приложения, лицензия на портале проверяется не чаще, чем раз в час. ### **2.11.5.10** [#id-2.11.5.10] > 21.02.2019 Доработка логики: * При поступлении звонка и поиске сущности по номеру не учитываем некачественные и сконвертированные лиды. Теперь если лид с этим номер уже переведен в некачественные, то будет создан новый лид. Оптимизации:\ 1\) Убрали параметр конфига "utc\_offset" (время), теперь передаем время звонка в utc формате, и для пользователя отображается часовой пояс заданный в битриксе.\ 2\) Изменили порядок кастомизации - теперь номер телефона кастомизируется в самом начале. Баги:\ 1\) Исправили заголовки для css файлов, теперь интерфейс админки должен открываться более стабильно. ### **2.11.4.2** [#id-2.11.4.2] > 18.02.2019 Возможности: 1\) Выдается информация об авторе приложения ООО Разумные решения по флагу --legal.\ 2\) По пропущенному звонку появилась возможность создавать задачу:\ \- постановщик - пользователь, под которым работает модуль,\ \- ответственный за задачу - ответственный за сущность,\ \- дедлайн + 1 час от времени звонка.\ Включить можно в админке. Доступно для изменения в кастомизации (например можно сделать постановщиком руководителя отдела продаж или изменить время дедлайна).\ 3\) Номер внешней линии попадает в кастомизатор при звонка кликом и обратных звонках. Это позволит кастомизировать исходящий маршрут. Нужно будет указать соответствующий контекст. ### **2.11.3.1** [#id-2.11.3.1] > 06.02.2019 Админка, веб-интерфейс:\ исправлен баг сохранения транка, который содержит "+". ### **2.11.2.3** [#id-2.11.2.3] > 30.01.2019 Возможности:\ Реализовали работу модуля с бесплатной версией приложения: ограничение по 1 транку и 2 пользователям.\ [https://www.bitrix24.kz/apps/app/itgro.asteriskbx24free/](https://www.bitrix24.kz/apps/app/itgro.asteriskbx24free/) Баги:\ Обработка клик-ту-кола по http без редиректа на https.\ (оставили старую возможность передавать команду для клика через имеющийся протоколо http, порт по умолчанию 8077) ### **2.11.1.4** [#id-2.11.1.4] > 30.01.2019 Возможности:\ 1\) Вернули работу части запросов работает по http: клик-ту-колл, автораспределени, прослушивание записей.\ Добавили Флаг для отключения http в конфиге.\ Оставили админку только по https (порт по умолчанию 8078), при вводе 8077 будет редирект.\ Если требуется подключение из внешней сети - потребуется проброс второго порта.\ 2\) При кастомизации завершения разговора в кастомизатор передаются id и тип сущности. Будет полезно\ 3\) Добавили интерфейс админки в приложение на портале. ### **2.11.0.10** [#id-2.11.0.10] > 22.01.2019 Возможности:\ 1\) Перевели доступ к админке на https протокол с самоподписным сертификатом, для шифрования запросов к модулю.\ При первом входе требуется одобрить сертфикат в браузере.\ 2\) Добавили возможность проверки новой версии модуля из админки. Баги:\ 1\) Кастомизация номера сотрудника.\ 2\) Ошибка с "+" в ссылке.\ 3\) Создание лидов при флаге "не создавать". ### **2.10.2.14** [#id-2.10.2.14] > 24.12.2018 Баги:\ 1\) Обработка ответа БД.\ 2\) Опции соединения с БД. Возможности:\ 1\) **Создаём лид без использования телефонии.**\ \*\*\*\*2) Кастомизация полей лида при создании.\ 3\) Разделение кастомизатора на несколько файлов. Админка - баги:\ 1\) Проверка лицензии.\ 2\) Ошибка завершения мастера. ### **2.9.10.3** [#id-2.9.10.3] > 11.12.2018 Баги:\ 1\) Исправлена ошибка при чтении конфигов Астериска (пустые значения)\ 2\) Критическая ошибки при обработке ответов от БД. Возможности:\ Постраничный просмотр лога. ### **2.9.8.1** [#id-2.9.8.1] > 03.12.2018 Баги:\ 1\) Удаление лида при входящем.\ 2\) Исправление ошибки с числами в запросах с Json. Оптимизация:\ 1\) Улучшенный поиск в логе.\ 2\) Стандартизация сообщений.\ 3\) Загрузка конфига при старте.\ \ Возможности:\ Добавляем транк в исходящий звонок при ответе. ### **2.9.5.4** [#id-2.9.5.4] > 27.11.2018 Баги:\ Обновление токена при сохранении данных в админке ### **2.9.4.1** [#id-2.9.4.1] > 27.11.2018 Оптимизация:\ Уменьшение запросов при звонке кликом. Баги:\ Исправлена ошибка в подсчёте разговоров в звонке Админка:\ 1\) Проверка версии модуля.\ 2\) Правки таблицы логов. ### **2.9.3.6** [#id-2.9.3.6] > 23.11.2018 Баги:\ 1\) Закрывание карточек всех разговоров при завершении звонка.\ 2\) Сборка разговора на ответе для группы. Возможности:\ 1\) Поиск в логе по данным. ### **2.9.2.2** [#id-2.9.2.2] > 19.11.2018 Баги:\ Доработана сборка разговора при ответе ### **2.9.1.3** [#id-2.9.1.3] > 14.11.2018 Баги:\ Исходящий пропущенный без разговора должен удаляться. ### **2.9.0.3** [#id-2.9.0.3] > 14.11.2018 Логика регистрации звонков:\ Если сотрудника, которому звонили, нет на портале, то звонок не будет зарегистрирован. Использование:\ 1\) Скрипт удаления.\ 2\) Добавлены примеры кастомизаций в шаблонный файл. ### **2.8.120** [#id-2.8.120] > 12.11.2018 Баги:\ Исходящий звонок, с номером в дочернем канале Внешний вид:\ В логе появились события удаления лида и дела ### **2.8.117** [#id-2.8.117] > 08.11.2018 Баги:\ Перезапуск логера после ротации ### **2.8.115** [#id-2.8.115] > 06.11.2018 Админка - возможности:\ 1\) Изменение внешних линий ч/з админку.\ 2\) Просмотр лога ч/з админку.\ 3\) Выполнение sql запросов ч/з веб-интерфейс. Использование:\ Ссылка на мастер в скрипте установки. Оптимизация:\ 1\) Запрос кастомизации originate.\ 2\) Http общение.\ 3\) Улучшение sql запроса записи. Баги:\ Завершение пикапнутого канала. ### **2.8.97** [#id-2.8.97] > 19.10.2018 Оптимизация:\ 1\) Оптимизация запроса на поиск пользователя портала.\ 2\) Избавляемся от отладочного вывода.\ 3\) Кастомизация параметров originate и отправка запроса Возможности:\ 1\) Функция логирования в кастомизаторе\ 2\) Использование внешних линий на портале (транк в окне) Баги:\ 1\) Регистрируем неотвеченный разговор в конце цепочки переводов, если нужно создавать все дела. ### **2.8.77** [#id-2.8.77] > 03.10.2018 Возможности:\ 1\) Обработка перевода при исходящем C2C звонке\ 2\) Обработка звонка при использовании FollowMe Баги:\ 1\) Ошибка запроса на получение сущности при кастомизации поиска\ 2\) Определение последнего разговора в звонке\ 3\) Регистрация начала звонка при исходящем, если не найден сотрудник ### **2.8.71** [#id-2.8.71] > 01.10.2018 Возможности:\ Перевод исходящего звонка Баги:\ Обновление логера ### **2.8.64** [#id-2.8.64] > 27.09.2018 Баг:\ Перезагрузка логера вызывала утечку ### **2.8.63** [#id-2.8.63] > 27.09.2018 Баги:\ 1\) Ошибка при обработке http-запроса (ссылка на временный объект)\ 2\) Скрытие карточек звонка при переводе в режиме "одно дело на перевод". Оптимизация:\ Компиляция с флагом оптимизации -O3 ### **2.8.59** [#id-2.8.59] > 24.09.2018 Баг:\ Починили обновление токена авторизации. Возможности:\ Originate на внешний номер. Оптимизации:\ Оптимизация использования конфига. ### **2.8.52** [#id-2.8.52] > 18.09.2018 Админка - баги:\ 1\) Сохранение строк с пробелами (заменялся на '+')\ 2\) Отображение картинок Баги:\ Ошибки C2C-клиента (бешенный reject) Возможности:\ Кастомизация поиска сущности в начале звонка. ### **2.8.45** [#id-2.8.45] > 17.09.2018 Админка - баги:\ 1\) Сохранение пароля на локальном Астериске.\ 2\) Проверка доступа на локальном Астериске. Баги: Остановка цикла обработка ответов от C2C-сервера при перезапуске. Возможности:\ Более подробное описание ошибки получения кода авторизации (форма, капча) ### **2.8.39** [#id-2.8.39] > 07.09.2018 Баги:\ 1\) Обновление статуса канала после перехвата (фикс перевода после перехвата)\ 2\) В админке используем текущий конфиг для проверки подключений (НЕ найденный автоматически)\ 3\) Очистка памяти, выдялемой под запрос при http-общении Возможности:\ Обратный звонок через сервер c2c. ### **2.8.35** [#id-2.8.35] > 06.09.2018 Баги:\ Обновление флагов кастомизатора в админке ### **2.8.34** [#id-2.8.34] > 06.09.2018 Баги:\ Деструктор для ответов БД (очистка ресурсов) Возможности:\ Запуск с флагом "-c" также удаляет обработчик события call\_back. ### **2.8.30** [#id-2.8.30] > 04.09.2018 Баги:\ Утечка памяти при использовании админки ### **2.8.29** [#id-2.8.29] > 04.09.2018 Баги:\ Получение cid\_num из имени канала. Админка - баги:\ Чек-бокс для "регистрации входящих" считывался в переменную "регистрации исходящих" и наоборот. Админка - внешний вид:\ Добавили виджет обратной связи. ### **2.8.23** [#id-2.8.23] > 09.08.2018 Возможности:\ Устанавливаем имя контакта в CALLERID при автораспределении вызова. ### **2.8.22** [#id-2.8.22] > 08.08.2018 Баги:\ Не закрывали соединение при запросе на установку данных roistat ### **2.8.21** [#id-2.8.21] > 08.08.2018 Баги:\ При перезапуске SQL коннектора сбрасывались переменные сессии. Возможности:\ Обратный звонок. ### **2.8.17** [#id-2.8.17] > 01.08.2018 Баги:\ Проблемы с сохранением невалидных данных с админки. ### **2.8.15** [#id-2.8.15] > 30.07.2018 Баги:\ 1\) Утечка памяти при само-перезапуске модуля.\ 2\) Использование неинициализированных данных в сущности "Звонок". Производительность:\ Очередь тасков была вектором тасков. ### **2.8.9** [#id-2.8.9] > 24.07.2018 Исправлена ошибка перемотки записи ### **2.8.6** [#id-2.8.6] > 23.07.2018 1\) Исправлена ошибка с переводом на группу.\ 2\) Добавлена установка таймаутов на соединение с БД. ### **2.8.0** [#id-2.8.0] > 17.07.2018 Звонки теперь продолжают "собираться" до ответа на канале. Благодаря этому:\ 1\) Указание транков больше не является требованием для фиксирования звонков\ 2\) Будут фиксироваться originate-звонки, даже если они сделаны НЕ через модуль. ### **2.7.112** [#id-2.7.112] > 09.07.2018 Мелкие исправления админки:\ 1\) Доработана проверка версии Астериск\ 2\) Доработана валидация ввода ### **2.7.103** [#id-2.7.103] > 05.07.2018 Добавлена возможность кастомизации дела и лида ### **2.7.94** [#id-2.7.94] > 03.07.2018 1\) Новый формат лога\ 2\) Исправлена ошибка с управляемым переводом ### **2.7.69** [#id-2.7.69] > 19.06.2018 1\) Выгружаем запись для пропущенного звонка, если она существует.\ 2\) Возможность добавить Variable и Codecs к параметрам originate через кастомизатор. ### **2.7.51** [#id-2.7.51] > 14.06.2018 1\) Новый интерфейс для изменения конфига приложения.\ 2\) Доработана проверка Астериска в мастере настройки ### **2.7.0** [#id-2.7.0] > 06.06.2018 Новый функционал:\ 1\) Обработка перехватов. Мелкие изменения:\ 1\) Дефолтный конфиг завёнут в скрипт установки. При установке заполняем логин и пароль для доступа через веб.\ 2\) Добавили получение версии ОС и версии приложения в мастере. 3) Исправлена ошибка с сохранением пользователя Астериска через мастер.\ 4\) Добавлена проверка фиксируемых событий CEL на Астериск. ### **2.6.49** [#id-2.6.49] > 28.05.2018 Мелкие исправления:\ 1\) Не выгружаем записи для пропущенных 2) Доработано удаление нулей в начале номера Новые особенности\ 1\) Возможность использовать сервер "click to call" ### **2.6.41** [#id-2.6.41] > 14.05.2018 1\) Использование имён таблиц и столбцов из конфига при проверке базы.\ 2\) Путь до лог файла перенесён в конфиг. ### **2.6.32** [#id-2.6.32] > 08.05.2018 1\) Мастер настройки перемещён на /config/master\ 2\) Исправление обработки ошибок при настройке. ### **2.6.11** [#id-2.6.11] > 06.05.2018 1\) Добавлена возможность кэширования пользователей портала.\ 2\) Страница запуска мастера проверки закрыта паролем (basic authorization). ### **2.6.1** [#id-2.6.1] > 04.05.2018 1\) Появился мастер настройки подключений. Запуск: /opt/bx24asterisk/bx24asterisk\_configure, после чего настраиваем через веб-интерфейс.\ Для использования консольного интерфейса нужно использовать флаг '-c'.\ 2\) Исправлена ошибка регистрации при переводах. ### **2.5.3** [#id-2.5.3] > 20.04.2018 1\) Уменьшено время ожидания при перезапуске (с 5 минут до 1)\ 2\) В чек-мастере добавлена проверка Астериска на удалённой машине ### **2.5.1** [#id-2.5.1] > 17.04.2018 1\) bx24asterisk\_configure теперь представляет собой мастер чек-тест:\ \- Выполняет проверку подключения к базе\ \- Выполняет проверку подключения к Битриксу (авторизация, админ, приложение) ### **2.4.51** [#id-2.4.51] > 09.04.2018 Доработано удаление дел/лидов для случая с одним делом на звонок с переводом. ### **2.4.42** [#id-2.4.42] > 04.04.2018 1\) Добавлена возможность изменять паузу между запросами в Битрикс в конфиге.\ 2\) Убрал ответы Астериска на: Login, SIPPeers, IAXPeers\ 3\) Перевёл часть сообщений на английский ### **2.4.27** [#id-2.4.27] > 23.03.2018 Исправлен баг: неверное время в делах. ### **2.4.26** [#id-2.4.26] > 20.03.2018 1\) Добавлена базовая авторизация на страницу настройки конфига.\ 2\) Исправлен баг с поиском пользователей с номерами 0xxx ### **2.4.17** [#id-2.4.17] > 12.03.2018 1\) Берём внутренний номер из chan\_name, если его нет в cid\_num при chan\_start.\ 2\) При исходящем звонке сразу ставим ответственным в созданную сущность звонящего пользователя.\ 3\) При поиске записи используем номер без префикса. ### **2.4.13** [#id-2.4.13] > 06.03.2018 Изменения в порядке регистрации звонка:\ 1\) Можем регистрировать при поступлении на ivr\ 2\) Если не зарегистрировали на ivr (из-за ошибки или ответа кастомизатора), то регистрируем при запросе разговора. Добавлена возможность кастомизации параметров поиска сущности и параметров регистрации завершения разговора (finish).\ Первый метод позволяет НЕ регистрировать звонок на ivr.\ Второй метод позволяет принять сообщить о необходимости удаления дела, после регистрации. ### **2.4.3** [#id-2.4.3] > 26.02.2018 1\) Добавлена возможность изменения конфиг-файла через веб-интерфейс.\ 2\) Рестарт программы при потере связи с зависимыми сервисами. ### **2.3.26** [#id-2.3.26] > 14.02.2018 1\) Исправлена ошибка с нарушением логирования при ротации логов.\ 2\) Отмена показа окна для старых разговоров. ### **2.3.22** [#id-2.3.22] > 09.02.2018 1\) Исправлен баг составления запроса записи.\ 2\) В скрипт-инсталятор добавлено включение ротации логов.\ 3\) В скрипт-инсталятор добавлено использование update-rc.d, если нет chkconfig. ### **2.3.15** [#id-2.3.15] > 08.02.2018 Считаем короткие номера (длина меньше 5) локальными. ### **2.3.14** [#id-2.3.14] > 07.02.2018 Добавлена отчистка состояния по флагу -c, а именно:\ 1\) Удаляет обработчики onexternalcallstart.\ 2\) Чистит файлы state.json и token.json\ 3\) Ставит текущее время в конфиг ### **2.3.13** [#id-2.3.13] > 06.02.2018 1\) Сервис запускается от пользователя (Астериск).\ 2\) Исправлены баги, связанные с логированием. ### **2.3.7** [#id-2.3.7] > 02.02.2018 Получаем уровень логирования из конфига. Необходимо изменить скрипт /etc/init.d/bx24asterisk : удалить -level=debug ### **2.3.6** [#id-2.3.6] > 01.02.2018 Доработано скрытие карточки разговора, автоматически открытой при клике по номеру ### **2.3.5** [#id-2.3.5] > 01.02.2018 Теперь получаем служебные комбинации с Астериска (например, \*8 для pickup). Звонок на такую комбинацию рассматривается как внутренний.\ Комбинации можно посмотреть выполнив следующую команду в консоли Астериска: features show. ### **2.3.4** [#id-2.3.4] > 31.01.2018 Изменилась особенность работы веб-сервера. Веб-сервер слушает на указанном в listen\_host по указанному в listen\_port порту. ### **2.3.3** [#id-2.3.3] > 30.01.2018 1\) Исправлена обработка клик ту кол.\ 2\) Изменение конфига:\ 2.1) host заменили на listen\_host.\ 2.2) port заменили на listen\_port.\ 2.3) добавлен параметр address\_ext для указания адреса для внешних сервисов (например, Битрикс для клика)\ 2.4) добавлен параметр address\_int для указания адреса для внутренних сервисов (например, для записи в локальной сети)\ 3\) Исправлена обработка управляемого (условного) перевода. # Наши контакты (/contacts) ### **Для клиентов с CRM Битрикс24** [#dlya-klientov-s-crm-bitriks24] Онлайн-чат: [сразу в вашем портале Б24](https://auth2.bitrix24.net/oauth/select/?preset=im\&IM_DIALOG=networkLines499efc345146f93b614698bf3cbe5fcd)\ либо\ В списке чатов в вашем портале напишите Айтигрикс или Itgrix - найдется чат с поддержкой\ WhatsApp: [https://wa.me/74993508890](https://wa.me/74993508890)\ Telegram: [https://t.me/bx24asterisk\_bot](https://t.me/bx24asterisk_bot)\ E-mail: [bx24@itgro.ru](mailto:bx24@itgro.ru) ### **Для клиентов с AmoCRM** [#dlya-klientov-s-amocrm] Telegram: [https://t.me/itgrix\_amo\_bot](https://t.me/itgrix_amo_bot)\ Онлайн-чат [https://portal.itgro.ru/online/itgrix-amo](https://portal.itgro.ru/online/itgrix-amo)\ E-mail: [amocrm@itgro.ru]() ### Для групповых чатов в телеграм [#dlya-gruppovykh-chatov-v-telegram] Для того, чтобы связать групповой чат в телеграмме с чатом техподдержки, нужно добавить в группу этого телеграм-бота [https://t.me/ItgrixSupport\_bot](https://t.me/ItgrixSupport_bot).\ В этом случае все сообщения в группе будут передаваться к нам в чат. ### [ВКонтакте](https://vk.com/im/convo/-124145610?entrypoint=community_page\&tab=all) [#vkontakte] ### [MAX](https://max.ru/id6686029435_bot) [#max] ### **Телефоны для связи** [#telefony-dlya-svyazi] +7 499 350-88-90\ или\ +7 343 272-30-33 (добавочный 4) ### **Режим работы** [#rezhim-raboty] Пн-Пт с 8.00 до 17.00 (по московскому времени) ### Время отклика [#vremya-otklika] Мы стараемся отвечать на вопросы в течение 2х часов с момента их поступления. # Что такое Itgrix? (/) Itgrix – надежный инструмент интеграции IP-телефонии Asterisk и CRM-систем для оперативной работы со звонками.
## Преимущества модуля интеграции Itgrix [#preimushestva-modulya-integracii-itgrix]
Интеграция с Битрикс24 и AmoCRMСовместимость с любым
современным Asterisk
Актуальные функцииРегулярные обновления
Удобный интерфейс настройкиНеограниченные возможности
кастомизации
Создатели – опытные разработчикиСильная команда техподдержки
Демократичная стоимость и
скидки
на лицензию от 3 месяцев
Бесплатный тестовый период 7 дней + 7 дней по запросу
## Технические особенности [#tekhnicheskie-osobennosti] * Возможность установки на любой сервер, подходящий по техническим требованиям; * Возможность работать на нескольких Asterisk и одной CRM или наоборот; * Для установки подходит чистый Asterisk, FreePBX, Elastix или Issabel; * Не требует дополнительного ПО; * Сохраняет все настроенные возможности вашей АТС (распределение звонков, группы, очереди и многое другое); * Настройка не требует знаний программирования.
## 👀 Как работает коннектор Itgrix? [#kak-rabotaet-konnektor-itgrix] После установки модуля Itgrix и настройки интеграции ваша CRM обогащается дополнительным функционалом. ### Важные функции, доступные после интеграции [#vazhnye-funkcii-dostupnye-posle-integracii] ✅ **Автоматическое создание лидов** Контакты моментально вносятся в CRM: * Для неизвестного номера телефона создается контакт; * Определяется и фиксируется ответственный (по умолчанию – ответивший сотрудник); * В Битрикс24 дополнительно указывается источник и тип обращения. Входящий звонок –> создан лид ✅ **Полная информация о звонках в вашей CRM** Созданы все условия, чтобы не потерять ни одного клиента: * Формируется история звонков по каждому клиенту; * Воспроизводятся и скачиваются записи разговоров; * Отображается время звонка; * Фиксируются все пропущенные; * Автоматически создаются события/задачи по пропущенным для ответственных за контакты. Пропущенный звонок –> создана задача для ответственного ✅ **Звонок в один клик и всплывающая карточка** Удобная работа со звонками прямо в интерфейсе CRM: * Звонок кликом по номеру телефона из карточки контакта; * Звонок вводом номера во встроенном виджете (только в Битрикс24); * Всплывающая во время разговора карточка звонка. Вызов –> всплывающая карточка –> переход к инф-ции о клиенте В модуле для AmoCRM полноценная многофункциональная всплывающая карточка звонка находится в разработке. ✅ **Автораспределение звонков** Звонок каждого клиента направляется напрямую на ответственного сотрудника – без секретаря и голосового меню: * Фиксируется ответственный в карточке клиента; * В карточке каждого звонка отображается ответивший. Входящий звонок –> маршрутизация на ответственного ✅ **CRM-аналитика по звонкам** Формирование отчетов, которые помогут объективно оценить ситуацию и проанализировать эффективность работы сотрудников: * В Битрикс24 – отчеты по источникам лидов, конверсии в сделки и эффективности каналов продвижения; Соответствие номеров телефона источникам –> сквозная аналитика * В AmoCRM – отчеты по длительности и количеству звонков каждого менеджера. Звонки –> сводная аналитика по каждому сотруднику ### Дополнительный функционал [#dopolnitelnyi-funkcional] В модуле интеграции Itgrix предусмотрены широкие возможности кастомизации. Интерфейс Itgrix –> настройки #### Доработайте функционал под специфические потребности вашего бизнеса: [#dorabotaite-funkcional-pod-specificheskie-potrebnosti-vashego-biznesa] 1. [Включите кастомизатор](/custom_common/vklyuchenie-kastomizatora) в интерфейсе Itgrix; 2. Изучите [документацию для администраторов](/for-admins); 3. Выберете необходимые дополнения и настройте кастомизацию. Мы подготовили для вас инструкции по настройке некоторых [полезных кастомизаций.](/custom_common) Сомневаетесь в собственных технических навыках?\ [Закажите необходимую доработку](mailto:itgrix@itgro.ru) у нас. ## Стоимость модуля интеграции Itgrix [#stoimost-modulya-integracii-itgrix]
[**Стоимость лицензии указана на сайте** ](https://itgrix.ru/bx24/?utm_source=database#cost) **7 дней бесплатного тестового периода + 7 дней по запросу**\ для оценки функционала коннектора перед покупкой полной лицензии. ℹ **Обратите внимание:** оплата производится единовременно за весь период действия приобретаемой лицензии. Нашли на сайте или в корпоративном портале\ **бесплатный Asterisk-коннектор Itgrix**? Глаза вас не обманывают. #### **Отличие бесплатной версии Itgrix от платной** [#otlichie-besplatnoi-versii-itgrix-ot-platnoi] Бесплатная версия модуля для Битрикс24, в отличие от платной, ***имеет некоторые ограничения***, и потому она подходит только для небольшой компании или при тестировании крупных внедрений. **Доступное количество пользователей** для работы с бесплатным инструментом: * 2 пользователя. **Ограничения по функционалу** в бесплатной версии: * только 1 источник звонка; * невозможно отключить создание лида/контакта для входящих и исходящих звонков; * файлы записи звонков загружаются в CRM без возможности прикрепления записей ссылками; * доступны только базовые кастомизации номеров телефонов. **Для снятия ограничений необходимо приобрести лицензию** на полную версию модуля Itgrix, обратившись к специалистам Itgrix или самостоятельно установив платное приложение в Битрикс24.
[**Стоимость лицензии указана на сайте**](https://itgrix.ru/amo/?utm_source=database#cost) **7 дней бесплатного тестового периода + 7 дней предоставляем по запросу**\ для оценки функционала коннектора перед покупкой полной лицензии. Минимальный срок лицензии для приобретения – 3 месяца. Чем больше срок действия приобретаемой лицензии, ***тем выгоднее***. Стоимость коннектора зависит от вашего тарифа Битрикс24. ## Где найти модуль интеграции Itgrix [#gde-naiti-modul-integracii-itgrix] #### На сайте [#na-saite]
Версия для подписчиков Битрикс24.Маркет ПлюсДля бесплатного Битрикс24.Маркет
Перейти к просмотру👉Перейти к просмотру👉
#### Непосредственно в вашем корпоративном портале [#neposredstvenno-v-vashem-korporativnom-portale] Перейдите в раздел "Маркет Плюс" и в поисковой строке введите "Itgrix". **Приложение по подписке Маркет Плюс** В соответствии с [представленным выше прайсом](./#stoimost-modulya-integracii-itgrix) стоимость будет зависеть от выбранного срока действия лицензии. **Приложение из бесплатного Маркета** Перейдите в раздел "Интеграции" и в поисковой строке введите "Itgrix". При окончании тестового периода длительностью 14 дней приложение без оплаты из бесплатного Маркета перейдёт на ограниченный режим - **2 пользователя**. Приложение из Маркет плюс, в свою очередь, перейдёт на ограниченный режим с **6 пользователями**.
#### Непосредственно в вашем корпоративном портале [#neposredstvenno-v-vashem-korporativnom-portale-1] Перейдите в раздел "Настройки", выберите пункт меню "Интеграции" и в поисковой строке введите "Itgrix". Нажмите кнопку "Установить" под найденным приложением, чтобы увидеть подробную информацию. Itgrix в корпоративном портале AmoCRM **Обратите внимание:** нажимая на кнопку "Установить" в списке виджетов, система лишь открывает карточку с подробным описанием выбранного решения, а не устанавливает его.
## 🚀 Как начать использовать Itgrix? [#kak-nachat-ispolzovat-itgrix] Необходимо, ***следуя несложной инструкции***, установить модуль и провести базовую настройку интеграции. Перед началом установки **убедитесь**, что ваши исходные данные соответствуют [**минимальным требованиям системы**](/ustanovka-modulya/trebovaniya-k-sisteme)**.** #### **Установка модуля проводится в 3 этапа:** [#ustanovka-modulya-provoditsya-v-3-etapa] 1. Установка Itgrix на портале Битрикс24; 2. Установка модуля на вашем сервере с Asterisk; 3. Настройка модуля интеграции через интерфейс приложения. Для быстрой настройки Itgrix и корректной работы интеграции **следуйте пошаговой инструкции** по установке модуля для : После завершения настройки рекомендуем проверить работу интеграции с помощью [**тест-кейсов**](/settings/test). Перед началом установки **убедитесь**, что ваши исходные данные соответствуют [**минимальным требованиям системы**](/ustanovka-modulya/trebovaniya-k-sisteme)**.** #### **Установка модуля проводится в 3 этапа:** [#ustanovka-modulya-provoditsya-v-3-etapa-1] 1. Установка Itgrix непосредственно в AmoCRM; 2. Установка модуля на вашем сервере с Asterisk; 3. Настройка модуля интеграции через интерфейс приложения. Для быстрой настройки Itgrix и корректной работы интеграции **следуйте пошаговой инструкции** по установке модуля для : Дополнительно есть возможность [заказать настройку интеграции](/contacts) Asterisk с вашей CRM специалистами Itgrix. Дополнительные 2 недели использования модуля **в подарок!** Настройка нашими специалистами проводится удаленно. **От вас потребуются**: * Доступы с правами администрирования к серверу, где расположен ваш Asterisk, и к вашему порталу в CRM; * Связь с вашим специалистом, компетентным ответить на вопросы о бизнес-логике и имеющим возможность совершать/принимать звонки с офисной телефонии, интеграцию с которой будем настраивать. ## Разработчик [#razrabotchik] Разработчик модуля интеграции Itgrix – [**компания «Айтигро»**](https://itgro.ru/). С 2010 года мы занимаемся разработкой различных веб-проектов (сайтов на 1С-Битрикс, веб-сервисов, мобильных приложений и т.д.), а с 2015 года внедряем и дорабатываем Битрикс24, устанавливаем и настраиваем Asterisk, интегрируем корпоративные порталы с 1С, Asterisk и другими системами заказчиков. ### Достижения [#dostizheniya] Компания «Айтигро» является ***сертифицированным партнером AmoCRM*** и ***Золотым партнером Битрикс24***, удостоена дипломами премии BitrixAwards (2019 г.) за 1 место в номинации «Лидер продаж» облачной версии Битрикс24 по Уральскому региону, а также за 5 место в номинации ***«Лучший автор Приложений24»***. ### Itgrix в цифрах [#itgrix-v-cifrakh] | | | | | :--------------------: | :-----------------------------------------------------------------------: | :-------------------------------------------------------------------: | | **10** | **5** | **95%** | | лет опыта в разработке | место в номинации
“Лучший автор Приложений24”
в 2019 году
| индекс удовлетворенности
клиентов
| | **3-е** | **16** | **2** | | поколение продукта | стран, где уже
пользуются коннектором
| языка работы
коннектора и техподдержки
(рус. и англ.)
| ### География клиентов [#geografiya-klientov] Работаем с клиентами ***по всему миру***. Наш модуль уже используют в: России, Белоруссии, Украине, Молдавии, Албании, Казахстане, Киргизии, Узбекистане, Грузии, Армении, США, Венгрии, Бразилии, Перу, Колумбии, Вьетнаме, Индии, Коста-Рике, Эквадоре и в других странах. # Наша история (/our_history) ### О разработчике приложения [#o-razrabotchike-prilozheniya] Мы компания Айтигро – разработчики приложения Itgrix, которое позволяет интегрировать CRM-системы с IP-телефонией Asterisk. На сегодняшний день приложение работает с Битрикс24 и AmoCRM. Айтигро является Золотым партнером , в 2019 году занял 1 место по Уральскому региону (CRM в облаке) и 5 место в номинации «Лучший автор Приложений24». Также являемся официальными сертифицированными партнерами . Сертификаты и дипломы ### Первая версия коннектора [#pervaya-versiya-konnektora] История Itgrix началась в 2015 году, когда в компании Айтигро было создано направление **«**Модуль интеграции Asterisk и CRM**»**. Продукт первоначально был назван Bx24asterisk, так как первая его версия интегрировали Asterisk только с CRM-системой Битрикс24. Bx24asterisk быстро нашел свою аудиторию и отклик у пользователей СНГ. Компания приняла решение активно развивать и распространять продукт через партнерскую сеть. Без преград на дороге не обошлось. Вскоре после мощного запуска компания столкнулась со сложностями – Bx24asterisk подключался через браузер Chrome к Битрикс24, а это стало часто вызывать проблемы с его установкой. Требовалось радикальное решение. ### Улучшенная версия приложения [#uluchshennaya-versiya-prilozheniya] В конце 2017 года с открытием API Bitrix24 продукт получил новое рождение. Теперь он состоял из приложения, устанавливаемого в Битрикс24, и серверной части приложения, которая устанавливалась на сервер Asterisk. При этом, решение работает не только с современными версиями Asterisk, но и с довольно древними – подходит все конфигурации от версии 1.8. Кроме того, для работы приложения подходит не только чистый Asterisk, но и другие модификации телефонии – FreePBX, Issabel, Elastix. Закрепившись на рынке СНГ с новой, более совершенной версией продукта, по результатам аналитики мы увидели явную потребность в нашем решении и в других странах. Bx24asterisk заинтересовались многие страны ближнего зарубежья. Опыт работы компании в соседних странах облегчил задачу выхода на следующий уровень – зарубежный рынок, а сейчас приложение вывело компанию на международный уровень. ### Ребрендинг (Bx24asterisk -> Itgrix) [#rebrending-bx24asterisk-greater-than-itgrix] На фоне успеха продукта, было принято решение переименовать Bx24asterisk, а также сменить фирменный стиль (над этим работали веб-дизайнеры компании). Новым именем для продукта стало – Itgrix. Bx24asterisk переименован в Itgrix ### Новое направление интеграции [#novoe-napravlenie-integracii] Кроме того, к ребрендингу подтолкнуло еще и новое направление работы – с 2019 года приложение подходит для интеграции телефонии Asterisk не только с Битрикс24, но и с AmoCRM. Asterisk-коннектор Itgrix для AmoCRM ### География клиентов [#geografiya-klientov] Работаем с клиентами по всему миру. Наш модуль уже используют в: России, Белоруссии, Украине, Молдавии, Албании, Казахстане, Киргизии, Узбекистане, Грузии, Армении, США, Венгрии, Бразилии, Перу, Колумбии, Вьетнаме, Индии, Коста-Рике, Эквадоре и в других странах. ### Наши цели и ценности [#nashi-celi-i-cennosti] Наша цель на ближайшее время – активное расширение географии, выход на внешние рынки, рост и развитие продукта. Корпоративная культура компании построена на мотивации, взаимоподдержке и саморазвитии. Сотрудники компании – это неотъемлемая ее часть, которая способствует успешному развитию продукта Itgrix. # AsterPhone в AmoCRM (/blog/asterisk-phone-v-amocrm) В AmoCRM добавлено приложение Asterisk Phone, реализующее звонки с использованием технологии WebRTC в браузере. ## Установка [#ustanovka] Чтобы установить приложение, достаточно найти и установить AsterPhone Itgrix по запросу «itgrix» в поиске по разделу amoМаркет.
### Настройка [#nastroika] Для настроек приложения требуется в разделе amoМаркет выбрать категорию - «Установленные» и нажать на карточку приложения AsterPhone Itgrix.
В карточке видно описание возможностей приложения, ссылки на инструкции, блок контактных данных и настройки.
В настройках приложения необходимо указать адрес подключения к Asterisk по WebSocket, домен и порт (стандартно 5060 для SIP, 5160 для PJSIP).
Блок дополнительных настроек приложения
Блок Авторизации пользователей. Администратору аккаунта AmoCRM нужно заполнить авторизационные данные всех пользователей, которые будут пользоваться приложением, введя в форму «Данные авторизации в Asterisk» логин (обычно используется внутренний номер) и пароль от него из настроек Asterisk.\ Авторизация для пользователей будет выполняться автоматически.a
Пробный период лицензии активируется автоматический, для ручного обновления нужно нажать на кнопку «Обновить лицензию», для применения лицензии требуется сохранение настроек, в статусе дополнительно будет текст напоминание.
Для применения всех настроек требуется их сохранить, нажав на соответствующую кнопку. ## Использование [#ispolzovanie] Кнопка приложения AsterPhone (отображает/скрывает интерфейс) находится в левом нижнем углу. Значок приложения не отображается для пользователей, для которых не настроенны авторизационные данные. Если авторизация не выполнена, то значок серый . Если приложение готово к работе, то значок цветной .
### Поиск контактов/компаний/пользователей [#poisk-kontaktov-kompanii-polzovatelei] Если вы авторизованы, вы можете совершать звонки, введя номер в поле ввода. При вводе части номера или имени будут показаны контакты/компании/пользователи с частичным совпадением. Можно перейти к нужному номеру из списка с помощью клавиш-стрелок на клавиатуре. ### Совершение звонков [#sovershenie-zvonkov] Чтобы позвонить, введите номер и нажмите кнопку звонка или клавишу Enter на клавиатуре. Будет показана карточка звонка с данными контакта (если таковой обнаружен по номеру) и кнопками действий: * Выполнить быстрый перевод * Выполнить перевод * тональный набор * поставить на паузу * заглушить * ответить (если звонок входящий) * положить трубку
Некоторые действия могут быть недоступны в пробной версии.
## Совершение переводов [#sovershenie-perevodov] Существует 3 способа создания звонка для совершения перевода. 1. Во время разговора нажать перевод звонка , ввести номер или выбрать пользователя из списка. Далее можно нажать кнопку звонка или клавишу Enter на клавиатуре. \\
2. Во время разговора нажать быстрый перевод звонка , выбрать нужную группу и контакт из списка. Далее можно нажать кнопку звонка или клавишу Enter на клавиатуре. \\
3. Во время разговора, введя номер в поле ввода, выбрать контакт/компанию/пользователя с частичным совпадением. Выбрав контакт, нажать кнопку звонка или клавишу Enter на клавиатуре.
После совершения вызова, используя один из трех выше описанных способов, первый звонок переходит в статус - ожидание. Отображается плашка с новым звонком. В первом звонке появляется иконка перевода , она становится активной после принятия нового звонка. При нажатии на эту кнопку активный звонок (зеленая плашка) соединится с переводимым звонком, где нажата кнопка перевода .
## Системные требования [#sistemnye-trebovaniya] Для работы с приложением вам необходимы: * ПК с установленной ОС Windows, Linux или MacOS (мобильная версия пока не поддерживается). * Браузер с поддержкой технологии WebRTC (актуальные версии распространенных браузеров, например Chrome и Firefox, поддерживают эту технологию). * Сервер телефонии Asterisk версии 15 и выше, настроенный для использования WebRTC. ## Лицензия [#licenziya] Приложение находится в стадии бета-тестирования, поэтому вам доступна полная лицензия на 1 месяц. По окончании срока лицензии некоторые функции перестанут работать: * параллельные звонки (исходящий или прием входящего во время активного звонка); * отключение микрофона, удержание, перевод звонка, тональный набор. Для продления лицензии свяжитесь с нами ([Наши контакты](/contacts)). # AsterPhone в Битрикс24 (/blog/asterphone-v-bitriks24) Приложение [Itgrix AsterPhone](https://itgrix.ru/asterphone/) распространяется в виде модуля (решения, локального приложения) для коробочных порталов 1С-Битрикс24. ## Установка [#ustanovka] На сервере Битрикс24 должна быть библиотека **libcurl** 1. Зайдите в интерфейс администрирования портала. 2. Раздел **Marketplace - Каталог решений** 3. В поиске введите **Asterphone** 4. Установите решение “Itgrix AsterPhone” (**Тестировать**)
**Важно.**\ Функция Block third-party cookies (Блокировать сторонние файлы cookie) в браузере должна быть отключена. Настройки - Конфиденциальность и безопасность - Файлы cookie и другие данные сайтов \- Блокировать сторонние файлы cookie \\
## Настройка [#nastroika] ### Данные для подключения к Asterisk [#dannye-dlya-podklyucheniya-k-asterisk] В интерфейсе администрирования портала зайдите в Настройки -> Настройки модулей, в выпадающем списке выберите Itgrix AsterPhone, вкладка Настройки подключения (адрес: https\://\<домен>/bitrix/admin/settings.php?lang=ru\&mid=itgrix.asterphone):
### Учетные данные пользователей [#uchetnye-dannye-polzovatelei] #### Добавление пользователей [#dobavlenie-polzovatelei] В интерфейсе администрирования портала зайдите в Настройки -> Настройки модулей, в выпадающем списке выберите Itgrix AsterPhone, вкладка Учетные данные пользователей. Для добавления новой записи заполните поля: 1. ID\_USER - ID пользователя в портале 1С-Битрикс24 2. LOGIN - Внутренний номер телефона (extension) в Asterisk ([настроенный для использования WebRTC](/blog/nastroika-webrtc-v-asterisk-freepbx)) 3. PASSWORD - Пароль для внутреннего номера (secret) в Asterisk И нажмите кнопку Сохранить. В дальнейшем можно редактировать или удалять записи.
## Руководство пользователя Itgrix AsterPhone [#rukovodstvo-polzovatelya-itgrix-asterphone] ## Интерфейс AsterPhone [#interfeis-asterphone] ### Автоматическая авторизация [#avtomaticheskaya-avtorizaciya] При открытии страницы портала Itgrix AsterPhone автоматически авторизуется (если администратор портала Битрикс24 добавил данного пользователя в настройки AsterPhone). Иконка приложения находится в правом нижнем углу страницы портала. Ее вид отражает статус авторизации: (цветная) - приложение успешно авторизовалось в Asterisk. (серая) - для пользователя не настроен внутренний номер или ошибка авторизации в Asterisk.
### Панель приложения [#panel-prilozheniya] По нажатию на иконку приложения отображается и скрывается панель приложения.\ Это может быть необходимо при работе с сущностями - панель может перекрывать кнопки Сохранить/Отмена.
В панели приложения отображаются: 1. Поле ввода номера с поиском по пользователям и сущностям. 2. Внутренний телефонный номер, с которым пользователь авторизован в Asterisk. 3. Меню настроек (в данной версии только отладочные функции и версия приложения). ## Входящий звонок [#vkhodyashii-zvonok] При входящем звонке появляется дополнительная панель для управления непосредственно звонком:
На скриншоте: 1. Иконка направления звонка (входящий/исходящий) 2. Имя пользователя или сущности CRM (лид, контакт, компания) 3. Номер телефона пользователя/сущности 4. Поднять трубку - ответить на звонок 5. Положить трубку - отклонить вызов Во время разговора (в т.ч. при ответе на входящий) панель окрашивается в зеленый цвет:
На скриншоте: 1. Таймер 2. Меню быстрых переводов 3. Перевод звонка на пользователя - поиск по номеру 4. Номеронабиратель (DTMF) 5. Поставить звонок на паузу 6. Вкл/выкл микрофон 7. Положить трубку 8. Индикатор соединения с сервером Asterisk. ### Соединение с сервером Asterisk [#soedinenie-s-serverom-asterisk] Панель звонка отображается одновременно во всех открытых вкладках в данном браузере, но соединение с сервером телефонии Asterisk поддерживается только одно. Если отображается индикатор соединения, значит активное соединение привязано именно к данной вкладке.\ Важно в процессе звонка: если закрыть вкладку с соединением, звонок прервется. При попытке закрыть вкладку с соединением AsterPhone выдаст стандартное предупреждение: ### Пауза [#pauza] При постановке звонка на паузу панель звонка окрасится в желтый цвет.\ Чтобы вернуть звонок с паузы, нужно нажать на кнопку Play.
### Номеронабиратель (DTMF) [#nomeronabiratel-dtmf] Во время звонка доступен тоновый набор, в т.ч. перевод звонка с помощью специальных команд тонового набора (\*\*номер и ##номер):
## Перевод звонка [#perevod-zvonka] ### Перевод на пользователя [#perevod-na-polzovatelya] Звонок можно перевести на конкретного пользователя с помощью поиска по базе пользователей Битрикс24:
Здесь можно начать перевод кнопкой звонка или клавишей Enter. Пользователей можно искать не только по номеру, но и по имени:
## Исходящие звонки [#iskhodyashie-zvonki] ### Звонок кликом (click-to-call, c2c) [#zvonok-klikom-click-to-call-c2c] Для совершения исходящего звонка нужно нажать на номер телефона в карточке клиента.\ Откроется карточка звонка и придет звонок на AsterPhone - будет сразу же зеленая полоска, и звонок сразу же пойдет клиенту. Также можно нажать на иконку телефона в каждом “деле” звонка в таймлайне и в заголовке самого контакта:
### Ввод номера с поиском для совершения исходящего [#vvod-nomera-s-poiskom-dlya-soversheniya-iskhodyashego] При вводе номера в поле поиска AsterPhone обратится в базу Битрикс24 и найдет всех пользователей и сущности (лиды, контакты, компании), у которых встречается введенный номер:
Имя - кликабельная ссылка, можно открыть прямо в данной вкладке. Чтобы позвонить, можно выбрать не только пользователя/сущность, но и конкретный номер телефона (если их несколько) с помощью клавиш-стрелок на клавиатуре, либо кликом по номеру. Можно выбрать верхний пункт “набор номера…”, тогда звонок начнется с “неизвестным контактом”. Начать звонок можно кнопкой или клавишей Enter. Искать можно не только по номеру, но и по имени: \\
## Ошибки [#oshibki] ### Не удалось подключиться [#ne-udalos-podklyuchitsya] При неудачной попытке подключиться к серверу телефонии AsterPhone покажет всплывающее окно с ошибкой (code 1006).
В этом случае: 1. Проверьте, что в браузере выключен VPN. 2. Сбросьте кэш и куки. Перезагрузите страницу. 3. Если подключиться по-прежнему не удалось, обратитесь к администратору телефонии. ### Сброс состояния [#sbros-sostoyaniya] На случай возникновения ошибок в работе AsterPhone на этапе отладки и тестирования предусмотрена кнопка сброса текущего состояния.\ В других вкладках нужно будет сохранить данные и обновить страницу
## Удаление приложения [#udalenie-prilozheniya] Администрирование - Marketplace - Установленные решения - Удалить
Для удаления приложения из базы данных:
1. Настройки -> Инструменты -> SQL запрос 2. Выполнить запросы(можно сразу все): ```sql drop table itgrix_license; drop table itgrix_user; DELETE from b_option where MODULE_ID='itgro.asterphone'; select * from b_option where MODULE_ID='itgro.asterphone'; ```
# БД Itgrix (/blog/itgrix-db) Пользуясь опытом работы с крупными клиентами, у которых каждый звонок на счету, мы пересмотрели способ хранения данных в Itgrix для приближения к 100% успеху своевременной обработки всех звонков. Начиная с версии Itgrix bx [3.13.0](/changelog-bx#id-3.13.0), файл состояния `state.json` заменён на собственную SQLite базу данных приложения `state.db`.
Это предоставляет целый ряд преимуществ: * Все данные приложения сохраняются в реальном времени без задержки, что устраняет возможность потери данных даже при неожиданной остановке приложения * Хранение результата выполнения каждого шага обработки звонка предотвращает дублирование данных в CRM даже если звонок обрабатывается повторно * Звонки, при обработке которых возникли ошибки, автоматически переобрабатываются по расписанию * Переобработка звонков по расписанию и до-обработка звонков при восстановлении работы приложения выполняются в отдельном потоке с меньшим приоритетом для обеспечения обработки текущих звонков без задержек * Регулярное резервное копирование базы данных ежедневно создаёт точки восстановления, которыми можно воспользоваться даже при повреждении актуальной базы данных * Централизованное хранение актуальных данных звонков позволило уменьшить объём логирования по умолчанию * Интерфейсы для работы с базой данных (в админке и в командной строке) позволяют специалистам техподдержки легко находить любые проблемные звонки и точечно применять специфические решения для каждой ситуации * Данные об успешной обработке звонков позволяют быстро найти какие действия были выполнены с CRM на конкретном звонке или выяснить статистику по сценариям звонков Про некоторые из этих изменений мы бы хотели рассказать подробнее. ## Результаты обработки каждого звонка [#rezultaty-obrabotki-kazhdogo-zvonka] Критически важное отличие от предыдущего способа работы с данными звонков состоит в том, что завершение обработки звонка более не приводит к удалению данных о звонке: * если звонок обработан успешно, то он удаляется только через 7 дней; * звонки с ошибками хранятся до 30 дней. Вместе с содержанием звонка (номера, разговоры, время ответа и т.д.) теперь также сохраняется результат выполнения каждого шага обработки звонка, в том числе данные всех созданных и изменённых объектов в CRM или причины не выполнения шага обработки (например, если номер в чёрном списке). Это значительно упрощает диагностику проблем и позволяет корректировать действия с CRM даже по звонкам, которые были обработаны успешно, без необходимости анализировать логи приложения. ## Переобработка звонков по расписанию [#pereobrabotka-zvonkov-po-raspisaniyu] Хранение звонков с ошибками в течение 30 дней даёт время на коррекцию ошибок при помощи автоматической переобработки, а данные об уже выполненных действиях предотвращают дублирование при переобработке. Процедура переобработки звонков запускается раз в 10 минут и только если за это время не поступало новых звонков, что обеспечивает баланс между минимизацией задержки успешной обработки звонков и приоритетной обработкой текущих звонков. Даже если во время переобработки поступают новые звонки, они будут обработаны с большим приоритетом, чем переобработка. Этот механизм позволяет достичь успеха обработки звонков даже при продолжительных сетевых сбоях и других временных проблемах. ## Настраиваемый объём логирования [#nastraivaemyi-obyom-logirovaniya] Ранее логирование данных звонков было организовано путём вывода всех данных звонка на каждом событии звонка. Это позволяло всегда знать самое последнее состояние звонка, независимо от того, в какой момент могла прерваться работа приложения. Но, в зависимости от настроек Asterisk, могут существовать звонки с сотнями событий, и с каждым событием объём данных звонка увеличивается. Иногда это приводило к росту объёма логов до нескольких гигабайт и даже к риску переполнения диска. Новый способ хранения данных в `state.db` перезаписывает данные звонка на актуальные, вместо добавления данных, поэтому найти самое актуальное состояние звонка можно даже если данные звонка совсем не выводились в лог, и объём данных растёт гораздно медленнее. Теперь доступно три варианта вывода данных звонка в лог: * никогда, * только в конце звонка (по умолчанию), * на каждом событии (как ранее). Настройка доступна в админке на странице настроек модуля.
Мы стремимся достичь 100% успешной обработки звонков с минимальными задержками. Новый способ хранения данных значительно приближает нас к этой цели, повышая надёжность работы приложения и скорость обработки звонков. Будем рады вашим отзывам и предложениям по улучшению работы приложения! # Конвертация записи звонка в mp3 (/blog/mp3-conversion) По умолчанию, Asterisk сохраняет записи звонков в формате WAV. Это объёмный формат, поэтому для экономии места на диске, Itgrix предлагает конвертировать записи в формат mp3, что ранее делалось через [кастомизацию](/custom_common/mp3-record). Начиная с версии [3.13.0](/changelog-bx#id-3.13.0), конвертация записей в mp3 добавлена в основной функционал коннектора Itgrix. (скрин блока настроек конвертации в админке) При обновлении на версию 3.13.0 и выше, чтобы начал работать новый способ конвертации, нужно не только включить его в админке, но и отключить старый способ. При новой установке включена конвертация новым способом, а не через кастомизацию. Проще всего это сделать через админку: отключить кастомизацию **пути до файла записи звонка** на странице "Модуль". Если у вас настроены другие действия в этой кастомизации, помимо конвертации в mp3, то нужно [закомментировать](/custom_common/mp3-record#otklyuchenie-konvertacii-v-kastomizacii) блок кода, который выполняет конвертацию. ## Программа конвертер [#programma-konverter] Старый способ конвертации использовал программу `lame`, которая должна была быть отдельно установлена на сервере. Новый способ использует по умолчанию поставляемую вместе с Itgrix компактную сборку `ffmpeg` с функционалом только для работы с аудио файлами. Это более гибкое проложение, поддерживающее множество форматов и фильтров, и его не нужно устанавливать отдельно. Настройки в админке позволяют выбрать любую другую программу, в том числе `lame` или установленную в системе полную версию `ffmpeg`. Для выбора программы конвертации нужно указать команду её запуска в поле "Путь до конвертера записей", по умолчанию `/opt/itgrix_bx/ffmpeg/ffmpeg`. Можно указать команду без полного пути, тогда будет использоваться программа из системы в соответствии с переменной окружения `PATH`. Параметры запуска программы конвертера тоже свободно настраиваются через поле "Аргументы команды конвертации записей". В этом поле используются две переменные: `#IN#` и `#OUT#` - пути до входного файла (wav) и выходного файла (mp3). Аргументы по умолчанию для ffmpeg такие:\ `-loglevel error -i #IN# -f mp3 -codec:a libmp3lame -compression_level 2 -b:a 192k #OUT#` Они означают следующее: * `-loglevel error` - выводить только ошибки * `-i #IN#` - путь до wav файла * `-f mp3` - конвертация в формат mp3 * `-codec:a libmp3lame` - использовать аудио кодек "libmp3lame" * `-compression_level 2` - [уровень сжатия](https://ffmpeg.org/ffmpeg-codecs.html#Options-16) 2 * `-b:a 192k` - аудио битрейт 192 килобит в секунду Документацию по параметрам `ffmpeg` можно найти на [официальном сайте](https://trac.ffmpeg.org/wiki/Encode/MP3). Время работы программы конвертера ограничено **таймаутом**, по умолчанию 30 секунд. ## Кастомизируемость [#kastomiziruemost] Старая кастомизация **пути до файла записи звонка** (`process_record_file_path`) по-прежнему может использоваться для изменения пути к входному (wav) файлу, но теперь добавлена новая кастомизация **параметров конвертации записи** (`customize_record_conversion`). Она позволяет менять все параметры конвертации: * `IN` - путь до входного файла (wav) * `OUT` - путь до выходного файла (mp3) * `recording_converter_path` - программа конвертер * `recording_converter_args` - аргументы запуска программы конвертера * `recording_converter_timeout_msec` - таймаут работы программы конвертера * `overwrite_cdr_recordingfile` - опция обновления пути до записи в таблице CDR Asterisk * `initial_cdr_recordingfile` - значение пути до записи в таблице CDR Asterisk, которое будет заменено на новое * `updated_cdr_recordingfile` - новое значение пути до записи в таблице CDR Asterisk * `delete_original_recordings` - опция удаления исходного (wav) файла # Настройка Asterisk для работы Asterphone с PJSIP (/blog/nastroika-asterisk-dlya-raboty-asterphone-s-pjsip) Приложение **Asterphone** позволяет работать с телефонией **Asterisk** по протоколу **WebRTC** (Web Real-Time Communication), это технология для передачи аудио, видео и данных напрямую между браузерами. В связке с **Asterisk/FreePBX** позволяет совершать звонки прямо из браузера. На смену устаревшего протокола **SIP** постепенно приходит более новый PJSIP, который полностью поддерживает WebRTC. ### Глобальные настройки [#globalnye-nastroiki] Settings - Asterisk SIP settings
SIP settings (chan_pjsip)
Misc PJSip Settingstaskprocessor overload trigger = pjsip_only распределяем задачи между потоками обработки, следим только за pjsip
TLS/SSL/SRTP Settingscertificate manager = example.simple.test выбираем сертификат из Certificate Manager для шифрования TLS/WSS соединений
ssl method = tlsv1_2 - версия протокола TLS для шифрования соединений
wsswss - 0.0.0.0 - All = No
только нужные extensions слушают на всех интерфейсах по протоколу WebSocket Secure
wss - - ens18 = Yes
настройка WSS транспорта на конкретный сетевой интерфейс
Settings - Advanced Settings | Asterisk Builtin mini-HTTP server | | -------------------------------------------------------------------------------------------------------------------- | | Force WebSocket Mode = pjsip
принудительное использование WebSocket транспорта для PJSIP
| ### Создание extension (внутреннего номера) [#sozdanie-extension-vnutrennego-nomera] Connectivity - Add Extension - Add New \[chan\_pjsip] Extension | General | | | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Add Extension | extension = 100
внутренний номер телефона
display name = 100
должен совпадать с extension, номер который будет отображаться при вызове
secret
пароль, заполняется автоматически, обязательное поле, можно поставить свой
| | Advanced | | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | Add Extension | enable avpf = true
включение расширенного RTP профиля с обратной связью для улучшения качества медиа | |

enable ICESupport = true
включение поддержки ICE (Interactive Connectivity Establishment) для обхода NAT, критично для WebRTC за NAT/Firewall

enable rtcpMux = true
включение мультиплексирования RTCP в одном потоке с RTP, требуется для WebRTC в браузерах

media encryption = dtls-srtp (not recommended)
Включение шифрования медиапотока через DTLS-SRTP, обязательно для безопасного WebRTC

enable dtls = yes
использовать шифрование

use certificate \.ru (select current)
указать сертификат
| | | Advanced | | | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Transport | All - WSS Primary
настройка транспорта по умолчанию для всех расширений
| | Enable AVPF | Yes
включение расширенного профиля RTP с обратной связью (Audio/Video Profile with Feedback), критично для стабильного WebRTC
| | Force AVP | Yes
принудительное использование базового профиля RTP (Audio/Video Profile) без обратной связи
| | Enable ICE Support | Yes
включение поддержки ICE (Interactive Connectivity Establishment) для установления медиа-соединений через NAT, критично для WebRTC за NAT/Firewall
| | Enable rtcp Mux | Yes
включение мультиплексирования RTCP в одном порту с RTP, обязательно для WebRTC в браузерах
| | Enable Encryption | Yes (SRTP only)
включение шифрования медиапотока с использованием SRTP
| | DTLS | | | Enable DTLS | Yes
включение протокола DTLS, обязательно для WebRTC в браузерах
| | Use Certificate | \.ru
выбор SSL-сертификата для DTLS шифрования из Certificate Manager
| # Настройка WebRTC в Asterisk (FreePBX) (/blog/nastroika-webrtc-v-asterisk-freepbx) ## Технические требования [#tekhnicheskie-trebovaniya] * **Сервер телефонии должен быть доступным из Интернет, т.е. иметь белый IP.** * **Должен быть рабочий SSL/TLS-сертификат.** * Asterisk версии не меньше 11 [(?)](/blog/nastroika-webrtc-v-asterisk-freepbx#podderzhka-webrtc-v-asterisk), но для удобства желательно 15 [(?)](/blog/nastroika-webrtc-v-asterisk-freepbx#pjsip-v-asterisk) или хотя бы 13 [(?)](/blog/nastroika-webrtc-v-asterisk-freepbx#primery-nastroiki). * При использовании браузерного софтфона на сервере Asterisk должен быть настроен wss (WebSocket Secure), и порт должен быть открыт наружу (обычно 8089) [(?)](/blog/nastroika-webrtc-v-asterisk-freepbx#freepbx).\ Настраивается в интерфейсе администратора:\ Advanced Settings > Asterisk Builtin mini-HTTP section > HTTPS Bind Port * Диапазон портов для RTP (обычно 10000-20000) [(?)](/blog/nastroika-webrtc-v-asterisk-freepbx#freepbx).\ Настраивается в интерфейсе администратора:\ Settings → Asterisk SIP Settings → General SIP Settings Tab ## Настройка [#nastroika] В данном примере рассматривается настройка WebRTC в уже работающем FreePBX-сервере: * доступен по адресу .ru и **имеет SSL/TLS-сертификат.** * FreePBX версии 16, Asterisk версии 15. * настроен wss через порт 8089. * открыты все остальные нужные порты. ### Настройка FreePBX [#nastroika-freepbx] Если кнопка “Change To CHAN\_PjSIP Driver” (см. ниже, в настройке внутреннего номера) доступна, то в данном разделе ничего делать не нужно. **Settings ➝ Advanced Settings**
Раздел Dialplan and Operational
SIP Channel Driverboth
**Settings ➝ Asterisk SIP Settings** **Вкладка “SIP Legacy Settings \[chan\_sip]”** **Проверить, что установлены переменные:**
Раздел Advanced General Settings
Other SIP Settingsicesupport = yes
media_encryption = dtls
tlscipher = AES256-SHA


Создание и настройка внутреннего номера (extension) Зайти в интерфейс настройки FreePBX и залогиниться: https\://\<example>.ru/ Перейти в раздел **Applications ➝ Extensions** Кнопка **“+ Add Extension” ➝ “+ Add New SIP (Legacy) \[chan\_sip] Extension”** (в других версиях FreePBX может быть “Add New Chan\_SIP extension”) **Во вкладке General:** | Раздел Add Extension | | | -------------------- | ---- | | User Extension | 1001 | | Display Name | 1001 | **Нажать кнопку Submit** После этого в списке расширений открыть редактирование только что созданного расширения (в строке с 5001 в колонке Actions нажать кнопку редактирования с иконкой с карандашом). Перейти во вкладку Advanced **Сначала поменять SIP Driver на PjSIP:**
Вкладка Advanced → Раздел Edit Extension
Change SIP DriverChange To CHAN_PjSIP Driver
Эта кнопка может быть недоступна, это значит, что PjSIP отключен, нужно его включить в настройках (см.выше).


**Теперь должна появиться возможность сделать следующие настройки:** | Вкладка Advanced → Раздел Edit Extension | | | ---------------------------------------- | --------------------------- | | Enable WebRTC defaults | Yes | | Media Encryption | DTLS-SRTP (not recommended) | **Нажать кнопку Submit** **Потом поменять SIP Driver обратно:**
Вкладка Advanced → Раздел Edit Extension
Change SIP DriverChange To CHAN_SIP Driver
**Теперь сделать оставшиеся настройки:** | Вкладка Advanced → Раздел Edit Extension | | | ---------------------------------------- | --------------------- | | Transport | All - WSS Primary | | Enable AVPF | Yes | | Force AVP | Yes | | Enable ICE Support | Yes | | Enable rtcp Mux | Yes | | Enable Encryption | Yes (SRTP only) | | Раздел DTLS | | | Enable DTLS | Yes (уже должно быть) | | Use Certificate | \<example>.ru | **Нажать кнопку Submit** **Нажать кнопку Apply Config** ## Тестирование, что wss работает [#testirovanie-chto-wss-rabotaet] Для примера воспользуемся сервисом **sipML5 live demo** от Doubango: [Открыть sipML5 live demo](https://www.doubango.org/sipml5/call.htm) **sipML5 — устаревший проект:** [его исходный код переведён в архив](https://github.com/DoubangoTelecom/sipml5). Демо всё ещё доступно, поэтому шаги ниже сохранены для этой версии интерфейса. ### Настройка [#nastroika-1] **Сначала кнопка “Expert mode?”** В соседней вкладке должна открыться страница с продвинутыми настройками. | Disable Video | v (галочка) | | -------------------- | --------------------------- | | WebSocket Server URL | wss\://.ru:8089/asterisk/ws | **Нажать кнопку Save** **Вернуться на основную вкладку** | Display Name | 1001 | | ---------------- | ------------------------------------------------------------------------------------------------------------------ | | Private Identity | 1001 | | Public Identity | sip:1001@\<example>.ru | | Password | Скопировать из настроек FreePBX
Extension: 1001 ➝ вкладка General ➝ Edit Extension ➝ Secret


| | Realm | \<example>.ru | **Кнопка Login** Вверху над заголовком **Registration** должно появиться слово **Connected**. #### Звонок [#zvonok] Теперь можно звонить. Под заголовком **Call control** набрать нужный номер (\*43 для звонка на эхо или номер мобильника с 8 вначале). Нажать кнопку **Call ➝ Audio** **Должен пойти звонок.** **Profit!** ### **Ссылки** [#ssylki] #### Поддержка WebRTC в Asterisk [#podderzhka-webrtc-v-asterisk] #### Начальная поддержка WebRTC в Asterisk начиная с версии 11: [#nachalnaya-podderzhka-webrtc-v-asterisk-nachinaya-s-versii-11] * [New in 11 - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/New+in+11) * [Asterisk WebRTC Support - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/Asterisk+WebRTC+Support) #### PjSIP в Asterisk [#pjsip-v-asterisk] * Новый драйвер chan\_pjsip в Asterisk 12: [New in 12 - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/New+in+12) * PjSIP доступен по умолчанию в Asterisk 15: [PJSIP-pjproject - Asterisk Project - Asterisk Project Wiki](https://wiki.asterisk.org/wiki/display/AST/PJSIP-pjproject) #### FreePBX [#freepbx] * [Port used on your PBX - PBX Platforms - Documentation](https://wiki.freepbx.org/display/PPS/Ports+used+on+your+PBX) #### Примеры настройки [#primery-nastroiki] * [Настройка WebRTC в Asterisk 13. Vox Link.](https://voxlink.ru/kb/asterisk-configuration/nastrojka-webrtc-v-asterisk-13/) * [WebRTC(создаем клиент и настраиваем Asterisk) за 15 минут | AsterConf-2019](https://www.youtube.com/watch?v=nw5RX0YST3Q) * [Установка и настройка Asterisk для работы с WebRTC](https://habr.com/ru/post/236291/) * [Configuring Asterisk for WebRTC Clients](https://wiki.asterisk.org/wiki/display/AST/Configuring+Asterisk+for+WebRTC+Clients) * [Настройка WebRTC с использованием jsSIP на систему Asterisk с FreePBX](https://callcenters.by/wiki/asterisk-settings/382-nastrojka-webrtc-na-praktike-s-ispolzovaniem-jssip-podrobnoe-rukovodstvo/) # Привязка звонка к сделке в Call Card в Bitrix24 (/blog/privyazka-zvonka-k-sdelke-v-call-card-v-bitrix24) На странице настроек появились настройки для сущностей контакта и компании. По умолчанию галочка включена.
Если галочка включена, то соответствующее поле появится в карточке звонка самым последним.
Привязка осуществится по завершении звонка. Если выбран вариант "По умолчанию", то сработает стандартная логика привязки звонка к сделкам. Если выбрана какая-то конкретная сделка из списка, то звонок привяжется только к этой сделке. # Добавление данных о звонке в тег новой сделки (/custom_amo/dobavlenie-dannykh-o-zvonke-v-teg-novoi-sdelki) При обработке звонков модулем Itgrix могут быть созданы новый контакт и новая сделка. По умолчанию сущности получают один тег - `Itgrix`. С помощью кастомизации можно добавить теги с информацией о звонке, например, направление (`Входящий` или `Исходящий`) и статус (`Отвеченный` или `Пропущенный`). Т.к. статус звонка будет известен только в конце звонка, то и добавление тегов нужно добавить в [кастомизацию параметров регистрации звонка (`process_call_params`)](/custom_amo#2-process_call_params). В этой кастомизации известно: * Является ли сущность (контакт/сделка) новой (т.е. создана ли в процессе обработки этого звонка) - `$params['entity_new']`. Значение `true`, если новая, иначе `false`. * Какой тип у созданной сущности - `$params['entity_type']`. Для контакта значение `1`, для сделки значение `3`. * ID сущности - `$params['entity_id']`. Исходя из этих данных реализуем такой алгоритм: * Теги будем устанавливать **только для новых сущностей (которые созданы модулем Itgrix).** * Нужно получить ID сделки, у которой нужно обновить теги. * Если в кастомизацию пришла сущность типа сделка, то возьмем её ID из параметров. * Если же это контакт, тогда нужно получить данные этого контакта и взять ID первой связанной с ним сделки (у нового контакта может быть только одна сделка). Для этого воспользуемся функцией `Amo::getContact` (поставляется вместе с модулем в файле `/opt/itgrix_amo/customizer/lib/crm.php`). Формат возвращаемых данных описан в [документации amoCRM по работе с контактами](http://web.archive.org/web/20210623075152/https://www.amocrm.com/developers/content/api/contacts/). * Осталось обновить теги у найденной сделки. Для этого воспользуемся функцией `Amo::updateLead` (поставляется вместе с модулем в файле `/opt/itgrix_amo/customizer/lib/crm.php`). Формат данных описан в [документации amoCRM по работе со сделками](http://web.archive.org/web/20210919140818/https://www.amocrm.com/developers/content/api/leads/). В результате у сделки будут теги `Itgrix`, `Входящий` и `Отвеченный`:
### Пример кода кастомизации [#primer-koda-kastomizacii] Пример кода для добавления тегов в созданную сделку (файл `/opt/itgrix_amo/customizer/actions/process_call_params.php`): ```php $this->logDebug('params: '.json_encode($params)); // // Получить созданную сделку и добавить в нее теги // if ($params['call_full']['entity']['is_new'] === true) { $this->logInfo('Get created lead and modify its tag...'); if (empty($params['call_full']['deal']['id'])) { $this->logInfo('Get created lead and modify its tag...'); } else { $leadId = $params['call_full']['deal']['id']; $tags = array(); if ($params['call_full']['channel']['type'] === 'incoming') { array_push($tags, array('name' => 'Входящий')); } else { array_push($tags, array('name' => 'Исходящий')); } if ($params['call_full']['channel']["was_answered"] === true) { // true - отвеченный array_push($tags, array('name' => 'Отвеченный')); } else { array_push($tags, array('name' => 'Пропущенный')); } $this->logInfo(sprintf("Set tags %s to lead ID '%s'...", json_encode($tags, JSON_UNESCAPED_UNICODE), $leadId)); $updateResult = Amo::updateLead($leadId, ['tags_to_add' => $tags]); if ($updateResult === false) { return array( 'state' => 'error', 'data' => 'failed to update lead ID '.$leadId, ); } } } $this->logDebug('return params: '.json_encode($params)); return array( 'state' => 'success', 'data' => $params, ); ``` # Добавление названия транка в тэг сделки (/custom_amo/dobavlenie-v-teg-sdelki-nazvaniya-tranka) По умолчанию модуль интеграции пишет в тэг сделки ‘Itgrix’. Так можно отличить сделки, созданные модулем, от сделок, созданных другими способами. Бывает, нужно отличать, на какой внешний номер был звонок, для этого можно добавить в тэг название внешнего номера. Например: Если звонок был на транк +734322334455, в тэг можно написать ‘Екатеринбург’, а если звонок был на транк +749545667788 то ‘Москва’. Так будет понятно, к какому городу относится созданная сделка. По тэгам удобно делать фильтры. Код нужно добавить в файл `/opt/itgrix_amo/customizer/actions/process_lead_creation_params.php` перед блоком ```php return array( 'state' => 'success', 'data' => $params, ); ``` ## Код: [#kod] ```php $this->logDebug('params: '.json_encode($params)); $trunkTags = array( '737469' => 'Москва' ); $params['tags_to_add'] = array(); $trunk = isset($params['call_full']['channel']['trunk']['custom']) ? $params['call_full']['channel']['trunk']['custom'] : $params['call_full']['channel']['trunk']['original']; if (key_exists($trunk, $trunkTags)) { array_push($params['tags_to_add'], array('name' => $trunkTags[$trunk])); } else { array_push($params['tags_to_add'], array('name' => $trunk)); } ``` Также нужно включить кастомизацию сделок (лидов) в админке модуля, в разделе настроек модуля.
# Добавление звонка в несколько сущностей (/custom_amo/dobavlenie-zvonka-v-neskolko-sushnostei) По умолчанию при регистрации звонка, amoCRM записывает его **только в одну сущность** (контакте/компании/сделке)**,** которую определяет [по своему алгоритму](https://www.amocrm.ru/developers/content/crm_platform/calls-api). Задача от клиента: в базе CRM на один номер телефона было сохранено несколько контактов с разными ответственными. Нужно сохранить звонок во все сущности с таким номером. Звонок в сущности отображается как **"примечание** **о звонке"** в списке событий: На данный момент в amoCRM звонок фигурирует только в виде "примечания о звонке" в карточке сущности (контакта/компании/сделки).\ Поэтому можно вместо регистрации звонка через [API-метод calls](https://www.amocrm.ru/developers/content/crm_platform/calls-api) добавить примечание о звонке с помощью [API-метода notes](http://web.archive.org/web/20210623091710/https://www.amocrm.com/developers/content/api/notes/). Таким образом, чтобы добавить звонок в несколько сущностей, нужно добавить одинаковые примечания о звонке. Для этого нужно в кастомизации [process\_call\_params](/custom_amo#2-process_call_params) воспользоваться функцией `Amo::addNoteToEntities`, которая уже присутствует в поставке модуля (файл `/opt/itgrix_amo/customizer/lib/crm.php`). При добавлении примечания о звонке в несколько сущностей нужно НЕ регистрировать звонок стандартным методом, чтобы избежать дублирования примечания в одной из сущностей. Для этого в текущей версии модуля нужно "сломать" регистрацию, вернув из кастомизации пустые параметры (см. пример). ### Пример [#primer] Пример кода для добавления примечания о звонке во все контакты с данным телефоном (файл `/opt/itgrix_amo/customizer/actions/process_call_params.php`): ```php // // Подготовка данных примечания о звонке // $callInfo = array( 'responsible_user_id' => $params['responsible_user_id'], 'created_by' => $params['created_by'], 'params' => array( 'UNIQ' => $params['call']['id'], 'LINK' => Utils::makeRecordingUrl( $params['call']['id'], $params['call']['from'], $params['call']['to']), 'DURATION' => $params['duration'], 'SRC' => 'Itgrix', 'call_status' => $params['call_status'], 'call_result' => $params['call_result'], ), 'created_at' => date_create($params['call']['end_time'])->getTimestamp(), ); if ($params['direction'] === 'inbound') { $callInfo['note_type'] = 10; // входящий $callInfo['params']['PHONE'] = $params['call']['from']; } else if ($params['direction'] === 'outbound') { $callInfo['note_type'] = 11; // исходящий $callInfo['params']['PHONE'] = $params['call']['to']; } $this->logDebug("call info: ".json_encode($callInfo)); // // Добавляем примечания о звонках в контакты с данным телефоном // $phone = $callInfo['params']['PHONE']; $contacts = Amo::getContactsList(array( 'query' => $phone, 'limit' => 250, )); if ($contacts === false) { return array( 'state' => 'error', 'data' => "Failed to get contacts with phone '$phone'", ); } else if (empty($contacts)) { $this->logDebug('No contacts. Do nothing, return original params'); return array( 'state' => 'success', 'data' => $params, ); } $contactIds = array(); foreach ($contacts['_embedded']['items'] as $contact) { array_push($contactIds, $contact['id']); } $this->logDebug(sprintf("Found contacts with phone '%s': %s", $phone, json_encode($contactIds))); $res = Amo::addNoteToEntities($callInfo, 'contact', $contactIds); if ($res === false) { return array( 'state' => 'error', 'data' => "Failed to add notes to contacts", ); } // // Ломаем регистрацию звонка во избежание дублирования примечаний о звонке в сущностях // $this->logDebug('Return EMPTY params to avoid duplicate call notes (breaks AddCall)'); $params = array(); return array( 'state' => 'success', 'data' => $params, ); ``` # Полезные кастомизации itgrix_amo (amoCRM) (/custom_amo) Дополнительные кастомизации описаны в разделе [Полезные кастомизации (любая CRM)](/custom_common). ## Схема обработки звонка модулем интеграции Itgrix [#skhema-obrabotki-zvonka-modulem-integracii-itgrix] (Схема для версий начиная с 3.0.0)
"Запрос разговора" – когда звонит телефон у сотрудника/клиента.\ В одном "звонке" может быть несколько "разговоров" (в случае перевода звонка). ## **Краткое описание кастомизаций** [#kratkoe-opisanie-kastomizacii]
Файл кастомизации
(по алфавиту)
Описание
1need_registration.phpНужна ли регистрация звонка?
Можно сделать черные/белые списки по внутреннему номеру/транку.
2process_call_params.phpИзменение параметров регистрации звонка.
3process_client_phone.phpИзменение номера телефона перед регистрацией в CRM.
Можно сменить формат телефонного номера (+7, 8...).
4process_contact_creation_params.phpИзменение параметров создания контакта.
5process_lead_creation_params.phpИзменение параметров создания сделки.
6process_originate_params.phpИзменение параметров при инициализации звонка из CRM.
Можно позвонить через другой транк, через другой контекст, сменить формат номера и прочее.
7process_record_file_path.phpКастомизация пути до файла записи разговора.
Также в этом файле настраивается конвертирование из формата wav в mp3. Описание в статье Конвертация записей в формат MP3.
8process_task_creation_params.phpИзменение параметров создания задач по пропущенным звонкам. Изменение названия задачи может помешать опции автоматического завершения задач.
9customize_autodistribution.phpКастомизация автораспределения входящих звонков.
10post_registration.phpДействия после регистрации звонка.
11process_contact_update_params.phpИзменение параметров обновления контакта.
12process_lead_update_params.phpИзменение параметров обновления сделки.
13process_unsorted_creation_params.phpИзменение параметров создания неразобранного. Позволяет изменить поля контакта и сделки.
## Входные и выходные параметры кастомизаций [#vkhodnye-i-vykhodnye-parametry-kastomizacii] ### **1) need\_registration** [#id-1-need_registration] Используется для реализации функционала чёрных/белых список по номерам, транкам и прочим более сложным условиям. Базовая настройка черного/белого списка для внутренних номеров доступна [из админки (интерфейса настройки) коннектора](/custom_common/black-white-list#nastroika-cherez-interfeis-modulya). **Примеры:** [Черный/белый список для транков](/custom_common/black-white-list#chernyi-belyi-spisok-dlya-trankov)*.* **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "result": }, "state": "success" } ``` ### **2) process\_call\_params** [#id-2-process_call_params] Изменение параметров регистрации звонка. Подробнее про статусы звонка (поля `call_status` и `call_result`) в статье [Детальные статусы звонка](/faq/detalnye-statusy-zvonka#amocrm). **Вход:** ```javascript { "call_full": {<Полный набор данных о звонке>}, "call_result": "<Результат звонка>", "call_status": <Статус звонка>, "created_at": <Дата создания звонка (в формате Unix Timestamp)>, "created_by": , "direction": "<Направление звонка. Принимает значения: "inbound" - входящий, "outbound" - исходящий>", "duration": <Длительность (последнего разговора) в секундах>, "link": "<Ссылка на получение записи (последнего разговора)>", "phone": "<Телефонный номер клиента (уже кастомизированный через process_client_phone)>", "responsible_user_id": , "source": "itgrix_amo" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```javascript { "data": { "call_result": "<Результат звонка>", "call_status": <Статус звонка>, "created_at": <Дата создания звонка в Unix Timestamp>, "created_by": , "direction": "<Направление звонка. Принимает значения: "inbound" - входящий, "outbound" - исходящий>", "duration": <Длительность (последнего разговора) в секундах>, "link": "<Ссылка на получение записи (последнего разговора)>", "phone": "<Телефонный номер клиента (уже кастомизированный через process_client_phone)>", "responsible_user_id": , "source": "itgrix_amo" }, "state": "success" } ``` ### **3) process\_client\_phone** [#id-3-process_client_phone] Преобразование телефонных номеров клиентов перед отправкой запросов в amoCRM. Доступна [автозамена номеров](/for-admins/autoreplacement), она запускается ДО выполнения кастомизации. **Примеры** в статье [Изменение номера клиента перед отправкой в CRM](/custom_common/client-phone-number). **Вход:** ```json { "phone": "<номер>", "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "phone": "<Кастомизированный номер>" }, "state": "success" } ``` ### **4) process\_contact\_creation\_params** [#id-4-process_contact_creation_params] Изменение параметров создания контакта. В amoCRM по умолчанию в контакте нет поля для телефонного номера. Вместо этого используются пользовательские поля контактов. Itgrix\_amo работает с полем контактов `"code": "PHONE"` с доступным значением `"enum": "WORK"`. **Если такого поля для контактов в аккаунте нет, то модуль не запустится.** Подробное описание пользовательских полей в [документации **API amoCRM**](https://www.amocrm.ru/developers/content/crm_platform/custom-fields). **Пример:** [Изменение тега при создании контакта/сделки](/custom_amo/izmenenie-tega-pri-sozdanii-kontakta-sdelki)**.** **Вход:** ```javascript { "call_full": {<Полный набор данных о звонке>}, "custom_fields_values": [ { "field_id": , "values": [ { "enum_code": "<Значение поля. Itgrix работает со значением "WORK">", "value": "<Номер телефона звонившего>" } ] } ], "name": "<Имя контакта. По умолчанию "Контакт <Тел.номер>">", "responsible_user_id": , "tags": [ "Itgrix" ] } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```javascript { "data": { "custom_fields_values": [ { "field_id": , "values": [ { "enum_code": "<Значение поля. Itgrix работает со значением "WORK">", "value": "<Номер телефона звонившего>" } ] } ], "name": "<Имя контакта. По умолчанию "Контакт <Тел.номер>">", "responsible_user_id": , "tags": [ "Itgrix" ] // Прочие поля также можно установить }, "state": "success" } ``` Параметры запроса создания контакта описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/contacts-api#contacts-add). ### **5) process\_lead\_creation\_params** [#id-5-process_lead_creation_params] Изменение параметров создания сделки. **Пример:** [Изменение тега при создании контакта/сделки](/custom_amo/izmenenie-tega-pri-sozdanii-kontakta-sdelki). **Вход:** ```javascript { "call_full": {<Полный набор данных о звонке>}, "_embedded": { "contacts": [ {"id": } ], "tags": [ {"name": "Itgrix"} ] }, "name": "<Название сделки. По умолчанию "<Тел.номер> - [пропущенный] входящий/исходящий">", "pipeline_id": , "responsible_user_id": , "status_id": } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```javascript { "data": { "_embedded": { "contacts": [ {"id": } ], "tags": [ {"name": "Itgrix"} ] }, "name": "<Название сделки. По умолчанию "<Тел.номер> - входящий/исходящий звонок">", "pipeline_id": , "responsible_user_id": , "status_id": // Прочие поля также можно установить }, "state": "success" } ``` Параметры запроса создания сделки описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/leads-api#leads-add). ### **6) process\_originate\_params** [#id-6-process_originate_params] Изменение параметров при инициализации звонка из amoCRM. Подробное описание с примерами в статье [Изменение параметров при click-to-call](/custom_common/c2c). ### **7) process\_record\_file\_path** [#id-7-process_record_file_path] Преобразование пути до файла записи разговора. Подробное описание с примерами в статье [Кастомизация имени файла аудиозаписи](/custom_common/filepath). При регистрации звонка в amoCRM в заметку будет добавлен плеер для проигрывания записи этого звонка (по ссылке, которую модуль Itgrix добавляет автоматически). Но плеер поддерживает только формат mp3. При установке Itgrix\_amo по умолчанию уже включена [конвертация файлов записей разговоров в mp3](/custom_common/mp3-record). Поскольку конвертация записей может занимать значительное время, у этой кастомизации индивидуальный **таймаут 10 секунд** (изменить можно в конфигурационном файле коннектора - `/etc/itgrix_amo/config.json`). Если запись не успеет сконвертироваться до истечения таймаута, будет использован исходный файл. ### **8) process\_task\_creation\_params** [#id-8-process_task_creation_params] Кастомизация параметров создания задачи (при пропущенном входящем звонке или неотвеченном исходящем). Данная кастомизация работает, только если создание задач включено в настройках коннектора: [Настройка задачи по пропущенному через админку](/settings/additional/parametry-sozdaniya-zadach). При этом сначала применяются настройки, описанные в статье, а затем выполняется данная кастомизация. **Вход:** ```javascript { "call_full": {<Полный набор данных о звонке>}, "complete_till": <Дата-время, когда задача должна быть завершена (в формате Unix Timestamp)>, "created_by": , "entity_id": , "entity_type": "<Тип сущности, к которой привязана задача. Принимает значения: "contacts", "leads">", "is_completed": <Выполнена ли задача. При создании всегда false>, "responsible_user_id": , "task_type_id": <Тип задачи. Числовое значение: 1 - Звонок, 2 - Встреча, 3 - Письмо>, "text": "<Описание задачи. По умолчанию: "Перезвонить <Имя сущности> по пропущенному звонку с номера <Тел.номер>">" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```javascript { "data": { "complete_till": <Дата-время, когда задача должна быть завершена (в формате Unix Timestamp)>, "created_by": , "entity_id": , "entity_type": "<Тип сущности, к которой привязана задача. Принимает значения: "contacts", "leads">", "is_completed": <Выполнена ли задача. При создании всегда false>, "responsible_user_id": , "task_type_id": <Тип задачи. Числовое значение: 1 - Звонок, 2 - Встреча, 3 - Письмо>, "text": "<Описание задачи. По умолчанию: "Перезвонить <Имя сущности> по пропущенному звонку с номера <Тел.номер>">" // Прочие поля также можно установить }, "state": "success" } ``` Параметры запроса создания задачи описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/tasks-api#tasks-add). ### 9) customize\_autodistribution [#id-9-customize_autodistribution] Кастомизация автораспределения входящих звонков. Для работы функции автораспределения необходимо выполнить настройку Asterisk, описанную в статье [Автораспределение звонка на ответственного менеджера](/settings/autodistribution). **Вход:** ```json { "number": "<номер пользователя на которого распределять звонок>", "name": "<имя пользователя на которого распределять звонок>", "from": "<номер с которого пришёл звонок>", "trunk": "<Номер транка>", "request_data": {<Параметры запроса автораспределения как есть>}, "entity": {<Данные найденной сущности>}, "error": "<текст ошибки>" } ``` **Вернуть:** ```json { "data": { "number": "<Номер пользователя, на которого распределять звонок>", "name": "<Имя пользователя, на которого распределять звонок>" }, "state": "success" } ``` `name` - текст который появится в CallerID и будет отображен в телефоне (или софтфоне) оператора. **Должен быть не более 20 символов (ограничение Asterisk)!** Поля `from`, `trunk`, `entity` и `error` - только для чтения и присутствуют только когда не пустые. Эти поля, а также `request_data` будут автоматически удалены, даже если вернуть их в объекте `data`. ### 10) post\_registration [#id-10-post_registration] Данная кастомизация дает возможность выполнить какие-либо действия после регистрации звонка. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** Нужно вернуть только `state`, остальное игнорируется: ```json { "state": "success" } ``` ### 11) process\_contact\_update\_params [#id-11-process_contact_update_params] Изменение параметров обновления контакта. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "id": , "responsible_user_id": } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "id": , "responsible_user_id": // Прочие поля также можно изменить }, "state": "success" } ``` Параметры запроса обновления контакта описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/contacts-api#contacts-edit). ### 12) process\_lead\_update\_params [#id-12-process_lead_update_params] Изменение параметров обновления сделки. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "id": , "responsible_user_id": } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "id": , "responsible_user_id": // Прочие поля также можно изменить }, "state": "success" } ``` Параметры запроса обновления сделки описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/leads-api#leads-edit). ### 13) process\_unsorted\_creation\_params [#id-13-process_unsorted_creation_params] Изменение параметров создания неразобранного. Позволяет изменить поля контакта и сделки. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "_embedded": { "contacts": [{ "custom_fields_values": [{ "field_id": , "values": [{ "enum_code": "<Значение поля. Itgrix работает со значением "WORK">", "value": "<Номер телефона звонившего>" }] }], "name": "<Имя контакта. По умолчанию "Контакт <Тел.номер>">", "tags": [ "Itgrix" ] }], "leads": [{ "name": "<Название сделки. По умолчанию "<Тел.номер> - [пропущенный] входящий/исходящий">", "pipeline_id": , "tags": [ {"name": "Itgrix"}, ] }] }, "created_at": <Дата создания неразобранного (в формате Unix Timestamp)>, "metadata": { "called_at": <Когда сделан звонок (в формате Unix Timestamp)>, "duration": <Длительность звонка в секундах>, "from": "<Номер телефона звонившего>", "is_call_event_needed": false, "link": "<Ссылка на запись звонка>", "phone": "<Номер телефона, на который звонили>", "service_code": "itgrix_amo", "uniq": "<Уникальный идентификатор звонка. Itgrix передает linkedid звонка>" }, "pipeline_id": , "source_name": "itgrix_amo", "source_uid": "" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "_embedded": { "contacts": [{ "custom_fields_values": [{ "field_id": , "values": [{ "enum_code": "<Значение поля. Itgrix работает со значением "WORK">", "value": "<Номер телефона звонившего>" }] }], "name": "<Имя контакта. По умолчанию "Контакт <Тел.номер>">", "tags": [ "Itgrix" ] }], "leads": [{ "name": "<Название сделки. По умолчанию "<Тел.номер> - [пропущенный] входящий/исходящий">", "pipeline_id": , "tags": [ {"name": "Itgrix"}, ] }] }, "created_at": <Дата создания неразобранного (в формате Unix Timestamp)>, "metadata": { "called_at": <Когда сделан звонок (в формате Unix Timestamp)>, "duration": <Длительность звонка в секундах>, "from": "<Номер телефона звонившего>", "is_call_event_needed": false, "link": "<Ссылка на запись звонка>", "phone": "<Номер телефона, на который звонили>", "service_code": "itgrix_amo", "uniq": "<Уникальный идентификатор звонка. Itgrix передает linkedid звонка>" }, "pipeline_id": , "source_name": "itgrix_amo", "source_uid": "" // Прочие поля также можно установить }, "state": "success" } ``` Параметры запроса создания неразобранного описаны в [документации API amoCRM](https://www.amocrm.ru/developers/content/crm_platform/unsorted-api#unsorted-add-sip). # Добавление тега при создании контакта/сделки (/custom_amo/izmenenie-tega-pri-sozdanii-kontakta-sdelki) По умолчанию модуль itgrix\_amo при создании контакта или сделки задаёт им тег `Itgrix`. При необходимости вы можете изменить тег перед отправкой запроса на создание контакта/сделки в CRM или добавить ещё один тег. Синтаксис одинаковый для кастомизаций создания контактов и сделок. Кастомизация настраивается в файлах: * **process\_contact\_creation\_params.php** для контактов; * **process\_lead\_creation\_params.php** для сделок. Они находятся в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | **Пример добавления тегов `CustomTag1` и `CustomTag2`:** ```php $CustomTag1)); array_push($params['tags_to_add'], array('name' => $CustomTag2)); return array( 'state' => 'success', 'data' => $params ); ``` # Обновление кастомизатора в версии Itgrix_amo 3.0.0 (/custom_amo/obnovlenie-kastomizatora-v-versii-itgrix_amo-3.0.0) ## Изменения в кастомизаторе [#izmeneniya-v-kastomizatore] В обновлении Itgrix\_amo v3.0.0 осуществлен переход API amoCRM с v2 на v4. В связи с этим запросы в кастомизаторе (методы класса Amo в файле `customizer/lib/crm.php`) также переведены с v2 на v4. Кроме этого, все запросы теперь осуществляются не напрямую из кастомизации, а через коннектор. Т.е. из кастомизации запрос идет в API коннектора, и уже коннектор отправляет запрос в API amoCRM. Это необходимо для соблюдения ограничения на количество запросов, - теперь запросы из кастомизатора будут учитываться коннектором. Ограничения со стороны amoCRM описаны в статье [Ограничения и рекомендации](https://www.amocrm.ru/developers/content/api/recommendations). ### Изменения в методах класса `Amo` [#izmeneniya-v-metodakh-klassa-amo] * Все методы-обертки запросов в классе Amo (`customizer/lib/crm.php`) переведены с v2 на v4. Исключение - `Amo::createLead` и `Amo::createTask`, в них и до обновления использовался API v4. * Переименованы методы: * `Amo::getLeadsList` -> `Amo::getLeadList` * `Amo::getContactsList` -> `Amo::getContactList` * Добавлен метод `Amo::updateLead`. Он должен был быть добавлен ранее (например, он используется в кастомизации ["Добавление данных о звонке в тег новой сделки"](/custom_amo/dobavlenie-dannykh-o-zvonke-v-teg-novoi-sdelki)), но по ошибке не был добавлен в предыдущих релизах. В данном релизе добавлен сразу с использованием API v4. ### Работа с примечаниями [#rabota-s-primechaniyami] Отдельного описания требуют изменения в методе `Amo::addNoteToEntities` Его исользование описано в статье по кастомизации ["Добавление звонка в несколько сущностей"](/custom_amo/dobavlenie-zvonka-v-neskolko-sushnostei). * В API amoCRM v2 это POST-запрос `/api/v2/notes` (документация на API v2 более недоступна, но можно найти [в веб-архиве](https://web.archive.org/web/20220124171900/https://www.amocrm.com/developers/content/api/notes/)) * В API amoCRM v4 это POST-запрос `/api/v4/{entity_type}/notes` ([раздел Добавление примечаний в статье События и примечания](https://www.amocrm.ru/developers/content/crm_platform/events-and-notes#notes-add) документации amoCRM). Поменялись состав и названия полей, которые нужно отправлять при создании примечания. Но главное - в отличие от v2 в документации v4 не описаны поля `params/call_status`, `params/call_result`, а поле `created_at` описано только в методах чтения, но не записи. Без этих полей невозможно создать полноценное примечание о звонке. Экспериментально выявлено, что указанные поля по-прежнему можно отравлять при создании примечаний и в v4, однако теперь это "недокументированный функционал", т.е. его поддержка не гарантирована. ## Возможность реализации запросов по-старому [#vozmozhnost-realizacii-zaprosov-po-staromu] Тем не менее по-прежнему остается метод `Amo::request`, который дает возможность делать запросы напрямую из кастомизатора, причем с выбором используемой версии API (v2/v4). Таким образом в случае крайней необходимости можно реализовывать запросы по-старому. Однако, нужно учитывать, что при обновлениях коннектора файлы в `customizer/lib` автоматически обновляются на актуальную версию. Поэтому для сохранения старых функций нужно их вынести в другой файл - или непосредственно в файл кастомизации, или создать дополнительный библиотечный файл, который уже подключать в коде кастомизации. Например, можно сохранить целиком старый файл `crm.php`, переименовав его и поменяв название класса Amo во избежание конфликта имен. ## Итоги [#itogi] При обновлении коннектора Itgrix\_amo до версии 3.0.0 необходимо учесть изменения в кастомизаторе: если использовались запросы в CRM, скорее всего потребуется внести правки в код (обновить параметры запросов, в некоторых случаях переименовать функции). **Если вам требуется помощь, обратитесь в нашу техническую поддержку.** # Запись номера транка через который пришел звонок в информацию о разговоре (/custom_amo/zapis-nomera-tranka-na-kotoryi-byl-zvonok-v-informaciyu-o-razgovore) С помощью кастомизации параметров звонка, можно записывать номер транка на который был вызов в информацию о разговоре в СРМ.\\ Файл **/opt/itgrix\_amo/custom/process\_call\_params.php** нужно привести к виду указанному ниже: ``` 'success', 'data' => $params ); ``` В результате в СРМ, после звонка номер транка будет указываться в поле "Разговор состоялся": # Запросы в amoCRM из кастомизации (/custom_amo/zaprosy-v-amocrm-iz-kastomizacii) ## Общее описание [#obshee-opisanie] Запросы API amoCRM из кастомизации поддерживаются начиная с [версии 2.6.0](/changelog-amo#2.6.0). При обновлении (в т.ч. на 2.6.0) кастомизатор не изменяется, чтобы не нарушить настроенную клиентом работу интеграции. Поэтому, потребуется [обновить кастомизатор вручную](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0). Из пользовательской кастомизации можно делать запросы в amoCRM (например, создать задачу или сделку) в тех случаях, когда [стандартная логика обработки звонка](/custom_amo#skhema-obrabotki-zvonka-modulem-integracii-itgrix) не охватывает специфические случаи. Для этого в API кастомизатора реализован класс `Amo` с соответствующими методами. Методы, их аргументы и возвращаемые значения подробно описаны в файле\*\*`/opt/itgrix_amo/customizer/README`\*\*. Для работы HTTP-запросов в кастомизаторе нужно, чтобы в системе был установлен модуль **php-curl** (опционально, без php-curl кастомизатор будет выполнять всё кроме HTTP-запросов). Проверить можно, выполнив в терминале команду: `php -r 'echo curl_version()["version"];'`\ Пример ответа:`7.47.0` ## Создание задачи [#sozdanie-zadachi] В кастомизациях доступен метод **`Amo::createTask`**, которая делает запрос в amoCRM на создание задачи.\ Описание полей задачи в [документации **API amoCRM**](https://www.amocrm.ru/developers/content/crm_platform/tasks-api#tasks-add). #### Пример создания задачи по любому входящему звонку [#primer-sozdaniya-zadachi-po-lyubomu-vkhodyashemu-zvonku] Добавим вызов функции `Amo::createTask` в кастомизацию `process_call_params` (настраивается в файле `/opt/itgrix_amo/customizer/actions/process_call_params.php`). [Логика модуля Itgrix](/custom_amo#skhema-obrabotki-zvonka-modulem-integracii-itgrix) по умолчанию предполагает создание задачи при регистрации пропущенного звонка. В данном примере будет создана новая задача для **любого** входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить создание задачи по пропущенному в настройках модуля. ```php if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий $phone = $params['call']['from']; // Сделаем одного и того же постановщика и ответственного для задачи $responsibleUserId = 5755858; $createdByUserId = 5755858; // Установим срок выполнения - 1 час после окончания звонка $deadLine = date_create($params['call']['end_time']); $deadLine->add(new DateInterval('PT1H')); // Пример срока в 1 день: //$deadLine->add(new DateInterval('P1D')); $deadLine = intval($deadLine->format('U')); $response = Amo::createTask(array( 'text' => 'Обработать звонок от '.$phone, 'complete_till' => $deadLine, 'created_by' => $createdByUserId, 'responsible_user_id' => $responsibleUserId, )); if ($response === false) { return array( 'state' => 'error', 'data' => 'Не удалось создать задачу', ); } // // Для отладки можно вывести ответ amoCRM в лог модуля Itgrix: // $this->logDebug('response: ' . json_encode($response, JSON_UNESCAPED_UNICODE)); } return array( 'state' => 'success', 'data' => $params, ); ``` ## Создание сделки [#sozdanie-sdelki] В кастомизациях доступна функция `Amo::createLead`, которая делает запрос в amoCRM на создание сделки.\ Подробное описание полей сделки в [документации **API amoCRM**](https://www.amocrm.ru/developers/content/crm_platform/leads-api#leads-add). #### Пример создания сделки на любой входящий звонок [#primer-sozdaniya-sdelki-na-lyuboi-vkhodyashii-zvonok] Добавим вызов функции `Amo::createLead` в кастомизацию `process_call_params` (настраивается в файле `/opt/itgrix_amo/customizer/actions/process_call_params.php`). В таком случае будет создана новая сделка (ещё одна), даже если [сделка уже создана при регистрации звонка модулем Itgrix](/custom_amo#skhema-obrabotki-zvonka-modulem-integracii-itgrix). ```php if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий $phone = $params['call']['from']; // Сделаем одного и того же постановщика и ответственного для задачи $responsibleUserId = 5755858; $createdByUserId = 5755858; // Установим дату-время окончания звонка как дату-время создания сделки $callEndTime = date_create($params['call']['end_time']); $callEndTime = intval($callEndTime->format('U')); $response = Amo::createLead(array( 'name' => 'Сделка с клиентом '.$phone, 'created_by' => $createdByUserId, 'responsible_user_id' => $responsibleUserId, 'created_at' => $callEndTime, )); if ($response === false) { return array( 'state' => 'error', 'data' => 'Не удалось создать сделку', ); } // // Для отладки можно вывести ответ amoCRM в лог модуля Itgrix: // $this->logDebug('response: ' . json_encode($response, JSON_UNESCAPED_UNICODE)); } return array( 'state' => 'success', 'data' => $params, ); ``` # Создавать лид для каждого входящего звонка (/custom_bx/always-create-lead-on-incoming) По умолчанию модуль только регистрирует звонок, а Битрикс24 сам по номеру телефона ищет лид/контакт, в который нужно записать этот звонок. Новый лид/контакт по умолчанию создается только в случае, если номер телефона не известен. Чтобы **создавать новый лид при каждом входящем звонке,** нужно сделать запрос на создание лида через кастомизацию. Запросы REST API Битрикс24 из кастомизации поддерживаются начиная с версии 3.4.0. Функция для создания лида (`Bitrix::createLead`) поддерживается начиная с версии 3.4.2. Подробности в статье [Запросы в Битрикс из кастомизации](/custom_bx/zaprosy-v-bitriks-iz-kastomizacii#sozdanie-lida). ### 1. Включить **кастомизацию параметров регистрации разговора** [#id-1.-vklyuchit-kastomizaciyu-parametrov-registracii-razgovora] В веб-интерфейсе настройки модуля в разделе **Настройки -> Модуль** нужно поставить галочки **"Включить кастомизацию:"** и **"параметров регистрации разговора":** При использовании запросов в Битрикс24 из кастомизаций нужно устанавливать достаточный **Таймаут скрипта кастомизации** (в случае одного запроса нужно установить хотя бы 2 секунды). Значение зависит от количества запросов и особенностей сети и портала Битрикс24: в случае использования нескольких запросов в одной кастомизации, и/или большой загруженности портала имеет смысл значительно увеличить таймаут. ### 2. Добавить код в файл кастомизации [#id-2.-dobavit-kod-v-fail-kastomizacii] Кастомизация параметров регистрации разговора настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_registration\_params.php.** Пример: ```php $phone = $params['PHONE_NUMBER']; if ($params['TYPE'] === 2) { // входящий $this->logInfo("Create lead for incoming call"); // Поля в документации: // https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_add.php $leadResult = Bitrix::createLead( array( 'TITLE' => sprintf("%s - Входящий звонок", $phone), 'PHONE' => array(array('VALUE' => $phone, 'VALUE_TYPE' => 'WORK')), 'ASSIGNED_BY_ID' => $params['USER_ID'], 'STATUS_ID' => 'NEW', 'OPENED' => 'Y', ), array( // Произвести регистрацию события добавления лида в живой ленте. // Дополнительно будет отправлено уведомление ответственному за лид. 'REGISTER_SONET_EVENT' => 'Y', )); if ($leadResult === false) { return array( 'state' => 'error', 'data' => 'failed to create lead', ); } $leadId = $leadResult['result']; $this->logInfo("Register call for lead ID $leadId"); $params['CRM_CREATE'] = 0; $params['CRM_ENTITY_TYPE'] = 'LEAD'; $params['CRM_ENTITY_ID'] = $leadId; } ``` # Кастомизации (для версий до 3.0) (/custom_bx/custom-before-3.0) В версии 2.15.0 обновлена логика обработки звонков: теперь звонки регистрируются через телефонию Битрикс24, что позволяет [использовать сквозную аналитику](/settings/additional/end-to-end-analytics). Это также означает, что теперь при необходимости создания сущности (лида/контакта) это делает сам Битрикс, а коннектор больше не ищет и не создаёт сущность напрямую. В связи с обновлением изменилась также и функциональность кастомизаций. ## Схема обработки звонка модулем интеграции Itgrix (bx24asterisk) [#skhema-obrabotki-zvonka-modulem-integracii-itgrix-bx24asterisk] (Схема для версий начиная с 2.15.0) “Сущность” – это контакт или лид.\ Запрос разговора – это начало звонка на внутреннем номере.\ В одном звонке может быть несколько разговоров (в случае перевода звонка). ## **Краткое описание кастомизаций** [#kratkoe-opisanie-kastomizacii] | Файл кастомизации
(по алфавиту)
| Описание | | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | | get\_updated\_activity\_fields.php | Обновление полей дела (в конце звонка). | | get\_updated\_entity\_fields.php | Обновить поля сущности (в конце звонка). | | need\_registration.php | Нужна ли регистрация звонка?
Можно сделать черно-белые списки по внутреннему номеру/транку.
| | process\_final\_params.php | Изменение данных завершения звонка. | | process\_originate\_params.php | Изменение параметров при инициализации звонка из Битрикс24.
Можно позвонить через другой транк, через другой контекст, сменить формат номера и прочее.
| | process\_phone\_number.php | Изменение номера телефона перед регистрацией в Б24 и перед поиском пользователя.
Можно сменить формат телефонного номера (+7, 8...).
| | process\_record\_file\_path.php | Кастомизация пути до файла записи разговора. | | process\_registration\_params.php | Изменение параметров регистрации звонка. | | process\_task\_creation\_params.php | Кастомизация создания задач по пропущенным звонкам. | ## Входные и выходные параметры кастомизаций [#vkhodnye-i-vykhodnye-parametry-kastomizacii] ### **1) process\_originate\_params** [#id-1-process_originate_params] Изменение параметров при инициализации звонка из Битрикс. **Примеры** [Изменения номера\контекста для вызова в астериск](/custom_bx) **Вход:** `{`\ `"params": {`\ `"caller_id": "",`\ `"channel": "",`\ `"context": "",`\ `"extension": "",`\ `"priority": ""`\ `}`\ `}` **Вернуть:** `{`\ `"data": {`\ `"caller_id": "",`\ `"channel": "",`\ `"context": "",`\ `"extension": "",`\ `"priority": ""`\ `}`\ `}` К этому массиву данных можно добавить переменные "codecs" и "variables": `"codecs": "",`\ `"variable": "variable",` ### **2) process\_phone\_number** [#id-2-process_phone_number] Преобразование номеров – как внутренних, так и внешних. **Пример** [Изменение номера телефона перед отправкой данных в CRM](/custom_common/client-phone-number) **Вход:** `{`\ `"params": {`\ `"phone": "<номер>"`\ `}`\ `}` **Вернуть:** `{`\ `"data": {`\ `"phone": "<кастомизированный_номер>"`\ `},`\ `"state": "success"`\ `}` ### 3\*\*) need\_registration\*\* [#id-3-need_registration] Используется для реализации функционала чёрных/белых список по номерам, транкам и прочим сложным условиям. **Пример** [Черные и белые списки. Как настроить?](/custom_common/black-white-list) **Вход:** `{`\ `"params": {<Набор данных о разговоре>}`\ `}` Набор данных о разговоре описан ниже в разделе [Данные разговора в параметрах.](/custom_bx/custom-before-3.0#parametry-razgovora-conversation) **Вернуть:** `{`\ `"data": {`\ `"result": "<Булева переменная: true - регистрируем, false - игнорируем>"`\ `},`\ `"state": "success"`\ `}` ### **4) process\_registration\_params** [#id-4-process_registration_params] Используется для кастомизации параметров регистрации начала звонка. **Примеры** [Изменение внешнего номера в Битрикс24](/custom_bx/dobavlenie-koda-goroda-v-zavisimosti-ot-goroda-operatora) **Вход:** ``` {"params": { "CALL_START_DATE": "<Дата, время начала звонка>", "CRM_CREATE": "<Создавать или нет новый лид (если номер не найден в CRM)>", "CRM_SOURCE": "", "LINE_NUMBER": "<Транк, на который пришел звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": "<[0/1] Показывать ли карточку звонка при регистрации>", "TYPE": "<Направление звонка: 2 - входящий; 1 - исходящий>", "USER_ID": "<Идентификатор пользователя>", "conversation": {<Набор данных о разговоре>} }} ``` Набор данных о разговоре описан ниже в разделе [Данные разговора в параметрах.](/custom_bx/custom-before-3.0#parametry-razgovora-conversation) **Вернуть:** Полный список параметров в [документации Битрикса](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_register.php). ``` {"data": { "CALL_START_DATE": "<Дата, время начала звонка>", "CRM_CREATE": "<Создавать или нет новый лид (если номер не найден в CRM)>", "CRM_SOURCE": "", "LINE_NUMBER": "<Транк, на который пришел звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": "<[0/1] Показывать ли карточку звонка при регистрации>", "TYPE": "<Направление звонка: 2 - входящий; 1 - исходящий>", "USER_ID": "<Идентификатор пользователя>" }, "state": "success" } ``` ### **5) process\_final\_params** [#id-5-process_final_params] Начиная с версии 2.15.0 кастомизация всех черных/белых списков реализуется через need\_registration. **Примеры** [Разные ответственные за пропущенные за разные транки](/custom_bx/default-resp-for-trunks) **Вход:** `{"params": {`\ `"ADD_TO_CHAT": "<Добавить сообщение о звонке в бизнес чат>",`\ `"CALL_ID": "<Идентификатор звонка в битрикс>",`\ `"DURATION": "<Длительность>",`\ `"STATUS_CODE": 200,`\ `"USER_ID": "<Идентификатор пользователя Битрикс, ответственного за разговор>",`\ `"conversation": {<Набор данных о разговоре>}`\ `}}` Набор данных о разговоре описан ниже в разделе [Данные разговора в параметрах](/custom_bx/custom-before-3.0#parametry-razgovora-conversation). **Вернуть:** `{"data": {`\ `"ADD_TO_CHAT": "<Добавить сообщение о звонке в бизнес чат>",`\ `"CALL_ID": "<Идентификатор звонка в битрикс. Не рекомендуется изменять!>",`\ `"DURATION": "<Длительность>",`\ `"STATUS_CODE": "",`\ `"USER_ID": "<Идентификатор пользователя Битрикс, ответственного за разговор>"`\ `},`\ `"state": "success"`\ `}` ### **6) process\_record\_file\_path** [#id-6-process_record_file_path] Преобразование пути до файла записи разговора. **Пример** [Кастомизация имени файла аудиозаписи](/custom_common/filepath) **Вход:** `{"params": {`\ `"call_id": "",`\ `"from": "<номер>",`\ `"to": "<номер>",`\ `"path": "<путь_до_записи>"`\ `}`\ `}` **Вернуть:** `{"data": {`\ `"path": "<кастомизированный_путь_до_записи>"`\ `},`\ `"state": "success"`\ `}` ### **7) process\_task\_creation\_params** [#id-7-process_task_creation_params] Событие возникает перед постановкой задачи (при пропущенном входящем звонке).\ Полное описание полей задачи в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/tasks/fields.php) **Пример** [Кастомизация создания задач по пропущенным звонкам](/custom_bx/task-for-missed-call) **Вход:** В версии 2.15.0 добавлен блок данных о разговоре (conversation). ``` {"params": { "arNewTaskData": { "DEADLINE":"<Крайний срок исполнения>", "CREATED_BY": "<Идентификатор постановщика>", "RESPONSIBLE_ID": "<Идентификатор сотрудника, ответственного за задачу>", "TITLE":"<Заголовок задачи>", "UF_CRM_TASK": ["L_11201"] }, "conversation": { "1550838819.13014": {<Набор данных о разговоре>}, "1550838850.13029": {<Набор данных о разговоре>} } }} ``` Набор данных о разговоре (conversation) описан ниже в разделе [Данные разговора в параметрах](/custom_bx/custom-before-3.0#parametry-razgovora-conversation). **Вернуть:** `{"data": {`\ `"arNewTaskData": {`\ `"<Название поля задачи в битрикс>": "<Значение этого поля>"`\ `}`\ `},`\ `"state": "success"`\ `}` ### **8) get\_updated\_activity\_fields** [#id-8-get_updated_activity_fields] Обновление полей дела, в конце звонка. Примеры использования\ [Обновление полей дела](/custom_bx/update-activity-fields) **Вход:** `{"params": {<Набор данных о разговоре>}`\ `}` Набор данных о разговоре описан ниже в разделе [Данные разговора в параметрах](/custom_bx/custom-before-3.0#parametry-razgovora-conversation). **Вернуть:** `{"data": {`\ `"<Название поля дела в битрикс>": "<Значение этого поля>"`\ `},`\ `"state": "success"`\ `}` ### **9) get\_updated\_entity\_fields** [#id-9-get_updated_entity_fields] В версии 2.15.0 **get\_updated\_lead\_fields** перенесена в **get\_updated\_entity\_fields** и вызывается и для лидов, и для контактов. Обновление полей лида/контакта в конце входящего звонка работает только для сущностей, которые созданы в результате регистрации звонка модулем. Примеры использования – [Обновление полей сущности](/custom_bx/update-entity-fields) **Вход:** ``` {"params": { "conversations": { "1550838819.13014": {<Набор данных о разговоре>}, "1550838850.13029": {<Набор данных о разговоре>} }, "answered_at":"", "ended_at":"", "from":"", "from_local":false, "id":"1550838797.13013", "started_at":"", "state":3, "to":"", "to_local":true, "trunk":"", "type": }} ``` Набор данных о разговоре описан ниже в разделе [Данные разговора в параметрах](/custom_bx/custom-before-3.0#parametry-razgovora-conversation). **Вернуть:** `{"data": {`\ `"<Название поля лида в битрикс>": "<Значение этого поля>"`\ `},`\ `"state": "success"`\ `}` Описание полей лида в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php).\ Описание полей контакта в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php). ## Параметры разговора (conversation) [#parametry-razgovora-conversation] ``` { "answered_at": "<Дата и время ответа>", "channel_id": "<Идентификатор канала>", "ended_at": "<Время завершения разговора>", "from": "<Номер звонящего>", "from_local": "<Является ли локальным номер звонящего: true/false>", "id": "<Идентификатор звонка>", "parent_channel_id": "<Идентификатор родительского канала>", "started_at": "<Дата и время начала звонка>", "state": "<Этап звонка. Числовое значение>", "state_code": "<Человекопонятное название этапа. Возмоные значения: unknown, ringing, talking, ended>", "to": "<Номер, на который пришёл звонок>", "to_local": "<Является ли локальным номер принимающего: true/false", "trunk": "<Внешний номер, на который поступил звонок>", "type": "<Направление звонка. Принимает значения: 1 - внутренний; 2 - входящий; 3 - исходящий>", "type_code": "<Направление звонка. Принимает значения: local - внутренний, incoming - входящий, outgoing - исходящий>", "was_answered": "<Является ли звонок отвеченным: true/false>" } ``` **Пример** (входящий неотвеченный разговор с номера 89123456789 на 123 через транк 3432723033): ``` { "answered_at": null, "channel_id": "1175429532.4512", "ended_at": null, "from": "89123456789", "from_local": false, "id": "1175429532.4512", "parent_channel_id": "1175429532.4511", "started_at": "2019-04-01 12:05:25", "state": 1, "state_code": "ringing", "to": "123", "to_local": true, "trunk": "3432723033", "type": 2, "type_code": "incoming", "was_answered": false } ``` # Полезные кастомизации itgrix_bx (Битрикс24) [С историей] (/custom_bx/custom_bx_history) Дополнительные кастомизации описаны в разделе [Полезные кастомизации (любая CRM)](/custom_common). ## Обновление кастомизаций, начиная с версии 3.0.0 [#obnovlenie-kastomizacii-nachinaya-s-versii-3.0.0] Звонки регистрируются через API телефонии Битрикс24, что позволяет [использовать сквозную аналитику.](/settings/additional/end-to-end-analytics) По сравнению [кастомизациями в версиях 2.15.0–2.15.6](/custom_bx/custom-before-3.0): * Выделена кастомизация `need_registration`, в которой можно реализовать черные и белые списки. * Разделена кастомизация `process_phone_number` на два метода: * `process_user_phone` – кастомизация внутреннего номера пользователя; * `process_client_phone` – кастомизация номера клиента. * Кастомизация `get_updated_entity_fields` переименована в `customize_entity`. * Кастомизация `get_updated_activity_fields` переименована в `customize_activity`. Начиная с версии [3.13.0](/changelog-bx#id-3.13.0) из входных данных ряда кастомизаций были **удалены устаревшие поля**, дублирующие информацию из `call_full`: `call` и `conversation`. Если ваши кастомизации всё ещё обращаются к полям `call` или `conversation` в корне входного JSON-объекта, обновите код, используя соответствующие данные внутри объекта `call_full`. ## Схема обработки звонка модулем интеграции Itgrix [#skhema-obrabotki-zvonka-modulem-integracii-itgrix] (Схема для версий начиная с [3.10.0](/changelog-bx#3.10.0))
“Сущность” – это контакт или лид.\ Запрос разговора – это начало звонка на внутреннем номере.\ В одном звонке может быть несколько разговоров (в случае перевода звонка). ## **Краткое описание кастомизаций** [#kratkoe-opisanie-kastomizacii] | № | Файл кастомизации
(по алфавиту)
| Описание | | -- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | [customize\_activity.php](/custom_bx/custom_bx_history#1-customize_activity) | Обновление полей дела (в конце звонка). | | 2 | [customize\_entity.php](/custom_bx/custom_bx_history#2-customize_entity) | Обновление полей сущности (в конце звонка). | | 3 | [need\_registration.php](/custom_bx/custom_bx_history#3-need_registration) | Нужна ли регистрация звонка?
Можно сделать черные/белые списки по внутреннему номеру/транку.
| | 4 | [process\_client\_phone.php](/custom_bx/custom_bx_history#4-process_client_phone) | Изменение номера телефона перед регистрацией в CRM:
Можно сменить формат телефонного номера (+7, 8...).
| | 5 | [process\_final\_params.php](/custom_bx/custom_bx_history#5-process_final_params) | Изменение данных завершения звонка. | | 6 | [process\_originate\_params.php](/custom_bx/custom_bx_history#6-process_originate_params) | Изменение параметров при инициализации звонка из CRM.
Можно позвонить через другой транк, через другой контекст, сменить формат номера и прочее.
| | 7 | [process\_record\_file\_path.php](/custom_bx/custom_bx_history#7-process_record_file_path) | Кастомизация пути до файла записи разговора. | | 8 | [process\_registration\_params.php](/custom_bx/custom_bx_history#8-process_registration_params) | Изменение параметров регистрации звонка. | | 9 | [process\_task\_creation\_params.php](/custom_bx/custom_bx_history#9-process_task_creation_params) | Кастомизация создания задач по пропущенным звонкам. | | 10 | [process\_user\_phone.php](/custom_bx/custom_bx_history#10-process_user_phone) | Изменение номера пользователя перед поиском пользователя в Б24. | | 11 | [customize\_autodistribution.php](/custom_bx/custom_bx_history#11-customize_autodistribution) | Изменение внутреннего номера при автораспределении входящего звонка. | | 12 | [post\_registration.php](/custom_bx/custom_bx_history#12-post_registration) | Действие после регистрации звонка. | | 13 | [customize\_show\_call\_card.php](/custom_bx/custom_bx_history#13-customize_show_call_card) | Изменение параметров отображения карточки звонка. | | 14 | [customize\_attach\_record\_url.php](/custom_bx/custom_bx_history#14-customize_attach_record_url) | Изменение параметров прикрепления записи. | | 15 | [process\_originate\_response.php](/custom_bx/custom_bx_history#15-process_originate_response) | При получении результата Click-to-Call (событие OriginateResponse) от Asterisk. Позволяет выполнить дополнительные действия при успехе/ошибке Originate. | | 16 | [customize\_recording\_query.php](/custom_bx/custom_bx_history#16-customize_recording_query) | Изменение запроса поиска записи звонка. | | 17 | [customize\_record\_conversion.php](/custom_bx/custom_bx_history#17-customize_record_conversion) | Кастомизация параметров конвертации записи звонка. | | 18 | [process\_rejected\_call\_event.php](/custom_bx/custom_bx_history#18-process_rejected_call_event) | Кастомизация игнорируемых событий звонка. | ## Входные и выходные параметры кастомизаций [#vkhodnye-i-vykhodnye-parametry-kastomizacii] ### 1) customize\_activity [#id-1-customize_activity] [3.10.0](/changelog-bx#3.10.0) – добавлен полный набор данных о звонке (`call_full`) и вынесена кастомизация [customize\_attach\_record\_url](/custom_bx/custom_bx_history#14-customize_attach_record_url) для прикрепления ссылки на запись звонка. [3.13.0](/changelog-bx#id-3.13.0) – удалено устаревшее поле `conversation` из корня входных данных, используйте `call_full.conversation`. Обновление полей дела в конце звонка.\ Если настроено прикрепление ссылки на запись вместо самой записи, ссылка добавляется в описание дела. **Примеры:** * [Обновление полей дела](/custom_bx/update-activity-fields) **Вход:** ```json { "activity": { "id": "", "is_new": <Всегда false>, "name": "<Название дела (из поля SUBJECT)>", "phones": [<Всегда пустой массив>], "raw": {Поля дела как в Битрикс24}, "responsible": {<Данные ответственного пользователя>}, "responsible_id": "", "type": "activity" }, "call_full": {<Полный набор данных о звонке>} } ``` Набор данных о разговоре (conversation) описан в статье [Параметры звонка (call) и разговора (conversation) в кастомизациях](/custom_common/call-conversation-parameters#parametry-razgovora-conversation).\ В объекте `raw` присутствуют только поля с непустым/ненулевым значением. **Вернуть:** ```json { "data": { "<Название поля дела в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` [Документация полей дела в REST API Битрикс24](https://apidocs.bitrix24.ru/api-reference/crm/timeline/activities/activity-base/crm-activity-fields.html) ### 2) customize\_entity [#id-2-customize_entity] [3.10.0](/changelog-bx#3.10.0) – добавлен полный набор данных о звонке (`call_full`) и обновление полей сущности стало выполняться вне зависимости от того, была ли сущность создана на этом звонке, или ранее. [3.13.0](/changelog-bx#id-3.13.0) – удалено устаревшее поле `call` из корня входных данных (остальные временно сохраняются для обратной совместимости). Обновление полей лида или контакта в конце звонка. **Примеры:** * [Обновление полей сущности](/custom_bx/update-entity-fields) **Вход:** ```json { "call_registration": {<Набор данных о регистрации звонка (сохранён для обратной совместимости)>}, "entity": {<Данные сущности>}, "entity_type": "<Тип сущности текстом, например lead, contact>", "entity_id": "", "entity_new": , "call_full": {<Полный набор данных о звонке>} } ``` Набор данных о звонке описан в статье [Параметры звонка (call) и разговора (conversation) в кастомизациях](/custom_common/call-conversation-parameters#parametry-zvonka-call).\ Формат данных сущности в поле `entity` описан в соответствующем разделе статьи [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh#dannye-sushnosti-entity). **Вернуть:** ```json { "data": { "<Название поля сущности в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` [Документация полей лида](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php)\ [Документация полей контакта](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php) ### 3) need\_registration [#id-3-need_registration] [3.0.7](/changelog-bx#3.0.7) – добавлена возможность настройки чёрного/белого списка для внутренних номеров [через веб-интерфейс модуля](/custom_common/black-white-list#nastroika-cherez-interfeis-modulya). [3.10.0](/changelog-bx#3.10.0) – добавлены параметры `call_stage` и `call_full`. Определяет, нужно ли регистрировать конкретный звонок. Можно реализовать чёрные/белые списки по внутреннему номеру, транку или более сложным условиям. **Примеры:** * [Черный/белый список для транков](/custom_common/black-white-list#chernyi-belyi-spisok-dlya-trankov) **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Набор данных о звонке и разговорах описан в статье [Параметры звонка (call) и разговора (conversation) в кастомизациях](/custom_common/call-conversation-parameters). **Вернуть:** ```json { "data": { "result": }, "state": "success" } ``` ### 4) process\_client\_phone [#id-4-process_client_phone] [3.0.0](/changelog-bx#3.0.0) – кастомизация номера разделена на две: `process_user_phone` (внутренний номер) и `process_client_phone` (номер клиента). [3.7.0](/changelog-bx#3.7.0) – добавлена [автозамена номеров](/for-admins/autoreplacement), запускается ДО выполнения кастомизации. [3.10.0](/changelog-bx#3.10.0) – добавлены параметры `call_stage` и `call_full`. Преобразование телефонных номеров клиентов перед отправкой запросов в Битрикс24. **Примеры:** * [Изменение номера телефона перед отправкой данных в CRM](/custom_common/client-phone-number) **Вход:** ```json { "phone": "<номер>", "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: call_started - начало звонка; conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка; forward - автораспределение звонка>" } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "phone": "<Кастомизированный номер>" }, "state": "success" } ``` ### 5) process\_final\_params [#id-5-process_final_params] [2.15.0](/changelog-bx#2.15.0) – чёрные/белые списки вынесены в кастомизацию [need\_registration](/custom_bx/custom_bx_history#3-need_registration). [3.0.7](/changelog-bx#3.0.7) – настройка чёрного/белого списка для внутренних номеров доступна через [веб-интерфейс модуля](/custom_common/black-white-list#nastroika-cherez-interfeis-modulya). [3.10.0](/changelog-bx#3.10.0) – добавлен полный набор данных о звонке (`call_full`). [3.13.0](/changelog-bx#id-3.13.0) – удалено устаревшее поле `call` из корня входных данных. Кастомизация параметров завершения регистрации звонка. **Примеры:** * [Разные ответственные за пропущенные за разные транки](/custom_bx/default-resp-for-trunks) **Вход:** ```json { "params": { "ADD_TO_CHAT": <[0/1] Добавить ли сообщение о звонке в бизнес чат. По умолчанию 1>, "CALL_ID": "", "DURATION": <Длительность звонка в секундах>, "STATUS_CODE": "<Статус звонка в Битрикс24>", "USER_ID": , "entity_type": "<Тип сущности текстом, например lead, contact (сохранён для обратной совместимости)>", "entity_id": "", "entity_new": , "call_full": {<Полный набор данных о звонке>}, "call_registration": {<Набор данных о регистрации звонка (сохранён для обратной совместимости)>} } } ``` Статусы звонка в Битрикс24 описаны в [статье Детальные статусы звонка](/faq/detalnye-statusy-zvonka#bitrix24).\ Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "ADD_TO_CHAT": <[0/1] Добавить ли сообщение о звонке в бизнес чат>, "CALL_ID": "", "DURATION": <Длительность звонка в секундах>, "STATUS_CODE": "<Статус звонка>", "USER_ID": }, "state": "success" } ``` [Документация параметров завершения звонка в REST API Битрикс24](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_finish.php) ### 6) process\_originate\_params [#id-6-process_originate_params] Изменение параметров при инициализации звонка из Битрикс24 (Click-to-Call). Подробное описание с примерами в статье [Изменение параметров при click-to-call](/custom_common/c2c). ### 7) process\_record\_file\_path [#id-7-process_record_file_path] [3.10.19](/changelog-bx#id-3.10.19) – таймаут выполнения кастомизации стал настраиваемым (ранее был жёстко зафиксирован в 10 секунд). [3.13.0](/changelog-bx#id-3.13.0) – конвертация записей вынесена в основную логику коннектора, кастомизация служит только для изменения пути до файла записи. Преобразование пути до файла записи разговора перед конвертацией. **Примеры:** * [Кастомизация имени файла аудиозаписи](/custom_common/filepath) ### 8) process\_registration\_params [#id-8-process_registration_params] [3.10.0](/changelog-bx#3.10.0) – добавлен полный набор данных о звонке (`call_full`), показ карточки звонка вынесен в отдельную кастомизацию `customize_show_call_card`. [3.13.0](/changelog-bx#id-3.13.0) – удалены устаревшие поля `call`, `conversation` из корня входных данных. Кастомизация параметров регистрации начала звонка. **Примеры:** * [Добавление кода города в зависимости от города оператора](/custom_bx/dobavlenie-koda-goroda-v-zavisimosti-ot-goroda-operatora) * [Изменение первого ответственного за лид/контакт](/custom_bx/first-resp-for-call) * [Создавать лид для каждого входящего звонка](/custom_bx/always-create-lead-on-incoming) **Вход:** ```json { "params": { "CALL_START_DATE": "<Дата-время начала звонка>", "CRM_CREATE": <[0/1] Создавать или нет новый лид (если номер не найден в CRM)>, "CRM_SOURCE": "", "LINE_NUMBER": "<Номер внешней линии в Битрикс24, через который совершался звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": <[0/1] Показывать ли карточку звонка при регистрации>, "TYPE": <Направление звонка: 1 - исходящий, 2 - входящий>, "USER_ID": , "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; call_ended - завершение звонка>" } } ``` Номера внешних линий в Битрикс24 (`LINE_NUMBER`) соответствуют транкам в настройках коннектора Itgrix.\ Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "CALL_START_DATE": "<Дата-время начала звонка>", "CRM_CREATE": <[0/1] Создавать или нет новый лид (если номер не найден в CRM)>, "CRM_SOURCE": "", "LINE_NUMBER": "<Номер внешней линии в Битрикс24, через который совершался звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": <[0/1] Показывать ли карточку звонка при регистрации>, "TYPE": <Направление звонка: 1 - исходящий, 2 - входящий>, "USER_ID": }, "state": "success" } ``` [Документация параметров регистрации звонка в REST API Битрикс24](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_register.php) ### 9) process\_task\_creation\_params [#id-9-process_task_creation_params] [2.15.0](/changelog-bx#2.15.0) – добавлен блок данных о разговоре (`conversation`). [3.4.0](/changelog-bx#3.4.0) – возможность настройки задач через [веб-интерфейс модуля](/settings/additional/parametry-sozdaniya-zadach). [3.10.0](/changelog-bx#3.10.0) – добавлен полный набор данных о звонке (`call_full`). [3.13.0](/changelog-bx#id-3.13.0) – удалено устаревшее поле `conversation` из корня входных данных. Кастомизация параметров создания задачи (при пропущенном входящем звонке или неотвеченном исходящем).\ Запускается только если создание задач включено в настройках коннектора. **Примеры:** * [Кастомизация задач по пропущенным звонкам](/custom_bx/task-for-missed-call) **Вход:** ```json { "fields": { "CREATED_BY": , "DEADLINE": "<Крайний срок исполнения>", "RESPONSIBLE_ID": , "TITLE": "<Заголовок задачи>", "UF_CRM_TASK": ["_. Типы сущности: лид - L контакт - C, компания - CO, дело - D. Пример: L_11201 для лида с ID 11201 >"] }, "call_full": {<Полный набор данных о звонке>} } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "fields": { "<Название поля задачи в Битрикс>": "<Значение этого поля>", ... } }, "state": "success" } ``` [Документация полей задачи в REST API Битрикс24](https://dev.1c-bitrix.ru/rest_help/tasks/fields.php) ### 10) process\_user\_phone [#id-10-process_user_phone] [3.0.0](/changelog-bx#3.0.0) – кастомизация номера разделена на две: `process_user_phone` (внутренний номер) и `process_client_phone` (номер клиента). [3.7.0](/changelog-bx#3.7.0) – добавлена [автозамена номеров](/for-admins/autoreplacement), запускается ДО выполнения кастомизации. [3.10.0](/changelog-bx#3.10.0) – добавлены параметры `call_stage` и `call_full`. Изменение номера пользователя перед поиском пользователя Битрикс24. **Примеры:** * [Несколько внутренних номеров у сотрудника](/custom_bx/neskolko-vnutrennikh-nomerov-u-sotrudnika) **Вход:** ```json { "phone": "<номер>", "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка; forward - автораспределение звонка>" } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "phone": "<кастомизированный_номер>" }, "state": "success" } ``` ### 11) customize\_autodistribution [#id-11-customize_autodistribution] Изменение внутреннего номера при автораспределении входящего звонка. **Вход:** ```json { "number": "<номер пользователя на которого распределять звонок>", "name": "<имя пользователя на которого распределять звонок>", "from": "<номер с которого пришёл звонок>", "trunk": "<номер транка>", "user": { "id": , "phones": ["<список номеров пользователя>"], "name": "<Полное имя пользователя>", "email": "", "position": "<должность пользователя>" }, "entity": { "type": "<Тип сущности текстом, например lead, contact>", "id": , "name": "<Имя сущности>", "responsible_id": }, "error": "<текст ошибки>", "request_data": {<Параметры запроса>}, "call_full": {<Полный набор данных о звонке>} } ``` **Вернуть:** ```json { "data": { "number": "<Номер пользователя, на которого распределять звонок>", "name": "<Имя пользователя, на которого распределять звонок, лимит 20 символов>" }, "state": "success" } ``` **Примечания:** * `name` – текст который появится в CallerID и будет отображен в телефоне (или софтфоне) оператора. **Должен быть не более 20 символов (ограничение Asterisk)!** * Поля `from`, `trunk`, `user`, `entity` и `error` – только для чтения и присутствуют только когда не пустые. Они будут автоматически удалены, даже если вернуть их в объекте `data`. ### 12) post\_registration [#id-12-post_registration] [3.10.0](/changelog-bx#3.10.0) – кастомизация добавлена. Действие после регистрации звонка. Может быть вызвана в разные моменты в зависимости от типа звонка: * Для звонков кликом (click-to-call, c2c) – в начале обработки стадии Запрос разговора (Conversation requested) * Пропущенные звонки на IVR – на стадии Завершение звонка (Call ended) * Для всех остальных звонков – после выполнения запроса регистрации звонка в Битрикс24 на стадии Запрос разговора (Conversation requested) **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; call_ended - завершение звонка>", } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "state": "success" } ``` ### 13) customize\_show\_call\_card [#id-13-customize_show_call_card] [3.10.0](/changelog-bx#3.10.0) – кастомизация добавлена. Изменение параметров отображения карточки звонка. **Вход:** ```json { "CALL_ID": , "USER_ID": , "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "CALL_ID": , "USER_ID": }, "state": "success" } ``` [Документация параметров показа карточки в REST API Битрикс24](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_show.php) ### 14) customize\_attach\_record\_url [#id-14-customize_attach_record_url] [3.10.0](/changelog-bx#3.10.0) – кастомизация добавлена. Кастомизация прикрепления ссылки на запись звонка. Запускается только если настроено прикрепление ссылки на запись вместо файла записи звонка. По умолчанию в описание дела записывается HTML-код аудиоплеера (тег `audio`) со ссылкой на запись звонка. **Вход:** ```json { "DESCRIPTION": "<Описание дела с аудиоплеером и ссылкой на запись звонка>", "DESCRIPTION_TYPE": <Тип содержания в виде целого числа, по умолчанию 3, т.е. HTML>, "activity": { "id": "", "is_new": <Всегда false>, "name": "<Название дела (из поля SUBJECT)>", "phones": [<Всегда пустой массив>], "raw": {Поля дела как в Битрикс24}, "responsible": {<Данные ответственного пользователя>}, "responsible_id": "", "type": "activity" }, "call_full": {<Полный набор данных о звонке>}, "record_url": "", "old_description": "<Описание дела до кастомизации>" } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ В объекте `raw` присутствуют только поля с непустым/ненулевым значением. **Вернуть:** ```json { "data": { "<Название поля дела в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` [Документация полей дела в REST API Битрикс24](https://apidocs.bitrix24.ru/api-reference/crm/timeline/activities/activity-base/crm-activity-fields.html) ### 15) process\_originate\_response [#id-15-process_originate_response] [3.13.0](/changelog-bx#id-3.13.0) – кастомизация добавлена. Кастомизация результата Click-to-Call. Запускается при получении события OriginateResponse от Asterisk после выполнения запроса Click-to-Call. Позволяет выполнить дополнительные действия при успехе/ошибке Originate. **Вход:** ```json { "originate_params": {<Параметры запроса Click-to-Call>}, "originate_response": {<Поля события AMI OriginateResponse>}, "request_id": , "call_full": {<Полный набор данных о звонке>} } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Поле `call_full` может быть пустым, если на момент получения события OriginateResponse звонок отсутствует в кэше коннектора. **Вернуть:** ```json { "state": "success" } ``` ### 16) customize\_recording\_query [#id-16-customize_recording_query] [3.13.0](/changelog-bx#id-3.13.0) – кастомизация добавлена. Кастомизация запроса поиска записи звонка. Запускается перед поиском записи звонка в таблице CDR. **Вход:** ```json { "query": "", "callID": "", "from_variants": ["<Список вариантов номера источника звонка>"], "to_variants": ["<Список вариантов номера получателя звонка>"], "call_full": {<Полный набор данных о звонке>} } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Запрос поиска записи звонка можно отменить, вернув пустой объект `query`. **Вернуть:** ```json { "data": { "query": "" }, "state": "success" } ``` ### 17) customize\_record\_conversion [#id-17-customize_record_conversion] [3.13.0](/changelog-bx#id-3.13.0) – кастомизация добавлена. Кастомизация параметров конвертации записи. Запускается перед конвертацией записи в mp3. **Вход:** ```json { "IN": "<Путь к исходному файлу записи>", "OUT": "<Путь к конечному файлу записи>", "recording_converter_path": "<Путь программы для конвертации записи>", "recording_converter_args": "<Аргументы запуска программы конвертации записи>", "recording_converter_timeout_msec": <Таймаут выполнения конвертации записи в миллисекундах>, "overwrite_cdr_recordingfile": , "initial_cdr_recordingfile": "<Исходный путь к записи в таблице CDR>", "updated_cdr_recordingfile": "<Конечный путь к записи в таблице CDR>", "delete_original_recordings": , "call_full": {<Полный набор данных о звонке>} } ``` Описание блока `call_full` см. в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Поле `call_full` может быть пустым, если на момент выполнения конвертации записи звонок отсутствует в кэше коннектора.\ Выполнение конвертации записи можно отменить, вернув пустой объект `data`. Входные значения соответствуют [настройкам конвертации записи](/blog/mp3-conversion). **Вернуть:** ```json { "data": { "IN": "<Путь к исходному файлу записи>", "OUT": "<Путь к конечному файлу записи>", "recording_converter_path": "<Путь программы для конвертации записи>", "recording_converter_args": "<Аргументы запуска программы конвертации записи>", "recording_converter_timeout_msec": <Таймаут выполнения конвертации записи в миллисекундах>, "overwrite_cdr_recordingfile": , "initial_cdr_recordingfile": "<Исходный путь к записи в таблице CDR>", "updated_cdr_recordingfile": "<Конечный путь к записи в таблице CDR>", "delete_original_recordings": }, "state": "success" } ``` **Примечание:** Поля `initial_cdr_recordingfile` и `updated_cdr_recordingfile` используются для формирования SQL-запроса обновления записи в таблице CDR:\ `UPDATE CDR SET CDR.recordingfile = '' WHERE CDR.recordingfile = ''` ### 18) process\_rejected\_call\_event [#id-18-process_rejected_call_event] [3.13.0](/changelog-bx#id-3.13.0) – кастомизация добавлена. Кастомизация игнорируемых событий звонка. Запускается когда событие звонка намеренно не обрабатывается стандартной логикой, например при звонке между сотрудниками или звонке неопределенного типа. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: call_started - начало звонка; conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>", "rejection_reason": "<Причина отклонения события звонка>" } ``` Возможные значения поля `rejection_reason`: * `"no active conversation"` - событие разговора без указания ID разговора; * `"local conversation"` - событие разговора между сотрудниками; * `"unknown conversation type"` - событие разговора неопределенного типа; * `"self conversation type"` - событие разговора с совпадающими номерами `from` и `to`; * `"conversation processed earlier"` - событие разговора уже обработано ранее; * `"invalid event name"` - неизвестное событие звонка; * `"local call"` - звонок между сотрудниками; * `"unknown call type"` - звонок неопределенного типа; * `"self call type"` - звонок с совпадающими номерами `from` и `to`; * `"call processed earlier"` - звонок уже обработан ранее. **Вернуть:** ```json { "state": "success" } ``` # Разные ответственные по умолчанию за разные транки (/custom_bx/default-resp-for-trunks) По умолчанию модуль позволяет задать только одного пользователя, который будет ответственным за полученные пропущенные звонки. Однако это поведение можно кастомизировать и назначать ответственных в зависимости от номера телефона, на который пришел звонок (транк). **Сценарий:** за пропущенные звонки нужно указать разных ответственных пользователей в зависимости от транка +73432723033 – сотрудник с id = 5; 88007654321 – сотрудник с id = 456. Для этого на странице с настройками включаем опцию **"параметры завершения разговора"** . Изменяем код в файле кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_final\_params.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** ```php // Указываем ID пользователя в Битрикс, // который будет ответственным за пропущенные на транк $trunkToID = array( '+73432723033' => 5, '88007654321' => 456 ); if ($params['STATUS_CODE'] == 304 // неотвеченный && array_key_exists($params['call']['trunk'], $trunkToID)) { $params['USER_ID'] = $trunkToID[$params['call']['trunk']]; } return array( 'state' => 'success', 'data' => $params, ); ``` Подробно параметры [описаны в статье](/custom_bx#5-process_final_params). # Добавление кода города в зависимости от города оператора (/custom_bx/dobavlenie-koda-goroda-v-zavisimosti-ot-goroda-operatora) Сценарий: филиалы в разных городах. Сотрудник из города А с номером 102 на стационарном телефоне набирает номер клиента без кода города (шестизначный 224466). Номер короткий, но в CRM хочется видеть с кодом города (1234 для А и 4321 для Б). 1\. Включить кастомизатор. 2\. Добавляем код в файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_registration\_params.php.** Для версий от 2.15.0 и ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** ```php $cityCodeToUserList = array( '1234' => array('102', '103'), // Код города => список сотрудников для города A '4321' => array('788', '789'), // Код города => список сотрудников для города B ); // Считаем, что короткий номер - 6 цифр if (strlen($params['PHONE_NUMBER']) == 6) { // Получаем внутренний номер, исходя из направления звонка (входящий/исходящий) $userNumber = $params['conversation'][ $params['TYPE'] == 2 ? 'from' : 'to' ]; // Перебираем города для поиска сотрудника, чтобы получить код // Если сотрудник не будет найден, номер не изменится foreach ($cityCodeToUserList as $code => $users) { if (in_array($userNumber, $users)) { $params['PHONE_NUMBER'] = $code . $params['PHONE_NUMBER']; } } } return array( 'state' => 'success', 'data' => $params, ); ``` Параметры [описаны в статье](/custom_bx#8-process_registration_params). # Первый ответственный за новый лид/контакт (/custom_bx/first-resp-for-call) В версиях модуля больше 3.0 по умолчанию модуль отправляет запрос на регистрацию звонка на первого пользователя, которому пришел звонок. Если у вас телефония настроена, так чтобы звонки от новых клиентов приходят сразу на группу пользователей, то все новые лиды будут создавать на одного пользователя, который первым стоит в очереди звонка.\ Это может сбивать других пользователей: коллега уже ответственный, хотя звонящий клиент новый. Такое поведение коннектора можно поправить, если задать регистрацию новых звонков на одного выделенного пользователя, например руководителя либо пользователя не связанного с отделом.\ При ответе на звонок ответственность за нового лида поменяется на ответившего сотрудника.\ При завершении звонка ответственным за звонок будет тот, кто говорил последним. **Сценарий:** назначаем первого ответственного при регистрации звонка пользователя с id = 574. 1. Для этого на странице с настройками модуля включаем опцию **"параметры регистрации разговора"** . 2\. Изменяем код в файле кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_registration\_params.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** ```php // Указываем в параметрах id ответственного по умолчанию $params['USER_ID'] = '574'; return array( 'state' => 'success', 'data' => $params, ); ``` Подробно параметры данного метода [описаны в статье](/custom_bx#4-process_registration_params). Также логику назначения первого ответственного можно изменять в меню 'Бизнес-логика' В меню 'Настройка транков' можно назначить каждому транку своего ответственного по умолчанию # Полезные кастомизации itgrix_bx (Битрикс24) (/custom_bx) **Данная статья актуальна для версий коннектора 3.13.\*** Для предыдущих версий можно воспользоваться "исторической" версией статьи: [Полезные кастомизации itgrix\_bx (Битрикс24) \[С историей\]](/custom_bx/custom_bx_history) Дополнительные кастомизации описаны в разделе [Полезные кастомизации (любая CRM)](/custom_common). ## Схема обработки звонка модулем интеграции Itgrix [#skhema-obrabotki-zvonka-modulem-integracii-itgrix]
"Сущность" в логике коннектора – это контакт или лид.\ Запрос разговора – это начало дозвона на внутреннем номере.\ В одном звонке может быть несколько разговоров (в случае перевода звонка, группы, очереди и т.п.). ## Отмена запросов [#otmena-zaprosov] Кастомизации, запускаемые непосредственно перед выполнением запросов к CRM, позволяют отменить отправку соответствующего запроса.\ Для этого нужно вернуть пустой объект `data`. Пример данных для отмены запроса: ```json { "data": {}, "state": "success" } ``` Кроме значения `{}`, также допустимы варианты `[]` и `null`. Отмена запроса отмечается в логе текстом `"cancelled by customization"` и не считается ошибкой, но отсутствие данных, которые ожидалось получить в ответе на запрос, может привести к ошибкам последующих шагов обработки звонка и должно быть учтено в остальных кастомизациях. ## **Краткое описание кастомизаций** [#kratkoe-opisanie-kastomizacii] | № | Файл кастомизации
(по алфавиту)
| Описание | | -- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | [customize\_activity.php](/custom_bx#1-customize_activity) | Обновление полей дела (в конце звонка). | | 2 | [customize\_entity.php](/custom_bx#2-customize_entity) | Обновление полей сущности (в конце звонка). | | 3 | [need\_registration.php](/custom_bx#3-need_registration) | Нужна ли регистрация звонка?
Можно сделать черные/белые списки по внутреннему номеру/транку. | | 4 | [process\_client\_phone.php](/custom_bx#4-process_client_phone) | Изменение номера телефона перед регистрацией в CRM:
Можно сменить формат телефонного номера (+7, 8...). | | 5 | [process\_final\_params.php](/custom_bx#5-process_final_params) | Изменение данных завершения звонка. | | 6 | [process\_originate\_params.php](/custom_bx#6-process_originate_params) | Изменение параметров при инициализации звонка из CRM.
Можно позвонить через другой транк, через другой контекст, сменить формат номера и прочее. | | 7 | [process\_record\_file\_path.php](/custom_bx#7-process_record_file_path) | Кастомизация пути до файла записи разговора. | | 8 | [process\_registration\_params.php](/custom_bx#8-process_registration_params) | Изменение параметров регистрации звонка. | | 9 | [process\_task\_creation\_params.php](/custom_bx#9-process_task_creation_params) | Кастомизация создания задач по пропущенным звонкам. | | 10 | [process\_user\_phone.php](/custom_bx#10-process_user_phone) | Изменение номера пользователя перед поиском пользователя в Б24. | | 11 | [customize\_autodistribution.php](/custom_bx#11-customize_autodistribution) | Изменение внутреннего номера при автораспределении входящего звонка. | | 12 | [post\_registration.php](/custom_bx#12-post_registration) | Действие после регистрации звонка. | | 13 | [customize\_show\_call\_card.php](/custom_bx#13-customize_show_call_card) | Изменение параметров отображения карточки звонка. | | 14 | [customize\_attach\_record\_url.php](/custom_bx#14-customize_attach_record_url) | Изменение параметров прикрепления записи. | | 15 | [process\_originate\_response.php](/custom_bx#15-process_originate_response) | При получении результата Click-to-Call (событие OriginateResponse) от Asterisk. Позволяет выполнить дополнительные действия при успехе/ошибке Originate. | | 16 | [customize\_recording\_query.php](/custom_bx#16-customize_recording_query) | Изменение запроса поиска записи звонка. | | 17 | [customize\_record\_conversion.php](/custom_bx#17-customize_record_conversion) | Кастомизация параметров конвертации записи звонка. | | 18 | [process\_rejected\_call\_event.php](/custom_bx#18-process_rejected_call_event) | Кастомизация для игнорируемых событий звонка, которые намеренно не обрабатываются стандартной логикой. | ## Входные и выходные параметры кастомизаций [#vkhodnye-i-vykhodnye-parametry-kastomizacii] ### **1)** customize\_activity [#id-1-customize_activity] Обновление полей дела в конце звонка. **Примеры:** [Обновление полей дела](/custom_bx/update-activity-fields). **Вход:** ```json { "activity": { "id": "", "is_new": <Всегда false>, "name": "<Название дела (из поля SUBJECT)>", "phones": [<Всегда пустой массив>], "raw": {Поля дела как в Битрикс24}, "responsible": {<Данные ответственного пользователя>}, "responsible_id": "", "type": "activity" }, "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). В объекте `raw` присутствуют только поля с непустым/ненулевым значением. **Вернуть:** ```json { "data": { "<Название поля дела в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` Подробное описание полей **дела** в [**документации REST API Битрикс24**](https://apidocs.bitrix24.ru/api-reference/crm/timeline/activities/activity-base/crm-activity-fields.html)**.**\ Запрос обновления дела не будет выполнен, если вернуть пустой объект `data`. ### **2) customize\_entity** [#id-2-customize_entity] **Примеры:** [Обновление полей сущности](/custom_bx/update-entity-fields). **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, <Остальные поля временно сохранены для обратной совместимости: call_registration, entity, entity_type, entity_id, entity_new> } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). Часть полей в корне входных данных кастомизации считаются устаревшими и будут убраны в будущих версиях коннектора.\ Вместо них рекомендуется использовать актуальные поля внутри объекта `call_full`: * `call_registration` → `call_full.registration` * `entity` → `call_full.entity` * `entity_type` → `call_full.entity.type` * `entity_id` → `call_full.entity.id` * `entity_new` → `call_full.entity.is_new` **Вернуть:** ```json { "data": { "<Название поля сущности в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` Подробное описание полей **лида** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php/)**.**\ Подробное описание полей **контакта** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php/)**.**\ Запрос обновления сущности не будет выполнен, если вернуть пустой объект `data`. ### **3) need\_registration** [#id-3-need_registration] Используется для реализации функционала чёрных/белых списков по номерам, транкам и прочим более сложным условиям. Базовая настройка черного/белого списка для внутренних номеров и транков доступна [из админки (интерфейса настройки) коннектора](/custom_common/black-white-list#nastroika-cherez-interfeis-modulya). **Примеры:** [Черный/белый список для транков](/custom_common/black-white-list#chernyi-belyi-spisok-dlya-trankov)*.* **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "result": }, "state": "success" } ``` ### **4) process\_client\_phone** [#id-4-process_client_phone] Преобразование телефонных номеров клиентов перед отправкой запросов в Битрикс24. Доступна [автозамена номеров](/for-admins/autoreplacement), она запускается ДО выполнения кастомизации. **Примеры** в статье [Изменение номера телефона перед отправкой данных в CRM](/custom_common/client-phone-number). **Вход:** ```json { "phone": "<номер>", "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: call_started - начало звонка; conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка; forward - автораспределение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "phone": “<Кастомизированный номер>” }, "state": "success" } ``` ### **5) process\_final\_params** [#id-5-process_final_params] Кастомизация параметров завершения регистрации звонка. **Примеры:** [Разные ответственные за пропущенные за разные транки](/custom_bx/default-resp-for-trunks). **Вход:** ```json { "ADD_TO_CHAT": <[0/1] Добавить ли сообщение о звонке в бизнес чат. По умолчанию 1>, "CALL_ID": "", "DURATION": <Длительность звонка в секундах>, "STATUS_CODE": "<Статус звонка в Битрикс24>", "USER_ID": , "call_full": {<Полный набор данных о звонке>}, <Остальные поля временно сохранены для обратной совместимости: call_registration, entity, entity_type, entity_id, entity_new> } ``` Статусы звонка в Битрикс24 описаны в [статье Детальные статусы звонка](/faq/detalnye-statusy-zvonka#bitrix24). Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). Часть полей в корне входных данных кастомизации считаются устаревшими и будут убраны в будущих версиях коннектора.\ Вместо них рекомендуется использовать актуальные поля внутри объекта `call_full`: * `call_registration` → `call_full.registration` * `entity` → `call_full.entity` * `entity_type` → `call_full.entity.type` * `entity_id` → `call_full.entity.id` * `entity_new` → `call_full.entity.is_new` **Вернуть:** ```json { "data": { "ADD_TO_CHAT": <[0/1] Добавить ли сообщение о звонке в бизнес чат>, "CALL_ID": "", "DURATION": <Длительность звонка в секундах>, "STATUS_CODE": "<Статус звонка>", "USER_ID": }, "state": "success" } ``` Подробное описание параметров **завершения звонка** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_finish.php)**.**\ Запрос завершения регистрации звонка можно отменить, вернув пустой объект `data`. ### **6) process\_originate\_params** [#id-6-process_originate_params] Изменение параметров при инициализации звонка из Битрикс24. Подробное описание с примерами в статье [Изменение параметров при click-to-call](/custom_common/c2c). ### **7) process\_record\_file\_path** [#id-7-process_record_file_path] Преобразование пути до файла записи разговора. Подробное описание с примерами в статье [Кастомизация имени файла аудиозаписи](/custom_common/filepath). В версиях Itgrix\_bx ниже 3.13.0 эта кастомизация использовалась для конвертации файлов записей разговоров в формат mp3 перед отправкой в Битрикс24. Начиная с версии 3.13.0, конвертация записей выполняется [основной логикой коннектора](/blog/mp3-conversion), а кастомизация process\_record\_file\_path служит только для изменения пути до файла записи перед конвертацией. ### **8) process\_registration\_params** [#id-8-process_registration_params] Используется для кастомизации параметров регистрации начала звонка. **Примеры:** * [Добавление кода города в зависимости от города оператора](/custom_bx/dobavlenie-koda-goroda-v-zavisimosti-ot-goroda-operatora) * [Изменение первого ответственного за лид/контакт](/custom_bx/first-resp-for-call) * [Создавать лид для каждого входящего звонка](/custom_bx/always-create-lead-on-incoming) **Вход:** ```json { "CALL_START_DATE": "<Дата-время начала звонка>", "CRM_CREATE": <[0/1] Создавать или нет новый лид (если номер не найден в CRM)>, "CRM_SOURCE": "", "LINE_NUMBER": "<Номер внешней линии в Битрикс24, через который совершался звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": <[0/1] Показывать ли карточку звонка при регистрации>, "TYPE": <Направление звонка: 1 - исходящий, 2 - входящий>, "USER_ID": , "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; call_ended - завершение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). Номера внешних линий в Битрикс24 (`LINE_NUMBER`) соответствуют транкам в настройках коннектора Itgrix. Коннектор регистрирует номера транков как внешние линии в Битрикс24 при запуске, при этом каждой линии можно задать название в настройках. Показ карточки звонка вынесен в отдельный запрос, и кастомизируется отдельной кастомизацией [customize\_show\_call\_card](/custom_bx#13-customize_show_call_card), поэтому **параметр `SHOW` всегда равен `0`.** Это позволяет настроить момент показа карточки звонка отдельно от регистрации звонка: при дозвоне или при ответе. **Вернуть:** ```json { "data": { "CALL_START_DATE": "<Дата-время начала звонка>", "CRM_CREATE": <[0/1] Создавать или нет новый лид (если номер не найден в CRM)>, "CRM_SOURCE": "", "LINE_NUMBER": "<Номер внешней линии в Битрикс24, через который совершался звонок>", "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>", "SHOW": <[0/1] Показывать ли карточку звонка при регистрации>, "TYPE": <Направление звонка: 1 - исходящий, 2 - входящий>, "USER_ID": }, "state": "success" } ``` Подробное описание параметров **регистрации звонка** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_register.php)**.**\ Запрос регистрации можно отменить, вернув пустой объект `data`. ### **9) process\_task\_creation\_params** [#id-9-process_task_creation_params] Кастомизация параметров создания задачи (при пропущенном входящем звонке или неотвеченном исходящем). Данная кастомизация работает, только если создание задач включено в настройках коннектора: [Настройка задачи по пропущенному через админку](/settings/additional/parametry-sozdaniya-zadach). При этом сначала применяются настройки, описанные в статье, а затем выполняется данная кастомизация. **Пример:** [Кастомизация задач по пропущенным звонкам](/custom_bx/task-for-missed-call) (начиная с версии [3.4.0](/changelog-bx#3.4.0) это можно [делать через веб-интерфейс настройки модуля](/settings/additional/parametry-sozdaniya-zadach)). **Вход:** ```json { "fields": { "CREATED_BY": , "DEADLINE": "<Крайний срок исполнения>", "RESPONSIBLE_ID": , "TITLE": "<Заголовок задачи>", "UF_CRM_TASK": ["_. Типы сущности: лид - L контакт - C, компания - CO, дело - D. Пример: L_11201 для лида с ID 11201 >"] }, "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "fields": { "<Название поля задачи в Битрикс>": "<Значение этого поля>" ... } }, "state": "success" } ``` Подробное описание полей **задачи** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/tasks/fields.php)**.**\ Запрос создания задачи можно отменить, вернув пустой объект `data`. ### **10) process\_user\_phone** [#id-10-process_user_phone] Изменение номера пользователя перед поиском пользователя Битрикс24. Доступна [автозамена номеров](/for-admins/autoreplacement), она запускается ДО выполнения кастомизации. **Пример:** [Несколько внутренних номеров у сотрудника](/custom_bx/neskolko-vnutrennikh-nomerov-u-sotrudnika). **Вход:** ```json { "phone": "<номер>", "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка; forward - автораспределение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "phone": "<кастомизированный_номер>" }, "state": "success" } ``` ### **11) customize\_autodistribution** [#id-11-customize_autodistribution] **Вход:** ```json { "number": "<номер пользователя, на которого распределять звонок>", "name": "<имя пользователя, на которого распределять звонок>", "from": "<номер, с которого пришёл звонок>", "trunk": "<номер транка>", "user": { "id": , "phones": ["<список номеров пользователя>"], "name": "<Полное имя пользователя>", "email": "", "position": "<должность пользователя>" }, "entity": { "type": "<Тип сущности текстом, например lead, contact>", "id": , "name": "<Имя сущности>", "responsible_id": }, "request_data": {<Параметры запроса>}, "call_full": {<Полный набор данных о звонке>}, "error": "<текст ошибки>" } ``` **Вернуть:** ```json { "data": { "number": "<Номер пользователя, на которого распределять звонок>", "name": "<Имя пользователя, на которого распределять звонок, лимит 20 символов>" }, "state": "success" } ``` `name` - текст, который появится в CallerID и будет отображен в телефоне (или софтфоне) оператора. **Должен быть не более 20 символов (ограничение Asterisk)!** Поля `from`, `user`, `entity` и `error` - только для чтения и присутствуют только когда не пустые. Они будут автоматически удалены, даже если вернуть их в объекте `data`. ### 12) post\_registration [#id-12-post_registration] Данная кастомизация дает возможность выполнить какие-либо действия после регистрации звонка. Может быть вызвана в разные моменты в зависимости от типа звонка: * Для звонков кликом (click-to-call, c2c) кастомизация будет вызвана в начале обработки стадии Запрос разговора (Conversation requested). При звонках кликом Битрикс24 сам регистрирует звонок в момент клика и передает данные о регистрации коннектору, т.е. ещё до инициализации звонка в Asterisk. Поэтому звонки кликом коннектор сам НЕ регистрирует, а только заканчивает, как и все остальные звонки. * Пропущенные звонки на IVR регистрируются и завершаются на стадии Завершение звонка (Call ended). * Для всех остальных звонков кастомизация будет вызвана после выполнения запроса регистрации звонка в Битрикс24 на стадии Запрос разговора (Conversation requested). **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; call_ended - завершение звонка>", } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** Нужно вернуть только `state`, остальное игнорируется: ```json { "state": "success" } ``` ### 13) customize\_show\_call\_card [#id-13-customize_show_call_card] Используется для кастомизации параметров отображения карточки звонка. **Вход:** ```json { "CALL_ID": , "USER_ID": , "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: conversation_requested - запрос разговора; conversation_accepted - ответ; conversation_ended - завершение разговора; call_ended - завершение звонка>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). **Вернуть:** ```json { "data": { "CALL_ID": , "USER_ID": }, "state": "success" } ``` Подробное описание параметров **показа карточки** в [**документации REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_show.php)**.**\ Запрос показа карточки звонка можно отменить, вернув пустой объект `data`. ### 14) customize\_attach\_record\_url [#id-14-customize_attach_record_url] Кастомизация прикрепления ссылки на запись звонка. Запускается только если настроено прикрепление ссылки на запись вместо файла записи звонка. По умолчанию в описание дела записывается HTML-код аудиоплеера (тег `audio`) со ссылкой на запись звонка. **Вход:** ```json { "DESCRIPTION": "<Описание дела с аудиоплеером и ссылкой на запись звонка>", "DESCRIPTION_TYPE": <Тип содержания в виде целого числа, по умолчанию 3, т.е. HTML>, "activity": { "id": "", "is_new": <Всегда false>, "name": "<Название дела (из поля SUBJECT)>", "phones": [<Всегда пустой массив>], "raw": {Поля дела как в Битрикс24}, "responsible": {<Данные ответственного пользователя>}, "responsible_id": "", "type": "activity" }, "call_full": {<Полный набор данных о звонке>}, "record_url": "", "old_description": "<Описание дела до кастомизации>" } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh). В объекте `raw` присутствуют только поля с непустым/ненулевым значением. **Вернуть:** ```json { "data": { "<Название поля дела в Битрикс>": "<Значение этого поля>", ... }, "state": "success" } ``` Подробное описание полей **дела** в [**документации REST API Битрикс24**](https://apidocs.bitrix24.ru/api-reference/crm/timeline/activities/activity-base/crm-activity-fields.html)**.**\ Запрос обновления дела не будет выполнен, если вернуть пустой объект `data`. ### 15) process\_originate\_response [#id-15-process_originate_response] Кастомизация результата Click-to-Call. Запускается при получении события OriginateResponse от Asterisk после выполнения запроса Click-to-Call. Позволяет выполнить дополнительные действия при успехе/ошибке Originate. **Вход:** ```json { "originate_params": {<Параметры запроса Click-to-Call>}, "originate_response": {<Поля события AMI OriginateResponse>}, "request_id": , "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Поле `call_full` может быть пустым, если на момент получения события OriginateResponse звонок отсутствует в кэше коннектора. **Вернуть:** ```json { "state": "success" } ``` ### 16) customize\_recording\_query [#id-16-customize_recording_query] Кастомизация запроса поиска записи звонка. Запускается перед поиском записи звонка в таблице CDR. Позволяет модифицировать запрос поиска. **Вход:** ```json { "query": "", "callID": "", "from_variants": ["<Список вариантов номера источника звонка>"], "to_variants": ["<Список вариантов номера получателя звонка>"], "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Запрос поиска записи звонка можно отменить, вернув пустой объект `query`. **Вернуть:** ```json { "data": { "query": "" }, "state": "success" } ``` ### 17) customize\_record\_conversion [#id-17-customize_record_conversion] Кастомизация параметров конвертации записи. Запускается перед конвертацией записи в mp3. Позволяет изменить настройки конвертации записи для данного звонка. **Вход:** ```json { "IN": "<Путь к исходному файлу записи>", "OUT": "<Путь к конечному файлу записи>", "recording_converter_path": "<Путь программы для конвертации записи>", "recording_converter_args": "<Аргументы запуска программы конвертации записи>", "recording_converter_timeout_msec": <Таймаут выполнения конвертации записи в миллисекундах>, "overwrite_cdr_recordingfile": , "initial_cdr_recordingfile": "<Исходный путь к записи в таблице CDR>", "updated_cdr_recordingfile": "<Конечный путь к записи в таблице CDR>", "delete_original_recordings": , "call_full": {<Полный набор данных о звонке>} } ``` Полный набор данных о звонке описан в статье [Данные о звонке (call\_full) в кастомизациях](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh).\ Поле `call_full` может быть пустым, если на момент выполнения конвертации записи звонок отсутствует в кэше коннектора.\ Выполнение конвертации записи можно отменить, вернув пустой объект `data`. Входные значения соответствуют [настройкам конвертации записи](/blog/mp3-conversion). **Вернуть:** ```json { "data": { "IN": "<Путь к исходному файлу записи>", "OUT": "<Путь к конечному файлу записи>", "recording_converter_path": "<Путь программы для конвертации записи>", "recording_converter_args": "<Аргументы запуска программы конвертации записи>", "recording_converter_timeout_msec": <Таймаут выполнения конвертации записи в миллисекундах>, "overwrite_cdr_recordingfile": , "initial_cdr_recordingfile": "<Исходный путь к записи в таблице CDR>", "updated_cdr_recordingfile": "<Конечный путь к записи в таблице CDR>", "delete_original_recordings": }, "state": "success" } ``` Поля `initial_cdr_recordingfile` и `updated_cdr_recordingfile` используются для формирования SQL-запроса обновления записи в таблице CDR следующего вида:\ `UPDATE CDR SET CDR.recordingfile = '' WHERE CDR.recordingfile = ''` ### 18) process\_rejected\_call\_event [#id-18-process_rejected_call_event] Кастомизация игнорируемых событий звонка. Запускается когда событие звонка намеренно не обрабатывается стандартной логикой, например при звонке между сотрудниками или звонке неопределенного типа. **Вход:** ```json { "call_full": {<Полный набор данных о звонке>}, "call_stage": "<Стадия звонка. Для данной кастомизации один из вариантов: "call_started" - начало звонка; "conversation_requested" - запрос разговора; "conversation_accepted" - ответ; "conversation_ended" - завершение разговора; "call_ended" - завершение звонка>", "rejection_reason": "<Причина отклонения события звонка>" } ``` Возможные значения поля `rejection_reason`: * `"no active conversation"` - событие разговора без указания ID разговора; * `"local conversation"` - событие разговора между сотрудниками; * `"unknown conversation type"` - событие разговора неопределенного типа; * `"self conversation type"` - событие разговора с совпадающими номерами `from` и `to`; * `"conversation processed earlier"` - событие разговора уже обработано ранее; * `"invalid event name"` - неизвестное событие звонка; * `"local call"` - звонок между сотрудниками; * `"unknown call type"` - звонок неопределенного типа; * `"self call type"` - звонок с совпадающими номерами `from` и `to`; * `"call processed earlier"` - звонок уже обработан ранее. **Вернуть:** ```json { "state": "success" } ``` # Несколько внутренних номеров у сотрудника (/custom_bx/neskolko-vnutrennikh-nomerov-u-sotrudnika) В данной статье рассмотрена ситуация когда у одного сотрудника есть несколько внутренних телефонов. Так как в Битрикс24 у сотрудника есть только одно поле Внутренний номер, а в внутренних номеров бывает несколько - ниже приведен пример кода, который позволяет назначить соответствие одному внутреннему номеру еще один.\ \ \&#xNAN;*Примечание: данный скрипт позволяет использовать несколько внутренних номеров при поиске сотрудника в CRM, на звонки кликами(click2call) данный скрипт не распространяется - при звонке кликом или через номеронабиратель в CRM вызов придет на внутренний номер, который указан в профиле сотрудника.*\ \ В файл кастомизации нужно добавить представленный ниже код. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_user\_phone.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** В примере ниже описано соответствие внутренним трехзначным номерам - дополнительных четырехзначных.\ 212(внутренний сотрудника в Б24) - 1212(дополнительный) ```php $phone = $params['phone']; switch ($phone) { case '1212': case '212': $phone = '212'; break; case '1101': case '101': $phone = '101'; break; case '1111': case '111': $phone = '111'; break; } return array( 'state' => 'success', 'data' => array( 'phone' => $phone, ), ); ``` # Показ карточки звонка сотрудникам из списка (/custom_bx/pokaz-kartochki-zvonka-sotrudnikam-iz-spiska) Рассмотрим случай когда нужно показывать карточку звонка в CRM не всем сотрудникам, а только определенным. Для этого в кастомизации можно настроить список по id номерам сотрудников из Битрикс24. Пример кода кастомизации. В коде нужно добавить в список $allowedUserIds id номера сотрудников для которых нужно показывать карточку звонка, id сотрудника можно узнать зайдя в профиль в Битрикс24, в адресной строке браузера. Код нужно добавить в файл `/opt/itgrix_bx/customizer/actions/customize_show_call_card.php`, и включить кастомизацию в настройках модуля в админке - **Настройки - Модуль - Кастомизация - параметров отображения карточки звонка** ```php 'success', 'data' => $params, ]; } // Скрываем карточку return []; ``` # Распределение ответственных по пропущенным звонкам (/custom_bx/responsible-missed-call) Ответственным за пропущенные звонки часто сложно назначить конкретного сотрудника, так как звонок мог прийти на группу номеров или по очереди на разные номера и группы. По этой причине есть три варианта, как выбрать ответственным сотрудника. 0 - пропущенный регистрируется на ответственного за сущность (опция по умолчанию); \ 1 - пропущенный регистрируется на пользователя из последнего разговора (у кого последнего звонил аппарат); \ 2 - пропущенный регистрируется на “пользователя по умолчанию” (который выбирается в CRM один на всю компанию). По умолчанию, если в конфиге не прописано иное, работает вариант 0 - назначается ответственный за пропущенный звонок = ответственный за сущность. \ В случае, если что-то не срабатывает (например, нет сущности или в ней нет ответственного): \ \- Если попытка получить ответственного за сущность не удалась - пробуем пользователя из последнего разговора (для данного разговора логика переключается 0→1). \ \- Если пользователя из последнего разговора получить не удалось - назначаем дефолтного пользователя (для данного разговора логика переключается 1→2). Иногда удобнее распределить пропущенные звонки на нескольких ответственных. Чтобы сделать такую доработку нужно:\ 1\. [Включить кастомизацию](/custom_common/vklyuchenie-kastomizatora), а также отметить пункт **"параметров завершения разговора".** 2\. Отредактировать файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_final\_params.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** Подробно параметры [описаны в статье](/custom_bx#5-process_final_params). Можно назначать ответственного случайно из списка id пользователей Битрикса – в примере в этом случае звонки будут распределены примерно поровну: ```php if ($params['call_full']['channel']['type'] == 'incoming' && !$params['call_full']['channel']['was_answered']) { // пропущенный входящий $assigned = array(1, 243, 57); // ID ответственных сотрудников из Битрикса $randomKey = rand(0, count($assigned) -1); $params['USER_ID'] = $assigned[$randomKey]; } return array( 'state' => 'success', 'data' => $params, ); ``` Если необходимо использовать более точное распределение, то нужно сохранять значение последнего ответственного, например, в файле: ```php if ($params['call_full']['channel']['type'] == 'incoming' && !$params['call_full']['channel']['was_answered']) { // пропущенный входящий // ID ответственных сотрудников из Битрикса $assigned = array(1, 243, 57); //файл для хранения последнего назначенного $fileAssigned = '/opt/bx24asterisk/lastAssigned.lock'; $key = file_exists($fileAssigned) ? file_get_contents($fileAssigned) : 0; if (! array_key_exists($key, $assigned)) { $key = 0; } $params['USER_ID'] = $assigned[$key]; $key++; file_put_contents($fileAssigned, count($assigned) >= $key ? 0 : $key); } return array( 'state' => 'success', 'data' => $params, ); ``` # Кастомизация задач по пропущенным звонкам (/custom_bx/task-for-missed-call) При завершении входящего звонка, если ни один из сотрудников не ответил на звонок, то в CRM создаются входящий пропущенный звонок и задача “Перезвонить по пропущенному”. По умолчанию задача ставится на ответственного за сущность (лид/контакт/компания) сотрудника (для новых лидов это будет ответственный за пропущенные из настроек модуля). Создание задач включается галочкой на странице настройки бизнес-логики в админке модуля. Image Параметры создания задачи можно кастомизировать.\ Для этого в админке (`http://:8077/config`): 1. Включаем кастомизатор. 2. Ставим галочку **"кастомизация задачи"**. 3\. Далее редактируем файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/process\_task\_creation\_params.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** Параметры кастомизации [описаны в статье](/custom_bx#9-process_task_creation_params). **Пример изменения названия задачи** (по умолчанию задача пишется по-английски): ```php $taskParams = &$params['fields']; $conversation = $params['conversation']; $taskParams['TITLE'] = 'Перезвонить по пропущенному ' . $conversation['from']; return array( 'state' => 'success', 'data' => $params, ); ``` # Убираем номера телефонов из названий сущностей (/custom_bx/ubiraem-nomera-telefonov-iz-nazvanii-sushnostei) В современных CRM-системах, таких как Битрикс24, важной задачей становится обеспечение конфиденциальности клиентских данных. Одной из острых проблем является отображение номеров телефонов клиентов в названиях сущностей, что может приводить к несанкционированному доступу к информации. Чтобы предотвратить такие ситуации, возникает необходимость скрывать номера телефонов в названиях, оставляя доступ к полной информации только тем пользователям, которым это необходимо. Для этого воспользуемся кодом ниже. \ \ Нужно привести файл /opt/itgrix\_bx/customizer/actions/post\_registration.php к виду: ```php logDebug($message); * Функции для вывода с другим уровнем логирования: logInfo, logWarn, logError. * * Запросы в Битрикс24 реализованы в классе Bitrix (lib/crm.php) * Подробности и примеры в документации Itgrix: * /custom_bx/zaprosy-v-bitriks-iz-kastomizacii * * Дла запросов в БД Asterisk предусмотрены функции (lib/Utils.php): * Utils::mysqliQuery($sql, $getResult); - запрос через php-mysqli * Utils::mysqlClcQuery($sql, $getResult); - запрос через MySQL Command-Line Client */ // Нужно вернуть только state, остальное игнорируется $this->logDebug('params: ' . json_encode($params)); $newFields = array(); function makeErrorRetval($data) { return array( 'state' => 'error', 'data' => $data, ); } if (isset($params['call_full']['registration']['created_lead_id']) && !empty($params['call_full']['registration']['created_lead_id'])) { $leadId = $params['call_full']['registration']['created_lead_id']; $this->logDebug('created_lead_id: ' . $leadId); $this->logDebug('type: ' . json_encode($params['call_full']['channel']['type'])); $wasAnswered = isset($params['call_full']['channel']['was_answered']) && $params['call_full']['channel']['was_answered']; if ($params['call_full']['channel']['type'] == 'incoming') { $type = 'Входящий '; if (!$wasAnswered) { $type .= 'пропущенный '; } } else if ($params['call_full']['channel']['type'] == 'outgoing') { $type = 'Исходящий '; if (!$wasAnswered) { $type .= 'неотвеченный '; } } $newFields = array( 'TITLE' => $type . 'звонок', //изменяем название ); $this->logDebug('newFields: ' . json_encode($newFields, JSON_UNESCAPED_UNICODE)); $updateResult = Bitrix::updateLead($leadId, $newFields, array()); if ($updateResult === false) { return makeErrorRetval(sprintf("Failed to update lead ID '%s'", $leadId)); } } else { $this->logDebug("No lead was created, do nothing"); } return array( 'state' => 'success', ); ``` # Обновление полей дела (/custom_bx/update-activity-fields) По умолчанию мы передаем в Битрикс стандартную информацию о звонке: * номер телефона клиента; * номер ответившего –> определяет того, кто станет ответственным за дело/звонок; * направление звонка (входящий/исходящий) – попадает в название дела; * источник звонка; * комментарий к новому лиду, в котором будет указано, что он создан модулем. Но часто возникают ситуации, когда требуется подкорректировать эти данные. \ Например: * записать номер телефона (транк), на который позвонил клиент, в название дела; * передать параметр автозакрытия в дело (при смене статуса пропущенные звонки закроются автоматически); * написать, что звонок пропущенный, в названии дела. По умолчанию пропущенный звонок определяется только по статусу дела “Не выполнено”, в карточке лида он будет отображаться зеленым цветом. По завершению звонка, появилась возможность изменить/обновить поля в деле CRM. Доступно с версии модуля 2.7.119. #### Как реализовать [#kak-realizovat] В веб-интерфейсе настройки модуля (`http://:8077/config`): 1. Установите галочку **"Включить кастомизацию"**. 2. Установите галочку на пункте **"полей дела"**. 3\. Отредактируйте файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/customize\_activity.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** Параметры дела, которые доступны для редактирования, [описаны в статье](/custom_bx#1-customize_activity). #### **Пример** [#primer] В название дела пишем номер клиента, направление звонка либо статус пропущенного звонка: ```php // Нужно вернуть массив [обновляемое_поле = значение] $activityFields = array(); // Пример: изменяем заголовок дела $type = 'Входящий '; $number = $params['from']; if ($params['type'] == 3) { $type = 'Исходящий '; $number = $params['to']; } if (!$params['was_answered']) { // пропущенный звонок $type .= 'пропущенный '; } $activityFields['SUBJECT'] = $number . ' - ' . $type . 'звонок'; return array( 'state' => 'success', 'data' => $activityFields ); ``` Список полей дела в [**API Битрикс24**](https://apidocs.bitrix24.ru/api-reference/crm/timeline/activities/activity-base/crm-activity-fields.html)**.** # Обновление полей сущности (/custom_bx/update-entity-fields) **Кастомизация полей сущности (лида/контакта) доступна начиная с версии 2.15.0**\ \&#xNAN;**(в предыдущих версиях была кастомизация только для лидов).** По умолчанию мы передаем в CRM стандартную информацию о звонке: * номер телефона клиента; * номер ответившего –> определяет того, кто станет ответственным за дело/звонок; * направление звонка (входящий/исходящий) – подпадает в название дела; * источник звонка. Но возникают ситуации, когда требуется подкорректировать эти данные. Например, можно: * добавить комментарий в лид/контакт; * указать в поле "дополнительно об источнике", на какой транк поступил звонок. По завершению звонка есть возможность изменить/обновить поля в сущности CRM. Для версий начиная с 3.10.0 модуль запускает эту кастомизацию на каждый звонок. #### **Как реализовать** [#kak-realizovat] В веб-интерфейсе настройки модуля (`http://:8077/config`): 1. Установите галочку **"Включить кастомизацию"**. 2. Установите галочку на пункте **"полей сущности"**. 2\. Отредактируйте файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/customize\_entity.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** Параметры сущности, которые можно изменять, [описаны в статье](/custom_bx#2-customize_entity). #### **Пример кастомизации:** [#primer-kastomizacii] Пишем в название номер клиента, направление звонка (исходящий/входящий), если он **пропущен** – дополнительно напишем это.\ И в поле "**Дополнительно об источнике**" укажем транк, на который звонили. #### С версии 3.10.0 [#s-versii-3.10.0]
```php // Для версий начиная с 3.10.0 модуль запускает эту кастомизацию на каждый звонок, обновляем поля только у новых сущностей. // Нужно вернуть массив [обновляемое_поле = значение] $newFields = array(); if ($params['call_full']['entity']['is_new']) { // Пример: изменяем имя лида $type = 'Входящий '; $number = isset($params['call_full']['channel']['from']['custom']) ? $params['call_full']['channel']['from']['custom'] : $params['call_full']['channel']['from']['original']; $trunk = isset($params['call_full']['channel']['trunk']['custom']) ? $params['call_full']['channel']['trunk']['custom'] : $params['call_full']['channel']['trunk']['original']; // 2 - incoming, 3 - outgoing if ($params['call_full']['channel']['type'] == 'outgoing') { $type = 'Исходящий '; $number = isset($params['call_full']['channel']['to']['custom']) ? $params['call_full']['channel']['to']['custom'] : $params['call_full']['channel']['to']['original']; } if (! $params['call_full']['channel']['was_answered']) { // пропущенный звонок $type .= 'пропущенный '; } $newFields = array( 'NAME' => $number . ' - ' . $type . 'звонок', //изменяем название 'SOURCE_DESCRIPTION' => $trunk, //изменяем поле Дополнительно об источнике ); } else { $this->logDebug(sprintf( "Entity is not new (type: '%s', ID: '%s'), do nothing", $params['call_full']['entity']['type'], $params['call_full']['entity']['id'])); } return array( 'state' => 'success', 'data' => $newFields, ); ```
```php // Нужно вернуть массив [обновляемое_поле = значение] $newFields = array(); // Пример: изменяем имя лида $type = 'Входящий '; $number = $params['call']['from']; $trunk = $params['call']['trunk']; // 2 - incoming, 3 - outgoing if ($params['call_full']['channel']['type'] == 'outgoing') { $type = 'Исходящий '; $number = isset($params['call_full']['channel']['to']['custom']) ? $params['call_full']['channel']['to']['custom'] : $params['call_full']['channel']['to']['original']; } if (! $params['call_full']['channel']['was_answered']) { // пропущенный звонок $type .= 'пропущенный '; } $newFields = array( 'NAME' => $number . ' - ' . $type . 'звонок', //изменяем название 'SOURCE_DESCRIPTION' => $trunk, //изменяем поле Дополнительно об источнике ); return array( 'state' => 'success', 'data' => $newFields, ); ``` Описание полей **лида** в [**API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php)**.**\ Описание полей **контакта** в [**API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php)**.** # Время ожидания ответа на звонок (/custom_bx/vremya-ozhidaniya-otveta-na-zvonok) Иногда бывает важно знать время ожидания до поднятия трубки, т.к. слишком долгое ожидание может повлиять на качество обслуживания, кроме того знание времени ожидания позволяет управлять нагрузкой на сотрудников и оптимизировать процессы обслуживания клиентов. Для реализации воспользуемся кастомизацией полей дела: 1. Включаем кастомизацию полей дела в настройках модуля интеграции.
2. Добавляем код в файл **/opt/itgrix\_bx/customizer/actions/customize\_activity.php** ```php $started_at = date_create($params["start_time"]); $answered_at = date_create($params["answer_time"]); $this->logDebug('params: ' . json_encode($started_at)); $this->logDebug('params: ' . json_encode($answered_at)); $wait_time_sec = $answered_at->getTimestamp() - $started_at->getTimestamp(); $this->logDebug('params: ' . json_encode($wait_time_sec)); $activityFields['DESCRIPTION'] = "Время ожидания ответа: $wait_time_sec сек."; $this->logDebug("activityFields: ".json_encode($activityFields)); return array( 'state' => 'success', 'data' => $activityFields, ); ```
# Длительность ожидания клиента на линии (/custom_bx/waiting-duration) **Задача:** вычислить и записать в поле звонка, какое количество времени клиент ожидал ответа на линии. #### Как реализовать [#kak-realizovat] В веб-интерфейсе настройки модуля (`http://:8077/config`): 1. Установите галочку **"Включить кастомизацию"**. 2. Установите галочку на пункте **"полей дела"**. 3\. Отредактируйте файл кастомизации. Кастомизация настраивается в файле **/opt/itgrix\_bx/customizer/actions/customize\_activity.php.** Для версий ДО 3.4.0 этот файл находится в каталоге **/opt/itgrix\_bx/custom/** Параметры дела, которые доступны для редактирования, [описаны в статье](/custom_bx#1-customize_activity). ```php $activityFields = array(); if ($params['was_answered'] == false) { // missed $key = $params['type'] == 3 ? 'to' : 'from'; // 2 = incoming $activityFields['SUBJECT'] = 'Пропущенный от ' . $params[$key]; } else { $start_time = date_create($params["start_time"]); $answer_time = date_create($params["answer_time"]); $end_time = date_create($params["end_time"]); $wait_time_sec = $answer_time->getTimestamp() - $start_time->getTimestamp(); $duration_time = $end_time->diff($answered_at)->format("%i мин, %s сек."); $activityFields['DESCRIPTION'] = "Длительность звонка: " . $duration_time . " Время ожидания ответа : " . $wait_time_sec . " сек."; } return array( 'state' => 'success', 'data' => $activityFields, ); ``` # Запросы в Битрикс из кастомизации (/custom_bx/zaprosy-v-bitriks-iz-kastomizacii) ## Общее описание [#obshee-opisanie] Запросы REST API Битрикс24 из кастомизации поддерживаются начиная с версии [3.4.0](/changelog-bx#3.4.0). При обновлении (в т.ч. на 3.4.0) кастомизатор не изменяется, чтобы не нарушить настроенную клиентом работу интеграции. Поэтому, потребуется [обновить кастомизатор вручную](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0). Из пользовательской кастомизации можно делать запросы в Битрикс24 (например, создать задачу или лид) в тех случаях, когда [стандартная логика обработки звонка](/custom_bx#skhema-obrabotki-zvonka-modulem-integracii-itgrix) не охватывает специфические случаи. Для этого в API кастомизатора реализован класс `Bitrix` с соответствующими методами. Методы, их аргументы и возвращаемые значения подробно описаны в файле\*\*`/opt/itgrix_bx/customizer/README`\*\*. Для работы HTTP-запросов в кастомизаторе нужно, чтобы в системе был установлен модуль **php-curl** (опционально, без php-curl кастомизатор будет выполнять всё кроме HTTP-запросов). Проверить можно, выполнив в терминале команду: `php -r 'echo curl_version()["version"];'`\ Пример ответа:`7.47.0` ## Создание задачи [#sozdanie-zadachi] В кастомизациях доступен метод **`Bitrix::createTask`**, которая делает запрос в Битрикс24 на создание задачи, используя [REST-метод **tasks.task.add**](https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_add.php).\ Описание полей задачи в [документации **REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/tasks/task/tasks/tasks_task_getFields.php). #### Пример создания задачи по любому входящему звонку [#primer-sozdaniya-zadachi-po-lyubomu-vkhodyashemu-zvonku] Добавим вызов функции `Bitrix::createTask` в кастомизацию `process_final_params` (настраивается в файле `/opt/itgrix_bx/customizer/actions/process_final_params.php`). Логика модуля Itgrix по умолчанию предполагает создание задачи при регистрации пропущенного звонка (тоже [можно кастомизировать](/custom_bx/task-for-missed-call)). В данном примере будет создана новая задача для **любого** входящего звонка (в т.ч. отвеченного). Таким образом для пропущенных будет создано две задачи, если не отключить [создание задачи по пропущенному в настройках модуля](/custom_bx/task-for-missed-call). ```php if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий $phone = $params['call']['from']; // Сделаем одного и того же постановщика и ответственного для задачи $responsibleUserId = 49; $createdByUserId = 49; // Установим срок выполнения - 1 час после окончания звонка $deadLine = date_create($params['call']['end_time']); $deadLine->add(new DateInterval('PT1H')); // Пример срока в 1 день: //$deadLine->add(new DateInterval('P1D')); $deadLine = $deadLine->format('c'); $response = Bitrix::createTask(array( 'TITLE' => 'Обработать звонок от '.$phone, 'CREATED_BY' => $createdByUserId, 'RESPONSIBLE_ID' => $responsibleUserId, 'DEADLINE' => $deadLine, )); if ($response === false) { return array( 'state' => 'error', 'data' => 'Не удалось создать задачу для номера '.$phone, ); } // // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix: // $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE)); } return array( 'state' => 'success', 'data' => $params, ); ``` ## Создание лида [#sozdanie-lida] В кастомизациях доступна функция `Bitrix::createLead`, которая делает запрос в Битрикс24 на создание лида, используя [метод **crm.lead.add**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_add.php).\ Подробное описание полей лида в [документации **REST API Битрикс24**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php). Функция `Bitrix::createLead` поддерживается начиная с версии 3.4.2. #### Пример создания лида на любой входящий звонок [#primer-sozdaniya-lida-na-lyuboi-vkhodyashii-zvonok] Добавим вызов функции `Bitrix::createLead` в кастомизацию `process_final_params` (настраивается в файле `/opt/itgrix_bx/customizer/actions/process_final_params.php`). В таком случае будет создан новый лид (ещё один), даже если Битрикс создаст лид при регистрации звонка модулем Itgrix. ```php if ($params['call']['type'] === 2) { // 2 - входящий; 3 - исходящий $phone = $params['call']['from']; $trunk = $params['call']['trunk']; $fields = array( 'TITLE' => $phone.' - входящий звонок', 'STATUS_ID' => 'NEW', 'OPENED' => 'Y', // 'ASSIGNED_BY_ID' => 49, 'SOURCE_ID' => 'CALL', 'SOURCE_DESCRIPTION' => 'Звонок на внешний номер: '.$trunk. ' Создан кастомизацией Asterisk-коннектора Itgrix', 'PHONE' => array( array( 'VALUE' => $phone, 'VALUE_TYPE' => 'WORK', ), ), ); // Если сущность - это контакт или компания, то привяжем лид к ней. $entityType = $params['entity_type']; $entityId = $params['entity_id']; if ($entityType === 'contact') { $fields['CONTACT_ID'] = $entityId; } else if ($entityType === 'company') { $fields['COMPANY_ID'] = $entityId; } $response = Bitrix::createLead( $fields, array( 'REGISTER_SONET_EVENT' => 'N', ) ); if ($response === false) { return array( 'state' => 'error', 'data' => 'Не удалось создать лид для '.$phone, ); } // // Для отладки можно вывести ответ Битрикса в лог модуля Itgrix: // $this->logDebug('response: '.json_encode($response, JSON_UNESCAPED_UNICODE)); } return array( 'state' => 'success', 'data' => $params, ); ``` # Черные и белые списки. Как настроить? (/custom_common/black-white-list) Начиная с версии [itgrix\_bx (на тот момент bx24asterisk) 2.15.0](/changelog-bx) и [itgrix\_amo 1.1.3](/changelog-amo) все черные/белые списки реализуются через кастомизацию **need\_registration.** Начиная с версий [itgrix\_bx 3.0.7](/changelog-bx) и [itgrix\_amo 2.2.0](/changelog-amo) настройка черного/белого списка для внутренних номеров доступна сразу из админки (интерфейса настройки) модуля. Если у вас уже настроена фильтрация по внутреннему номеру в кастомизации, не забудьте отключить их перед настройкой аналогичной функции в админке, иначе нужные звонки могут не зарегистрироваться. ## Фильтрация по *внутреннему номеру* [#filtraciya-po-vnutrennemu-nomeru] *Черный список* внутренних номеров позволяет не регистрировать в CRM звонок, пришедший на указанный в списке внутренний номер. *Белый список* внутренних номеров наоборот позволяет регистрировать в CRM только те звонки, в которых участвовал один из заданных внутренних номеров. ### Настройка через интерфейс модуля [#nastroika-cherez-interfeis-modulya] Админка находится по адресу **http\://\<Asterisk IP>:8077/config/black\_white\_list**\ \*\*\*\*(где **\<Asterisk IP>** - IP-адрес вашего Asterisk).\ Раздел в админке **Бизнес-логика > Черный/белый списки**. Настройка черных/белых списков 1. Нужно выбрать один из режимов. 2. Добавить внутренние номера. 3. Сохранить. При работе модуль проверяет сначала этот список, затем выполняет кастомизацию **need\_registration.** **Логика работы списков при переводах** Если список настроен в Админке модуля - номер 100 не в черном списке, номер 101 в черном списке, звонок приходит на номер 100, сотрудник берет трубку, разговаривает, переводит на номер 101, разговаривает сотрудник с номером 101, звонок не будет зарегистрирован т.к. номер 101 находится в черном списке. В случае если такая логика не устраивает - нужно делать кастомизацию в коде скрипта (файл [/opt/itgrix\_\{crm}/customizer/actions/need\_registration.php](/custom_common/black-white-list#kastomizaciya-need_registration)) ## Кастомизация need\_registration [#kastomizaciya-need_registration] Кастомизация настраивается в файле **need\_registration.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | ### **Параметры** [#parametry] **Вход:** ```javascript { <Набор данных о единичном разговоре в звонке> } ``` Набор данных о разговоре (conversation) описан в статье [Параметры звонка (call) и разговора (conversation) в кастомизациях](/custom_common/call-conversation-parameters#parametry-razgovora-conversation). **Вернуть:** ```javascript { "data": { "result": “<Булева переменная: true - регистрируем, false - игнорируем>” }, "state": "success" } ``` ### **Примеры для внутренних номеров** [#primery-dlya-vnutrennikh-nomerov] Начиная с версий [itgrix\_bx 3.0.7](/changelog-bx#3.0.7) и [itgrix\_amo 2.2.0](/changelog-amo#2.2.0) настройка черного/белого списка для внутренних номеров доступна сразу из админки (интерфейса настройки) модуля. **Пример:** Для запрета регистрации звонков на определенные внутренние номера, например 101 и 102, настроим **ЧЕРНЫЙ список:** ```php $black_list = array('101', '102'); $key = $params['type'] == 2 ? 'to' : 'from'; // 2 = incoming if (in_array($params[$key], $black_list)) { $result = false; //все кто есть в списке не регистрируются } return array( 'state' => 'success', 'data' => array( 'result' => $result ), ); ``` **Пример: БЕЛЫЙ список** по внутренним номерам 201 и 202: ```php $white_list = array('201', '202'); $key = $params['type'] == 2 ? 'to' : 'from'; // 2 = incoming if (!in_array($params[$key], $white_list)) { $result = false; //все звонки кроме белого списка не будут регистрироваться } return array( 'state' => 'success', 'data' => array( 'result' => $result ), ); ``` ## Черный/белый список *для транков* [#chernyi-belyi-spisok-dlya-trankov] Реализуется через кастомизацию **need\_registration** (см. выше). Работает только для входящих звонков, так как только для них известно значение транка. ```php $result = true; if ($params['type'] === 2) { // входящий $trunks = array('123456', '555666'); // Белый список if (!in_array($params['trunk'], $trunks)) { $result = false; } // Черный список //if (in_array($params['trunk'], $trunks)) { // $result = false; //} } return array( 'state' => 'success', 'data' => array( 'result' => $result ), ); ``` # Изменение параметров при click-to-call (/custom_common/c2c) Инициализация звонка из CRM может не сработать по следующим причинам: * Телефонный номер в CRM начинается с символа "+"; * На Asterisk настроен особый набор номера – например, звонить можно только через 9. Логика такой доработки будет следующая: будем получать последние 10 символов (для России) и прибавлять к полученному результату нужный префикс. В примере префиксом будет цифра 8. Кастомизация настраивается в файле **process\_originate\_params.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | ### Параметры [#parametry] **Вход:** ```javascript { "params": { "caller_id": “”, "channel": “”, "context": “”, "extension": “”, "priority": “”, "request_data": “” } } ``` **Вернуть:** ```javascript { "data": { "caller_id": “”, "channel": “”, "context": “”, "extension": “”, "priority": “” } } ``` Параметр `request_data` содержит все данные запроса от CRM. Он будет удалён перед выполнением Originate.\ Пример содержимого `request_data` при запросе от Bitrix24: ```json { "action": "make_call", "auth": { "access_token": "0000000001111111111111122222222222333333334444444444445555555", "application_token": "aaaaaaaabbbbbbbbbbbccccccccddddddddddd", "client_endpoint": "https:\/\/example.bitrix24.ru\/rest\/", "domain": "example.bitrix24.ru", "expires": "1645749061", "expires_in": "3600", "member_id": "eeeeeeffffffffffgggggggggg", "scope": "crm,entity,user,telephony,im,task,call,department,imopenlines", "server_endpoint": "https:\/\/oauth.bitrix.info\/rest\/", "status": "L", "user_id": "1" }, "code": "0", "data": { "CALL_ID": "externalCall.abcdefg123456789.1645744511", "CALL_LIST_ID": "0", "CRM_ENTITY_ID": "12345", "CRM_ENTITY_TYPE": "LEAD", "EXTENSION": "111", "IS_MOBILE": "0", "LINE_NUMBER": "", "PHONE_NUMBER": "89120000000", "PHONE_NUMBER_INTERNATIONAL": "+79120000000", "USER_ID": "1" }, "event": "ONEXTERNALCALLSTART", "portal": "example.bitrix24.ru", "ts": "1645745461" } ``` Пример содержимого `request_data` при запросе от amoCRM: ```json { "action": "make_call", "code": "0", "data": { "id": "12345678", "type": "contact" }, "phone": "89120000000", "portal": "itgro.amocrm.ru", "target": "https://apix.itgrix.ru:9004/v1/amo/make_call", "user_id": "1" } ``` К возвращаемому массиву данных `"data"` можно добавить переменные `"codecs"` и `"variables"`: ```javascript "codecs": “”, "variable": “”, ``` ### Добавлем префикс [#dobavlem-prefiks] ```php //имена параметров как в конфиге $phone = &$params['extension']; //Получаем в $match последние 10 цифр номера if(preg_match('~(\d{10})$~', $phone, $match)){ //Добавляем к найденому префикс $phone = '8' . $match[1]; } return array( 'state' => 'success', 'data' => $params ); ``` ### Разные контексты [#raznye-konteksty] Бывает, появляется необходимость звонить через разные контексты. В примере звонки с номеров 161, 162, 163 пойдут через контекст *custom-context-1*; а с номеров 141, 140 через контекст *custom-context-2*; остальные звонки пойдут через стандартный контекст, указанный в настройках. ```php //имена параметров как в конфиге $phone = &$params['extension']; $channel = explode('/', $params['channel']); $contexts = array( 'custom-context-1' => array(161, 162, 163), 'custom-context-2' => array(141, 140), ); foreach($contexts as $context => $phones){ if(in_array($channel[1], $phones)){ $params['context'] = $context; break; } } return array( 'state' => 'success', 'data' => $params ); ``` # Параметры звонка (call) и разговора (conversation) в кастомизациях (/custom_common/call-conversation-parameters) Данные звонка и разговора поступают от Asterisk, поэтому параметры одинаковы для всех CRM. ## Параметры звонка (call) [#parametry-zvonka-call] ```javascript { "conversations": { "1234567890.001": {<Набор данных о единичном разговоре в звонке. См. раздел “Параметы разговора (conversation)”>}, "1234567890.002": {<Набор данных о единичном разговоре в звонке. См. раздел “Параметы разговора (conversation)”>}, ... }, "answer_time": “<Дата и время ответа>”, "end_time": “<Дата и время окончания>”, "from": “<Номер звонящего>”, "from_local": “<Является ли локальным номер звонящего: true/false>”, "id": “”, "start_time": “<Дата и время начала (в текстовом формате)>”, "state": “<Этап звонка. Числовое значение: 0 - Unknown (неизвестно), 1 - Ringing (поступил звонок), 2 - Talking (начался разговор), 3 - Ended (окончен)>”, "to": “<Номер, на который пришёл звонок>”, "to_local": “<Является ли локальным номер принимающего: true/false>”, "trunk": “<Внешний номер, на который поступил звонок>”, "type": “<Направление звонка. Принимает значения: 1 - внутренний; 2 - входящий; 3 - исходящий>”, "was_answered": “<Является ли звонок отвеченным: true/false>” } ``` **Пример** Входящий отвеченный с номера 89001234567 на 123 через транк 3432723033: ```javascript { "answer_time": "2021-02-02 18:00:00", "conversations": { "1234567890.001": { "answer_time": "2021-02-02 18:00:00", "call_id": "1234567890.000", "end_time": "2021-02-02 18:00:13", "from": "89001234567", "from_local": false, "id": "1234567890.001", "is_parked": false, "start_time": "2021-02-02 17:59:59", "state": 3, "to": "123", "to_local": true, "trunk": "3432723033", "type": 2, "was_answered": true } }, "end_time": "2021-02-02 18:00:13", "from": "89001234567", "from_local": false, "id": "1234567890.000", "result": 200, "start_time": "2021-02-02 17:59:51", "state": 3, "to": "123", "to_local": true, "trunk": "3432723033", "type": 2, "was_answered": true } ``` ## Параметры разговора (conversation) [#parametry-razgovora-conversation] ```javascript { "answer_time": “<Дата и время ответа>”, "call_id": “”, "end_time": “<Дата и время окончания>”, "from": “<Номер звонящего>”, "from_local": “<Является ли локальным номер звонящего: true/false>”, "id": “”, "is_parked": false, "start_time": “<Дата и время начала>”, "state": “<Этап звонка. Числовое значение: 0 - Unknown (неизвестно), 1 - Ringing (поступил звонок), 2 - Talking (начался разговор), 3 - Ended (окончен)>”, "to": “<Номер, на который пришёл звонок>”, "to_local": “<Является ли локальным номер принимающего: true/false>”, "trunk": “<Внешний номер, на который поступил звонок>”, "type": “<Направление звонка. Принимает значения: 1 - внутренний; 2 - входящий; 3 - исходящий>”, "was_answered": “<Является ли звонок отвеченным: true/false>” } ``` **Пример** Входящий отвеченный с номера 89001234567 на 123 через транк 3432723033: ```javascript { "answer_time": "2021-02-02 18:00:00", "call_id": "1234567890.000", "end_time": "2021-02-02 18:00:13", "from": "89001234567", "from_local": false, "id": "1234567890.001", "is_parked": false, "start_time": "2021-02-02 17:59:59", "state": 3, "to": "123", "to_local": true, "trunk": "3432723033", "type": 2, "was_answered": true } ``` # Изменение номера клиента перед отправкой в CRM (/custom_common/client-phone-number) При необходимости вы можете изменять номер телефона, полученный из АТС перед отправкой данных в CRM. Это будет полезным, если вы хотите: * Автоматически добавлять код города к коротким номерам, набранным сотрудникам; * Заменять 7 на 8 в начале номера, если входящие звонки у вас фиксируются с 7; * Добавлять 8 в начале номера, если входящие звонки приходят без 8; * ... Начиная с версии [itgrix\_bx 3.0.0](/changelog-bx#3.0.0) касмитозация номера разделена на две:\ \&#xNAN;*process\_user\_phone* – кастомизация внутреннего номера пользователя;\ \&#xNAN;*process\_client\_phone* – кастомизация номера клиента. Кастомизация настраивается в файле **process\_client\_phone.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | ## Параметры [#parametry] **Вход:** ```javascript { "params": { "phone": “<номер>” } } ``` **Вернуть:** ```javascript { "data": { "phone": “<кастомизированный_номер>” }, "state": "success" } ``` ## Пример обрезания номера и подстановки 8 в начале [#primer-obrezaniya-nomera-i-podstanovki-8-v-nachale] В следующем примере для всех номеров, состоящих из 10 и более символов, в CRM попадет номер, в начале которого будет 8, а в конце – последние 10 цифр исходного номера телефона: * 4991234567 заменится на 84991234567; * 1234567 останется неизменным; * 39974991234567 заменится на 84991234567; * 74991234567 заменится на 84991234567; * +74991234567 заменится на 84991234567. ```php $phone = $params['phone']; // Получаем последние 10 цифр номера if(preg_match('/([0-9]{10})$/', $phone, $match)){ // если в номере нашлось 10 цифр в конце, то прибавляем в начало восьмерку $phone = '8' . $match[1]; } return array( 'state' => 'success', 'data' => array( 'phone' => $phone, ), ); ``` В отдельных случаях имеет значение не только кастомизация номера телефона, но и настройка префиксов номеров на странице настроек бизнес-логики в админке: * при автораспределении, для поиска сущности номер сначала кастомизируется, а потом формируются варианты со всеми префиксами и без; * ссылка на запись звонка в CRM формируется без префикса и номер не кастомизируется; * при поиске записи в CDR номер не кастомизируется, используются варианты со всеми префиксами и без. В версиях itgrix\_bx старше 2.14.3 этот код уже имеется в кастомизации – его достаточно только раскомментировать. # Обновление настроек кастомизатора в Itgrix_bx-3.9.0 и Itgrix_amo-2.12.0 (/custom_common/customizer-settings-update) ## Перенос Settings.php в settings.json [#perenos-settings.php-v-settings.json] Изменения описаны для Itgrix\_bx. Для Itgrix\_amo всё так же, только пути будут содержать `itgrix_amo` вместо `itgrix_bx`. [Начиная с версий Itgrix\_bx-3.4.0 и Itgrix\_amo-2.6.0](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0) файлы кастомизатора хранятся в одной папке `/opt/itgrix_bx/customizer/`. В частности настройки хранились в файле `/opt/itgrix_bx/customizer/Settings.php`. В версии Itgrix\_bx (Битрикс24) 3.9.0 и Itgrix\_amo (amoCRM) 2.12.0 настройки кастомизатора перенесены из файла `Settings.php` в `settings.json` (`/opt/itgrix_bx/customizer/settings.json`). Старый файл `Settings.php` содержит следующие настройки: ```php class Settings { const CONFIG_CRM_FIELD = 'bitrix'; // Название поля в CONFIG_PATH const CONFIG_PATH = '/etc/itgrix_bx/config.json'; const LOG_PATH = '/var/log/itgrix_bx.log'; } ``` Новый файл настроек `settings.json`: ```json { "configCrmField": "bitrix", "configPath": "/etc/itgrix_bx/config.json", "logPath": "/var/log/itgrix_bx.log", "requestTimeoutSec": 2 } ``` Для Itgrix\_amo файл настроек `settings.json` будет выглядеть так: ```json { "configCrmField": "amo", "configPath": "/etc/itgrix_amo/config.json", "logPath": "/var/log/itgrix_amo.log", "requestTimeoutSec": 2 } ``` ## Новое поле `requestTimeoutSec` [#novoe-pole-requesttimeoutsec] Поле `requestTimeoutSec` содержит таймаут в секундах для HTTP-запросов (например, [запросов в CRM](/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0)). Ранее таймаут был задан в коде кастомизатора и был всегда равен 2 секунды. Теперь, в случае необходимости, можно поменять таймаут (например, если известно, что CRM сильно загружена и долго отвечает на запросы). При этом необходимо соответственно увеличить таймаут работы кастомизатора в настройках модуля (`http://:8077/config/module`, настройка "Таймаут скрипта кастомизации, сек."). # Данные о звонке (call_full) в кастомизациях (/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh) Для Битрикс24 объект `call_full` доступен начиная с версии [Itgrix\_bx 3.10.0](/changelog-bx#3.10.0). *Для amoCRM объект `call_full` появится в версии Itgrix\_amo 2.13.0.* ## Главный объект (call\_full) [#glavnyi-obekt-call_full] ```json { "call_full": { "active_conversation_id": "", "channel": {<Данные канала звонка из Asterisk (главный канал - linkedid)>}, "conversations": { "1111111111.11111": { "channel": {<Данные канала разговора из Asterisk>}, "is_parked": <Находится ли разговор на удержании (true/false)>, "user": {<Данные пользователя, найденного по номеру телефона (или null)>} }, ... }, "deal": {<Данные сделки (или null)>}, "entity": {<Данные сущности (или null)>}, "is_ivr": <Является ли звонок пропущенным на IVR (true/false)>, "record": "<Ссылка на запись звонка (или пустая строка)>", "registration": {<Данные регистрации звонка (или null) - только для Битрикс24>}, "result": <Результат звонка (SIP-статус, int)> } } ``` ## Данные канала (channel) [#dannye-kanala-channel] ```json "channel": { "answer_time": "<Время ответа (или 0001-01-01 00:00:00)>", "end_time": "<Время окончания (или 0001-01-01 00:00:00)>", "extra": {<Данные поля extra из таблицы CEL>}, "from": {<Данные номера, с которого звонили>}, "id": "", "is_primary": <Является ли канал "главным", т.е. uniqueid = linkedid (true/false)>, "name": "<Имя канала из таблицы CEL>", "start_time": "<Время начала (или 0001-01-01 00:00:00)>", "state": "Состояние (строка) - одно из: ringing - в процессе дозвона (звонит телефон у абонента, ответа ещё не было); talking - в процессе разговора (уже был ответ, ещё не положили трубку); ended - окончен; processed - обработан коннектором", "to": {<Данные номера, на который звонили>}, "trunk": {<Данные номера транка>}, "type": "Тип (строка) - одно из: local - локальный (с внутреннего номера на внутренний); incoming - входящий (с внешнего номера на внутренний); outgoing - исходящий (с внутреннего номера на внешний); unknown - неизвестный (не удалось определить тип)", "was_answered": <Был ли ответ (true/false)> } ``` ### Формат даты-времени [#format-daty-vremeni] Дата-время выводится в формате `ГГГГ-ММ-ДД ЧЧ:ММ:СС` . Если значение не задано (события не было), выводится значение `0001-01-01 00:00:00`. Значения времени соответствуют временной зоне на сервере Asterisk. ### Данные номера (from, to, trunk) [#dannye-nomera-from-to-trunk] ```json "from/to/trunk": { "base": "<Номер без префиксов>", "custom": "<Кастомизированный номер>", "is_local": <Является ли номер внутренним (true/false)>, "original": "<Номер в том виде, как пришел из Asterisk>", "variants": [ <Варианты номера, соответствующие списку префиксов из настроек коннектора, т.е. base, а также номера "префикс+base" для каждого префикса (список строк)> ] } ``` Пример настройки префиксов:
Пример номера to: ```json "to": { "base": "9001234567", "custom": "89001234567", "is_local": false, "original": "+79001234567", "variants": [ "9001234567", "+74959001234567", "84959001234567", "+79001234567", "79001234567", "89001234567" ] } ``` Коннектор сначала пытается использовать номер в поле `custom`(т.е. результат применения автозамены и/или кастомизации); если его нет, то исходный номер в поле `original`. ## Данные пользователя (user) [#dannye-polzovatelya-user] ```json "user": { "email": "<Электронная почта>", "id": "", "name": "<Имя пользователя>", "phones": [ <Список телефонных номеров пользователя - строки> ], "position": "<Должность>", "raw": {<Данные пользователя как в CRM>} } ``` В объекте `raw` присутствуют только поля с непустым/ненулевым значением. Поля пользователя Битрикс24 описаны в [документации REST API](https://dev.1c-bitrix.ru/rest_help/users/user_fields.php). Коннектор считает телефонными номерами пользователя значения следующих полей в Битрикс24: * Внутренний телефон (поле `UF_PHONE_INNER`) * Мобильный телефон (поле `PERSONAL_MOBILE`) * Рабочий телефон (поле `WORK_PHONE`) * Телефон (поле `PERSONAL_PHONE`) Телефонные номера пользователя в объекте `phones` представленны в виде строк (как в Битрикс24). ## Данные сделки (deal) [#dannye-sdelki-deal] Со сделками работает только коннектор itgrix\_amo для amoCRM. В Битрикс24 коннектор itgrix\_bx НЕ работает со сделками, поэтому значение поля `deal` всегда будет `null`. ## Данные сущности (entity) [#dannye-sushnosti-entity] ```json "entity": { "id": "", "is_new": <Создана ли сущность при регистрации данного звонка - true/false>, "name": "<Название сущности>", "phones": [ <Список телефонных номеров сущности - объекты> ], "raw": {<Данные сущности как в CRM>}, "responsible": {<Данные ответственного пользователя>}, "responsible_id": "", "type": "<Тип сущности строкой>" } ``` Телефонные номера в массиве `phones` представленны в виде объекта, аналогичного по структуре номеру в `channel`: [Данные номера](/custom_common/dannye-o-zvonke-call_full-v-kastomizaciyakh#dannye-nomera-from-to-trunk). В поле type для Битрикс24 возможны значения: `company`,`contact`,`lead`. В объекте `raw` присутствуют только поля с непустым/ненулевым значением. ## Данные регистрации звонка в CRM (registration) [#dannye-registracii-zvonka-v-crm-registration] Объект `registration` присутствует только для Битрикс24 (для amoCRM всегда будет значение `null`). ```json "registration": { "activity_id": "", "created_company_id": "", "created_contact_id": "", "created_deal_id": "", "created_lead_id": "", "entity_id": "", "entity_type": "<Тип используемой сущности строкой (в Битрикс24 - company/contact/lead)>", "id": "", "responsible_id": "" } ``` ## Результат звонка (result) [#rezultat-zvonka-result] Результат звонка в виде SIP-статуса (целое число). Подробное описание в статье [Детальные статусы звонка](/faq/detalnye-statusy-zvonka). # Кастомизация имени файла аудиозаписи (/custom_common/filepath) Кастомизация настраивается в файле **process\_record\_file\_path.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | ## Параметры [#parametry] **Вход:** ```javascript { "params": { "call_id": “”, "from": “<Номер звонящего>”, "to": “<Номер, на который пришёл звонок>”, "path": “<Путь до записи>” } } ``` **Вернуть:** ```javascript { "data": { "path": “<Кастомизированный путь до записи>” }, "state": "success" } ``` Первым шагом необходимо понять, каким образом генерируется имя файла. Иногда необходимо подставлять в путь до файла папку с определенной датой или другими параметрами. ## Файл до записи .wav [#fail-do-zapisi-.wav] В том случае если все записи хранятся в одной директории и их имена выглядят, как .wav, возможно следующее решение кастомизации выбора файла без обращения в СУБД: ```php $callId = $params['call_id']; $from = $params['from']; $to = $params['to']; $path = $params['path']; extract(pathinfo($path)); $path = $dirname . '/' . $callID . '.wav'; return array( 'state' => 'success', 'data' => array( 'path' => $path, ), ); ``` ## Сложное имя файла, данные для которого нужно собирать из СУБД [#slozhnoe-imya-faila-dannye-dlya-kotorogo-nuzhno-sobirat-iz-subd] Рассмотрим пример кастомизации для записи в формате: `/var/spool/asterisk/monitor/<дата-время>---.<расширение>` Пример:\ `/var/spool/asterisk/monitor/20180330140245-321654987-154-1522395542.2897.mp3` В данном случае мы видим, что имя файла состоит из цифр – даты/времени звонка, входящего номера, внутреннего номера и uniqueid звонка, которые указанны через дефис. Будем получать недостающие данные из базы данных. **Для актуальной версии кастомизатора (версии, начиная с **[**Itgrix\_bx 3.4.0**](/changelog-bx#3.4.0)** и **[**Itgrix\_amo 2.6.0**](/changelog-amo#2.6.0)**):** ```php $callId = $params['call_id']; $from = $params['from']; $to = $params['to']; $path = $params['path']; // Если для генерации имени файла нужно больше параметров, // то их можно получить в БД, сделав дополнительный запрос. // Пример кода: $dbResult = Utils::mysqliQuery( "SELECT * FROM `cdr` WHERE `uniqueid` = '".$callId."' ORDER BY `calldate` DESC LIMIT 1", true); if ($dbResult === false) { return array( 'state' => 'error', 'data' => 'Ошибка при запросе в CDR', ); } if (empty($dbResult)) { return array( 'state' => 'error', 'data' => "В CDR не найдено записей для звонка '$callId'", ); } //Далее собираем имя файла из полученных данных $row = $dbResult[0]; $path = sprintf('/var/spool/asterisk/monitor/%s-%s-%s-%s.%s', date('YmdHis', strtotime($row['calldate'])), $row['src'], $row['dst'], $callId, pathinfo($row['recordingfile'], PATHINFO_EXTENSION) ); return array( 'state' => 'success', 'data' => array( 'path' => $path, ), ); ``` **Для старого кастомизатора (версии ДО **[**Itgrix\_bx 3.4.0**](/changelog-bx#3.4.0)** и **[**Itgrix\_amo 2.6.0**](/changelog-amo#2.6.0)**):** ```php $callId = $params['call_id']; $from = $params['from']; $to = $params['to']; $path = $params['path']; //Если для генерации имени файла нужно больше параметров, то их можно получить в БД, сделав дополнительный запрос. Пример кода: $res = mysqli_query(getDB(), "SELECT * FROM `cdr` WHERE `uniqueid` = '" . $call_id . "' ORDER BY `calldate` DESC LIMIT 1"); $row = mysqli_fetch_assoc($res); //Далее собираем имя файла из полученных данных $path = sprintf('/var/spool/asterisk/monitor/%s-%s-%s-%s.%s', date('YmdHis', strtotime($row['calldate'])), $row['src'], $row['dst'], $callId, pathinfo($row['recordingfile'], PATHINFO_EXTENSION) ); return array( 'state' => 'success', 'data' => array( 'path' => $path, ), ); ``` # Полезные кастомизации (любая CRM) (/custom_common) В данном разделе представлены кастомизации, не зависящие от CRM, с которой работает модуль Itgrix. Они работают как в **itgrix\_bx (Битрикс24),** так и в **itgrix\_amo (для amoCRM).** В основном это кастомизации работы модуля с Asterisk. Отличие в путях к файлам кастомизаций: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :----------------------------------------: | :-----------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/...** | **/opt/itgrix\_amo/customizer/actions/...** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/...** | **/opt/itgrix\_amo/custom/...** | # Конвертация записей в формат MP3 (/custom_common/mp3-record) ## Конвертация при помощи программы конвертера через настройки в админке [#konvertaciya-pri-pomoshi-programmy-konvertera-cherez-nastroiki-v-adminke] Начиная с версии Itgrix\_bx v[3.13.0](/changelog-bx#id-3.13.0), процедура конвертации записей в .mp3 перенесена из кастомизации в основной функционал коннектора и настраивается через админку:
## Конвертация в кастомизации пути до файла записи звонка [#konvertaciya-v-kastomizacii-puti-do-faila-zapisi-zvonka] Кастомизация настраивается в файле **process\_record\_file\_path.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | Конвертация записей уже включена по умолчанию при установке (приведенный в листинге ниже код уже присутствует в файле кастомизации). Но по умолчанию отключено удаление исходного wav-файла и обновление записи в CDR. Т.е. записи в формате mp3 создаются в дополнение к существующим wav-файлам, это приводит к занятию дополнительного места на сервере Астериск. Чтобы включить обновление в CDR (поле `recordingfile`) и удаление wav-файла, нужно установить в **`true`** значения переменных (см. листинг ниже): ```php $updateFilenameInCdr = false; // Заменить в CDR имя файла на mp3 $removeWavFile = false; // Удалить исходный wav-файл ``` Для версий ДО 3.4.0 включение запроса в CDR и удаления исходного wav-файла осуществляется раскомментированием кода: ```php // mysqli_query(getDB(), "UPDATE `cdr` SET `recordingfile` = '{$newBasename}' WHERE `recordingfile` = '{$basename}'"); // удаляем файл с расширением .wav // unlink($path); ``` Обращаем ваше внимание на то, что любые изменения должны проводиться опытным разработчиком и учитывать специфику вашей системы. Параметры и другие примеры описаны в статье [Кастомизация имени файла аудиозаписи](/custom_common/filepath). ```php $callId = $params['call_id']; $from = $params['from']; $to = $params['to']; $path = $params['path']; // // Пример конвертации записей разговоров в mp3 // $updateFilenameInCdr = false; // Заменить в CDR имя файла на mp3 $removeWavFile = false; // Удалить исходный wav-файл $recPathInfo = pathinfo($path); $recBasename = $recPathInfo['basename']; $recExtension = $recPathInfo['extension']; if (strtolower($recExtension) == 'wav') { $newPath = Utils::convertToMp3($path); if ($newPath === false) { return array( 'state' => 'error', 'data' => "Failed to convert recording file to mp3: '$path'", ); } $this->logInfo("Converted recording file: '$newPath'"); $newBasename = basename($newPath); // Заменить в CDR имя файла на новое (wav на mp3) if ($updateFilenameInCdr) { $dbResult = Utils::mysqliQuery( "UPDATE `cdr` SET `recordingfile` = '{$newBasename}'" . " WHERE `recordingfile` = '{$recBasename}'"); if ($dbResult === false) { return array( 'state' => 'error', 'data' => 'Ошибка при запросе в CDR', ); } $this->logInfo("Updated recording filename in CDR: '$newBasename'"); } // Удалить исходный файл с расширением .wav if ($removeWavFile) { $rmSuccess = unlink($path); if (! $rmSuccess) { return array( 'state' => 'error', 'data' => "Не удалось удалить исходный wav-файл: '$path'", ); } $this->logInfo("Removed recording file: '$path'"); } $path = $newPath; } return array( 'state' => 'success', 'data' => array( 'path' => $path, ), ); ``` Данный код предполагает установленный lame в системе. Если у вас его нет, устанавливается он любым доступным менеджером пакетов: ```bash yum install lame ``` ### Отключение конвертации в кастомизации [#otklyuchenie-konvertacii-v-kastomizacii] Для того чтобы отключить конвертирование файлов записей в mp3 достаточно закомментировать обращение к функцииям кастомизации записей в коде указанном выше: ``` /*if (strtolower($recExtension) == 'wav') { $newPath = Utils::convertToMp3($path); if ($newPath === false) { return array( 'state' => 'error', 'data' => "Failed to convert recording file to mp3: '$path'", ); } $this->logInfo("Converted recording file: '$newPath'"); $newBasename = basename($newPath); // Заменить в CDR имя файла на новое (wav на mp3) if ($updateFilenameInCdr) { $dbResult = Utils::mysqliQuery( "UPDATE `cdr` SET `recordingfile` = '{$newBasename}'" . " WHERE `recordingfile` = '{$recBasename}'"); if ($dbResult === false) { return array( 'state' => 'error', 'data' => 'Ошибка при запросе в CDR', ); } $this->logInfo("Updated recording filename in CDR: '$newBasename'"); } // Удалить исходный файл с расширением .wav if ($removeWavFile) { $rmSuccess = unlink($path); if (! $rmSuccess) { return array( 'state' => 'error', 'data' => "Не удалось удалить исходный wav-файл: '$path'", ); } $this->logInfo("Removed recording file: '$path'"); } $path = $newPath; } */ ``` # Обновление кастомизатора в Itgrix_bx-3.4.0 и Itgrix_amo-2.6.0 (/custom_common/obnovlenie-kastomizatora-v-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0) В версии Itgrix\_bx (Битрикс24) 3.4.0 и Itgrix\_amo (amoCRM) 2.6.0 **кастомизатор существенно переработан.** В результате старый код пользовательских кастомизаций может быть **частично несовместим** с новым кастомизатором. В данной статье описана корректная миграция пользовательских кастомизаций. При обновлении с версии Itgrix\_bx 3.3.5 на 3.4.0 и с Itgrix\_amo 2.5.3 на 2.6.0 через скрипт `update.sh` в папке модуля обновление кастомизатора не происходит. Поле `customizer.program_path` в конфиг-файле также остаётся нетронутым. **Таким образом, старый кастомизатор и пользовательские кастомизации продолжат свою работу в новых версиях.** При обновлении новый кастомизатор появится в виде папки `/opt/itgrix_bx/customizer.dist/` и`/opt/itgrix_amo/customizer.dist`. В любой момент можно воспользоваться этой папкой для перехода на новую версию кастомизатора. ## Изменения в новом кастомизаторе [#izmeneniya-v-novom-kastomizatore] Рассмотрим изменения для Itgrix\_bx. Для Itgrix\_amo всё то же самое, только пути будут содержать `itgrix_amo` вместо `itgrix_bx`. * В новом кастомизаторе все файлы хранятся в одной папке `/opt/itgrix_bx/customizer/`. * Исполняемый файл (который прописан в конфиг-файле `/etc/itgrix_bx/config.json` в поле `customizer.program_path`) теперь имеет путь `/opt/itgrix_bx/customizer/customize.php` . * Пользовательские кастомизации теперь располагаются в папке `/opt/itgrix_bx/customizer/actions/` . * Добавился новый файл `/opt/itgrix_bx/customizer/Settings.php`, в котором прописаны пути к конфиг-файлу и логу модуля. * В файле `/opt/itgrix_bx/customizer/README` подробно описаны функции, доступные в пользовательских кастомизациях. Изменения в API кастомизатора рассмотрим далее. ## Переход на новый кастомизатор [#perekhod-na-novyi-kastomizator] Прежде всего стоит сделать **резервную копию** старых пользовательских кастомизаций (`/opt/itgrix_bx/custom/`) и кастомизатора (`/opt/itgrix_bx/customizer.php`). 1. Скопировать папку `/opt/itgrix_bx/customizer.dist/` в `/opt/itgrix_bx/customizer/`. 2. Убедиться, что в `/opt/itgrix_bx/customizer/Settings.php` прописаны нужные конфиг и лог. 3. Поменять в конфиг-файле `/etc/itgrix_bx/config.json` путь к исполняемому файлу кастомизатора в поле `customizer.program_path` , - теперь это `/opt/itgrix_bx/customizer/customize.php`. 4. Скопировать код пользовательских кастомизаций из `/opt/itgrix_bx/custom/` в новые файлы кастомизаций в `/opt/itgrix_bx/customizer/actions/`. За исключением кастомизации **process\_record\_file\_path.php,** - в ней существенно доработанная кастомизация по умолчанию (конвертация записей разговоров в mp3). Рекомендуем использовать и настроить новый код вместо старого. 5. Проверить код на наличие **старых функций и заменить их на новые** функции (см. далее). ## Изменение API кастомизатора [#izmenenie-api-kastomizatora] Код кастомизатора был полностью переписан, и **все старые функции стали недоступны:** 1. `message()` 2. `getConfig()` 3. `myQuery()` 4. `getDB()` Вместо них теперь нужно использовать функции соответственно: 1. `$this->logDebug()` (или `logInfo`, `logWarn`, `logError` в зависимости от желаемого уровня логирования). Данная функция в отличие от message() принимает только один аргумент - строку с сообщением. **Если нужно вывести в лог несколько разнотипных значений, нужно сначала сделать из них одно строковое значение.** 2. `Utils::getConfig()` - использование аналогичное старому, плюс возможность обработать ошибку. 3. `Utils::mysqlClcQuery()` - использование аналогичное старому, плюс возможность обработать ошибку. 4. `Utils::mysqliQuery()` - теперь запрос через php-mysqli аналогичен по использованию запросу через MySQL Command-Line Client (функция `Utils::mysqlClcQuery()`, бывшая `myQuery()`). **Не нужно использовать `getDB()`** с последующим вызовом `mysqli_query()`. Всё это реализовано внутри `Utils::mysqliQuery()` с обработкой результата или возможных ошибок. В случае если по каким-то причинам невозможно использовать запрос через php-mysqli, можно просто поменять в пользовательском коде название функции `mysqliQuery` на `mysqlClcQuery`, их использование абсолютно одинаковое. Более подробное описание функций в `/opt/itgrix_bx/customizer/README`. ## Новые функции кастомизатора [#novye-funkcii-kastomizatora] Одно из главных нововведений - **поддержка запросов в CRM** из пользовательских кастомизаций. В кастомизаторе Itgrix\_bx: * `Bitrix::createTask()` - для [создания задачи в Битрикс24](/custom_bx/zaprosy-v-bitriks-iz-kastomizacii#sozdanie-zadachi). * `Bitrix::createLead()` - для [создания лида в Битрикс24](/custom_bx/zaprosy-v-bitriks-iz-kastomizacii#sozdanie-lida) (доступна с версии 3.4.2). В кастомизаторе Itgrix\_amo: * `Amo::createTask()` - для [создания задачи в amoCRM](/custom_amo/zaprosy-v-amocrm-iz-kastomizacii#sozdanie-zadachi). * `Amo::createLead()` - для [создания сделки в amoCRM](/custom_amo/zaprosy-v-amocrm-iz-kastomizacii#sozdanie-sdelki). Подробное описание функций в `/opt/itgrix_bx/customizer/README`. В дальнейшем будут добавляться новые запросы в CRM по мере необходимости. # PJSIP вместо chan_sip у избранных пользователей (/custom_common/pjsip-vmesto-chan_sip-u-izbrannykh-polzovatelei) Кастомизация настраивается в файле **process\_originate\_params.php,** он находится в каталоге: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :-------------------------------------: | :--------------------------------------: | | **/opt/itgrix\_bx/customizer/actions/** | **/opt/itgrix\_amo/customizer/actions/** | Для более ранних версий: | itgrix\_bx (Битрикс24) ДО версии 3.4.0 | itgrix\_amo (amoCRM) ДО версии 2.6.0 | | :------------------------------------: | :----------------------------------: | | **/opt/itgrix\_bx/custom/** | **/opt/itgrix\_amo/custom/** | Пример: некоторые сотрудники работают на PJSIP, а другие на chan\_sip. Нужно настроить так, чтобы у первых originate исполнялся через PJSIP. На основе номера сотрудника (пира), меняем протокол: ```php $channel = &$params['channel']; list($channel_type, $peer) = explode("/", $channel); $pjsipPeerList = array(101, 102, 103); if (in_array($peer, $pjsipPeerList)) { $channel_type = "PJSIP"; }; $channel = $channel_type . '/' . $peer; return array( 'state' => 'success', 'data' => $params ); ``` # Склеивание названия транка и имени контакта для показа в карточке звонка (/custom_common/trunk-and-client-number) Для склеивания имени контакта из битрикса и номера линии исправляем экстеншн, используемый для автораспределения в /etc/asterisk/extensions.conf . **В данном примере:** DID транка – 17472325060 Имя транка – TEST\_LINE ``` exten => 17472325060,1,Set(CALLERID(num)=${CALLERID(num):1}) same = n,Set(DB(CLID_OUT/${CALLERID(num)})=${EXTEN}) same = n,Set(CURLOPT(hashcompat)=yes) same = n,Set(CURLOPT(httptimeout)=5) same = n,Set(CURLOPT(conntimeout)=5) same = n,Set(HASH(forwardHash)=${CURL(http://localhost:8077/forward?phone=${CALLERID(num)})}) same = n,Set(CALLERID(name)=TEST_LINE-${HASH(forwardHash,name)}) same = n,GoSub(callrecord,${EXTEN},1) same = n,NoOp(${CALLERID(num)}) same = n,NoOp(${CALLERID(name)}) same = n,Dial(SIP/213) same = n,Hangup() ``` При внесении изменений в диалплан Астериска нужно быть предельно внимательным.\ Это может влиять на логику всех звонков, в том числе полностью отключить прием звонков. # Включение кастомизатора (/custom_common/vklyuchenie-kastomizatora) Для включения исполняемого файла кастомизации необходимо: * открыть конфигурацию модуля по адресу `http://:8077/config`(где \<Asterisk IP> - IP-адрес вашего Asterisk); * перейти в раздел **Настойка –> Модуль**; * Кастомизатор включен по умолчанию – достаточно выбрать и включить нужную кастомизацию; * Сохранить изменения, нажав соответствующую кнопку внизу страницы. По умолчанию уже включены и исполняются кастомизации, связанные с номерами телефонов, именем файла записи. Скриншот админки itgrix_bx. В itgrix_amo включение кастомизатора аналогичное. После изменения файлов кастомизатора изменения применяются автоматически, модуль перезагружать не нужно. # Подписка BitrixGPT + Маркетплейс и Itgrix (/faq/bx24-market-subscription) 28 апреля 2021 г. мы опубликовали новое [приложение **Itgrix**](https://www.bitrix24.ru/apps/?app=itgro.asterisk) в маркете Битрикс24. Оно распространялось в рамках подписки, которая тогда называлась «Маркет Плюс» (сейчас — «BitrixGPT + Маркетплейс»).\ Сейчас наши приложения выглядят [так](https://www.bitrix24.ru/apps/?partner_id=236534/). **Приложение можно установить, только если на портале есть активный коммерческий тариф и подписка BitrixGPT + Маркетплейс.** Для подписки доступен пробный период. Актуальные условия и стоимость зависят от тарифа и указаны в Битрикс24. 15 апреля Маркет Плюс добавили и в коробочных порталах (Нужна версии модуля REST 20.200.0). У клиентов в коробке она появится соответственно после обновления портала. В облачном Битрикс24 пробный доступ к приложениям включается в виджете «Мой тариф»: в разделе «Маркетплейс» нажмите «Включить демо». #### [Подробнее о подписке BitrixGPT + Маркетплейс](https://helpdesk.bitrix24.ru/open/17451118/) [#podrobnee-pro-market-plyus] ### **Главные ограничения подписной лицензии от полного функционала:** [#glavnye-ogranicheniya-podpisnoi-licenzii-ot-polnogo-funkcionala] * Только **5 пользователей**, на которых регистрируются звонки.\ Настраиваются через админку * Не доступен функционал настройки черных/белых списков. * Нельзя включить создание и автозакрытие задач по пропущенному звонку. * Только базовые кастомизации. **Остальной функционал работает:** * Базовые функции телефонии (создание лидов, звонков, записи, карточка звонка, с2с). * Гибкая настройка бизнес-логики (первый ответственный, ответственный за пропущенные). * Транки и внешние линии для сквозной аналитики. [Таблица сравнения версий.](/faq/itgrix-versions) Сразу после установки приложения включится 14-дневный триал с полным функционалом. После которого включатся ограничения, и нужно будет выбрать шесть пользователей. **Для возврата к полному функционалу после истечения триала нужно приобрести полную лицензию.**\ **Это необходимо, чтобы мы могли полноценно поддерживать и** [**развивать приложение**](/changelog-bx)**.** Ссылка на страницу цен и оплаты есть в админке, в CRM во вкладке приложения и в письмах. ### **Что у текущих клиентов** [#chto-u-tekushikh-klientov] На коробках и облаках, где уже установлено старое платное приложение, **оно будет** **работать без требования купить подписку до конца оплаченного периода.** После обновления коробочного портала и **окончания лицензии приложения itgrix** - включится требование приобрести подписку. Поэтому сейчас лучше продлиться по-максимуму. Старое платное приложение (asterisk\_bx24) скрыто с витрины - не отображается в маркете и его описание не показывается в порталах. **Но приложение функционирует и продолжает работать.** ### Переавторизация приложения [#pereavtorizaciya-prilozheniya] Если что-то ломается, то нужно будет установить приложение [Asterisk интеграция Itgrix(РФ и РБ )](https://www.bitrix24.ru/apps/app/itgro.asterisk/), либо [Asterisk интеграция: Itgrix(KZ и .com)](https://www.bitrix24.kz/apps/app/itgro.asteriskbx24free/), и переавторизовать серверную часть модуля в портале. На странице Настройка - Битрикс24 нажать кнопку Переподключить. Выбрать нужное приложение, нажать Авторизовать.
Если по какой то причине не сработает автоматическая авторизация, появится окно с кодом авторизации
Нужно скопировать этот код, вставить в поле Код авторизации и нажать Применить
После переустановки приложения, в CRM, нужно зайти в настройки телефонии и выбрать новое приложение по умолчанию для исходящих звонков. Поиск
Телефония - Настройка телефонии - Общие настройки
Настройка номеров по-умолчанию
# Детальные статусы звонка (/faq/detalnye-statusy-zvonka) Начиная с версий Itgrix bx [3.5.1](/changelog-bx#3.5.1) и Itgrix amo [2.8.0](/changelog-amo#2.8.0), мы расширили список распознаваемых статусов звонков от всего двух (Успешный и Пропущенный) до почти всех, какие поддерживаются в CRM. ## Теперь нам нужно Extra [#teper-nam-nuzhno-extra] Одновременно с этим возросли наши требования к настройке Asterisk: для выяснения результата звонка нам необходимо наличие поля "extra" в таблице CEL. Если вдруг у вас его нет, то статусы звонка будут работать по-старому с только двумя базовыми значениями. Несмотря на временную поддержку CEL без extra, оставлять настройки в несоответствующем системным требованиям виде не стоит, потому что мы уже опираемся на содержание extra для обработки перехвата звонков и будем рассчитывать на наличие extra при разработке новых функций. Если новые статусы звонка пока не соответствуют вашим ожиданиям, можно временно их отключить, сделав поле extra недоступным. Для этого нужно в конфиге в поле database.column\_name\_aliases.cel\_extra прописать значение "id" вместо "extra" - тогда модуль вместо extra будет смотреть в поле id, не увидит ожидаемых данных и будет работать без них по-старому. Не забудьте перезапустить службу чтобы изменения вступили в силу и сообщить нам что нужно изменить в статусах звонков чтобы они работали более правильно. ## Статусы в Asterisk [#statusy-v-asterisk] В основе статусов звонков лежит новое для нас свойство звонка - **результат**. Это итог попытки абонента А позвонить абоненту Б, выражаемый [кодом из протокола SIP](https://en.wikipedia.org/wiki/List_of_SIP_response_codes). Коды по виду и смыслу похожи на статус-коды протокола HTTP, например 404 означает "не найдено", но в приложении к телефонии.\ Результат звонка не является в прямом смысле статус-кодом SIP, но набор ситуаций, описываемых этими кодами, очень подходит по смыслу. Чтобы определить результат звонка, мы опираемся на содержимое поля extra, где есть задаваемые Asterisk'ом значения `hangup_cause` и `dial_status`.\ `hangup_cause` принимает значения от 0 до 127, и некоторые из них [соответствуют](https://wiki.asterisk.org/wiki/display/AST/Hangup+Cause+Mappings) одному или нескольким статус-кодам SIP.\ `dial_status` может быть пустым или принимать [одно из 9 значений](https://www.voip-info.org/asterisk-variable-dialstatus/), таких как "ANSWERED" или "CANCEL".\ Оба этих поля вместе позволяют нам определить результат звонка: | hangup cause | dial status | Результат звонка | | ------------------------------------------------------ | --------------------------------- | --------------------------------------------- | | 0 Не определено | | 0 Неизвестно - обрабатываем звонок по-старому | | любой | CANCEL | 480 Временно недоступен | | любой | CHANUNAVAIL
CONGESTION
| 500 Ошибка сервера | | 1 Unallocated
20 SubscriberAbsent
| ANSWER | 200 Успех | | 1 Unallocated
20 SubscriberAbsent
| | 404 Не найдено | | 16 NormalClearing | пусто
ANSWER
| 200 Успех | | 16 NormalClearing | NOANSWER | 408 Таймаут запроса | | 16 NormalClearing | BUSY | 486 Абонент занят | | 17 UserBusy | | 486 Абонент занят | | 18 NoUserResponse | | 408 Таймаут запроса | | 19 NoAnswer | | 480 Временно недоступен | | 21 CallRejected | | 603 Вызов отклонён | | 26 AnsweredElsewhere | | 200 Успех | | 28 InvalidNumberFormat | | 484 Не полный адрес | | 34 NormalCircuitCongestion
127 Interworking
| | 500 Ошибка сервера | | 38 NetworkOutOfOrder | | 500 Ошибка сервера | | 44 RequestedChanUnavail | ANSWER | 200 Успех | | 44 RequestedChanUnavail | | 500 Ошибка сервера | | 58 BearercapabilityNotavail | | 488 Невозможно принять | | 66 ChanNotImplemented | ANSWER | 200 Успех | | 66 ChanNotImplemented | | 405 Метод не поддерживается | Очевидно, что здесь учтены не все 1280 возможных комбинаций. Некоторые значения `hangup_cause` не используются Asterisk, некоторые комбинации не имеют смысла и невозможны, но самое главное - наше предварительное исследование показало, что этот набор вариантов покрывает все распространённые случаи.\ По мере обнаружения, новые случаи будут добавляться в список, а пока они будут обрабатываться по-старому, с двумя вариантами. ## Статусы в CRM [#statusy-v-crm] Каждая CRM конечно же имеет своё представление о том, какие у звонка могут быть статусы.\ Они зависят от точки зрения конкретной CRM на роль звонков в бизнес-процессе и модель взаимодействия сотрудника со звонком.\ Важно, что в CRM как задавать, так и читать статус звонка могут пользователи, а не только автоматика, и поэтому список вариантов должен быть интуитивно понятным и не слишком большим.\ На этот уменьшенный набор статусов мы транслируем наш набор результатов звонка. ### Bitrix24 [#bitrix24] [Статусы звонков в Битрикс24](https://helpdesk.bitrix24.ru/open/6017375/?sphrase_id=69423046) основаны на статус-кодах SIP, так же как и наш результат звонка, с небольшими особенностями: | Статус | Описание от Битрикс24 | Пример отображаемого текста | | ---------------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | | 200 Успешный звонок | запрос был успешно принят, распознан и подтвержден | Входящий звонок от \<номер> завершен. Успешный звонок | | 304 Пропущенный звонок | для этого статуса мы взяли нестандартный код | Пропущен входящий звонок от \<номер>. Пропущенный звонок | | 402 Недостаточно средств на счету | требуется оплата | Вы не можете совершить звонок, на вашем счету недостаточно средств. | | 403 Запрещено | абонент не зарегистрирован | Звонок на номер \<номер> завершен. Запрещено | | 404 Неверный номер | вызываемый абонент не найден, нет такого SIP-номера | Звонок на номер \<номер> невозможен. Данное направление не обслуживается. | | 423 Заблокировано | сервер отклоняет запрос, так как слишком короткий интервал (или номер в черном списке Битрикс24) | нет | | 480 Временно не доступен | временно недоступное направление, попробуйте позвонить позже | Абонент \<номер> временно недоступен. | | 484 Данное направление не доступно | принят запрос с неполным адресом | Звонок на номер \<номер> невозможен. Данное направление не обслуживается. | | 486 Занято | абонент занят | Абонент \<номер> занят другим звонком. | | 500 Внутренняя ошибка сервера | звонок на абонента, который не зарегистрирован в сети, либо выключил телефон | нет | | 503 Данное направление не доступно | сервер не может в данный момент обслужить вызов из-за перегрузки или проведения технического обслуживания | Звонок на номер \<номер> завершен. Данное направление не доступно | | 603 Отклонено | вызов отменен из-за "падения" сети | Абонент \<номер> отменил вызов. | | 603-S Вызов отменен | вызываемый пользователь не желает принимать входящие вызовы, не указывая причину отказа | Звонок на номер \<номер> отменен. | Итоговый статус определяется по результату звонка: | Результат звонка | Доп условия | Статус BX24 | | --------------------------- | ---------------------------- | ---------------------------------- | | 200 Успех | Звонок входящий неотвеченный | 304 Пропущенный звонок | | 200 Успех | | 200 Успешный звонок | | 404 Не найдено | | 404 Неверный номер | | 405 Метод не поддерживается | | 405 | | 408 Таймаут запроса | | 304 Пропущенный звонок | | 480 Временно недоступен | | 304 Пропущенный звонок | | 484 Не полный адрес | | 484 Данное направление не доступно | | 486 Абонент занят | Звонок входящий неотвеченный | 304 Пропущенный звонок | | 486 Абонент занят | | 486 Занято | | 488 Невозможно принять | | 484 Данное направление не доступно | | 500 Ошибка сервера | | 500 Внутренняя ошибка сервера | | 603 Вызов отклонён | | 603 Отклонено | | 0 Неизвестно | Отвеченный звонок | 200 Успешный звонок | | 0 Неизвестно | Неотвеченный звонок | 304 Пропущенный звонок | ### amoCRM [#amocrm] [Статусы звонка в Amo](https://www.amocrm.ru/developers/content/crm_platform/calls-api) не основаны на статус-кодах SIP, а нацелены по смыслу на заполнение пользователем: 1. Оставил голосовое сообщение 2. Перезвонить позже 3. Нет на месте 4. Разговор состоялся 5. Неверный номер 6. Не дозвонился 7. Номер занят Кроме статуса, в Амо также есть поле "Результат звонка", которое содержит произвольный **текст**. Мы постарались использовать этот текст чтобы сделать статус интуитивно понятным. Данные звонка Amo по результату звонка определяются так: | Результат звонка | Доп условия | Статус amoCRM | Текст | | ------------------------------------------------------ | ---------------------------- | -------------------- | ---------------------- | | 200 Успех | Звонок входящий неотвеченный | 6 Не дозвонился | Пропущенный звонок | | 200 Успех | | 4 Разговор состоялся | Успешный звонок | | 404 Не найдено | | 5 Неверный номер | Номер не обслуживается | | 408 Таймаут запроса
480 Временно недоступен
| | 3 Нет на месте | Абонент не ответил | | 488 Невозможно принять | | 5 Неверный номер | Ошибка оператора связи | | 484 Не полный адрес | | 5 Неверный номер | Некорректный номер | | 486 Абонент занят | Звонок входящий неотвеченный | 6 Не дозвонился | Номер занят | | 486 Абонент занят | | 7 Номер занят | Номер занят | | 603 Вызов отклонён | | 2 Перезвонить позже | Вызов отклонён | | 0 Неизвестно | Отвеченный звонок | 4 Разговор состоялся | | | 0 Неизвестно | Неотвеченный звонок | 6 Не дозвонился | | ## Настройка статуса звонка в кастомизации [#nastroika-statusa-zvonka-v-kastomizacii] Если по какой то причине (маршрутизация, механика работы оператора телефонии) статус звонка приходит неверный (например пропущенный вместо успешного), его можно кастомизировать. Кастомизация делается в коде скрипта, файл [/opt/itgrix\_\{crm}/customizer/actions/process\_final\_params.php](/custom_bx#id-5-process_final_params)\ \ Пример: ```php $this->logDebug('params: '.json_encode($params)); if ($params['call_full']['channel']['was_answered'] == true) { $params['STATUS_CODE'] = 200; } return array( 'state' => 'success', 'data' => $params, ); ``` # Как оставить отзыв о приложении Itgrix в amoCRM? (/faq/how-to-leave-a-review-amo) Чтобы оставить отзыв в amoCRM, нужно обладать правами администратора. Перейдите в **амоМаркет - Маркетплейс**
Нажмите на вкладку **Установленные** и выберите виджет **Asterisk-connector Itgrix**
Откройте виджет и нажмите **Оставить отзыв**
Напишите отзыв и нажмите кнопку **Отправить**.
**Спасибо, вы тоже великолепны**! Отправьте нам скрин отзыва и добавим вам **+1 месяц** к сроку окончания вашей лицензии на Itgrix. # Как оставить отзыв о приложении Itgrix в Битрикс24? (/faq/how-to-leave-a-review-bx24) Перейдите в «Маркет» на вашем портале Битрикс24, нажмите на кнопку **Ещё – Установленные приложения**.
Откроется список приложений. Найдите среди них приложение **Itgrix** и кликните на него.
В открывшемся окне приложения пролистайте вниз до раздела «Отзывы» и нажмите **Добавить отзыв.**
Напишите отзыв и нажмите кнопку **Отправить.**
Спасибо, **вы тоже великолепны!** Отправьте нам скрин отзыва и добавим вам **+1 месяц** к сроку окончания вашей лицензии на Itgrix. # Как оплатить решение (/faq/how-to-pay) Счет на оплату интеграции автоматически отправляется на контактный Email перед завершением срока регистрации. Если по какой-то причине вы не получили счет или установили решение впервые и не до конца разобрались, как оплатить – [обратитесь к нашим специалистам любым удобным способом](/contacts). ## Способы оплаты [#sposoby-oplaty] ### Для клиентов в Российской Федерации и Беларуси (Оплата в рублях) [#dlya-klientov-v-rossiiskoi-federacii-i-belarusi-oplata-v-rublyakh] * Безналичная оплата по реквизитам организации. (Подходит для клиентов из Беларуси) Чтобы выставить счет, нам потребуются ваши реквизиты (карточка компании); * Банковской картой (выпущенная на территории РФ) через эквайринг SberPay или YooMoney; * Через платежные сервисы: YooMoney, SberPay, AlfaPay. После оплаты банковской картой, электронными деньгами или системой интернет-банкинга, вы получите кассовый чек в соответствии с 54 ФЗ. ### Для клиентов из Казахстана (Оплата в тенге) [#dlya-klientov-iz-kazakhstana-oplata-v-tenge] * Безналичная оплата по реквизитам организации от юр.лица в Казахстане (ТОО Айтигро). Чтобы выставить счет, нам потребуются ваши реквизиты (карточка компании). * Банковской картой (Visa, MasterCard) через эквайринг FreedomPay.
После оплаты банковской картой, вы получите кассовый чек на указанный номер телефона или e-mail. ### Для клиентов из Узбекистана (Оплата в тенге или долларах) [#dlya-klientov-iz-uzbekistana-oplata-v-tenge-ili-dollarakh] * Банковской картой (Visa, MasterCard). * Через нашего партнера в Узбекистане.\ Партнер оплатит доступным ему способом.[ Напишите нам](/contacts), пожалуйста, и мы предоставим контакты наших партнеров в вашей стране. ### Для клиентов из других стран (Оплата в долларах) [#dlya-klientov-iz-drugikh-stran-oplata-v-dollarakh] * Банковская карта (Visa, MasterCard) через FreedomPay. После оплаты банковской картой, вы получите кассовый чек на указанный номер телефона или e-mail. * Paypal
## Акты [#akty] После поступления оплаты на расчетный счет мы отправляем следующие документы: * Акт приема-передачи программного обеспечения. (для клиентов из РФ и Беларуси) * Акт выполненных работ / Оказанных услуг (для клиентов из Казахстана) Документы отправляются через электронный документооборот (Диадок, Учет.ЭДО ) или почтой (по запросу на эл.адрес [docs@itgro.ru](mailto:docs@itgro.ru)). Мы еженедельно отправляем новым контрагентам приглашения по обмену документами по этим системам ЭДО. Чтобы получить электронные акты нужно просто принять приглашение. # FAQ (/faq) # Сравнения версий Itgrix для Битрикс24 (/faq/itgrix-versions) | | Free | По подписке | Полная | | ------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------: | :---------: | :--------------------: | | **Количество пользователей** | 2 | 5 | Ограничено тарифом CRM | | Неограниченное число транков и источников ([сквозная аналитика](/settings/additional/end-to-end-analytics)) | Источник звонка всегда CALL | ✅ | ✅ | | Загрузка записей файлами | ✅ | ✅ | ✅ | | Загрузка записей ссылками | ❌ | ✅ | ✅ | | Изменение входящего номера перед отправкой в Б24 | ✅ | ✅ | ✅ | | Изменение номера оператора | ✅ | ✅ | ✅ | | Изменение параметров click-to-call | ✅ | ✅ | ✅ | | Изменение пути/имени аудиозаписи | ✅ | ✅ | ✅ | | Кастомизация [need\_registration](/custom_bx) | ✅ | ✅ | ✅ | | [Остальные кастомизации](/custom_bx) | ❌ | ❌ | ✅ | | [Автораспределение с учетом рабочего времени](/settings/autodistribution/autodistribution-and-timeman) | ❌ | ✅ | ✅ | | Настройка ч/б списков в админке | ❌ | ❌ | ✅ | | Создание[ задач по пропущенному звонку](/custom_bx/task-for-missed-call) и их [автозакрытие при перезвоне](/settings/additional/auto-mange-tasks) | ❌ | ❌ | ✅ | | Распознавание [FMC номеров](/settings/additional/fmc-numbers) | ❌ | ❌ | ✅ | При установке приложения предоставляется бесплатный тестовый период с полным функционалом на 7 дней, плюс 7 дней по запросу. Далее включаются ограничения: * Для [подписного приложения](https://www.bitrix24.ru/apps/?app=itgro.asterisk) – включатся ограничения подписного приложения; * Для [бесплатного приложения](https://www.bitrix24.kz/apps/app/itgro.asteriskbx24free/) - включится ограниченный режим. Необходим доступ к серверу лицензирования lk.bx24asterisk.ru, иначе действует ограниченная лицензия с минимальным функционалом. # Возможности Itgrix в сравнение с SIP-коннектором для Битрикс24 (/faq/itgrix-vs-sip-connector) В качестве подключения Asterisk к Битрикс24 можно использовать [**SIP-коннектор**](https://helpdesk.bitrix24.ru/open/5838389/)**.** На стороне Asterisk настраивается sip-транк, куда направляется весь голосовой трафик. Транк подключается к телефонии Битрикс24 через SIP-коннектор с помесячной оплатой – [Подробнее о подключении](https://helpdesk.bitrix24.ru/open/6803851/). Сравнения нашего решения Itgrix и SIP-коннектора мы собрали в наглядную таблицу:
SIP-коннекторAsterisk-коннектор Itgrix
SIP-коннекторAsterisk-коннектор Itgrix
Плюсы
  • Можно звонить прямо из браузера с открытой вкладкой Битрикса;
  • Можно звонить через мобильное приложение Битрикс24;
  • Настройка логики звонков через настройку телефонии Б24;
  • Оценка звонка из коробки

  • Маршрутизация вызовов и голосовой трафик полностью остаются на стороне вашей АТС – это сокращает время соединения и улучшает качество связи;
  • Вам не нужно перенастраивать Asterisk, подключенные IP-телефоны и софт-фоны на рабочих местах продолжат работать;
  • Телефония работает с закрытым корпоративным порталом, создаются звонки и лиды;
  • Если Битрикс24 не работает, то телефония продолжит работать, а после восстановления соединения все звонки загрузятся в CRM;
  • Неограниченное количество транков и до 100 одновременных разговоров (протестированная нагрузка).
Минусы
  • Голосовой трафик проходит через облачную телефонию Voximplant. Используя облачный сервис, нужно позаботиться о безопасности;
  • Если Б24 не работает, то телефония не работает;
  • Максимум 10 транков;
  • Логика звонка настраивается только в Б24;
  • Имеющиеся телефонные аппараты и софт-фоны нужно заново подключать к облачной телефонии Битрикса.
  • Для закрытой сети нужно открывать диапазон портов для голосового трафика.

  • Невозможно совершить звонок из браузера, но можно использовать софтфон – дополнительную программу на компьютере или смартфоне, подключенную к Asterisk.
#### Полезная информация про sip-коннектор: [#poleznaya-informaciya-pro-sip-konnektor] * Подключить можно не более 10 облачных АТС. Под подключением понимается использование одного sip-логина. То есть, если в рамках подключения 4-х АТС имеется по 15 номеров на каждую АТС, но все они обращаются к одному sip-логину, то такие подключения будут работать все. Каждое подключение облачной АТС не ограничено по количеству входящих линий, то есть на это подключение можно направлять неограниченное количество звонков (но число звонков может быть ограничено вашим оператором облачной АТС). * Битрикс ограничивает количество звонков в час. Производительность может подобрать ваш системный администратор эмпирическим путем. Так как в процессе разговоров создаются лиды, загружаются записи. Это все нужно тестировать на вашем сервере * Есть требования к скорости интернета, минимальная скорость интернета – 128 кбит/c на каждый разговор. * Не Битрикс подключается к вашей АТС, а Воксимплант * Серверы Voximplant находятся в России # Как отключить отображение звонков в календаре (/faq/kak-otklyuchit-otobrazhenie-zvonkov-v-kalendare) Нужно зайти в **Настройки CRM –> Другое –> Прочие настройки –> раздел Дела** и отключить первый параметр. # Как посмотреть статистику по звонкам сотрудников (/faq/kak-posmotret-statistiku-po-zvonkam-sotrudnikov) Раздел **Телефония** –> **Детализация звонков**, позволяет формировать отчеты по звонкам каждого из сотрудников и компании в целом – с указанием направления и статуса звонка. Также можно сформировать отчет по клиенту, выбрав его в списке сущностей. Отчет можно выгрузить в Excel. При формировании отчета **можно добавить или удалить доступные параметры**: * Дата вызова – в выпадающем списке можно выбрать интересующий вас период; * Время звонка – можно указать время звонка в секундах; * Конкретного сотрудника или компанию в целом; * Статус звонка (успешный/неуспешный); * Тип звонка (входящий/исходящий); * CRM (Лид/Компания/Контакт). # Офлайн установка (только для Битрикс24) (/faq/offline-install) На закрытых системах (без доступа в Интернет) модуль Itgrix невозможно установить через скрипт `autoinstaller_.sh` (по адресу `https://itgrix.ru/download/autoinstaller_.sh`). Для таких случаев предусмотрена возможность установки офлайн: 1. Скачать установочный файл на ПК с доступом в Интернет. 2. Доставить установочный файл на сервер где требуется установить модуль Itgrix. 3. Запустить установку. ## Скачать установочный файл [#skachat-ustanovochnyi-fail] ### Через онлайн интерфейс [#cherez-onlain-interfeis] По адресу [https://itgrix.ru/offline\_install/](https://itgrix.ru/offline_install/) можно получить установочный файл модуля через онлайн интерфейс. Выберите необходимые параметры и нажмите кнопку "Скачать" - и установочный файл будет загружен на ваш компьютер. ### Через терминал [#cherez-terminal] Для получения устоновочного файла нужно сделать запрос на узел `https://bx24asterisk.ru/api/v3/get_offline_installer.php` со следующими параметрами: * **`crm`** - краткое название CRM, для которой установлен модуль: * `bx` для itgrix\_bx (Битрикс24); * **`arch`** - краткое название архитектуры процессора: * `i386` для 32-битных процессоров на базе архитектуры x86 (в т.ч. i586, i686 и др.); * `amd64` для 64-битных процессоров на базе архитектуры x86-64 (также известна как x64, Intel 64, AMD64 и др.); * **`version`** - номер версии, которую нужно установить, например, `3.12.0`; **не обязательно:** если не указана, будет использована текущая последняя версия; нужно указать, например, при установке поддерживаемой, но не последней версии: * [Change log (new versions) itgrix\_bx](/changelog-bx) - для Битрикс24. #### Примеры [#primery] Установка модуля itgrix\_bx (Битрикс24) **текущей последней версии** на 64-битном сервере. Скачиваем установщик, например, с помощью `curl`: ```bash curl -OJL "https://bx24asterisk.ru/api/v3/get_offline_installer.php?crm=bx&arch=amd64" ``` ## Установка [#ustanovka] После скачивания установочного файла нужно доставить его на сервер, где требуется установить модуль. Установочный файл - самораспаковывающийся архив в виде shell-скрипта. Пример: `itgrix_bx-amd64-install-v3.12.3.sh` Всё, что нужно сделать для установки, - это запустить файл от **имени root или через sudo:** ```bash sudo bash '<путь>/itgrix_bx-amd64-install-v3.12.3.sh' ``` Процесс установки аналогичен онлайн-установке (через скрипт `autoinstaller_.sh`), но не требует скачивания файлов модуля и другой информации, - все необходимое уже содержится в самораспаковывающемся архиве. Установка завершена. # Офлайн обновление (/faq/offline-update) На закрытых системах (без доступа в Интернет) модуль Itgrix невозможно обновить через скрипт `update.sh` (в папке `/opt/itgrix_/`). Для таких случаев предусмотрена возможность обновления офлайн: 1. Скачать файл обновления на ПК с доступом в Интернет. 2. Доставить файл обновления на сервер с установленным модулем Itgrix. 3. Запустить обновление. ## Скачать файл обновления [#skachat-fail-obnovleniya] ### Через онлайн интерфейс [#cherez-onlain-interfeis] По адресу [https://itgrix.ru/offline\_updates/](https://itgrix.ru/offline_updates/) можно получить обновление модуля через онлайн интерфейс. Выберите необходимые параметры и нажмите кнопку "Скачать обновления" - и файл обновления будет загружен на ваш компьютер. ### Через терминал [#cherez-terminal] Для получения файла обновления нужно сделать запрос на узел `https://bx24asterisk.ru/api/v3/get_offline_update.php` со следующими параметрами: * **`crm`** - краткое название CRM, для которой установлен модуль: * `bx` для itgrix\_bx (Битрикс24); * `amo` для itgrix\_amo (amoCRM); * **`arch`** - краткое название архитектуры процессора: * `i386` для 32-битных процессоров на базе архитектуры x86 (в т.ч. i586, i686 и др.); * `amd64` для 64-битных процессоров на базе архитектуры x86-64 (также известна как x64, Intel 64, AMD64 и др.); * **`version_from`** - текущая установленная версия, например, `3.5.0`; * `version_to` - версия, до которой нужно обновиться; **не обязательно:** если не указана, будет использована текущая последняя версия; нужно указать, например, если обновляться до поддерживаемой, но не последней версии: * [Change log (new versions) itgrix\_bx](/changelog-bx) - для Битрикс24; * [Change log (new versions) itgrix\_kommo](/changelog-amo) - для kommoCRM. Размер файла зависит от количества промежуточных версий, необходимых для обновления от `version_from` до `version_to`. Архивы с этими промежуточными версиями будут включены в файл обновления (но НЕ все промежуточные версии будут добавлены, а только необходимые для корректного обновления). #### Примеры [#primery] Модуль itgrix\_bx (Битрикс24) версии 3.5.0 установлен на 64-битном сервере, нужно обновить **до текущей последней версии.** Скачиваем обновление, например, с помощью `curl`: ```bash curl -OJL "https://bx24asterisk.ru/api/v3/get_offline_update.php?crm=bx&arch=amd64&version_from=3.5.0" ``` Если нужно получить обновление **только до версии 3.5.3,** то укажем параметр `version_to=3.5.3`: ```bash curl -OJL "https://bx24asterisk.ru/api/v3/get_offline_update.php?crm=bx&arch=amd64&version_from=3.5.0&version_to=3.5.3" ``` ## Установка обновления [#ustanovka-obnovleniya] После скачивания файл обновления нужно доставить на сервер, на котором установлен модуль. Файл обновления - самораспаковывающийся архив в виде shell-скрипта. Пример: `itgrix_bx-amd64-update-v3.5.0_to_v3.5.3.sh` Всё, что нужно сделать для установки обновления, - это запустить файл от **имени root или через sudo:** ```bash sudo bash <путь>/itgrix_bx-amd64-update-v3.5.0_to_v3.5.3.sh ``` Процесс обновления аналогичен онлайн-обновлению (через скрипт `/opt/itgrix_/update.sh`), но не требует скачивания промежуточных версий и другой информации, - все необходимое уже содержится в самораспаковывающемся архиве. Обновление завершено. # Политика интеграции Asterisk (/faq/politika-integracii-asterisk) При разработке продукта мы придерживались принципа невмешательства в конфигурацию Asterisk клиента. Это означает, что при внедрении нашего продукта: * Не меняется Dialplan: все маршруты звонков остаются прежними; * Не изменяются настройки Extensions или Trunks; * Нет никаких требований к системе кодирования потока; * Не меняется структура таблиц в вашей СУБД, модуль не генерирует никаких новых данных. Эта политика позволяет нам гарантировать работу вашей АТС согласно вашим настройкам по тем же правилам и с тем же качеством, что и до установки нашего решения. Модуль взаимодействует с Asterisk: 1. Посредством простых запросов на чтение в вашу СУБД (вы можете ограничить доступ соответствующим образом); 2. Посредством ORIGINATE-запросов через AMI созданным вами пользователем в manager.conf с параметрами, зафиксированными в файле конфигурации приложения; 3. Ряд других запросов к Asterisk на чтение, не влияющих на вызовы; 4. В том случае, если вам необходимо автоматическое распределение вызовов, вы самостоятельно меняете свой Dialplan, Asterisk инициирует запросы на номер ответственного сотрудника к нашему приложению (никакие действия без вашего контроля происходить не могут). # Политика оператора в отношении обработки персональных данных (/faq/politika-operatora-v-otnoshenii-obrabotki-personalnykh-dannykh) ### 1. Общие положения [#id-1.-obshie-polozheniya] Политика обработки персональных данных (далее – Политика) разработана в соответствии с Федеральным законом от 27.07.2006 №152-ФЗ «О персональных данных» (далее – ФЗ-152). Настоящая Политика определяет порядок обработки персональных данных и меры по обеспечению безопасности персональных данных ООО "Разумные решения" (далее – Оператор) с целью защиты прав и свобод человека и гражданина при обработке его персональных данных, в том числе защиты прав на неприкосновенность частной жизни, личную и семейную тайну.\ В Политике используются следующие основные понятия: 1. **Автоматизированная обработка персональных данных** – обработка персональных данных с помощью средств вычислительной техники; 2. **Блокирование персональных данных** – временное прекращение обработки персональных данных (за исключением случаев, если обработка необходима для уточнения персональных данных); 3. **Информационная система персональных данных** – совокупность содержащихся в базах данных персональных данных и обеспечивающих их обработку информационных технологий и технических средств; 4. **Обезличивание персональных данных** – действия, в результате которых невозможно определить без использования дополнительной информации принадлежность персональных данных конкретному субъекту персональных данных; 5. **Обработка персональных данных** – любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных; 6. **Оператор** – государственный орган, муниципальный орган, юридическое или физическое лицо, самостоятельно или совместно с другими лицами организующие и (или) осуществляющие обработку персональных данных, а также определяющие цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными; 7. **Персональные данные** – любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных); 8. **Предоставление персональных данных** – действия, направленные на раскрытие персональных данных определенному лицу или определенному кругу лиц; 9. **Распространение персональных данных** – действия, направленные на раскрытие персональных данных неопределенному кругу лиц (передача персональных данных) или на ознакомление с персональными данными неограниченного круга лиц, в том числе обнародование персональных данных в средствах массовой информации, размещение в информационно-телекоммуникационных сетях или предоставление доступа к персональным данным каким-либо иным способом; 10. **Трансграничная передача персональных данных** – передача персональных данных на территорию иностранного государства органу власти иностранного государства, иностранному физическому или иностранному юридическому лицу; 11. **Уничтожение персональных данных** – действия, в результате которых невозможно восстановить содержание персональных данных в информационной системе персональных данных и (или) результате которых уничтожаются материальные носители персональных данных. ### Принципы и условия обработки персональных данных [#principy-i-usloviya-obrabotki-personalnykh-dannykh] #### 2.1 Принципы обработки персональных данных [#id-2.1-principy-obrabotki-personalnykh-dannykh] Обработка персональных данных у Оператора осуществляется на основе следующих принципов: * законности и справедливости оснований; * ограничения обработки персональных данных достижением конкретных, заранее определенных и законных целей; * недопущения обработки персональных данных, несовместимой с целями сбора персональных данных; * недопущения объединения баз данных, содержащих персональные данные, обработка которых осуществляется в несовместимых между собой целях; * соответствия содержания и объема обрабатываемых персональных данных заявленным целям обработки; * недопущения обработки персональных данных, избыточных по отношению к заявленным целям обработки; * обеспечения точности, достаточности и актуальности персональных данных по отношению к целям обработки персональных данных; * уничтожения либо обезличивания персональных данных по достижении целей их обработки или в случае утраты необходимости в достижении этих целей, если иное не предусмотрено Федеральным законом. #### 2.2 Условия обработки персональных данных [#id-2.2-usloviya-obrabotki-personalnykh-dannykh] Оператор производит обработку персональных данных при наличии хотя бы одного из следующих условий:​ * обработка персональных данных осуществляется с согласия субъекта персональных данных на их обработку; * обработка персональных данных необходима для достижения целей, предусмотренных международным договором Российской Федерации или законом, для осуществления и выполнения возложенных законодательством Российской Федерации на оператора функций, полномочий и обязанностей; * обработка персональных данных необходима для осуществления правосудия, исполнения судебного акта, акта другого органа или должностного лица, подлежащих исполнению в соответствии с законодательством Российской Федерации об исполнительном производстве; * обработка персональных данных необходима для исполнения договора, стороной которого, выгодоприобретателем или поручителем по которому является субъект персональных данных, а также для заключения договора по инициативе субъекта персональных данных; * обработка персональных данных необходима для осуществления прав и законных интересов оператора или третьих лиц, либо для достижения общественно значимых целей при условии, что права и свободы субъекта персональных данных не будут нарушены; * осуществляется обработка персональных данных, доступ неограниченного круга лиц к которым предоставлен самим субъектом персональных данных либо по его просьбе (далее – общедоступные персональные данные); * осуществляется обработка персональных данных, подлежащих опубликованию или обязательному раскрытию в соответствии с Федеральным законом.​ #### 2.3 Конфиденциальность персональных данных [#id-2.3-konfidencialnost-personalnykh-dannykh] Оператор и иные лица, получившие доступ к персональным данным, обязаны не раскрывать третьим лицам и не распространять персональные данные без согласия субъекта персональных данных, если иное не предусмотрено Федеральным законом РФ. #### 2.4 Общедоступные источники персональных данных [#id-2.4-obshedostupnye-istochniki-personalnykh-dannykh] В целях информационного обеспечения у Оператора могут создаваться общедоступные источники персональных данных субъектов персональных данных, в том числе справочники и адресные книги. В общедоступные источники персональных данных с согласия субъекта персональных данных могут включаться его фамилия, имя, отчество, дата и место рождения, должность, номера контактных телефонов, адрес электронной почты и иные персональные данные, сообщаемые субъектом персональных данных. Сведения о субъекте персональных данных должны быть в любое время исключены из общедоступных источников персональных данных по требованию субъекта персональных данных или уполномоченного органа по защите прав субъектов персональных данных, а также по решению суда. #### 2.5 Специальные категории персональных данных [#id-2.5-specialnye-kategorii-personalnykh-dannykh] Обработка Оператором специальных категорий персональных данных, касающихся расовой или национальной принадлежности, политических взглядов, религиозных или философских убеждений, состояния здоровья, личной (интимной) жизни, допускается лишь в случаях, если: * субъект персональных данных дал согласие в письменной форме на обработку своих персональных данных; * персональные данные сделаны общедоступными субъектом персональных данных; * обработка персональных данных осуществляется в соответствии с законодательством о государственной социальной помощи, трудовым законодательством, законодательством Российской Федерации о пенсиях по государственному пенсионному обеспечению, о трудовых пенсиях; * обработка персональных данных необходима для защиты жизни, здоровья или иных жизненно важных интересов субъекта персональных данных либо других лиц, и получение согласия субъекта персональных данных невозможно; * обработка персональных данных осуществляется в медико-профилактических целях, в целях установления медицинского диагноза, оказания медицинских и медико-социальных услуг при условии, что обработка персональных данных осуществляется лицом, профессионально занимающимся медицинской деятельностью и обязанным в соответствии с законодательством Российской Федерации сохранять врачебную тайну; * обработка персональных данных необходима для установления или осуществления прав субъекта персональных данных или третьих лиц, а равно и в связи с осуществлением правосудия; * обработка персональных данных осуществляется в соответствии с законодательством об обязательных видах страхования, со страховым законодательством. Обработка специальных категорий персональных данных, осуществлявшаяся в случаях, предусмотренных пунктом 4 статьи 10 ФЗ-152 должна быть незамедлительно прекращена, если устранены причины, вследствие которых осуществлялась их обработка, если иное не установлено Федеральным законом. Обработка персональных данных о судимости может осуществляться Оператором исключительно в случаях и в порядке, которые определяются в соответствии с Федеральными законами. #### 2.6 Биометрические персональные данные [#id-2.6-biometricheskie-personalnye-dannye] Сведения, которые характеризуют физиологические и биологические особенности человека, на основании которых можно установить его личность – биометрические персональные данные – могут обрабатываться Оператором только при наличии согласия субъекта персональных данных в письменной форме. #### 2.7 Поручение обработки персональных данных другому лицу [#id-2.7-poruchenie-obrabotki-personalnykh-dannykh-drugomu-licu] Оператор вправе поручить обработку персональных данных другому лицу с согласия субъекта персональных данных, если иное не предусмотрено Федеральным законом, на основании заключаемого с этим лицом договора. Лицо, осуществляющее обработку персональных данных по поручению Оператора, обязано соблюдать принципы и правила обработки персональных данных, предусмотренные ФЗ-152 и настоящей Политикой. #### 2.8 Обработка персональных данных граждан Российской Федерации [#id-2.8-obrabotka-personalnykh-dannykh-grazhdan-rossiiskoi-federacii] В соответствии со статьей 2 Федерального закона от 21 июля 2014 года N 242-ФЗ «О внесении изменений в отдельные законодательные акты Российской Федерации в части уточнения порядка обработки персональных данных в информационно-телекоммуникационных сетях» при сборе персональных данных, в том числе посредством информационно-телекоммуникационной сети "Интернет", оператор обязан обеспечить запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение персональных данных граждан Российской Федерации с использованием баз данных, находящихся на территории Российской Федерации, за исключением случаев, когда: * Обработка персональных данных необходима для достижения целей, предусмотренных международным договором Российской Федерации или Федеральным законом, а также для осуществления и выполнения возложенных законодательством Российской Федерации на оператора функций, полномочий и обязанностей; * Обработка персональных данных необходима для осуществления правосудия, исполнения судебного акта, акта другого органа или должностного лица, подлежащих исполнению в соответствии с законодательством Российской Федерации об исполнительном производстве (далее – исполнение судебного акта); * Обработка персональных данных необходима для исполнения полномочий федеральных органов исполнительной власти, органов государственных внебюджетных фондов, исполнительных органов государственной власти субъектов Российской Федерации, органов местного самоуправления и функций организаций, участвующих в предоставлении государственных и муниципальных услуг соответственно, предусмотренных Федеральным законом от 27 июля 2010 года N 210-ФЗ«Об организации предоставления государственных и муниципальных услуг», включая регистрацию субъекта персональных данных на едином портале государственных и муниципальных услуг и (или) региональных порталах государственных и муниципальных услуг; * Обработка персональных данных необходима для осуществления профессиональной деятельности журналиста и (или) законной деятельности средств массовой информации либо научной, литературной или иной творческой деятельности при условии, что права и законные интересы субъекта персональных данных не будут нарушены. #### 2.9 Трансграничная передача персональных данных [#id-2.9-transgranichnaya-peredacha-personalnykh-dannykh] Оператор обязан убедиться в том, что иностранным государством, на территорию которого предполагается осуществлять передачу персональных данных, обеспечивается адекватная защита прав субъекта персональных данных, до начала осуществления такой передачи. Трансграничная передача персональных данных на территории иностранных государств, не обеспечивающих адекватной защиты прав субъекта персональных данных, может осуществляться в случаях: * наличия письменного согласия субъекта персональных данных на трансграничную передачу его персональных данных; * исполнения договора, стороной которого является субъект персональных данных. ### 3. Права субъекта персональных данных [#id-3.-prava-subekta-personalnykh-dannykh] #### 3.1 Согласие субъекта персональных данных на обработку его персональных данных [#id-3.1-soglasie-subekta-personalnykh-dannykh-na-obrabotku-ego-personalnykh-dannykh] Субъект персональных данных принимает решение о предоставлении его персональных данных и дает согласие на их обработку свободно, своей волей и в своем интересе. Согласие на обработку персональных данных может быть дано субъектом персональных данных или его представителем в любой форме, позволяющей подтвердить факт его получения, если иное не установлено Федеральным законом. #### 3.2 Отзыв согласия на обработку персональных данных [#id-3.2-otzyv-soglasiya-na-obrabotku-personalnykh-dannykh] Согласие на обработку персональных данных может быть отозвано субъектом персональных данных заявлением в письменной форме, направленным Оператору. В случае отзыва субъектом персональных данных согласия на обработку персональных данных Оператор вправе продолжить обработку персональных данных без согласия субъекта персональных данных при наличии иных оснований данной Политики и (или) Федерального закона. #### 3.3 Права субъекта персональных данных [#id-3.3-prava-subekta-personalnykh-dannykh] Субъект персональных данных имеет право на получение предоставленных им сведений, хранящихся у Оператора, по письменному заявлению, если иное не предусмотрено Федеральным законом. ### 4. Обеспечение безопастности персональных данных [#id-4.-obespechenie-bezopastnosti-personalnykh-dannykh] Безопасность персональных данных, обрабатываемых Оператором, обеспечивается реализацией правовых, организационных и технических мер, необходимых для обеспечения требований Федерального законодательства в области защиты персональных данных. Для предотвращения несанкционированного доступа к персональным данным Оператором применяются следующие организационно-технические меры: * назначение должностных лиц, ответственных за организацию обработки и защиты персональных данных; * ограничение состава лиц, допущенных к обработке персональных данных; * ознакомление субъектов с требованиями Федерального законодательства и нормативных документов Оператора по обработке и защите персональных данных; * организация учета и хранения находящихся в обращение носителей (машинных и физических), содержащих информацию с персональными данными; * определение угроз безопасности персональных данных при их обработке в информационных системах, формирование на их основе моделей угроз; * разработка на основе модели угроз системы защиты персональных данных; * проверка готовности и эффективности использования средств защиты информации; * разграничение доступа пользователей к информационным ресурсам и программно-аппаратным средствам обработки информации; * регистрация и учет действий пользователей информационных систем персональных данных; * использование антивирусных средств и средств восстановления системы защиты персональных данных; * применение в необходимых случаях средств межсетевого экранирования, обнаружения вторжений, анализа защищенности и средств криптографической защиты информации; * организация пропускного режима на территорию Оператора, охраны помещений с техническими средствами обработки персональных данных. ### 5. Заключительные положения [#id-5.-zaklyuchitelnye-polozheniya] Иные права и обязанности Оператора в связи с обработкой персональных данных определяются законодательством Российской Федерации в области персональных данных. Работники Оператора, чья вина в нарушении регулирующих обработку и защиту персональных данных норм установлена, несут дисциплинарную, административную, гражданско-правовую или уголовную ответственность в порядке, установленном федеральным законодательством. # Надежные софтфоны для Asterisk (/faq/soft-phones) ### MicroSIP [#microsip] Портативный SIP-софтфон с открытым исходным кодом. ОС: Windows, Linux, macOS [Скачать](https://www.microsip.org/downloads) Тип распространения: бесплатно
Установка Microsip Скачайте установочный файл (подходит для Windows, Linux, macOS ) [Скачать Microsip](https://www.microsip.org/download/MicroSIP-3.19.28.exe) Запустите установочный файл: Запустить установочный файл Выберите язык программного телефона: Выберите язык Запустите мастер установки, нажав «Далее»: Мастер установки Ознакомьтесь с условиями лицензионного соглашения, нажмите кнопку «Принимаю»: Лицензионное соглашение Укажите, что на рабочий стол нужно добавить ярлык программы, запускать MicroSIP при включении компьютера и нажмите кнопку «Далее»: Добавить ярлык на рабочий стол, запуск при включении компьютера Укажите путь установки программы и нажмите кнопку «Далее»: Путь установки программы Нажмите «Установить»: Установить Установка завершена, нажмите «Готово»: Установка завершена Нажмите «Разрешить доступ»: Разрешить доступ Программный телефон MicroSip установлен, настроим его. Нажмите на кнопку с треугольником в правом углу, чтобы открылось меню с настройками: Нажмите на кнопку с треугольником Выбирайте «Добавить аккаунт»: Добавить аккаунт Укажите данные для подключения к АТС(можно узнать у администратора АТС): Укажите данные для подключения к АТС Настройка успешно завершена. Это видно по статусу «Онлайн» в левом нижнем углу телефона: Настройка завершена
### PhonerLite [#phonerlite] VoIP-софтфон для Windows ОС: Windows [Скачать](http://www.phonerlite.de/download_en.htm) Тип распространения: бесплатно
Установка PhonerLite [Скачать PhonerLite](http://www.phonerlite.de/download_en.htm) После того как мы скачали и установили PhonerLite, нас встречает мастер настройки, который предлагает настроить учетную запись SIP для одного из известных VoIP-провайдеров или же продолжить в режиме ручной настройки. Мы будем использовать свою IP-АТС Asterisk, поэтому, выбираем ручную настройку и указываем IP-адрес нашего сервера и стандартный порт 5061 (используется CHAN\_SIP со стороны Asterisk), куда софтфон будет отправлять запросы на регистрацию. Выбираем ручную настройку Далее указываем имя пользователя, который предварительно уже создан на Asterisk в качестве внутреннего номера (extension), и пароль(можно узнать у администратора АТС) !\[Указываем имя пользователя ]\(/assets/phlext.jpg) Далее предлагается выбрать устройство ввода и вывода звука на вашем компьютере Выбор устройства звука Подтверждаем выполненные настройки. Также предлагается дать название новому профилю. Лучше придумать какое-либо название, потому что по умолчанию профиль будет иметь название соответствующее IP-адресу вашей IP-АТС Название профиля Если все настройки были выполнены правильно, то напротив новой учётной записи мы увидим сообщение **Registered**, свидетельствующее о том, что софтфон успешно зарегистрировался на IP-АТС, теперь можно совершать звонки Софтфон зарегистрирован
### Linphone [#linphone] Кроссплатформенный SIP клиент ОС: Windows, MacOS, Linux, Android, iOS, Windows Phone [Скачать](https://www.linphone.org/en/download/#linphoneapp) Тип распространения: бесплатно
Установка LINPHONE Рассмотрим настройки софтфона Linphone для работы с IP-АТС Asterisk. Устанавливать будем клиент для операционной системы Windows. Для этого нужно сначала скачать дистрибутив [с сайта разработчика](https://www.linphone.org/). Скачиваем самую последнюю версию. На момент написания статьи это 3.10.2 от 13 августа 2016. Затем нужно выполнить стандартную процедуру установки, согласившись со всеми лицензионными правилами и указав путь к папке для установки программы. В процессе установки вам предложат установить кодек **Cisco H.264**, рекомендуем согласиться с данным пунктом. Когда установка будет завершена, вам предложат создать учётную запись для совершения звонков по протоколу SIP. Нажимаем **Forward**. Далее нужно выбрать тип учётной записи. Доступно четыре варианта: 1. создание учётной записи на сайте linphone.org; 2. ввести аутентификационные данные ранее созданной учётной записи с сайта; 3. ввести учётные данные ранее созданной учётной записи SIP\ (нам подходит именно этот пункт, поскольку мы будем использовать учётные данные [внутреннего номера](https://wiki.merionet.ru/ip-telephoniya/9/nastrojka-extensions-freepbx13/), который создали ранее на нашей IP-АТС); 4. указать URI удалённого сервера конфигурации. Итак, выбираем **I have already a sip account and I just want to use it**. Вводим учётные данные, которые мы уже создали ранее на нашей IP-АТС. Например, номер 1021. Далее просто переносим их в Linphone, **192.168.1.148** – это адрес нашей IP-АТС. Если всё было сделано верно, то после регистрации напротив наших учётных данных мы увидим зеленый круг – **Online**, свидетельствующий о том, что наша учётная запись активна и можно совершать звонки при помощи клиента Linphone.
### Zoiper [#zoiper] Бесплатный софтфон для совершения голосовых и видеозвонков, а также обмена сообщениями через интернет (VoIP), использующий протоколы SIP и IAX. ОС: Windows, macOS, Linux, Android и iOS [Скачать](https://www.zoiper.com/en/voip-softphone/download/current) Тип распространения: бесплатно
Установка Zoiper Скачав приложение, переходим непосредственно к установке SIP-клиента: 1. ставим галочку о согласии с правилами лицензионного соглашения; 2. определяемся, какие дополнительные компоненты необходимо установить. Далее необходимо создать аккаунт. Для этого вы должны знать 3 основных параметра подключения: * user/user\@host – 125; * password – Gr56eQ; * domain/outbound proxy – 555.55.55.5. Этого будет достаточно, чтобы приступить к работе с Zoiper. Однако возможности этим не ограничиваются. Даже на бесплатной версии пользователю доступен большой функционал настроек. Клиент может настроить программу “под себя” в таких вещах как, например: * звук и видео; Имеется мастер настройки звука, с помощью которого можно протестировать новые настройки. * настройки контактов: определяется место, где хранить данные – на сервере или локально, откуда подгружать данные и т.д. * настройка оповещений пользователя; * выбор скина; В Zoiper можно выбрать один из 4 скинов * и другие настройки. Некоторые полезные вещи доступны только в платной версии. Например: переадресация, автоответчик и т.д.
### Softphone.Pro [#softphone.pro] SIP-софтфон разработанный для колл-центров, отделов продаж и удаленных сотрудников. ОС: Windows, macOS, Android [Скачать](https://ru.softphone.pro/select-product-trial) Тип распространения: платно, есть демо на 14 дней # Обновление приложения (/faq/update) Начиная с версии [3.5.0](/changelog-bx#3.5.0), обновление можно выполнить через админку, нажав кнопку Проверить рядом с текущей версией и далее Обновить. В ряде случаев такой способ будет недоступен, и тогда обновление модуля выполняетя на сервере, где он установлен, и должно производиться с аккаунта пользователя с правами администратора. **Используйте команду** | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | :------------------------: | :-------------------------: | | `/opt/itgrix_bx/update.sh` | `/opt/itgrix_amo/update.sh` | По умолчанию обновление будет выполнено на последнюю доступную версию. Этой же команде можно передавать версию в качестве опционального параметра. Например, так можно обновиться на версию 3.11.11 для itgrix\_bx или 3.0.8 для itgrix\_amo: | itgrix\_bx (Битрикс24) | itgrix\_amo (amoCRM) | | -------------------------------------------- | :-----------------------------------------: | | `/opt/itgrix_bx/update.sh --version=3.11.11` | `/opt/itgrix_amo/update.sh --version=3.0.8` | **Обратите внимание!**\ Скрипт самостоятельно определит разрядность системы, скачает актуальную версию и установит ее.\ После выполнения скрипт обновления перезапустит приложение. Если у вас версия ниже 3.3.2.1, то для перехода на новую систему обновлений понадобится запустить обновление дважды. В первый раз выполнится обновление до промежуточной версии 3.3.2.1, а во второй - до актуальной версии. Готово Если у вас закрытый сервер, то вы можете скачать файл обновления, следуя инструкциям в статье [Офлайн обновление](/faq/offline-update) ## **Установка версии 3 вместо версии 2** [#ustanovka-versii-3-vmesto-versii-2] **Проверим наличие старого скрипта установки и, если он есть, удалим его**\ \*\*\*\*(обычно автоинсталлер находится в корневой папке): `cd`\ \*\*\*\*`ll autoinstaller.sh`\ `rm autoinstaller.sh` \*\*\*\*\ \*\*\*\*1. Скачиваем последний autoinstaller: `wget https://bx24asterisk.ru/download/autoinstaller.sh`\ \*\*\*\*\ \*\*\*\*2. Устанавливаем новый модуль:\ \*\*\*\*\ \*\*\*\*`bash autoinstaller.sh`\ \*\*\*\*\ \*\*\*\*Процесс установки точно такой же, как и у старого модуля.\ После установки остановим службу:\ \*\*\*\*\ \*\*\*\*`service itgrix_bx stop`\ \*\*\*\*\ \*\*\*\*\ **3**. Переносим кастомизации:\ \*\*\*\*\ \*\*\*\*`bash /opt/itgrix_bx/migrateCustomizers.sh`\ \*\*\*\*\ **4**. Удаляем старый модуль:\ \*\*\*\*\ \*\*\*\*`bash /opt/bx24asterisk/remove.sh` **На вопрос, удалить ли конфиг, не соглашаемся – оставляем.**\ **Лог можно удалить.** **После запуска службы страница настроек модуля будет доступна по протоколу http и порту 8077 (порт используемый модулем по умолчанию).** **На странице настройки проверьте, что кастомизатор включен и путь до файла кастомизатора выглядит как /opt/itgrix\_bx/customizer.php** \*\*\*\*\ \*\*\*\*6. Запускаем новый модуль: `service itgrix_bx start` Новые файлы модуля будут находиться в папках`itgrix_bx`, описанных в [Статье про файлы](/for-admins/osnovnye-faily-modulya). 7\. Повторно интегрируем модуль в Битрикс24 или amoCRM через интерфейс админки. [Статья как авторизовать приложение](/how-to-fix/bagfix-avtorizacii-v-b24). ### ### Обновляем скрипт обновления (для старых версий до 2.14.8) [#obnovlyaem-skript-obnovleniya-dlya-starykh-versii-do-2.14.8] Если у вас версия 2.14.8 или более ранняя, сначала нужно обновить сам скрипт обновления. 1\. Сначала необходимо удалить старый: `cd /opt/bx24asterisk/`\ `rm update.sh` 2\. Скачать одним из способов: `wget https://bx24asterisk.ru/download/update.sh --no-check-certificate` либо `curl -k -O https://bx24asterisk.ru/download/update.sh` 3\. Добавить права на запуск: `chmod +x update.s` 4\. Для обновления модуля используйте новый скрипт:\ `/opt/bx24asterisk/update.sh` # Размещение модуля на стороннем сервере (/for-admins/another-server) Логика работы коннектора Itgrix позволяет установить его на отдельный сервер, необязательно к Asterisk. Это может вызвать дополнительные трудности, но это возможно. Мы все-таки рекомендуем устанавливать на тот же сервер, где размещен Asterisk. ### Требования для установки модуля на сторонний сервер: [#trebovaniya-dlya-ustanovki-modulya-na-storonnii-server] 1. Сервер, на который устанавливается модуль, должен удовлетворять [техническим требованиям](/ustanovka-modulya/trebovaniya-k-sisteme). 2. **Нужно обеспечить стабильные доступы** от сервера с модулем на сервер с Asterisk. \ 1\) получение записей из MySQL (обращения идут примерно 10 раз в секунду).\ 2\) отправка команд в AMI (при клике на телефон из портала).\ \ Для подключения пройдите настройку [подключения через мастер](/ustanovka-modulya/itgrix-bx-setup) или указажите в конфиге.\ Обратите внимание, что кнопка Заполнить автоматически в таком варианте не будет работать. 3. Необходимо разобраться с **получением файлов записей.** 1\) В поле *Адрес модуля для получения записей* указать актуальный адрес сервера с модулем.\ Именно этот адрес будет указан в ссылках на портале. Админка –> Настройки –> Asterisk 2\) Настроить **Asterisk**, чтобы он **отдавал файлы записей по запросу** от модуля. \ И в поле *Путь до папки с записями* указать актуальный адрес Астериска.\ По этому пути модуль будет обращаться за записями.\ Подробнее это описано в статье [Использование стороннего хранилища записей](/for-admins/another-storage). # Использование стороннего хранилища записей (/for-admins/another-storage) **Для использования стороннего хранилища записей необходимо указать следующие настройки модуля:** 1\) В блоке "Asterisk" в поле "recordings\_dir" пишем адрес сервера, который будет отдавать записи. Например, `"recordings_dir": "http://sip.records.ru:8123"` 2\) В блоке "App" в поле `"store_recordings_in_crm"` ставим false: `"store_recordings_in_crm": false` После завершения звонка в CRM будет указана ссылка на модуль с командой для скачивания файла и параметрами звонка (типа get\_record\_\[id звонка]\_from..\_to…) При клике по этой ссылке:\ 1\) модуль делает запрос в таблицу CDR, берет имя файла из поля `recordingfile`;\ 2\) к имени файла модуль добавляет значение переменной `"recordings_dir"` из конфига;\ 3\) перенаправляет запрос на адрес сервера с записями\ (адрес начинается с "http\://", "https\://", "//", "ftp\://" или файл не найден). **В итоге получаем ссылку подобного вида:** `http://sip.records.ru:8123/file_name.mp3` Если параметр `"recordings_dir_subdirs_by_date`" равен true, то: `http://sip.records.ru:8123/2018/02/02/file_name.mp3`\\ Сервер, хранящий записи, должен уметь обрабатывать подобные запросы. # Автозамена номеров телефонов (/for-admins/autoreplacement) Есть много способов записать один и тот же номер телефона. `81234567890`, `+71234567890`, `1234567890`, `8 (123) 456-78-90` - только несколько очевидных примеров для российских номеров, а если Вам звонят иностранные клиенты со всего мира, то количество вариантов возрастает многократно.\ Для человека между этими вариантами нет большой разницы - все сработают если набрать, сравнить два формата и понять что номер один и тот же очень легко. Но для программ это совершенно разные номера. Например, если контакт в CRM сохранён с номером на +7, а в поиске ввести с 8, то контакт может не найтись. Для решения таких проблем раньше использовалось только [форматирование номеров в кастомизациях](/custom_common/client-phone-number), поэтому в новых версиях Itgrix bx [3.7.0](/changelog-bx#3.7.0) и Itgrix amo [2.10.0](/changelog-amo#2.10.0) мы добавляем функцию автозамены, позволяющую настраивать форматирование номеров регулярными выражениями (regexp) в интерфейсе настройки модуля (в админке). 1. Автозамена модифицирует номера клиентов и/или пользователей, совпадающие с **шаблонами**, при помощи подстановки **замен**. Шаблонов может быть несколько. 2. Операции автозамены выполняются перед отправкой запросов в CRM для входящих звонков, поэтому автозамена влияет на создание/поиск сущностей и задач и поиск пользователей. 3. Для каждого номера замена выполняется **по всему списку шаблонов последовательно**. Это значит что **порядок шаблонов важен**, потому что выполнение первой замены может обеспечить или предотвратить совпадение номера с последующими шаблонами. ## Регулярные выражения [#regulyarnye-vyrazheniya] Для описания правил автозамены используется язык регулярных выражений (regexp), так же как и в кастомизациях. Это общепринятый способ поиска и замены текста. Для того чтобы создавать и тестировать регулярные выражения, мы предлагаем воспользоваться онлайн инструментами, такими как [regex101.com](https://regex101.com) (в меню слева нужно выбрать вариант **Golang** и ниже для проверки замены - **Substitution**). ### Краткий список полезных элементов шаблонов [#kratkii-spisok-poleznykh-elementov-shablonov] **Символы** * `^` - начало строки * `$` - конец строки * `.` - любой символ * `\d` - цифра * `\D` - не цифра * `\w` - цифра или буква * `\W` - не цифра и не буква * `\s` - пробел (включая необычные варианты вроде неразрывных пробелов) * `\S` - не пробел * `[ab\s0-5]` - один из символов: `a`, `b`, пробел, цифра от `0` до `5` * `abc 123` - буквально строка "abc 123", может быть частью большей строки * `abc|123` - строка "abc" или строка "123", может быть частью большей строки * `^abc 123$` - строка "abc 123" от начала до конца без других символов до и после * `\(`, `\)`, `\[`, `\]`, `\{`, `\}`, `\+`, `\?`, `\*`, `\.`, `\|`, `\\` - буквальное представление символов, которые без `\` имеют особый смысл **Повторения** Сразу после символа (или группы символов) можно указать сколько раз подряд он может присутствовать. * `?` - 0 или 1 раз * `+` - 1 и более раз * `*` - любое количество раз * `{5}` - 5 раз * `{5,10}` - от 5 до 10 раз * `{,10}` - от 0 до 10 раз * `{5,}` - от 5 и более раз Например, `\d{10}` означает "10 цифр", `\+?` означает "0 или 1 знак +", а `0+` - один и более нулей. **Группы, замена** Символы можно объединять в группы с помощью скобок. Это полезно при описании повторения нескольких символов, например `(10){3}` означает "101010".\ Текст групп можно использовать при замене при помощи подстановки вида `$N`, где `N` - порядковый номер группы.\ Например, при замене шаблона `8(\d{6})(\d{4})` подстановка `$1` будет означать содержимое группы `(\d{6})`, то есть первые 6 цифр после "8", а подстановка `$2` будет означать содержимое группы `(\d{4})`, то есть последующие 4 цифры. ## Примеры автозамены номеров клиентов [#primery-avtozameny-nomerov-klientov] | Шаблон | Замена | Описание | | ------------------------------------ | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `^\+?7(\d{10})$` | `8$1` | Заменяет префиксы +7 и 7 в начале номера, состоящего из префикса и 10 цифр, на 8, например +7495123456784951234567 и 7495123456784951234567
Этот шаблон включен по умолчанию
| | `^\+7` | `8` | Заменяет `+7` в начале любого номера на `8`, например `+712345671234567` → `812345671234567` | | `.*(\d{10})$` | `8$1` | Заменяет номер, имеющий в конце 10 цифр, на `8` и эти 10 цифр, например `0071234567890` → `81234567890` | | `^(\d{7})$` | `8495$1` | Добавляет к 7-значному номеру префикс `8495`, например `1234567` → `84951234567` | | `\D` | (пустая строка) | Удаляет все символы кроме цифр, например `+7 (495) 123-45-67` → `74951234567` | | `[\s()-]` | (пустая строка) | Удаляет все символы пробелов, скобок и дефисов, например `+7 (495) 123-45-67` → `+74951234567` | | `^(.*)(\d{3})(\d{3})(\d{2})(\d{2})$` | `$1 ($2) $3-$4-$5` | Форматирует номер в виде `x (xxx) xxx-xx-xx`, например `+74951234567` → `+7 (495) 123-45-67` | | `^0\d{2}(\d+)$` | `8$1` | Заменяет номер вида "ноль, две цифры, ещё цифры" на `8` и цифры в конце номера, например `0771234567890123` → `81234567890123` | | `1234567$` | `7654321` | Заменяет `1234567` в конце номера на `7654321`, например `84951234567` → `84957654321` | | `^84951234567$` | `84957654321` | Заменяет буквально номер `84951234567` на `84957654321` | ## Примеры автозамены номеров пользователей [#primery-avtozameny-nomerov-polzovatelei] | Шаблон | Замена | Описание | | ------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------- | | `.*(\d{4}$)` | `$1` | Удаляет из номера всё кроме последних 4 цифр, например `+71234564321` → `4321` | | `^8123456(\d{4})$` | `$1` | Удаляет из номера префикс `8123456`, оставляя последние 4 цифры, например `849576543214321` → `4321` | | `.*123456(\d{4})$` | `$1` | Удаляет из номера, заканчивающегося на `123456` и ещё 4 цифры, всё кроме последних 4 цифр, например `+71234564321` → `4321` | | `^1(\d{3})$` | `2$1` | Заменяет первую цифру `1` в 4-значном номере на `2`, например `1234` → `2234` | | `^1234$` | `4321` | Заменяет буквально номер `1234` на `4321` | # Реализация обратного звонка в Битрикс24 (/for-admins/callback) **2 варианта реализации:** 1\) Вызов приходит на одного человека (параметры как в originate).\ В наш конфиг необходимо добавить (пример для звонка на 123): `"callback": {` \ `"caller_id": "Обратный звонок на #TO#",` \ `"channel": "SIP/123",` \ `"context": "from-internal",` \ `"extension": "#TO#",` \ `"priority": "1"` \ `}` 2\) Либо звонок приходит на группу через локальный канал.\ Минус в том, что такой звонок чаще всего не фиксируется, так как он пойдет через локальные каналы.\ Если при звонке на внутренние номера есть события в CEL на каналы SIP/#, тогда звонок зафиксируется.\ В `/etc/asterisk/extensions_custom.conf` добавляем: `[from-callback-n]` \ `exten => s,1,Goto(from-internal,#number#,1)`\ \`\`\ `[from-callback]` \ `exten => _8ZXXXXXXXXX,1,Dial(SIP/#trunk#/${EXTEN},30,)` В конфиге модуля `/etc/itgrix_bx/config.json` добавьте:\ `"callback": {` \ `"caller_id": "Обратный звонок на #TO#",` \ `"channel": "Local/s@from-callback-n",` \ `"context": "from-callback",` \ `"extension": "#TO#",` \ `"priority": "1"` \ `}` \ На портале сделайте форму по аналогии с [https://zadarma.com/ru/support/instructions/bitrix\_widget/](https://zadarma.com/ru/support/instructions/bitrix_widget/) \ Приложение появится в выборе, когда модуль будет установлен либо запущен. # Click-to-call на несколько SIP клиентов с одним номером (/for-admins/click-to-call-na-neskolko-sip-klientov-s-odnim-nomerom) В статье идет речь о протоколе PJSIP. Данная функция не поддерживается протоколом SIP. В данной статье приведён пример настройки диалплана Asterisk для ситуации, когда за одним внутренним номером закреплено несколько SIP-устройств. Например, это могут быть несколько физических телефонов или программных клиентов, использующих одну и ту же учётную запись. Диалплан распределяет вызов все эти устройства при инициализации звонка.
В файл `/etc/asterisk/extensions_custom.conf` добавляем код ниже Данные настройки рекомендуется проводить с администратором Asterisk, т.к. они влияют на саму телефонию, а не только на модуль интеграции Itgrix.\ \ Это **пример** настроек диалплана, разработанный на чистом тестовом сервере. В зависимости от ваших настроек и версии Asterisk, необходимый для корректной работы код может отличаться. ``` [from-crm-click2call-example] exten => _X.,1,NoOp(CRM Click2Call to ${EXTEN}) ; вызов на все устройства оператора (номер берём из Local/XXX@...) same => n,Set(CONTACTS=${PJSIP_DIAL_CONTACTS(${CUT(CUT(CHANNEL,/,2),@,1)})}) same => n,GotoIf($["${CONTACTS}"=""]?no_contacts) same => n,Dial(${CONTACTS},30,g) ; ===== оператор ответил ===== same => n,Set(OPERATOR=${BRIDGEPEER(pjsip,endpoint)}) same => n,NoOp(Answered by operator ${OPERATOR}) ; CallerID same => n,Set(CALLERID(num)=${OPERATOR}) same => n,Set(CALLERID(name)=CRM-Call) ; Звоним клиенту same => n,Dial(Local/${EXTEN}@from-internal,60) same => n,Hangup() exten => _X.,n(no_contacts) same => n,NoOp(No operator available) same => n,Hangup() ``` Обновляем диалплан из консоли ``` asterisk -rx 'dialplan reload' ``` В настройках модуля интеграции указываем только что созданный контекст
Сохраняем настройки При звонке кликом из CRM инициация звонка произойдет на всех устройствах подключенных к соответствующему внутреннему номеру. # Для админов (/for-admins) # Изменение логина и пароля для входа в админку (/for-admins/izmenenie-logina-i-parolya-dlya-vkhoda-v-adminku) Логин и пароль для входа в админку модуля устанавливаются при установке серверной части приложения. Чтобы изменить их нужно отредактировать файл конфигурации: Открываем файл /etc/itgrix\_bx/config.json любым удобным текстовым редактором ``` nano /etc/itgrix_bx/config.json ``` В последнем блоке "server" меняем значения параметров "login" и "password" на нужные ``` "server": { "login": "admin", "password": "admin", ``` Если версия модуля ниже 3.10.0 перезагружаем службу модуля для того чтобы перечитался файл конфигурации, если версия выше 3.10.0 перезагрузка не требуется ``` service itgrix_bx restart ``` # Настройка прав на просмотр детализации звонков (/for-admins/nastroika-prav-na-prosmotr-detalizacii-zvonkov-v-bitriks24) Все звонки, записанные в Битрикс24, можно просмотреть через Детализацию:\ **Телефония** –**> Детализация звонков**. Если записи звонков прикрепляются файлами в CRM, то здесь же можно их скачать/прослушать.\ Так же есть дополнительные фильтры по ответственным, по направлению звонка (входящий/исходящий), по статусу звонка (успешный/пропущенный).\ Администратор портала имеет возможность настроить права доступа к Телефонии, в том числе на просмотр своих и чужих разговоров. Управление доступом осуществляется по ролям на странице **Телефония** –**> Права доступа.** Подробнее [в статье от Битрикс24](https://helpdesk.bitrix24.ru/open/3600487/). # Настройка записи разговоров на стороне Asterisk (/for-admins/nastroika-zapisi-razgovorov-na-storone-asterisk) Настройка записи разговоров осуществляется в файле конфигурации Asterisk – extensions.conf. Пример реализации записи разговоров: `exten => 1000,n,Set(RecFile=${STRFTIME(${EPOCH},,%Y-%m/%d)}/in_${CDR(src)}_${STRFTIME(${EPOCH},,%Y-%m-%d-%H-%M-%S)}.wav)`\ `exten => 1000,n,Set(CDR(recordingfile)=${RecFile})`\ `exten => 1000,n,MixMonitor(${RecFile})` RecFile – Имя записываемого файла. Если не содержит абсолютный путь, то помещается в директорию, определенную по умолчанию в настройках asterisk.conf В данном примере имя аудиофайла заносим в таблицу CDR, в поле recordingfile. Если этого поля нет в БД, его необходимо добавить. [Настройка записи разговоров в FreePBX](https://wiki.merionet.ru/articles/zapis-razgovorov-s-pomoshhyu-freepbx) # Неверное время в созданных делах в Битрикс24 (/for-admins/nevernoe-vremya-v-sozdannykh-delakh-v-bitriks24) ## Неверное время в созданных делах в Битрикс24 [#nevernoe-vremya-v-sozdannykh-delakh-v-bitriks24] В случае если у вас в создаваемых делах фиксируется неправильное время, необходимо последовательно проверить следующие настройки. ### Настройки времени на сервере Битрикс24 (только для коробочной версии) [#nastroiki-vremeni-na-servere-bitriks24-tolko-dlya-korobochnoi-versii] В том случае если у вас облачный Битрикс24 – пропускайте этот шаг. Если у вас коробочная версия Битрикс24, подключитесь к серверу с Битрикс24 и выполните команду:\ `$ date` Проверьте, что в ответе указано корректно время и часовой пояс. #### Настройки времени у сотрудников в Битрикс24 [#nastroiki-vremeni-u-sotrudnikov-v-bitriks24] В профиле пользователя, от имени которого вы просматриваете дела, указан верный часовой пояс: Профиль пользователя –> Изменить личные данные –> "Автоматически определять часовой пояс". На часах в верхней части портала показывается корректное время. То же самое должно быть у пользователя, от имени которого к порталу подключается наше приложение (указан в параметре 'user\_login'). #### Настройки времени на сервере Asterisk – корректные данные попадают в CEL [#nastroiki-vremeni-na-servere-asterisk-korrektnye-dannye-popadayut-v-cel] Выполните команду на сервере Asterisk:\ `$ date` Проверьте, что в ответе указано корректно время и часовой пояс. Проверьте, что в CEL попадают корректные данные: `$ mysql -u root`\ `> USE asteriskcdrdb;`\ ``> SELECT * FROM `cel` ORDER BY `eventtime` DESC LIMIT 1`` Посмотрите значение поля **eventtime** для записи. Если у вас активно пользуются телефонией, время должно примерно соответствовать текущему. # Обработка звонков за период (/for-admins/obrabotka-zvonkov-za-period) Начиная с версии 3.13.0 (itgrix\_bx) и 3.1.0 (itgrix\_amo) у модуля используется SQLite база данных `state.db` для записи состояния обработки звонков, поэтому перед обработкой звонка нужно удалить сведения о нем из данной базы. Можно использовать команду: \ `delete from calls where linkedid='1740643771.7533';` Начиная с верии 3.13.14 удалить сведения о звонках для переобработки можно через интерфейс админки в меню Обработка звонков. Если по какой-то причине база данных модуля `state.db` была повреждена, нужно очистить её запуском команды\ \ `/opt/itgrix_bx/itgrix_bx --clean --cleanlist s`
В случае если была очищена БД Asterisk, в базе модуля нужно очистить last id (id с которого модуль будет читать события в базе телефонии) командой\ \ `/opt/itgrix_bx/itgrix_bx --clean --cleanlist i`\ \ Список всех команд можно посмотреть командой
`/opt/itgrix_bx/itgrix_bx --help`
Переобработка звонков может приводить к созданию нежелательных дубликатов: звонки, контакты, задачи и прочие объекты CRM могут быть созданы повторно. ## Запрос API модуля Itgrix [#zapros-api-modulya-itgrix] Если по каким-то причинам модуль Itgrix был отключен, или если при первой установке есть желание обработать уже прошедшие звонки, то можно воспользоваться специальным запросом `/pbx/read_call` в API модуля Itgrix. С его помощью можно запустить обработку определённых звонков. Запрос `/pbx/read_call` поддерживается начиная с версий [Itgrix\_bx 3.3.3](/changelog-bx#3.3.3) (Битрикс24) и [Itgrix\_amo 2.5.2](/changelog-amo#2.5.2) (amoCRM). Например, можно сделать запрос с помощью `curl` (здесь `` - это адрес сервера, на котором установлен модуль Itgrix, login:password - логин:пароль для админки модуля интеграции): ``` curl --digest -u login:password ":8077/pbx/read_call?<параметры>" ``` У метода есть два варианта использования параметров: * указать один или несколько идентификаторов звонка `id`; * указать дату начала периода `start_date` и (опционально) дату окончания `end_date`\ (в этом случае модуль находит все **записи** CEL в указанных датах, берёт из них `linkedid` и обрабатывает **звонки** уже по ID). Запрос`/pbx/read_call` с указанием периода поддерживается начиная с версий [Itgrix\_bx 3.4.0](/changelog-bx#3.4.0) (Битрикс24) и [Itgrix\_amo 2.6.0](/changelog-amo#2.6.0) (amoCRM). В предыдущих версиях запрос поддерживает только параметр `id`. Для таких версий поддерживается специальный скрипт (см. [раздел ниже](/for-admins/obrabotka-zvonkov-za-period#skript-dlya-starykh-versii-modulya)). ### Использование ID звонка [#ispolzovanie-id-zvonka] Если требуется обработать один звонок, то проще всего сделать GET-запрос с параметром `id`: ``` curl --digest -u login:password ":8077/pbx/read_call?id=1234567890.1" ``` Если требуется обработать несколько звонков, то можно через POST-запрос передать JSON-объект с массивом `id` : ``` curl --digest -u login:password ":8077/pbx/read_call" \ -H "Content-Type: application/json" \ -d '{"id":["1111111111.1", "2222222222.2"]}' ``` ### Использование границ периода [#ispolzovanie-granic-perioda] Границы периода определяются параметрами `start_date` и `end_date` . При этом параметр `end_date` опциональный, т.е. его можно не указывать, и в таком случае модуль обработает все звонки, начиная с `start_date`. Параметры могут быть указаны в трёх видах: * **Дата-время в формате `ГГГГ-ММ-ДД чч:мм:сс`**.\ При отправке GET-запроса с таким параметром нужно заменить пробел на специальную последовательность `%20`, при отправке POST-запроса с параметрами в формате JSON это не требуется.\ Например, обработаем звонки за 25 мая 2021 с 10:30 до 22:00: ``` curl --digest -u login:password ":8077/pbx/read_call?\ start_date=2021-05-25%2010:30:00&\ end_date=2021-05-25%2022:00:00&clear_state" ``` * **Метка времени в формате UNIX-time** (можно получить [из ID звонка, - это число до точки](https://wiki.asterisk.org/wiki/display/AST/Using+the+CONTEXT%2C+EXTEN%2C+PRIORITY%2C+UNIQUEID%2C+and+CHANNEL+Variables); например, в звонке 1267568856.11 число 1267568856 является меткой времени).\ Например, обработаем звонки с 27 мая 2021 06:01:59 GMT, т.е. UNIX-time 1622138519: ``` curl --digest -u login:password ":8077/pbx/read_call?start_date=1622138519&clear_state" ``` * **Количество дней назад (отрицательное целое число).**\ Например, обработать звонки за позавчера: ``` curl --digest -u login:password ":8077/pbx/read_call?start_date=-2&end_date=-1&clear_state" ``` Пример обработки звонков за неделю: ``` curl --digest -u login:password ":8077/pbx/read_call?start_date=-7&clear_state" ``` Также есть специальный вариант `start_date=-0` - обработка звонков за сегодня (с полуночи по местному времени): ``` curl --digest -u login:password ":8077/pbx/read_call?start_date=-0&clear_state" ``` ### Сброс состояний выбранных шагов одного звонка для повторной обработки . [#sbros-sostoyanii-vybrannykh-shagov-odnogo-zvonka-dlya-povtornoi-obrabotki] Если нужно повторно пройти отдельные стадии обработки одного звонка, можно воспользоваться запросом `/crm/reset_state` `call_id` - указываем ID звонка `operations` - указываем операции для сброса в формате "шаг" или "шаг.операция" Список шагов/операций: ``` 1_find_entity 2_create_entity 3_create_deal 4_show_call_card 5_hide_call_card 6_update_responsible 7_create_call attach record update activity update entity 8_close_tasks 9_create_task ``` Пример запроса, который сбросит шаги 7 (прикрепление записи) и 8 (закрытие задач) ``` curl ":8077/crm/reset_state"\ -H "Content-Type: application/json" \ -d '{"call_id":"1234567.890","operations":["7_create_call.attach record","8_close_tasks"]}' \ --digest -u admin:123 ``` # Файлы модуля (/for-admins/osnovnye-faily-modulya) ### **Основные файлы модуля** [#osnovnye-faily-modulya] | Itgrix\_bx (Битрикс24) | Itgrix\_amo (amoCRM) | | ---------------------- | -------------------- | | /opt/itgrix\_bx/ | /opt/itgrix\_amo/ | ### **Файл конфигурации** [#fail-konfiguracii] | Битрикс24 | amoCRM | | --------------------------- | ---------------------------- | | /etc/itgrix\_bx/config.json | /etc/itgrix\_amo/config.json | ### **Кастомизатор** [#kastomizator] #### **Начиная с версии itgrix\_bx 3.4.0 и itgrix\_amo 2.6.0** [#nachinaya-s-versii-itgrix_bx-3.4.0-i-itgrix_amo-2.6.0] Все файлы кастомизатора лежат в папке: | Битрикс24 | amoCRM | | --------------------------- | ---------------------------- | | /opt/itgrix\_bx/customizer/ | /opt/itgrix\_amo/customizer/ | В этой папке: * Исполняемый файл `customize.php` (путь к нему должен быть прописан в файле конфигурации в поле `customizer.program_path`). * Файл настроек кастомизатора ~~`Settings.php`~~ `settings.json` ([Обновление настроек кастомизатора в Itgrix\_bx-3.9.0 и Itgrix\_amo-2.12.0](/custom_common/customizer-settings-update)). Особенно важен при использовании [дополнительной копии модуля](/for-admins/zapusk-dopolnitelnoi-kopii-modulya#4-sozdayom-vtoroi-kastomizator). * Пользовательские кастомизации в папке `actions`. * Файл `README` с описанием (в т.ч. доступных пользователю функций). #### **Начиная с версии bx24asterisk 2.10.2.14** **и ДО itgrix\_bx 3.4.0, и во всех версиях itgrix\_amo** [#nachinaya-s-versii-bx24asterisk-2.10.2.14-i-do-itgrix_bx-3.4.0-i-vo-vsekh-versiyakh-itgrix_amo] Пользовательские кастомизации разбиты по файлам и лежат в папке: | Битрикс24 | amoCRM | | ----------------------- | ------------------------ | | /opt/itgrix\_bx/custom/ | /opt/itgrix\_amo/custom/ | Исполняемый файл кастомизатора (который должен быть прописан в файле конфигурации): | Битрикс24 | amoCRM | | ------------------------------ | ------------------------------- | | /opt/itgrix\_bx/customizer.php | /opt/itgrix\_amo/customizer.php | #### **В версиях bx24asterisk ДО 2.10.2.14** [#v-versiyakh-bx24asterisk-do-2.10.2.14] Все кастомизации были в одном большом php-файле: | Битрикс24 | amoCRM | | ------------------------------ | ------------------------------- | | /opt/itgrix\_bx/customizer.php | /opt/itgrix\_amo/customizer.php | ### **Лог** [#log] Лог текущего дня: | Битрикс24 | amoCRM | | ----------------------- | ------------------------ | | /var/log/itgrix\_bx.log | /var/log/itgrix\_amo.log | Логи хранятся последние 5 дней, ротация происходит около 3 часов утра. ### Настройки logrotate [#nastroiki-logrotate] | Битрикс24 | amoCRM | | --------------------------- | ---------------------------- | | /etc/logrotate.d/itgrix\_bx | /etc/logrotate.d/itgrix\_amo | ### Служба (сервис) [#sluzhba-servis] Для систем, использующих **systemctl**, служба настраивается в файле: | Битрикс24 | amoCRM | | -------------------------------------- | --------------------------------------- | | /etc/systemd/system/itgrix\_bx.service | /etc/systemd/system/itgrix\_amo.service | Для остальных систем: | Битрикс24 | amoCRM | | ---------------------- | ----------------------- | | /etc/init.d/itgrix\_bx | /etc/init.d/itgrix\_amo | # Полезные команды (/for-admins/poleznye-komandy) ## Битрикс24 [#bitriks24] Управление службой модуля ```bash service itgrix_bx start # запуск службы service itgrix_bx stop # остановка службы service itgrix_bx restart # перезапуск службы service itgrix_bx status # состояние службы # Добавление службы в systemctl (автозапуск после перезагрузки сервера) service itgrix_bx enable ``` Проверка версии модуля через консоль ```bash /opt/itgrix_bx/itgrix_bx -v ``` Сборка отчета для поддержки (bugreport) ```bash curl -OJsLk --digest -u login:password :8077/make_report # если веб интерфейс недоступен отчет можно получить такой командой. /opt/itgrix_bx/itgrix_bx --report # создание отчета в случае если служба модуля не запускается ``` Сброс обработчиков (в том числе с2с) ```bash /opt/itgrix_bx/itgrix_bx --clean --cleanlist h ``` Сброс внешних линий ```bash /opt/itgrix_bx/itgrix_bx --clean --cleanlist l ``` Регистрация дополнительной копии модуля ```bash /opt/itgrix_bx/itgrix_bx --register-instances ``` Админка модуля ```bash http://:8077/config # – адрес сервера, где установлен модуль ``` Список команд ```bash /opt/itgrix_bx/itgrix_bx --help ``` Обновление модуля ```bash /opt/itgrix_bx/update.sh ``` Удаление модуля (если вы удаляете модуль, пожалуйста заполните [форму](https://forms.yandex.ru/cloud/69df2f7c02848f13d9cf3ff2)) ```bash /opt/itgrix_bx/remove.sh ``` ## amoCRM [#amocrm] Управление службой модуля ```bash service itgrix_amo start # запуск службы service itgrix_amo stop # остановка службы service itgrix_amo restart # перезапуск службы service itgrix_amo status # состояние службы # Добавление службы в systemctl (автозапуск после перезагрузки сервера) service itgrix_amo enable ``` Проверка версии модуля через консоль ```bash /opt/itgrix_amo/itgrix_amo -v ``` Сборка отчета для поддержки (bugreport) ```bash curl -OJsLk --digest -u login:password :8077/make_report # если веб интерфейс недоступен отчет можно получить такой командой. /opt/itgrix_bx/itgrix_bx --report # создание отчета в случае если служба модуля не запускается ``` Сброс обработчиков (в том числе с2с) ```bash /opt/itgrix_amo/itgrix_amo --clean --cleanlist h ``` Регистрация дополнительной копии модуля ```bash /opt/itgrix_amo/itgrix_amo --register-instances ``` Админка модуля ```bash http://:8077/config # – адрес сервера, где установлен модуль ``` Список команд ```bash /opt/itgrix_amo/itgrix_amo --help ``` Обновление модуля ```bash /opt/itgrix_amo/update.sh ``` Удаление модуля (если вы удаляете модуль, пожалуйста заполните [форму](https://forms.yandex.ru/cloud/69df398850569019a6e7839c)) ```bash /opt/itgrix_amo/remove.sh ``` # Предоставление доступа к серверам (/for-admins/predostavlenie-dostupa-k-serveram) **Для установки интеграции нашими специалистами и оказания технической поддержки потребуется доступ до сервера, где будет установлена служба модуля Itgrix (обычно это сервер телефонии Asterisk).** ## Методы подключения к серверам для интеграции и технической поддержки [#metody-podklyucheniya-k-serveram-dlya-integracii-i-tekhnicheskoi-podderzhki] **SSH по ключам** * **Предпочтительный метод** доступа к серверам. * Условия использования: * Передача только **публичного ключа** клиенту для настройки (ключ предоставим в чате поддержки либо по электронной почте). * Доступ ограничен только необходимыми правами. **SSH по паролю** * Для начальной настройки и технической поддержки. * Условия использования: * Логин и пароль предоставляются в чате поддержки либо по электронной почте. * Ограничение доступа по IP-адресу (адрес предоставим по запросу). * Временный доступ (на время проведения настройки) или постоянный для дальнейшей поддержки. * Удаление учётной записи или отключение пароля после завершения работ. * Доступ ограничен только необходимыми правами. **VPN-доступ** * Применяется при закрытой инфраструктуре или необходимости работы внутри защищённого периметра. * Условия использования: * VPN-конфигурация предоставляется клиентом (предпочтительно совместимый с OpenVPN). * После подключения по VPN — использование SSH по ключу или по паролю. **AnyDesk (удалённый доступ к рабочему столу)** * Используется в случае, если доступ к серверу возможен только через рабочую станцию клиента (например, без прямого SSH-доступа). * Требуется запуск AnyDesk на стороне клиента и предоставление ID и временного пароля. Не всегда работает из за ограничений подключения со стороны Anydesk (превышение лимитов соединений) # Примеры настройки WSS соединений (/for-admins/primery-nastroiki-wss-soedinenii) ## Шаг 1. Публикуем HTTPS порт на внешнем IP [#shag-1.-publikuem-https-port-na-vneshnem-ip] *Примечание: Если модуль находится за NAT, то настройки надо делать на соответствующем проксирующем устройстве.* Настройки для FreePBX с внешним адресом: По умолчанию (если включен модуль Firewall) FreePBX блокирует все неизвестные ему порты. Добавим нужные в настройках файрвола: *пример ссылки на соответствующий пункт меню* [https://freepbx.example.com/admin/config.php?display=firewall](https://freepbx.example.com/admin/config.php?display=firewall)
## Шаг 2. В DNS прописываем запись для внешнего адреса, на котором опубликован модуль [#shag-2.-v-dns-propisyvaem-zapis-dlya-vneshnego-adresa-na-kotorom-opublikovan-modul] Как правило, делается через личный кабинет провайдера, который обслуживает домен клиента. ## Шаг 3. Выпускаем SSL сертификат [#shag-3.-vypuskaem-ssl-sertifikat] Если у клиента уже есть сертификат, то копируем файлы (сам сертификат, ключ) на сервер с модулем. Если сертификата нет, то выпускаем (Тут очень много вариантов решения). Вариант выпуска бесплатного сертификата через FreePBX:\ [https://freepbx.example.com/admin/config.php?display=certman](https://freepbx.example.com/admin/config.php?display=certman)
## Шаг 4. Прописываем путь до сертификата в модуле [#shag-4.-propisyvaem-put-do-sertifikata-v-module]
**Сохраняем настройки.** ## Шаг 5. Указываем адрес веб-сокетов куда следует [#shag-5.-ukazyvaem-adres-veb-soketov-kuda-sleduet] Ссылка вида [wss://freepbx.example.com:8078/…](wss://freepbx.example.com:8078/%E2%80%A6) При перевыпуске сертификата необходимо перезапустить службу, чтобы модуль подгрузил обновленные файлы сертификата. В данном **примере** показано, как настроить WSS-соединение с использованием **Nginx** или **Apache** ## Настройка для Nginx [#nastroika-dlya-nginx] 1. Открыть конфигурационный файл Nginx: ```bash nano /etc/nginx/nginx.conf ``` 2. Добавить конфигурацию для WSS: ```bash server { listen 443 ssl; server_name your_domain.com; ssl_certificate /etc/nginx/ssl/server.crt; # Или путь к вашему SSL-сертификату от Let's Encrypt ssl_certificate_key /etc/nginx/ssl/server.key; location /ws/ { proxy_pass wss://freepbx.example.com:8078; # Адрес вашего WebSocket сервера proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 86400; proxy_set_header Origin ""; } } ``` 3. Проверить конфигурацию и перезапустить Nginx: ```bash nginx -t systemctl restart nginx ``` ## Настройка для Apache [#nastroika-dlya-apache] 1. Открыть конфигурационный файл Apache: ```bash nano /etc/httpd/conf.d/ssl.conf ``` 2. Добавить или изменить блок конфигурации для WSS: ```bash ServerName your_domain.com SSLEngine on SSLCertificateFile /etc/httpd/ssl/server.crt # Или путь к вашему SSL-сертификату от Let's Encrypt SSLCertificateKeyFile /etc/httpd/ssl/server.key ProxyPass "wss://freepbx.example.com:8078/" # Адрес вашего WebSocket сервера ProxyPassReverse "wss://freepbx.example.com:8078/" ProxyPreserveHost On RequestHeader set Connection "upgrade" RequestHeader set Upgrade "websocket" ``` 3. Перезапустить Apache: ```bash systemctl restart httpd ``` # Примеры структуры зарегистрированных звонков из CEL (/for-admins/primery-struktury-zaregistrirovannykh-zvonkov-iz-cel) ## Запрос в CEL [#zapros-v-cel]
``` select eventtype,eventtime,cid_num,exten,uniqueid,linkedid,channame,extra from cel where linkedid='1617263009.76' order by id ; ```
## Входящий звонок [#vkhodyashii-zvonok] Входящий звонок с внешнего номера 73431234567 на внутренний номер 101 через транк 214782 ``` +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | CHAN_START | 2021-04-01 13:16:48 | 73431234567 | 214782 | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | APP_START | 2021-04-01 13:16:48 | 73431234567 | recordcheck | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | APP_END | 2021-04-01 13:16:48 | 73431234567 | recordcheck | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | ANSWER | 2021-04-01 13:16:48 | 73431234567 | s | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | CHAN_START | 2021-04-01 13:16:57 | 101 | s | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | ANSWER | 2021-04-01 13:16:59 | 101 | 101 | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | BRIDGE_ENTER | 2021-04-01 13:16:59 | 101 | s | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | BRIDGE_ENTER | 2021-04-01 13:16:59 | 73431234567 | s | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | BRIDGE_EXIT | 2021-04-01 13:17:01 | 101 | s | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | HANGUP | 2021-04-01 13:17:01 | 101 | s | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | CHAN_END | 2021-04-01 13:17:01 | 101 | s | 1617265017.84 | 1617265008.83 | SIP/101-0000002e | | BRIDGE_EXIT | 2021-04-01 13:17:01 | 73431234567 | s | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | HANGUP | 2021-04-01 13:17:02 | 73431234567 | 101 | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | CHAN_END | 2021-04-01 13:17:02 | 73431234567 | 101 | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | | LINKEDID_END | 2021-04-01 13:17:02 | 73431234567 | 101 | 1617265008.83 | 1617265008.83 | SIP/Zadarma-0000002d | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ ``` ## Исходящий звонок [#iskhodyashii-zvonok] Исходящий звонок с внутреннего номера 101 на внешний номер 73431234567 ``` +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | CHAN_START | 2021-04-01 13:19:45 | 101 | 73431234567 | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | APP_START | 2021-04-01 13:19:45 | 101 | recordcheck | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | APP_END | 2021-04-01 13:19:45 | 101 | recordcheck | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | CHAN_START | 2021-04-01 13:19:45 | | s | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | ANSWER | 2021-04-01 13:19:50 | 73431234567 | 73431234567 | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | ANSWER | 2021-04-01 13:19:50 | 101 | s | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | BRIDGE_ENTER | 2021-04-01 13:19:50 | 73431234567 | | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | BRIDGE_ENTER | 2021-04-01 13:19:50 | 101 | s | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | BRIDGE_EXIT | 2021-04-01 13:19:54 | 73431234567 | | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | HANGUP | 2021-04-01 13:19:54 | 73431234567 | | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | CHAN_END | 2021-04-01 13:19:54 | 73431234567 | | 1617265185.87 | 1617265185.86 | SIP/Zadarma-00000031 | | BRIDGE_EXIT | 2021-04-01 13:19:54 | 101 | s | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | HANGUP | 2021-04-01 13:19:54 | 101 | h | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | CHAN_END | 2021-04-01 13:19:54 | 101 | h | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | | LINKEDID_END | 2021-04-01 13:19:54 | 101 | h | 1617265185.86 | 1617265185.86 | SIP/101-00000030 | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ ``` ## Звонок со слепым переводом [#zvonok-so-slepym-perevodom] Входящий звонок на транк 214782, принял 101, затем слепой перевод на 102. ``` +----------------+---------------------+-------------+-------------------+---------------+---------------+--------------------------------------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +----------------+---------------------+-------------+-------------------+---------------+---------------+--------------------------------------------------+ | CHAN_START | 2021-04-01 12:43:29 | 73431234567 | 214782 | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | APP_START | 2021-04-01 12:43:29 | 73431234567 | recordcheck | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | APP_END | 2021-04-01 12:43:29 | 73431234567 | recordcheck | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | ANSWER | 2021-04-01 12:43:30 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | CHAN_START | 2021-04-01 12:43:37 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | ANSWER | 2021-04-01 12:43:42 | 101 | 101 | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | BRIDGE_ENTER | 2021-04-01 12:43:42 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | BRIDGE_ENTER | 2021-04-01 12:43:42 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | BLINDTRANSFER | 2021-04-01 12:43:50 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | BRIDGE_EXIT | 2021-04-01 12:43:50 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | HANGUP | 2021-04-01 12:43:50 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | CHAN_END | 2021-04-01 12:43:50 | 101 | s | 1617263017.77 | 1617263009.76 | SIP/101-0000002b | | BRIDGE_EXIT | 2021-04-01 12:43:50 | 73431234567 | 102 | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | CHAN_START | 2021-04-01 12:43:51 | 102 | s | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | ANSWER | 2021-04-01 12:43:55 | 102 | FMPR-102 | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | BRIDGE_ENTER | 2021-04-01 12:43:55 | 102 | s | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | BRIDGE_ENTER | 2021-04-01 12:43:55 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | BRIDGE_EXIT | 2021-04-01 12:43:55 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | BRIDGE_ENTER | 2021-04-01 12:43:55 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | BRIDGE_EXIT | 2021-04-01 12:43:58 | 102 | s | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | HANGUP | 2021-04-01 12:43:58 | 102 | s | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | CHAN_END | 2021-04-01 12:43:58 | 102 | s | 1617263031.82 | 1617263009.76 | SIP/102-0000002c | | BRIDGE_EXIT | 2021-04-01 12:43:58 | 73431234567 | s | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | HANGUP | 2021-04-01 12:43:58 | 73431234567 | 102 | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | CHAN_END | 2021-04-01 12:43:58 | 73431234567 | 102 | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | | LINKEDID_END | 2021-04-01 12:43:58 | 73431234567 | 102 | 1617263009.76 | 1617263009.76 | SIP/Zadarma-0000002a | +----------------+---------------------+-------------+-------------------+---------------+---------------+--------------------------------------------------+ ``` ## Звонок с управляемым переводом [#zvonok-s-upravlyaemym-perevodom] Входящий на транк 2723033, принял 162, затем управляемый перевод на 163. ``` +------------------+---------------------+-------------+-------------+-----------------+-----------------+---------------------------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +------------------+---------------------+-------------+-------------+-----------------+-----------------+---------------------------------------+ | CHAN_START | 2018-01-23 16:16:16 | 79021234567 | 2723033 | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | ANSWER | 2018-01-23 16:16:16 | 79021234567 | s | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | APP_START | 2018-01-23 16:16:24 | 79021234567 | recordcheck | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | APP_END | 2018-01-23 16:16:24 | 79021234567 | recordcheck | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | CHAN_START | 2018-01-23 16:16:24 | 162 | s | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | ANSWER | 2018-01-23 16:16:26 | 162 | 162 | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | BRIDGE_ENTER | 2018-01-23 16:16:26 | 162 | | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | BRIDGE_ENTER | 2018-01-23 16:16:26 | 79021234567 | s | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | CHAN_START | 2018-01-23 16:16:29 | 162 | 163 | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | APP_START | 2018-01-23 16:16:29 | 162 | recordcheck | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | APP_END | 2018-01-23 16:16:29 | 162 | recordcheck | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | CHAN_START | 2018-01-23 16:16:29 | 163 | s | 1516706189.3490 | 1516706189.3489 | SIP/163-00000d9c | | ANSWER | 2018-01-23 16:16:30 | 163 | 163 | 1516706189.3490 | 1516706189.3489 | SIP/163-00000d9c | | ANSWER | 2018-01-23 16:16:30 | 162 | s | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | BRIDGE_ENTER | 2018-01-23 16:16:30 | 163 | | 1516706189.3490 | 1516706189.3489 | SIP/163-00000d9c | | BRIDGE_ENTER | 2018-01-23 16:16:30 | 162 | s | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | BRIDGE_EXIT | 2018-01-23 16:16:34 | 163 | | 1516706189.3490 | 1516706189.3489 | SIP/163-00000d9c | | BRIDGE_EXIT | 2018-01-23 16:16:34 | 162 | | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | BRIDGE_ENTER | 2018-01-23 16:16:34 | 163 | | 1516706189.3490 | 1516706176.3487 | SIP/163-00000d9c | | ATTENDEDTRANSFER | 2018-01-23 16:16:34 | 162 | s | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | BRIDGE_EXIT | 2018-01-23 16:16:34 | 162 | s | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | HANGUP | 2018-01-23 16:16:34 | 162 | | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | CHAN_END | 2018-01-23 16:16:34 | 162 | | 1516706184.3488 | 1516706176.3487 | SIP/162-00000d9a | | HANGUP | 2018-01-23 16:16:34 | 162 | h | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | CHAN_END | 2018-01-23 16:16:34 | 162 | h | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | LINKEDID_END | 2018-01-23 16:16:34 | 162 | h | 1516706189.3489 | 1516706189.3489 | SIP/162-00000d9b | | BRIDGE_EXIT | 2018-01-23 16:17:24 | 163 | | 1516706189.3490 | 1516706176.3487 | SIP/163-00000d9c | | HANGUP | 2018-01-23 16:17:24 | 163 | | 1516706189.3490 | 1516706176.3487 | SIP/163-00000d9c | | CHAN_END | 2018-01-23 16:17:24 | 163 | | 1516706189.3490 | 1516706176.3487 | SIP/163-00000d9c | | BRIDGE_EXIT | 2018-01-23 16:17:24 | 79021234567 | s | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | HANGUP | 2018-01-23 16:17:24 | 79021234567 | h | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | CHAN_END | 2018-01-23 16:17:24 | 79021234567 | h | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | | LINKEDID_END | 2018-01-23 16:17:24 | 79021234567 | h | 1516706176.3487 | 1516706176.3487 | SIP/MTS_73431234567_INCOMING-00000d99 | +------------------+---------------------+-------------+-------------+-----------------+-----------------+---------------------------------------+ ``` ## Пропущенный звонок на IVR [#propushennyi-zvonok-na-ivr] Пропущенный звонок на IVR через транк 214782 ``` +--------------+---------------------+-------------+-------------+--------------+--------------+---------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +--------------+---------------------+-------------+-------------+--------------+--------------+---------------------+ | CHAN_START | 2021-06-07 11:59:21 | 73431111111 | 214782 | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | | APP_START | 2021-06-07 11:59:21 | 73431111111 | recordcheck | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | // Проверка записи звонка | APP_END | 2021-06-07 11:59:21 | 73431111111 | recordcheck | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | | ANSWER | 2021-06-07 11:59:21 | 73431111111 | s | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | | HANGUP | 2021-06-07 11:59:29 | 73431111111 | h | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | | CHAN_END | 2021-06-07 11:59:29 | 73431111111 | h | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | | LINKEDID_END | 2021-06-07 11:59:29 | 73431111111 | h | 1623049161.4 | 1623049161.4 | SIP/214782-00000004 | +--------------+---------------------+-------------+-------------+--------------+--------------+---------------------+ ``` ## Неотвеченный звонок с follow me [#neotvechennyi-zvonok-s-follow-me] ``` +--------------+---------------------+-------------------+-------------------+---------------+---------------+--------------------------------------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +--------------+---------------------+-------------------+-------------------+---------------+---------------+--------------------------------------------------+ | CHAN_START | 2021-06-29 18:40:56 | 73431234567 | 214782 | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | APP_START | 2021-06-29 18:40:56 | 73431234567 | recordcheck | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | APP_END | 2021-06-29 18:40:56 | 73431234567 | recordcheck | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | ANSWER | 2021-06-29 18:40:56 | 73431234567 | s | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | CHAN_START | 2021-06-29 18:41:03 | 102 | s | 1624974063.37 | 1624974056.32 | SIP/102-00000015 | | CHAN_START | 2021-06-29 18:41:09 | | s | 1624974069.40 | 1624974056.32 | SIP/Zadarma-00000016 | | HANGUP | 2021-06-29 18:41:29 | 102 | FMPR-102 | 1624974063.37 | 1624974056.32 | SIP/102-00000015 | | CHAN_END | 2021-06-29 18:41:29 | 102 | FMPR-102 | 1624974063.37 | 1624974056.32 | SIP/102-00000015 | | HANGUP | 2021-06-29 18:41:29 | 89021234567 | 89021234567 | 1624974069.40 | 1624974056.32 | SIP/Zadarma-00000016 | | CHAN_END | 2021-06-29 18:41:29 | 89021234567 | 89021234567 | 1624974069.40 | 1624974056.32 | SIP/Zadarma-00000016 | | HANGUP | 2021-06-29 18:41:32 | 73431234567 | h | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | CHAN_END | 2021-06-29 18:41:32 | 73431234567 | h | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | | LINKEDID_END | 2021-06-29 18:41:32 | 73431234567 | h | 1624974056.32 | 1624974056.32 | SIP/214782-00000014 | +--------------+---------------------+-------------------+-------------------+---------------+---------------+--------------------------------------------------+ ``` ## Отвеченный звонок с follow me [#otvechennyi-zvonok-s-follow-me] ``` +----------------+---------------------+-------------------+-------------------+---------------+---------------+--------------------------------------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame +----------------+---------------------+-------------------+-------------------+---------------+---------------+-------------------------------------------------- | CHAN_START | 2021-06-29 19:06:18 | 73431234567 | 214782 | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | APP_START | 2021-06-29 19:06:18 | 73431234567 | recordcheck | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | APP_END | 2021-06-29 19:06:18 | 73431234567 | recordcheck | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | ANSWER | 2021-06-29 19:06:18 | 73431234567 | s | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | CHAN_START | 2021-06-29 19:06:25 | 102 | s | 1624975585.46 | 1624975578.41 | SIP/102-00000018 | CHAN_START | 2021-06-29 19:06:32 | | s | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019 | ANSWER | 2021-06-29 19:06:42 | 89021234567 | 89021234567 | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019в | HANGUP | 2021-06-29 19:06:42 | 102 | FMPR-102 | 1624975585.46 | 1624975578.41 | SIP/102-00000018 | CHAN_END | 2021-06-29 19:06:42 | 102 | FMPR-102 | 1624975585.46 | 1624975578.41 | SIP/102-00000018 | BRIDGE_ENTER | 2021-06-29 19:06:42 | 89021234567 | | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019в | BRIDGE_ENTER | 2021-06-29 19:06:42 | 73431234567 | s | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | BRIDGE_EXIT | 2021-06-29 19:06:42 | 73431234567 | s | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | BRIDGE_ENTER | 2021-06-29 19:06:42 | 73431234567 | s | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | BRIDGE_EXIT | 2021-06-29 19:06:45 | 89021234567 | | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019в | HANGUP | 2021-06-29 19:06:45 | 89021234567 | | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019в | CHAN_END | 2021-06-29 19:06:45 | 89021234567 | | 1624975592.49 | 1624975578.41 | SIP/Zadarma-00000019в | BRIDGE_EXIT | 2021-06-29 19:06:45 | 73431234567 | s | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | HANGUP | 2021-06-29 19:06:46 | 73431234567 | 102 | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | CHAN_END | 2021-06-29 19:06:46 | 73431234567 | 102 | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 | LINKEDID_END | 2021-06-29 19:06:46 | 73431234567 | 102 | 1624975578.41 | 1624975578.41 | SIP/214782-00000017 +----------------+---------------------+-------------------+-------------------+---------------+---------------+--------------------------------------------------+ ``` ## Звонок кликом (c2c) [#zvonok-klikom-c2c] ``` +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | eventtype | eventtime | cid_num | exten | uniqueid | linkedid | channame | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ | CHAN_START | 2022-06-21 16:49:23 | 101 | s | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | ANSWER | 2022-06-21 16:49:32 | 89021112233 | | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | APP_START | 2022-06-21 16:49:32 | 89021112233 | recordcheck | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | APP_END | 2022-06-21 16:49:32 | 89021112233 | recordcheck | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | CHAN_START | 2022-06-21 16:49:32 | | s | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | ANSWER | 2022-06-21 16:49:47 | 89021112233 | 89021112233 | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | BRIDGE_ENTER | 2022-06-21 16:49:47 | 89021112233 | | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | BRIDGE_ENTER | 2022-06-21 16:49:47 | 79021112233 | s | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | BRIDGE_EXIT | 2022-06-21 16:49:49 | 89021112233 | | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | BRIDGE_EXIT | 2022-06-21 16:49:49 | 79021112233 | s | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | HANGUP | 2022-06-21 16:49:49 | 89021112233 | | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | CHAN_END | 2022-06-21 16:49:49 | 89021112233 | | 1655812172.11 | 1655812163.10 | SIP/Zadarma-0000000b | | HANGUP | 2022-06-21 16:49:49 | 79021112233 | h | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | CHAN_END | 2022-06-21 16:49:49 | 79021112233 | h | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | | LINKEDID_END | 2022-06-21 16:49:49 | 79021112233 | h | 1655812163.10 | 1655812163.10 | SIP/101-0000000a | +--------------+---------------------+-------------+-------------+---------------+---------------+----------------------+ ``` ## Звонок FMC [#zvonok-fmc] ``` +------------+--------------+---------------------+----------+--------------+--------------+-----------+------------+------------+-------------+-------------------------+---------+---------------------------+-------------+-------------+---------------------+---------------------+----------+-------------------------+ | id | eventtype | eventtime | cid_name | cid_num | cid_ani | cid_rdnis | cid_dnid | exten | context | channame | appname | appdata | accountcode | peeraccount | uniqueid | linkedid | amaflags | peer | +------------+--------------+---------------------+----------+--------------+--------------+-----------+------------+------------+-------------+-------------------------+---------+---------------------------+-------------+-------------+---------------------+---------------------+----------+-------------------------+ | 0613741872 | CHAN_START | 2021-04-05 16:20:20 | | +79021112233 | | | | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | | | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | | | 0613741873 | CHAN_START | 2021-04-05 16:20:20 | | | | | | s | fmt.beeline | SIP/0000000004-00039377 | | | | | 1-1617614420.645548 | 1-1617614420.645547 | 3 | | | 0613741891 | ANSWER | 2021-04-05 16:20:28 | | 7343123456 | | | | 7343123456 | fmt.beeline | SIP/0000000004-00039377 | AppDial | (Outgoing Line) | | | 1-1617614420.645548 | 1-1617614420.645547 | 3 | | | 0613741892 | ANSWER | 2021-04-05 16:20:28 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | Dial | SIP/0000000004/7343123456 | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | | | 0613741893 | BRIDGE_START | 2021-04-05 16:20:28 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | Dial | SIP/0000000004/7343123456 | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | SIP/0000000004-00039377 | | 0613741908 | BRIDGE_END | 2021-04-05 16:20:32 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | Dial | SIP/0000000004/7343123456 | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | SIP/0000000004-00039377 | | 0613741909 | CHAN_START | 2021-04-05 16:20:32 | | | | | | s | fmt.beeline | SIP/0000000004-0003937c | | | | | 1-1617614432.645557 | 1-1617614420.645547 | 3 | | | 0613741910 | HANGUP | 2021-04-05 16:20:32 | | h | | | | h | fmt.beeline | SIP/0000000004-0003937c | AppDial | (Outgoing Line) | | | 1-1617614432.645557 | 1-1617614420.645547 | 3 | | | 0613741911 | CHAN_END | 2021-04-05 16:20:32 | | h | | | | h | fmt.beeline | SIP/0000000004-0003937c | AppDial | (Outgoing Line) | | | 1-1617614432.645557 | 1-1617614420.645547 | 3 | | | 0613741912 | HANGUP | 2021-04-05 16:20:32 | | 7343123456 | | | | | fmt.beeline | SIP/0000000004-00039377 | AppDial | (Outgoing Line) | | | 1-1617614420.645548 | 1-1617614420.645547 | 3 | | | 0613741913 | CHAN_END | 2021-04-05 16:20:32 | | 7343123456 | | | | | fmt.beeline | SIP/0000000004-00039377 | AppDial | (Outgoing Line) | | | 1-1617614420.645548 | 1-1617614420.645547 | 3 | | | 0613741914 | HANGUP | 2021-04-05 16:20:32 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | | | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | | | 0613741915 | CHAN_END | 2021-04-05 16:20:32 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | | | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | | | 0613741916 | LINKEDID_END | 2021-04-05 16:20:32 | | +79021112233 | +79021112233 | | 7343123456 | 7343123456 | fmt.beeline | SIP/0000000004-00039376 | | | | | 1-1617614420.645547 | 1-1617614420.645547 | 3 | | +------------+--------------+---------------------+----------+--------------+--------------+-----------+------------+------------+-------------+-------------------------+---------+---------------------------+-------------+-------------+---------------------+---------------------+----------+-------------------------+ ``` ## Звонок с перехватом [#zvonok-s-perekhvatom] ``` +---------+------------------+---------------------+---------------+---------------+---------------------+---------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------+ | id | eventtype | eventtime | cid_num | exten | context | channame | uniqueid | linkedid | extra | +---------+------------------+---------------------+---------------+---------------+---------------------+---------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------+ | 2147818 | CHAN_START | 2022-07-04 13:13:02 | 74991234567 | 1026 | from-pstn | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | | 2147819 | APP_START | 2022-07-04 13:13:02 | 74991234567 | recordcheck | sub-record-check | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | | 2147820 | APP_END | 2022-07-04 13:13:02 | 74991234567 | recordcheck | sub-record-check | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | | 2147821 | ANSWER | 2022-07-04 13:13:03 | 74991234567 | s | ivr-9 | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | | 2147828 | CHAN_START | 2022-07-04 13:13:26 | 701 | s | cos6 | SIP/701-00000ac9 | 1656929606.3375 | 1656929582.3372 | | | 2147829 | CHAN_START | 2022-07-04 13:13:33 | 601 | *8 | cos7 | SIP/601-00000aca | 1656929613.3376 | 1656929613.3376 | | | 2147830 | ANSWER | 2022-07-04 13:13:33 | 601 | *8 | cos7 | SIP/601-00000aca | 1656929613.3376 | 1656929613.3376 | | | 2147831 | PICKUP | 2022-07-04 13:13:34 | 701 | 2026 | cos6 | SIP/701-00000ac9 | 1656929606.3375 | 1656929582.3372 | {"pickup_channel":"SIP/601-00000aca","pickup_channel_uniqueid":"1656929613.3376"} | | 2147832 | HANGUP | 2022-07-04 13:13:34 | 701 | *8 | cos7 | SIP/701-00000ac9 | 1656929606.3375 | 1656929582.3372 | {"hangupcause":26,"hangupsource":"","dialstatus":""} | | 2147833 | CHAN_END | 2022-07-04 13:13:34 | 701 | *8 | cos7 | SIP/701-00000ac9 | 1656929606.3375 | 1656929582.3372 | | | 2147834 | BRIDGE_ENTER | 2022-07-04 13:13:34 | 601 | s | macro-dial | SIP/601-00000aca | 1656929613.3376 | 1656929613.3376 | {"bridge_id":"0de5cd55-0372-4039-98f4-31dfa03924fa","bridge_technology":"simple_bridge"} | | 2147835 | LINKEDID_END | 2022-07-04 13:13:34 | 601 | s | macro-dial | SIP/601-00000aca | 1656929613.3376 | 1656929613.3376 | | | 2147836 | BRIDGE_ENTER | 2022-07-04 13:13:34 | 74991234567 | s | macro-dial | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | {"bridge_id":"0de5cd55-0372-4039-98f4-31dfa03924fa","bridge_technology":"simple_bridge"} | | 2147993 | BRIDGE_EXIT | 2022-07-04 13:21:14 | 601 | s | macro-dial | SIP/601-00000aca | 1656929613.3376 | 1656929582.3372 | {"bridge_id":"0de5cd55-0372-4039-98f4-31dfa03924fa","bridge_technology":"simple_bridge"} | | 2147994 | HANGUP | 2022-07-04 13:21:14 | 601 | s | macro-dial | SIP/601-00000aca | 1656929613.3376 | 1656929582.3372 | {"hangupcause":16,"hangupsource":"SIP/601-00000aca","dialstatus":""} | | 2147995 | CHAN_END | 2022-07-04 13:21:14 | 601 | s | macro-dial | SIP/601-00000aca | 1656929613.3376 | 1656929582.3372 | | | 2147996 | BRIDGE_EXIT | 2022-07-04 13:21:14 | 74991234567 | s | macro-dial | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | {"bridge_id":"0de5cd55-0372-4039-98f4-31dfa03924fa","bridge_technology":"simple_bridge"} | | 2147997 | HANGUP | 2022-07-04 13:21:14 | 74991234567 | h | ext-group | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | {"hangupcause":16,"hangupsource":"SIP/601-00000aca","dialstatus":"ANSWER"} | | 2147998 | CHAN_END | 2022-07-04 13:21:14 | 74991234567 | h | ext-group | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | | 2147999 | LINKEDID_END | 2022-07-04 13:21:14 | 74991234567 | h | ext-group | PJSIP/1005-00000265 | 1656929582.3372 | 1656929582.3372 | | +---------+------------------+---------------------+---------------+---------------+---------------------+---------------------------+-----------------+-----------------+------------------------------------------------------------------------------------------+ ``` # Разворачивание бэкапа модуля (/for-admins/razvorachivanie-bekapa-modulya) При обновлении версии модуля, с согласия пользователя создается бэкап предыдущей версии, иногда может потребоваться откатить версию на предыдущую. Сначала нужно остановить службу модуля ``` service itgrix_bx stop ``` По умолчанию бэкапы создаются в директории `/opt/itgrix_bx_backups/` в виде папки с названием модуля, датой, временем и версией, например `/opt/itgrix_bx_backups/itgrix_bx-20220829-173241-3.9.3` Внутри лежат две папки `/opt/` `/etc/` , для того чтобы восстановить модуль из бэкапа нужно заменить этими папками существующие папки в директориях с модулем `/opt/itgrix_bx/` и `/etc/itgrix_bx` соответственно. После замены файлов, на всякий случай установим владельца и группу (по умолчанию asterisk) ``` chown -R asterisk. . /opt/itgrix_bx/ chown -R asterisk. . /etc/itgrix_bx/ ``` Далее нужно очистить файл `/opt/itgrix_bx/state.json` для того чтобы модуль не начал перечитывать звонки В версиях модуля itgrix\_bx начиная с **3.10.0** можно воспользоваться командой `/opt/itgrix_bx/itgrix_bx --clean --cleanlist s` ``` >/opt/itgrix_bx/state.json ``` Запускаем службу модуля, возможно понадобится переавторизовать модуль на портале ``` service itgrix_bx start ``` Для amoCRM процедура такая же, меняются только имена папок с `itgrix_bx` на `itgrix_amo` # Решение для нескольких Астерисков (/for-admins/reshenie-dlya-neskolkikh-asteriskov) Модуль может работать на нескольких серверах Астериск с одним корпоративным порталом. **Обязательное требование:** внутренние номера не должны пересекаться. **Плюсы:** Лицензирование происходит по адресу портала, вторая копия модуля не требует оплаты. # Скрипт для проверки работы службы модуля (/for-admins/skript-dlya-proverki-raboty-sluzhby-modulya) В старых операционных системах может отсутствовать система управления службами (systemd/supervisor), в таких случаях может помочь скрипт для проверки статуса службы и перезапуска если служба не работает. Создадим файл скрипта (например /etc/scripts/autostart\_itgrix\_bx.sh или /etc/scripts/autostart\_itgrix\_amo.sh), и добавим туда следующий код: ```bash // Для модуля в Битрикс24 #!/bin/bash # module itgrix PGREP="/usr/bin/pgrep -x" RESTART_itgrix_bx="/etc/init.d/itgrix_bx restart" itgrix="itgrix_bx" $PGREP ${itgrix} if [ $? -ne 0 ]; then $RESTART_itgrix_bx fi ``` ```bash // Для модуля в Amo #!/bin/bash # module itgrix PGREP="/usr/bin/pgrep -x" RESTART_itgrix_amo="/etc/init.d/itgrix_amo restart" itgrix="itgrix_amo" $PGREP ${itgrix} if [ $? -ne 0 ]; then $RESTART_itgrix_amo fi ``` Добавим в планировщик cron задачу по запуску скрипта раз в минуту: ``` // в консоли на сервере crontab -e ``` Для Битрикс24 ``` */1 * * * * /etc/scripts/autostart_itgrix_bx.sh ``` Для Amo ``` */1 * * * * /etc/scripts/autostart_itgrix_amo.sh ``` # Установка и настройка CEL (/for-admins/ustanovka-i-nastroika-cel) ### Настройка CEL в Linux [#nastroika-cel-v-linux] Перед конфигурацией ODBC в Asterisk необходимо установить необходимые пакеты в систему: `apt-get install unixODBC unixODBC-dev libmyodbc` В случае если у вас Ubuntu и в репозиториях нет коннектора, необходимо скачать актуальную версию [с сайта](https://dev.mysql.com/downloads/connector/odbc/) и установить ее: `$ tar xvf ./mysql-connector-odbc*.tar.gz`\ `$ cp ./lib/libmyodbc5a.so /usr/lib/x86_64-linux-gnu/odbc/libmyodbc5a.so` Конфигурация для MySQL ODBC драйвера выполняется в файле /etc/odbcinst.ini Пример конфигурации: `[MySQL]`\ `Description = ODBC for MySQ`\ `Driver = /usr/lib/odbc/libmyodbc.so`\ `Setup = /usr/lib/odbc/libodbcmyS.so`\ `FileUsage = 1` Если указанных каталогов по указанным путям нет, то они могут находиться в другом каталоге – их легко найти, выполнив следующие команды: `:~# updatedb`\ `:~# locate libmyodbc.so`\ `:~# locate libodbcmyS.so` Последние две команды покажут на экране местонахождение библиотек. Пропишем соответствующий путь, например: /usr/lib/i386-linux-gnu/odbc/libmyodbc.so Следующим шагом будет конфигурация файла /etc/odbc.ini для создания идентификатора, который Asterisk будет использовать для ссылки на эту конфигурацию. Если в будущем решите сменить БД, то следует переконфигурировать это файл. Вот пример конфигурации: `[asterisk-connector]`\ `Description = MySQL connection to 'asterisk' database`\ `Driver = MySQL`\ `Database = asterisk`\ `Server = localhost`\ `UserName = user`\ `Password = 123456`\ `Port = 3306` Теперь сконфигурируем Asterisk для работы с БД через ODBC, для этого служит файл: /etc/asterisk/res\_odbc.conf . Пример конфигурации данного файла: `[asterisk]`\ `enabled => yes`\ `dsn => asterisk-connector`\ `username => asterisk`\ `password => 123456`\ `pooling => no`\ `pre-connect => yes` Опция dsn указывает соединение, которое сконфигурировано в /etc/odbc.ini, а опция pre-connect говорит Asterisk’у поднимать соединение с базой, когда загружается модуль res\_odbc.so . Важное замечание: Asterisk должен быть собран с поддержкой ODBC! Для проверки можно выполнить из CLI команду odbc show. И теперь самое главное – приступаем к конфигурации CEL. Откроем конфигурационный файл /etc/asterisk/cel.conf и внесем в него следующие изменения: `[general]`\ `enable=yes`\ `apps=all`\ `events=all`\ `dateformat = %F %T` apps – данная опция указывает, какие приложения следует отслеживать. events – с помощью этой опции указываем, какие события (из таблицы выше) следует заносить в БД. Далее необходимо отредактировать файл /etc/asterisk/cel\_custom.conf – в нем раскомментируем секцию \[mappings]. И последний файл, который следует отредактировать – /etc/asterisk/cel\_odbc.conf. Внесем в него следующие изменения: `[first]`\ `connection=asterisk` \ `table=cel`\ `loguniqueid=yes` Опция connection задает имя коннектора из файла res\_odbc.conf, а опция table указывает имя таблицы БД для сохранения данных. Завершающим шагом настройки является создание БД и таблицы. ``` $ mysql –uroot –p mysql> CREATE DATABASE asterisk; mysql> use asterisk; mysql> CREATE TABLE IF NOT EXISTS `cel` ( `id` int(11) auto_increment, `eventtype` varchar(30), `eventtime` datetime, `cid_name` varchar(80) DEFAULT '', `cid_num` varchar(80) DEFAULT '', `cid_ani` varchar(80) DEFAULT '', `cid_rdnis` varchar(80) DEFAULT '', `cid_dnid` varchar(80) DEFAULT '', `exten` varchar(80) DEFAULT '', `context` varchar(80) DEFAULT '', `channame` varchar(80) NULL DEFAULT NULL, `src` varchar(80) NULL DEFAULT NULL, `dst` varchar(80) NULL DEFAULT NULL, `channel` varchar(80), `dstchannel` varchar(80) NULL DEFAULT NULL, `appname` varchar(80) NULL DEFAULT NULL, `appdata` varchar(80) NULL DEFAULT NULL, `amaflags` int(11) NULL DEFAULT NULL, `accountcode` varchar(20) NULL DEFAULT NULL, `uniqueid` varchar(32), `linkedid` varchar(32), `peer` varchar(80) NULL DEFAULT NULL, `userdeftype` varchar(255) NULL DEFAULT NULL, `eventextra` varchar(255) NULL DEFAULT NULL, `userfield` varchar(255) NULL DEFAULT NULL, `extra` varchar(512) NOT NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `uniqueid_index` (`uniqueid`), KEY `linkedid_index` (`linkedid`) ); ``` Перезапустим Asterisk. `# service asterisk restart` Проверка работы осуществляется с помощью команд из CLI Asterisk: `> cel show status`\ `> odbc show` # В таблице CEL в столбце cid_num нет внутреннего номера сотрудника (/for-admins/v-tablice-cel-v-stolbce-cid_num-net-vnutrennego-nomera-sotrudnika) **Проблемы:** * Нет окон при звонках; * Неправильный ответственный в делах. **Как определить:** 1. В лог файле находим звонок, при котором нет окна (например, входящий с 89123456 на 123). Нам нужен id родительского канала этого звонка. Пример строки в логе:`Incoming call started [987654.111] to the number [89123456] through the trunk [112233]` 2. По id звонка ищем сообщение о событии **“Conversation requested”** – именно на нём показываем карточку разговора. Пример сообщения: ``` answered_at:null channel_id:1542768439.1895 ended_at:null from:89123456789 from_local:false id:1542768439.1895 parent_channel_id:1542768416.1894 started_at:2018-11-21 07:47:19 state:1 state_code:ringing to:3432723033 (тут должен быть внутренний номера сотрудника) to_local:true trunk:3432723033 type:2 type_code:incoming was_answered:false ``` 3\. Здесь вместо внутреннего номера указан транк. **Как исправить:** 1. В файле /etc/asterisk/sip.conf (либо sip\_additional.conf, либо sip\_custom.conf, либо user.conf для Elastix) добавить строку для \[123]:\ `cid_number=123`\ Сделать для всех, у кого не попадает.\ Или:\ `callerid="Name" <123>`\ Name – имя сотрудника, отображаемое на телефоне.
2. Перечитать конфиги Астериска: `asterisk -rx “sip reload”.` # Ускорение работы модуля за счет параллельной обработки звонков (/for-admins/work_acceleration) Главный показатель производительности нашей интеграции – это количество звонков, которые модуль может обработать в единицу времени, не создавая задержек. Иногда приходят тысячи звонков в час, иногда колл-центр делает сотню одновременных исходящих звонков, и в этих ситуациях крайне важно не отставать в обработке, чтобы карточки звонков отображались и исчезали вовремя, и новые лиды регистрировались незамедлительно. В версии [3.4.0](/changelog-bx#3.4.0) мы уделили этому вопросу много внимания и добились огромного успеха – улучшения производительности на порядок. Чтобы понять, какие произошли изменения, посмотрим на работу предыдущих версий, вплоть до предпоследней [3.3.5](/changelog-bx#3.3.5). ## Как работала последовательная обработка [#kak-rabotala-posledovatelnaya-obrabotka] В основе работы модуля интеграции Itgrix лежит обработка событий звонков из Asterisk. Набрали номер, зазвонил телефон, взяли трубку – эти и другие события моментально появляются в CEL, модуль их видит и реагирует. Процесс чтения событий звонков, их интерпретации и реакции на них выполнялся последовательно, одно событие за другим. В результате, если два события происходили одновременно (например зазвонили телефоны у двух сотрудников), реакция на них происходила последовательно. Огромным замедляющим фактором здесь было строгое ограничение Битрикса: максимум **два запроса в секунду**. Это значит, что если для какого-то действия нам нужно отправить два запроса, то на его выполнение уходило **минимум** по секунде. Звонит 10 телефонов – у последнего карточка задержится на 10 секунд. ## Группировка запросов [#gruppirovka-zaprosov] Битрикс предоставляет удобный инструмент для обхода ограничения на запросы: их можно группировать в пакеты и отправлять до **50 штук** за раз, как один. Чтобы складывать запросы в такие пакеты, их нужно писать немножко по-другому. Основная хитрость в том, как организовать добавление запроса в пакет, своевременную отправку пакета и получение результата. Это и был первый большой шаг к улучшению производительности. ## Параллельная обработка событий [#parallelnaya-obrabotka-sobytii] С возможностью отправлять много запросов одновременно, стало возможным и обрабатывать несколько событий одновременно. Однако, некоторые из них логически связаны друг с другом. Поэтому интерпретация и реакция на события **каждого отдельного звонка** были выстроены в отдельные очереди событий. Реакция на события внутри очереди выполняется последовательно, но события из разных звонков независимы и обрабатываются параллельно. ## Результаты [#rezultaty] Благодаря этим изменениям, стало возможно работать с множеством событий одновременно и не ждать завершения обработки тех событий, результат которых не требуется для совершения дальнейших действий. Теперь мы можем отправлять не два запроса в секунду, а уже **сто запросов**. Конечно же, мы хотели протестировать и измерить как изменилась производительность. Для оценки мы выбрали такую меру: берём большое количество событий, ставим их все в очередь на обработку и замеряем время до завершения процесса. Выборку событий сделали по случайным звонкам. Вот что получилось: | Тест | Itgrix\_bx 3.3.4 | Itgrix\_bx 3.4.0 | | ------------ | ---------------- | ---------------- | | 10 звонков | 18.7 с | 5.4 с | | 100 звонков | 5 м 23 с | 48 с | | 1000 звонков | 41 м 53 с | 5 м 39 с | Поскольку в тестах используются случайные звонки, результаты немного плавают. Но самое разительное улучшение очевидно: **за примерно пять с половиной минут, прошлая версия справлялась с сотней звонков, а новая – уже с тысячей.** **Рост производительности почти в 10 раз.** У колл-центров количество звонков измеряется тысячами в час. Тесты показывают, что теперь наша интеграция может справиться более чем с десятью тысячами звонков в день без задержек. **Модуль интеграции готов для клиентов с большой нагрузкой.** # Задержка при показе окна (/for-admins/zaderzhka-pri-pokaze-okna) Задержка связана с большим потоком звонков более 6-7 тысяч в день (много звонков = много запросов). Из-за этого портал не успевает обрабатывать запросы. 1. Одно из решений – кэширование пользователя. Модуль при первом звонке делает один запрос к порталу о пользователях, затем хранит эту информацию в кэше в течение времени, указанном в конфиге. Это существенно сокращает число запросов.\ Для настройки в конфиге, в блоке “Bitrix” в поле “cache\_storage\_time\_min” нужно указать время кэширования пользователя в минутах (рекомендуется устанавливать 30 мин.). После этого перезапустите модуль.\\ 2. Также можно попробовать сократить время попытки отправки нового запроса из очереди.\ Для этого в конфиге, в блоке “Bitrix” в поле “execution\_loop\_interval\_msec” необходимо указать время в миллисекундах (рекомендуется устанавливать 200 мс). Есть ограничение: 1 запрос в полсекунды (на облаке). Если пытаться заставить его выполнять больше запросов, то прилетит ошибка 503 (\{"error":"QUERY\_LIMIT\_EXCEEDED", "error\_description":"Too many requests"}) в ответ на запрос.\\ 3. Еще полезно из групп пользователей для звонка сделать очередь. В случае группы звонок приходит на несколько пользователей. Это означает, что всех их нужно найти в Битриксе (либо взять из кэша), им нужно показать карточку звонка, а затем скрыть у тех, кто не ответил. Для очереди эти запросы будут идти в Битрикс только для того пользователя, у кого сейчас срабатывает звонок.\\ 4. Также стоит проверить нагрузку портала и сети. Вполне возможно, что при нагрузке более 8.5 тысяч звонков в день, портал не будет справляться с обработкой звонков. # Запуск дополнительной копии модуля (/for-admins/zapusk-dopolnitelnoi-kopii-modulya) На одном сервере Asterisk могут быть запущены несколько копий модуля. Они могут быть подключены к одной телефонии, но к разным CRM. **Важно:** 1. Внутренние номера на порталах не должны пересекаться (иначе один звонок будет попадать в несколько порталов). 2. У каждой копии модуля должен быть свой конфиг-файл и свои сетевые порты для подключения к админке, а также получения команд из CRM. 3. У каждой копии модуля должен быть свой кастомизатор. 4. Лицензирование осуществляется по адресам порталов. 5. При запуске нескольких копий модуля на один и тот же портал возможно превышение лимита запросов API CRM (копии модуля не согласовывают между собой частоту запросов). Изменения описаны для Itgrix\_bx. Для Itgrix\_amo всё так же, только пути будут содержать `itgrix_amo` вместо `itgrix_bx`. ## Шаги создания копии [#shagi-sozdaniya-kopii] ### **1. Создаём второй конфиг** [#id-1.-sozdayom-vtoroi-konfig] Назовём его `/etc/itgrix_bx/config-1.json` ``` cp /etc/itgrix_bx/config{,-1}.json ``` В новом конфиге исправляем обязательно: * `port, secure_port` другой порт отличный от 8077, 8078 Пример обновлённых значений: ``` "port": 8075, "secure_port": 8076, ``` ### **2. Создаём файл конфигурации для нового сервиса** [#id-2.-sozdayom-fail-konfiguracii-dlya-novogo-servisa] ``` cp /etc/systemd/system/itgrix_bx{,-1}.service ``` В новом файле для systemd вносим следующие изменения: * `Description` поменять на имя новой службы (`itgrix_bx-1`); * В `ExecStart` добавить флаг `--config` с именем нового конфига, который был создан на шаге 2; * В `ExecStart` поменять имя лог-файла на новое. Пример обновлённых значений: ``` [Unit] Description=itgrix_bx-1 [Service] ExecStart=/bin/sh -c "/opt/itgrix_bx/itgrix_bx --config=/etc/itgrix_bx/config-1.json >> /var/log/itgrix_bx-1.log" ``` ### 3. Регистрация второй службы модуля интеграции [#id-3.-registraciya-vtoroi-sluzhby-modulya-integracii] Запустим исполняемый файл модуля с ключом --register-instances для того, чтобы модуль обнаружил дополнительную копию: ``` /opt/itgrix_bx/itgrix_bx --register-instances ``` ### **4. Настроить ротацию лога** [#id-4.-nastroit-rotaciyu-loga] Нужно создать отдельный файл лога `cp /var/log/itgrix_bx{,-1}.log` и поменять его владельца на пользователя, под которым будет стартовать служба. В `/etc/logrotate.d/itgrix_bx` копируем всё содержимое с новым именем лога. Новое содержимое файла: ``` /var/log/itgrix_bx.log { # ротация раз в день. Возможные варианты daily, weekly, monthly, size (например size=1M) daily # сохраняется последние 5 ротированных файла rotate 5 # сжимать ротируемый файл compress # сжимать предыдущий файл при следующей ротации delaycompress # отсутствие файла не является ошибкой missingok # не создаём новый файл, копируем содержимое и обнуляем старый copytruncate } /var/log/itgrix_bx-1.log { # ротация раз в день. Возможные варианты daily, weekly, monthly, size (например size=1M) daily # сохраняется последние 5 ротированных файла rotate 5 # сжимать ротируемый файл compress # сжимать предыдущий файл при следующей ротации delaycompress # отсутствие файла не является ошибкой missingok # не создаём новый файл, копируем содержимое и обнуляем старый copytruncate } ``` ### **5. Создаём второй кастомизатор** [#id-5.-sozdayom-vtoroi-kastomizator] Для первой копии модуля кастомизатор располагается в папке `/opt/itgrix_bx/customizer/`. В файле `/opt/itgrix_bx/customizer/settings.json` ([начиная с версий Itgrix\_bx-3.9.0 и Itgrix\_amo-2.12.0](/custom_common/customizer-settings-update)) указаны конфиг и лог первой копии. Для второй копии создаём папку `/opt/itgrix_bx/customizer-1/` и в файле `/opt/itgrix_bx/customizer-1/settings.json` прописываем конфиг и лог второй копии: ```json { "configCrmField": "bitrix", "configPath": "/etc/itgrix_bx/config-1.json", "logPath": "/var/log/itgrix_bx-1.log", "requestTimeoutSec": 2 } ``` Для Itgrix\_amo `"configCrmField": "amo"`, значения путей содержат `itgrix_amo`. **ДО** версий Itgrix\_bx-3.9.0 и Itgrix\_amo-2.12.0 настройки кастомизатора хранились в файле `/opt/itgrix_bx/customizer/Settings.php`: ```php class Settings { const CONFIG_CRM_FIELD = 'bitrix'; // Название поля в CONFIG_PATH const CONFIG_PATH = '/etc/itgrix_bx/config-1.json'; const LOG_PATH = '/var/log/itgrix_bx-1.log'; } ``` Также в конфиге второй копии `/etc/itgrix_bx/config-1.json` нужно указать соответствующий кастомизатор: ```javascript "customizer": { ... "program_path": "/opt/itgrix_bx/customizer-1/customize.php", ... } ``` Теперь настраиваем кастомизации в `/opt/itgrix_bx/customizer-1/actions/` в соответствии с потребностями второй копии. ### **6. Запуск/стоп/рестарт/статус/автозапуск** [#id-6.-zapusk-stop-restart-status-avtozapusk] `systemctl start itgrix_bx-1`\ `systemctl stop itgrix_bx-1`\ `systemctl restart itgrix_bx-1`\ `systemctl status itgrix_bx-1`\ `systemctl enable itgrix_bx-1`\ `systemctl disable itgrix_bx-1` ### **7. Авторизуемся на портале** [#id-7.-avtorizuemsya-na-portale] При запущенной службе заходим в админку на страницу настройки CRM: `localhost:8075/config/master/crm` Выполняем авторизацию. # Amo. Ошибки о которых сообщает CRM (/how-to-fix/amo.-oshibki-o-kotorykh-soobshaet-crm) | Текст ошибки | Описание | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | 403 Forbidden
Access to account \{\{XXXX}} is prohibited from your IP address. Occurs when the filtering of access to the API by the "whitelist of IP addresses" is enabled in the account security settings. If you do not use the "white list of IP addresses", then contact the Support.
| Доступ к аккаунту \{\{XXXX\}} запрещён с Вашего IP адреса. Возникает, когда в настройках безопасности аккаунта включена фильтрация доступа к API по "белому списку IP адресов". Если вы не используете "белый список IP адресов", то обратитесь в службу поддержки AmoCRM. | | Admin access only. Please perform the integration under Administrator account to get full api access to account \{\{XXXX\}}. | Недостаточно прав для аккаунта \{\{XXXX\}}. Подключите интеграцию под аккаунтом Администратора | | Subscription has ended. It is necessary to pay for the functional | Означает, что закончилась подписка на сервис. Необходимо оплатить подписку на amoCRM | | "title":"Bad Request","type":"[https://httpstatus.es/400","status":400,"detail":"Код](https://httpstatus.es/400","status":400,"detail":"Код) ошибки 205. В случае повторного возникновения ошибки, обращайтесь в нашу техническую поддержку - [support@amocrm.ru](mailto:support@amocrm.ru)" | Означает, что были превышены лимиты по контактам и компаниям. Необходимо удалить лишние контакты | # Авторизация модуля в Б24 (/how-to-fix/bagfix-avtorizacii-v-b24) Если модуль интеграции Itgrix не авторизуется в портале, то, скорее всего, это связано с ошибкой в методе интеграции. Эта ошибка была исправлена в **версии модуль 2.15.6, 3.0.0 и выше.** Чтобы все заработало, переподключить свой портал.\ Следуйте пошаговой инструкции, представленной ниже. **1. Перейти на страницу мастера установки Битрикс24:**`http://ipAsterisk:8077/config/master/bitrix` **2. Введите адрес вашего портала.** **3. Выберите какое из приложений в портале вы используете:** Приложение в Битрикс24 должен устанавливать пользователь - Администратор. * Интеграция с Asterisk: **бесплатный** коннектор Itgrix * Интеграция с Asterisk: Itgrix по **подписке** [Подробнее о подписной модели](/faq/bx24-market-subscription) * Интеграция с Asterisk: коннектор Itgrix (**платный**) - скрыт с витрины, но если у вас он установлен и работает, то **удалять его не нужно - он продолжает работать** **4. Нажмите на кнопку "Получить код".** При получении кода нужно быть авторизованным в Битрикс24 с правами Администратора. Если вы уже были авторизованы в портале, то вам откроется страница с кодом (от 5 до 20 знаков).\ Если не авторизованы, то сначала нужно авторизоваться, а затем получить код.\ Введите код в поле Код авторизации и **нажмите кнопку Проверить.** **5. Возможные ошибки:**\ 1\. Пользователь, под которым вы авторизовались, не является админом на портале (вы должны быть администратором, чтобы передать приложению нужные права для работы);\ 2\. Выбрано не то приложение, которое установлено на портале (измените приложение, получите код заново и нажмите кнопку "Повторить шаг");\ 3\. На платное приложение закончилась лицензия (возможно, на данном портале вы используете бесплатное приложение или же нужно подлить лицензию). При успешном подключении все статусы будут зеленые. При возникновении сложностей [напишите нам](/contacts). # Бесплатная лицензия или ограниченный режим. (/how-to-fix/besplatnaya-licenziya-ili-ogranichennyi-rezhim.) Если в админке модуля появилось сообщение "Бесплатная лицензия или ограниченные режим", хотя модуль оплачен, возможно проблема в авторизации модуля в Битрикс24.\\ В этом случае нужно повторно пройти процедуре авторизации в портале. В админке модуля, в разделе Настройки - Битрикс24, нужно нажать "Переподключить", и авторизовать модуль в портале Б24.\ \ \\ Процедура авторизации также описана в статье по [ссылке](/how-to-fix/bagfix-avtorizacii-v-b24). # Разрешение Chrome для запросов на локальные адреса (CallCard) (/how-to-fix/disable-local-network-access-check) В новых версиях Chrome (начиная со 142) добавлен [механизм](https://developer.chrome.com/blog/local-network-access?hl=ru) защиты от атак типа межсайтовой подделки запросов (CSRF), направленных на маршрутизаторы и другие устройства в частных сетях, а также в ограничении возможностей сайтов использовать эти запросы для определения локальной сети пользователя. В связи с этим возможны ошибки при использовани CallCard в случаях, когда Битрикс24 находится в локальной сети, или при использовании корпоративных VPN. Вариант 1 (через браузер) Для отключения проверки: 1. Заходим на страницу chrome://flags/#local-network-access-check в Chrome 2. Переключаем Local Network Access Checks в Disabled 3. Перезагружем браузер для сохранения. Вариант 2 (предложенный командой поддержки Битрикс24) **Внимание:** Только для коробочной версии Битрикс24, делать на свой страх и риск лучше со специалистом по Битрикс. Необходимо внести разрешение на локальный ресурс с атрибутом iframe. В файле `/bitrix/components/bitrix/app.layout/templates/.default/template.php:136` в поле allow в iframe добавить параметр `local-network-access *;` В дальнейшем разработчики Битрикс24 обещали исправить данную проблему. # Failed to fetch. ошибка на странице веб интерфейса модуля (/how-to-fix/failed-to-fetch) Если при попытке зайти на страницу веб интерфейса модуля интеграции бразуер возвращает ошибку Failed to fetch, значит были закэшированы старые данные.\\ Ошибка Failed to fetch Нужно очистить кэш браузера для страницы веб интерфейса модуля интеграции.\ Очистка кэша в Google Chrome: 1. Откройте инструменты разработчика: Ctrl+Shift+I 2. Теперь, оставив панель открытой, кликните левой кнопкой мыши на кнопку «Обновить» (рядом со строкой адреса) и не отпускайте кнопку. 3. Через несколько секунд вы увидите выпадающее меню в котором будет пункт: Очистка кэша и аппаратная перезагрузка. Также чтобы перезагрузить страницу без использования файлов кэша, можно воспользоваться комбинацией клавиш `Ctrl+F5` или `Ctrl+Shift+R`.\ \\ # Если не регистрируется звонок переведенный на сотовый сотрудника (follow me) (/how-to-fix/follow-me) Если у вас на АТС настроена функция Follow Me - переадресация звонка на сотовый сотрудника, для того для корректного создания звонка нужно добавить транк. Звонок может не регистрироваться из-за того, что модуль в параметрах звонке видит два номера - транк (внешний номер компании) и сотовый, и не понимает - какой из них принадлежит пользователю.\ Чтобы заработало, нужно явно указать модулю номер - транк. Тогда сотовый номер будет воспринят как номер сотрудника, и по нему будет осуществлен поиск в Битрикс24. Номера транков нужно указать на странице 'Настройка транков' `http://ipasterisk:8077/config/trunks` точно так, как они передаются в Астериск.\\ # Как починить... (/how-to-fix) ## Статус приложения в админке показывает проблему [#status-prilozheniya-v-adminke-pokazyvaet-problemu] | Состояние | Решение | | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Остановлено. Приложение Интеграция с Asterisk не установлено в портале | Приложение, выбранное при авторизации в CRM, не установлено. Возможно, оно было удалено. Для решения проблемы нужно либо пройти авторизацию с фактически установленным приложением ([инструкция](/how-to-fix/bagfix-avtorizacii-v-b24)), либо установить авторизованное приложение ([инструкция](/ustanovka-modulya/itgrix-bx-setup#1-1-ustanovka-prilozheniya)) | | Остановлено. Необходимо пройти авторизацию в CRM | Модуль не подключен к CRM.
Выполнить авторизацию в CRM повторно, следуя этой инструкции (шаги аналогичны для Битрикс24 и amoCRM)
| | Перезапуск. Файл токена повреждён или пуст. Необходимо пройти авторизацию в CRM | Ранее выполненная авторизация в CRM более не действительна из-за повреждения файла с данными авторизации. Нужно выполнить авторизацию повторно ([инструкция](/how-to-fix/bagfix-avtorizacii-v-b24)) | | Авторизованный пользователь не является администратором портала. Необходимо пройти авторизацию в CRM от имени администратора | Для работы модуля интеграции необходимы права администратора на портале. Выйдите из текущего аккаунта на портале, зайдите в аккаунт администратора и выполните авторизацию повторно ([инструкция](/how-to-fix/bagfix-avtorizacii-v-b24)) | | Перезапуск. Истёк срок платной лицензии CRM | Для работы модуля интеграции нужно продлить Вашу лицензию на CRM | | Отсутствуют опциональные разрешения приложения: **timeman** | **timeman** - это разрешение от Битрикса на доступ к компоненту Учет рабочего времени. Без него не работает автораспределение на ответственных сотрудников с учётом статуса рабочего дня. Возможные причины и решения перечислены в [этой статье](/settings/autodistribution/autodistribution-and-timeman#razreshenie-timeman) | | Отсутствуют опциональные разрешения приложения: **imopenlines** | **imopenlines** - это разрешение от Битрикса на использование открытой линии (чата) с нашей техподдержкой. В этом случае доступны [другие каналы связи](/contacts) | | Обработчики событий CRM не зарегистрированы. Функция Click-to-Call недоступна | CRM не знает как сообщить модулю интеграции о старте звонка. Попробуйте перезапустить службу:
service itgrix\_bx restart
Если это не помогает, обратитесь в техподдержку
| | Зарегистрировано несколько обработчиков на одно событие. Удалите дублирующиеся обработчики событий | CRM отправляет на модуль интеграции несколько копий одного события. Перейдите на страницу админки "Настройки > Битрикс24" и удалите дубликаты обработчиков. Они могут отличаться адресами, от адреса зависит путь доставки события до модуля | | Нет событий звонков за последние 60 минут. Последнее событие было X назад | Отсутствие звонков за последнее время может указывать на проблему доступа к базе данных. Если звонки на самом деле были, или если время X **очень большое**, то возможно подключение к БД настроено неправильно. Проверьте настройки или обратитесь в техподдержку, также возможно перестали регистрироваться события звонков, нужно попробовать [перезагрузить модули Asterisk](/how-to-fix/perestali-registrirovatsya-sobytiya-v-cel-perezagruzka-modulei-v-asterisk). | | Модуль опережает таблицу CEL на X записей | Модуль интеграции не читает информацию о новых звонках, потому что они считаются старыми.
Если число X небольшое, например \<100, то проблема может скоро решиться сама.
Если число X большое, то возможно данные вашего Asterisk были повреждены или неожиданно изменились.
В любом случае, рекомендуем обратиться в техподдержку для выяснения причин и оптимального решения.
Сброс событий CEL в модуле
| | Не регистрируются звонки у определенного пользователя Битрикс24 | Возможно не найден внутренний номер сотрудника. Частые причины в статье по ссылке
Не регистрируются звонки у определенного пользователя Битрикс24
| | Не доступны сервер авторизации и/или сервер лицензирования, но всё работает | В системе нет разрешения использовать raw socket, поэтому не работает ping.
Может помочь запуск модуля от рута или выдача необходимого разрешения: sudo setcap cap\_net\_raw+ep $(which ping)
| | При авторизации получаем ошибку "Не удалось получить данных о приложении на портале" | С сервера, на котором установлена служба модуля, выполнить запрос `curl -vL "http://<адрес портала Битрикс24>/rest/app.info"`, и посмотреть куда идет перенаправление, возможно http направляется на https и происходит ошибка сертификата | | Рассинхронизация системного времени | [Инструкция по настройке синхронизации](/how-to-fix/time-sync) | ## Часть функционала не работает [#chast-funkcionala-ne-rabotaet] | Что не работает | Решение | | --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Функция Click-to-Call | Воспользоваться [этой инструкцией по отладке](/how-to-fix/kak-pochinit-click-to-call) | | Прослушивание записей разговоров | Самая распространённая причина - запрет смешанного содержимого в браузере, отключить запрет можно по этой инструкции (временное решение), либо настроить свои SSL сертификаты (инструкция)
Если это не помогло, воспользуйтесь этой инструкцией по отладке
| | Регистрация звонков Follow Me с переадресацией на сотовый | Решается настройкой транков ([инструкция](/how-to-fix/follow-me)) | | Звонки регистрируются с неправильными статусами | Возможно, ваша АТС или АТС собеседника завершает звонки с необычными статусами. Сообщите нам о проблеме чтобы мы изменили обработку статусов звонков в последующих версиях.
Временно можно перейти на старый способ определения статуса звонка с только двумя вариантами (успешный и пропущенный), инструкция в статье
| | Failed to fetch. Не открывается страница веб интерфейса | Скорее всего браузер закэшировал страницу с ошибкой, решается очисткой кэша браузера
(инструкция)
| | Не работает CallTransfer | [Возможные причины](/how-to-fix/ne-rabotaet-calltransfer) | | Amo. CRM сообщает об ошибках | [Описание ошибок](/how-to-fix/amo.-oshibki-o-kotorykh-soobshaet-crm) | # Изменение статуса звонка, назначение ответственного за звонок, работа ч/б списков (/how-to-fix/izmenenie-statusa-zvonka-naznachenie-otvetstvennogo-za-zvonok-rabota-ch-b-spiskov.) Статус звонка. \ \ Если по какой то причине(маршрутизация, механика работы оператора телефонии) статус звонка приходит неверный(например пропущенный вместо успешного), его можно кастомизировать. \ \ Кастомизация делается в коде скрипта, файл /opt/itgrix\_\{crm}/customizer/actions/process\_final\_params.php Пример: ```php $this->logDebug('params: '.json_encode($params)); if ($params['call_full']['channel']['was_answered'] == true) { $params['STATUS_CODE'] = 200; } return array( 'state' => 'success', 'data' => $params, ); ``` [Детальные статусы звонка.](/faq/detalnye-statusy-zvonka) Ответственный за звонок. Ответственный за звонок сотрудник указывается в соответствии с настройками логики модуля(админка - раздел Бизнес логика). Кастомизация данной логики прописывается в коде скрипта(файл [/opt/itgrix\_\{crm}/customizer/actions/process\_final\_params.php](/custom_bx#id-5-process_final_params)) Черные/Белые списки. Если список настроен в Админке модуля - номер 100 не в черном списке, номер 101 в черном списке, звонок приходит на номер 100, сотрудник берет трубку, разговаривает, переводит на номер 101, разговаривает сотрудник с номером 101, звонок не будет зарегистрирован т.к. номер 101 находится в черном списке. В случае если такая логика не устраивает - нужно делать кастомизацию в коде скрипта(файл [/opt/itgrix\_\{crm})/customizer/actions/need\_registration.php](/custom_common/black-white-list#kastomizaciya-need_registration)\\
# Как починить click-to-call (/how-to-fix/kak-pochinit-click-to-call) **Для упрощения отладки опишем функционал набора номера по клику:** 1. Делаем вызов из Битрикса (кликаем на номер телефона в CRM). 2. Команда на выполнение звонка (originate) поступает на модуль. 3. Модуль составляет запрос и отправляет в Asterisk. 4. После этого звонит ваш ip-телефон или сипфон (номер, которого указан в профиле пользователя). 5. Когда пользователь поднимает трубку, звонок уходит на телефон клиента. **Выполняем проверку следующих моментов:** 1. **Установлено ли** на портале **приложение**.\ [Как установить](/ustanovka-modulya/itgrix-bx-setup#id-1.1.-ustanovka-prilozheniya) 2. **Запущен ли модуль** на сервере.\ Проверить статус приложения можно с помощью [команд](/for-admins/poleznye-komandy). 3. **Внутренний номер в профиле** сотрудника на портале: **указан** и совпадает с тем, который заведен на телефонном аппарате (сип-фоне) пользователя.\ [Настроить внутренние номера в профиле](/settings/click-to-call#id-2.-nastroika-profilei-polzovatelei-bitriks24) 4. Если при исходящем звонке кликом вы слышите женский голос, который предлагает пополнить баланс телефонии Битрикс24, значит запрос с2с ушел не на приложение, а внутреннюю телефонию Битрикса.\ \ Для фикса **повторно выберите** Приложение “Интеграция с Asterisk - Itgrix” в качестве **"приложения по умолчанию для исходящих"**, в том числе у конкретного пользователя. Настройка этого этапа есть в [инструкции](/settings/click-to-call#id-1.-zadat-prilozhenie-po-umolchaniyu-dlya-iskhodyashikh-zvonkov). 5. В коробочном битриксе **в закрытом контуре установлен обработчик**. Если версия битрикс 23.300.0 и выше - нужен код описанный в [данной статье](/settings/click-to-call/osobennosti-nastroiki-posle-obnovleniya-bitriks24-23.300.0) **Данный код актуален только для версий Битрикс24 до 23.300.0, в версиях выше его не должно быть в dbconn.php** Проверяем, добавлен ли [код из инструкции по интеграции ](/settings/click-to-call)в файл dbconn.php `if($_REQUEST['COMMAND'] === 'startCallViaRest' ||`\ `$_SERVER['REQUEST_URI'] === '/rest/voximplant.call.startViaRest.json') {`\ `define('BITRIXREST_URL', '#asterisk ip-address#:8077');`\ `}` Где `#asterisk ip-address#` – адрес вашего Asterisk с установленным модулем. 6\. В консоли Asterisk проверяем, что **такой пир есть и он работает**.\ `asterisk -rx 'sip show peer 123'`\ где 123 – внутренний номер сотрудника.\ Если не работает, то проверить подключение аппарата пользователя к Asterisk. 7\. Убедимся, что **запрос доходит до модуля**. Открываем лог модуля `/var/log/itgrix_bx.log`, перемещаемся в конец лога нажатием Shift+g, ищем снизу вверх по слову Originate, если запрос выполнился видим успешный ответ от Астериска: ``` ?originate {"_ts":"2022-07-26 13:01:03 +05:00","call_stage":"aster","command":"Originate","level":"info","msg":"Originate succeeded from: 101, to: 89021234567"} ``` * **Если ничего не найдено**, значит запрос на вызов вообще не поступил на модуль. * Тогда проверим, приходит ли запрос на сервер.\ Запускаем tcpdump: `tcpdump port 8077`\ После этого делаем вызов кликом из Битрикс24. * Если не появился вывод команды, то проблема может заключаться в следующем: * Не проброшен порт (модуль за NAT) либо проблема в с2с-сервере; * Б24 отправляет данные на другой адрес/порт – проверяем [настройки модуля](/settings/click-to-call); * Б24 не отправляет запрос; * Если ответ есть, значит запрос пришел на порт, но не был передан модулю.\ Тогда проверяем настройки файервола. Если в лог приходит сообщение "User has no phone" значит у пользователя в Битрикс24 не указан внутренний номер в профиле пользователя. **8. Если ответ на Originate приходит с ошибкой вида:** ``` {"_ts":"2022-07-27 15:34:46 +05:00","call_stage":"aster","command":"Originate", "level":"info","msg":"Originate failed from: 101, to: 73431234567. AMI replied: Extension does not exist."} ``` Нужно проверить правильный ли технология, контекст указан в настройках модуля в разделе Asterisk, для этого узнаем какой контекст указан в настройках АТС у данного внутреннего номера: ``` asterisk -r sip show peer 101 // если используется PJSIP - sip show endpoint 101 * Name : 101 Description : Secret : MD5Secret : Remote Secret: Context : from-internal // название контекста ``` По умолчанию в настройках модуля (раздел Asterisk) указано использование протокола SIP, если у вас используется протокол PJSIP нужно указать это в строке Шаблон канала. Выполнение Originate запросов можно проверить напрямую через консоль Астериска: Пробуем выполнить Originate напрямую в Астериск, с полученными параметрами (звонок с 123 на 71234567890):\ `# asterisk -rvvvvv`\ `> channel originate SIP/123 extension 71234567890@from-internal` В случае успеха будет следующий отклик:\ `== Using SIP RTP TOS bits 184`\ `== Using SIP RTP CoS mark 5`\ `-- Called 123`\ `-- SIP/123-00001a5e is ringing` а) Если контекст указан неверный, увидим сообщение:\ `WARNING[9975][C-00004504]: pbx.c:4461 __ast_pbx_run: Channel 'SIP/123-00001a62' sent to invalid extension but no invalid handler: context,exten,priority=bad-context,71234567890,1` б) Если отсутствует номер:\ `[2018-12-21 17:47:52] ERROR[10555]: chan_pjsip.c:2458 request: Unable to create PJSIP channel - endpoint '123' was not found` в) Неверный тип канала:`[2018-12-21 17:47:37] WARNING[10527]: channel.c:6083 request_channel: No channel type registered for 'PSSIP'` Если статья не помогла решить проблему, [обратитесь в техподдержку](/contacts). # Как включить загрузку смешанного контента в Firefox и Google Chrome 80 (/how-to-fix/mixed-content-v-google-chrome) Обнаружили, что начиная с 80 версии, Google Chrome блокирует смешанный контент, полученный на странице по http запросу. В частности на портале **Битрикс24,** если включено прослушивание записи по ссылке (http-запрос), не проигрываются записи разговоров. Выглядит это так: * На плеере длина записи по нулям, хотя длительность разговора больше 0 сек.; * Если нажать на кнопку проигрывания, запись не запускается; * Но если нажать на ссылку "Скачать запись", то она корректно скачивается (т.е. проблема не с записью, не с сетью и не с запросом, а именно с плеером). Длительность 3:39, но на плеере 0:00. Проигрывание не работает. В итоге с 80 версии Google Crome блокирует проигрывание записи, полученной по http запросу. Для **amoCRM** по умолчанию все записи загружаются по ссылке. Так что там проблема стоит еще острее. Выглядит так же: * Открывается плеер и времени в плеере нет, звук не проигрывается; * Но скачать запись удается. ### Решение [#reshenie] В последних версиях Google Chrome (начиная с 81) смешанное содержимое полностью запрещено. Подробное описание в блоге Chromium: [https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html](https://blog.chromium.org/2019/10/no-more-mixed-messages-about-https.html) Необходимо настроить разрешения для конкретного сайта (вашей CRM): * Нажмите на замочек рядом с адресом сайта; * Выберите Настройки сайта; * Разрешите загрузку небезопасного контента (самый последний пункт). **Mozilla Firefox** включает в себя **блокировщик смешанного контента.** Этот блокировщик смешанного содержимого включен по умолчанию и защищает пользователей от атак «людей посередине» и перехватчиков на страницах HTTPS. Mozilla классифицирует смешанный контент на два типа — смешанный активный контент, такой как в сценарии, и смешанный пассивный контент, например изображения. Первый считается опасным, поскольку он может изменить поведение HTTPS-страницы и украсть конфиденциальные данные у пользователей — следовательно, он блокируется по умолчанию в Firefox. Теперь, когда ваш пользователь заходит на страницу HTTPS с заблокированным смешанным активным контентом, вы увидите уведомление со следующим сообщением: Firefox заблокировал небезопасный контент. Он отобразит щит и предложит следующие варианты: 1. Подробнее; 2. Сохранить блокировку; 3. Отключить защиту на этой странице; 4. Не сейчас. Выбор Отключить защиту на этой странице также разрешит смешанное активное содержимое, но Firefox может запомнить или не запомнить ваши настройки при следующем посещении этого сайта. Более того, если вы часто видите это сообщение на ваших доверенных сайтах, оно может вас раздражать, и вы можете отключить этот параметр безопасности по умолчанию. Чтобы отключить предупреждения о смешанном контенте в Firefox в Windows 8, откройте Firefox, введите **about: config** в адресную строку и нажмите Enter. Используя окно поиска, найдите параметр с именем **security.mixed\_content.block\_active\_content.** Как только вы нашли его, дважды щелкните по нему. Его значение автоматически изменится с True на **False**. Перезапустите браузер Firefox. # Модуль опережает таблицу CEL на X записей (/how-to-fix/modul-operezhaet-tablicu-cel-na-x-zapisei) Начиная с версии 3.11.0, для удаления записи о последнем событии можно использовать флаг **--clean --cleanlist=i**\ `/opt/itgrix_bx/itgrix_bx --clean --cleanlist=i` В случае переноса модуля на новый сервер Астериск, или чистки таблицы CEL, может возникнуть ситуация, когда модуль будет ждать события с ID больше чем последний ID события которое Астериск запишет в CEL, в таком случае звонок не будет зарегистрирован, нужно остановить службу модуля, очистить файл в котором модуль хранит сведения о последнем ID, и запустить службу, для этого воспользуемся командами: ``` Битрикс24 service itgrix_bx stop >/opt/itgrix_bx/state.json service itgrix_bx start AMO service itgrix_amo stop >/opt/itgrix_amo/state.json service itgrix_amo start ``` # Не появляется карточка звонка в Б24 во время разговора (/how-to-fix/ne-poyavlyaetsya-kartochka-zvonka-vo-vremya-razgovora) **Проблема отображения окон может быть на стороне модуля, либо на стороне Битрикс24.** На стороне модуля нужно убедиться в том, что последний отправляет запрос на показ окна в Битриксе. Для этого нужно зайти по SSH на сервер с установленным модулем и выполнить команду: grep ".show" /var/log/itgrix\_bx.log -A3 -B1 В результате должны получить данные вида: `--`\ `[2018-04-06 12:55:23.194 +05] debug 2171.885`\ `Выполнен запрос в CRM telephony.externalcall.show` \ `duration in ms: 477` \ `params: QJsonObject({"CALL_ID":"externalCall.ef4574c86dcd9438df5r8f290d0e5b70a.1522906049","USER_ID":665})` \ `response: QJsonValue(bool, true)` В ответе видно, что запрос в Битрикс отправлен и получен ответ, что окно будет отображено у пользователя с ID 665. **Возможные решения на стороне Битрикса:** * Если у сотрудника не указан внутренний номер на портале, то модуль не может найти пользователя, которому нужно показать окно. * Внутренний номер указан, но сотрудник был добавлен менее чем 30 минут назад, у модуля не успел обновиться список пользователей, его можно обновить вручную в админке модуля. * Если звонок совершается с номера, который закреплен за сотрудником в СРМ, то наш модуль считает этот разговор внутренним и не регистрирует на него. * При множестве открытых вкладок браузера карточка звонка уже открыта на одной из других вкладок, а не в CRM. Необходимо закрыть все вкладки или открыть CRM в другом браузере и попробовать совершить звонок снова. * В том случае если параллельно установлена старая версия нашей системы интеграции или какое-то другое решение для интеграции вашей телефонии, поведение окон непредсказуемо. Необходимо отключить все другие системы интеграции и проверить снова. * Установленные в браузере приложения – например, скрывающие рекламные блоки – блокируют появление окна. * В коробочной версии 1С-Битрикс24 должен быть подключен и корректно настроен модуль Push\&Pull или его аналог. Корректную работу этой системы можно проверить в административном интерфейсе Битрикс24: Настройки -> Инструменты -> Проверка системы. Там необходимо нажать "Выполнить проверку" и убедиться в корректности настройки функции "Бизнес-чат в реальном времени". # Не работает CallTransfer (/how-to-fix/ne-rabotaet-calltransfer) Проверить что служба модуля запущена на сервере ``` // Подключившись по ssh к серверу с модулем проверим состояние службы service itgrix_bx status itgrix_bx is running ``` Убедиться что у пользователей указаны их внутренние номера в профиле Битрикс24
Если внутренние номера сотрудников были недавно указаны в Битрикс24 (30 минут), нужно обновить список пользователей в админке модуля, раздел Бизнес логика
Ошибка AMI replied error В данном случае проблема с AMI в Asterisk, ошибки на АТС можно отследить командой которая запишет информацию в файл AMI.txt ``` tcpdump -i any -nqtttt -s 0 -A port 5038 -w AMI.txt ``` \\ # Не регистрируются звонки у определенного пользователя Битрикс24 (/how-to-fix/ne-registriruyutsya-zvonki-u-opredelennogo-polzovatelya-bitriks24) Если у определенного пользователя не регистрируются звонки в Битриксе: 1. Проверить, указан ли у данного пользователя внутренний номер в профиле CRM Внутренний номер в CRM 2\. Возможно пользователь заведен в CRM недавно и список пользователей у модуля еще не успел обновиться (раз в 30 минут), обновление списка сделать вручную в админке модуля(`http://ipAsterisk:8077/config`), в разделе Бизнес логика Обновление списка пользователей # Не всплывают уведомления о звонках в AMO (/how-to-fix/ne-vsplyvayut-uvedomleniya-o-zvonkakh-v-amo) Если в Amo не всплывают уведомления о звонках, нужно проверить все разрешения на показ всплывающих сообщений: 1. В браузере, в адресной строке кнопка слева от адреса сайта, переключатель Уведомления \ 2. Меню Настройки сайтов - Всплывающие окна и переадресация - Разрешить 3. В профиле сотрудника в Amo. Кнопка в левом верхнем углу на странице Amo - Профиль - Настройки уведомлений - Звонки # Перестали регистрироваться события в CEL, перезагрузка модулей в Asterisk (/how-to-fix/perestali-registrirovatsya-sobytiya-v-cel-perezagruzka-modulei-v-asterisk) Если перестали регистрироваться события звонков в таблице CEL, может помочь перезагрузка модулей записи в Asterisk.\ \ Заходим в консоль АТС ``` asterisk -r ``` #### Убедимся в наличии нужных модулей [#ubedimsya-v-nalichii-nuzhnykh-modulei-x20] ``` module show like cel_odbc.so Module Description Use Count Status Support Level cel_odbc.so ODBC CEL backend 0 Running core module show like res_odbc.so Module Description Use Count Status Support Level res_odbc.so ODBC resource 0 Running core ``` #### Перезагрузим эти модули [#perezagruzim-eti-moduli] ``` module reload cel_odbc.so module reload res_odbc.so ``` # Проблема с сертификатами Sectigo (/how-to-fix/problema-s-sertifikatami-sectigo) Перейдите по ссылке, чтобы воспользоваться статьей --> [https://habr.com/ru/company/habr/blog/504708/](https://habr.com/ru/company/habr/blog/504708/) # Прослушивание записи звонка в коробочной версии Битрикс24 (/how-to-fix/proslushivanie-zapisi-zvonka-v-korobochnoi-versii-bitriks24) Инструкция по созданию и использованию решения \ “Прослушивание записи звонка в Битрикс24” \ и ссылка на скачивание в карточке элемента в Таймлайне. ------------------------------------------------------- [#инструкция-по-созданию-и-использованию-решенияпрослушивание-записи-звонка-в-битрикс24и-ссылка-на-скачивание-в-карточке-элемента-в-таймлайне] **Было**
**Стало**
**Важно:** * Адрес получения записей должен быть доступен пользователям CRM с их машин. * Для корректной загрузки записи в плеере, необходимо обеспечить доступ по HTTPS \ с рабочим сертификатом (большинство браузеров не разрешают смешанный контент). 1. В файл /local/php\_interface/init.php добавляем код, с помощью которого подключается js библиотека: ```javascript "OnEpilogHandlerMain")); AddEventHandler("main", "OnEpilog", Array("AudioChangeSymbols", "OnEpilogHandlerMain")); class AudioChangeSymbols { static function OnEpilogHandlerMain() { $main = array( 'mainScript' => array( 'js' => '/local/js/custom/audio.js', ), ); foreach($main as $ext => $arext){ CJSCore::RegisterExt($ext, $arext); } CUtil::InitJSCore(array('mainScript')); } } ``` 2. Создаем файл /local/js/custom/audio.js со следующим содержимым: ```javascript BX.ready(function(){ let elements = [ 'div.crm-entity-stream-content-detail-description', 'div.crm-timeline__editable-text_content', ]; let arDeleteStr = [ 'Download', '\n', ]; let express = /\/crm\/\w+\/details\/\d+/; let url_cur = document.location.pathname; if(url_cur.match(express)) { BX.addCustomEvent('onAjaxSuccess', function() { let span_audio = ''; let tag = ''; for (let i = 0; i <= elements.length - 1; i++) { if (document.querySelector(elements[i]) !== null) { tag = elements[i]; } } if (tag !='') { span_audio = document.querySelectorAll(tag); let res = ''; let expr = ''; for (let elem of span_audio) { if (elem.querySelector('audio') === null) { res = elem.textContent; if (res.includes('http') && res.includes('get_conversation_recording')) { expr = /(http[^"]+\/get_conversation_recording\?[^"\/…]+)(…| |")/gm; let ar = res.split(expr); for (let i = 0; i <= arDeleteStr.length - 1; i++) { if (ar[1].includes(arDeleteStr[i]) ) { let arTrim = ar[1].split(arDeleteStr[i]); ar[1] = arTrim[0]; } } let html = ''; if (ar[0] != '' && !res.includes('audio')) { html = '' + ar[0] + '
'; } res = ar[1]; html += '
Скачать запись'; elem.innerHTML = html; } } } } else { console.log('Такого элемента на странице не существует'); } }); } }) ``` 3. В файле /local/js/custom/audio.js во второй строке определен массив elements с css селекторами элементов HTML страницы, в которых содержатся ссылки на запись звонков. **Желательно, чтобы это был тег div**. Если на портале используется другой класс или элемент, то необходимо в массив elements добавить нужный селектор. **div. указывать обязательно!**
На новой версии портала взяли тег **div.crm-timeline\_\_editable-text\_content**:
На старой версии портала это тег **div.crm-entity-stream-content-detail-description**.
# Чиним прослушивание звонков (/how-to-fix/reshenie-problem-s-zapisyu-zvonkov) Работающая запись звонков выглядит так: 1. Если включена опция Выгружать записи звонков на портал, то к делу (звонку) прикрепляется файл в mp3 формате; 2. Если включена опция Оставлять записи на сервере, то при открытии дела (звонка) в описании после слов “**Длительность звонка**” появляется плеер и ссылка “**Скачать запись**”. При клике на плеер проигрывает запись, при нажатии “**Скачать запись**” – сохраняется файл. Если включена запись по ссылке, то плеер внутри звонка Если включена загрузка файла, то плеер сразу в timeline Если запись не проигрывается и не скачивается, то выполняем последовательно следующие шаги. ### 1. Включена ли запись в Астериск? [#id-1.-vklyuchena-li-zapis-v-asterisk] Проверьте включена ли запись разговоров для всех используемых контекстов в Астериск. Для FreePBX она включается одной настройкой. В других случаях можно воспользоваться [несколькими командами](/for-admins/nastroika-zapisi-razgovorov-na-storone-asterisk). ### 2. Работает ли ссылка в браузере? [#id-2.-rabotaet-li-ssylka-v-brauzere] Копируем ссылку для скачивания записи и пробуем вставить ее в адресную строку в браузере. Ссылка вида: `http://:8077/get_conversation_recording?id=1542785260.1998&from=89222222222&to=101` Если получили запись, значит со ссылкой все хорошо и запись не проигрывается из-за проблем с плеером в браузере на странице Битрикса. Рекомендуем попробовать проиграть в нескольких разных браузерах.\ В Google Chrome 80 есть ограничение по получению смешанного контента, получаемого по http запросу.[ Решить можно так](/how-to-fix/mixed-content-v-google-chrome). Если ответ по ссылке Not found – тестируем ссылку в консоли на сервере (следующий шаг). Если включен первый вариант, когда записи загружаются на Битрикс, то проверьте, установлен ли lame на сервер, который преобразует wav файлы Астериска в mp3 файлы необходимые для Битрикса. [Подробнее...](/for-admins/nastroika-zapisi-razgovorov-na-storone-asterisk) ### 3. Работает ли ссылка на сервере? [#id-3.-rabotaet-li-ssylka-na-servere] Выполняем команду wget ‘ссылка’ в консоли сервера, где стоит модуль. Если запись получена – запрос корректный, в базе запись находится, значит проблема в сети – запрос из Битрикса не может "достучаться" до сервера. Например, закрыт порт 8077 на роутере… Если запись не получена, то двигаемся дальше. ### 4. Проверяем путь до записи на сервере Астериск [#id-4.-proveryaem-put-do-zapisi-na-servere-asterisk] Стандартно записи хранятся в директории /var/spool/asterisk/monitor/2018/… Эта директория должна быть прописана в конфиге, Раздел Asterisk, *Путь до файлов с записями разговоров* `"recordings_dir": /var/spool/asterisk/monitor/` А также корректно ли выбран параметр *Файлы с записями хранятся в поддиректориях согласно дате разговора* "recordings\_dir\_subdirs\_by\_date": true. Если эти настройки корректны, то проверяем, что в логе и базе данных. В Админке это выглядит следующим образом. Image ### 5. Проверяем запрос и ответ в логе модуля [#id-5.-proveryaem-zapros-i-otvet-v-loge-modulya] Если путь до файла указан верно, то смотрим в лог модуля /var/log/bx24asrerisk.log . При клике на ссылку “Скачать запись” в логе отмечается запрос в cdr для поиска пути до записи по параметрам звонка. Пример: ``select `cdr`.`recordingfile`, `cdr`.`calldate` from `cdr` where `cdr`.`uniqueid` = '1540542254.2969' and (`cdr`.`src` like '%3512777720' or `cdr`.`dst` like '%3512777720' or `cdr`.`src` like '%912' or `cdr`.`dst` like '%912' or `cdr`.`src` in (112233, 123456) or `cdr`.`dst` in (112233, 123456)) and `cdr`.`recordingfile` <> '' and `cdr`.`recordingfile` is not null limit 1`` И ответ базы данных на этот запрос: Result of record file path customization: \[/var/spool/asterisk/monitor/…………..] При невозможности выполнить запрос, будет указано “Could not find record by sql-query”. Если запрос корректный, но его содержание пустое, то в ответ будет Empty set. ### 6. Проверяем, что в *CDR* [#id-6.-proveryaem-chto-v-cdr] Нужно взять эту команду и выполнить в консоли mysql либо в веб-версии админки модуля на странице логов (раздел MySQL). Image Далее постепенно убирать параметры в запросе, пока не найдем, на каком аргументе ошибка. Самый короткий запрос: ``select * from `cdr` where `cdr`.`uniqueid` = '1540542254.2969'`` Должен вернуть строку в CDR по этому звонку. **Проверяем:** 1. Существует ли столбец “recordingfile”, куда пишется название файла записи? Если он называется по другому, то можно просто изменить его в админке Настройка / База данных / Имена столбцов. Если его нет, то нужно создать и настроить, чтобы в него писалось название файла записи. 2. В этом столбце есть названия записей? Если названий нет, то либо запись разговоров не включена, либо при разговоре не заполняется данное поле. Это может исправить администратор телефонии. 3. В поле ‘cnum’ есть номер звонящего? Если оно пустое, то вместо него можно использовать dst. Указать это в админке в разделе Настройка / База данных / Имена столбцов. Image ### 7. Формат файлов записей. [#id-7.-format-failov-zapisei] Для проигрывания записей в Битрикс24 и для успешного конвертирования в **mp3**, файлы записей на АТС должны храниться в формате **wav**, формат **WAV** не поддерживается Битрикс24 и Lame(кодек используемый модулем для конвертирования). В FreePBX формат записей можно поменять в меню **Setting - Advanced Settings - Call Recording Format** ### 8. Свободное место на диске в Битриксе. [#id-8.-svobodnoe-mesto-na-diske-v-bitrikse] Если в настройках модуля указано отправлять записи файлами в Битрикс и файлы не прикрепляются нужно проверить количество свободного места на диске в Битриксе. ### Как формируются ссылки на записи. [#kak-formiruyutsya-ssylki-na-zapisi] В CRM передается ссылка вида `/get_conversation_recording?id=&from=&to=`, где **\** обычно это `http://:8077` т.е. адрес сервера телефонии. При клике по этой ссылке модуль находит в базе данных Asterisk, в таблице CDR имя файла записи **\** и формирует `recording_path = /`. Здесь **\<subdir>** это `///
` если в настройках модуля включено **Файлы записей хранятся в каталогах** \ **"\<Каталог записей звонков>/Год/Месяц/День"** (Админка - Настройки - Asterisk), иначе пустая строка. В зависимости от того какой получился **\**, модуль действует одним из двух способов: 1. Если это путь файловой системы, например\ `/var/spool/asterisk/monitor/2026/05/01/recording.mp3` (где `recordings_dir = "/var/spool/asterisk/monitor"; subdir = "/2026/05/01/"; recording_file = "recording.mp3"`),\ то модуль читает этот файл и отдаёт его содержимое;\ Если это сетевой адрес, например\ `ftp://hosting.mycompany.com:8123/asterisk/recordings/recording.mp3` (где `recordings_dir = "ftp://hosting.mycompany.com:8123/asterisk/recordings"; subdir = ""; recording_file = "recording.mp3"`),\ то модуль перенаправляет пользователя на этот адрес, чтобы он открылся в браузере. 2. Второй способ позволяет направить пользователя на произвольный сетевой адрес, который включает имя файла записи. Если нужна сложная ссылка (параметры авторизации, ID вместо имени файла), можно модифицировать **\** в [кастомизации пути до записи](/custom_common/filepath), и там сформировать ссылку нужного вида, если это будет сетевой путь - модуль перенаправит пользователя по нему.\\
# Свои SSL сертификаты для https запросов (/how-to-fix/ssl-certificate) Для получения записей по новым ссылкам из внешней сети, **порт 8078** должен быть открыт на роутере. Примеры настроек:\ [Через freePBX](/for-admins/primery-nastroiki-wss-soedinenii)\ [Let's Encrypt](https://letsencrypt.org)\ [Certbot](https://certbot.eff.org/) Для работы по протоколу https у пользователя под которым работает служба модуля должны быть права на доступ к файлам ssl сертификатов, если прав нет в логе модуля можно увидеть ошибку вида:\ `HTTPS-server stopped: open /etc/asterisk/keys/<ваш домен>.pem permission denied` В современных версиях браузеров стали запрещать получение контента по незащищенному протоколу. Пока можно [отключить эту проверку](/how-to-fix/mixed-content-v-google-chrome) в каждом пользовательском браузере, но мы сделали возможным добавить свои SSL сертификаты в настройки модуля\*\*.\*\* Если у вас включено добавление в CRM ссылки на запись звонка, то запрос выглядит примерно следующим образом:\ \&#xNAN;**`http`**`://:`**`8077`**`/get_conversation_recording?id=1608120945.929&from=89221234567&to=101`\ \ Чтобы включить получение записи по **https**, нужно настроить эту функцию в админке на странице `http://:8077/config/module` 1. Нужно **включить функцию** "Использовать https порт". 2. Порт по умолчанию 8078 (можно изменить). Для того, чтобы записи были доступны снаружи сети, порт **8078 должен быть открыт** до Астериска. 3. **Добавить путь** к сертификату и ключу.\ Обычно их можно найти по адресу `/etc/asterisk/keys/`\ Нужны адреса на файлы `<ваш домен>.pem` и `<ваш домен>.key`\ Проще всего получить сертификат через сервис [letsencrypt](https://letsencrypt.org/ru/). 4. Сохранить настройки. Новая ссылка на запись будет выглядеть следующим образом **`https:`**`//:`**`8078`**`/get_conversation_recording?id=1608120945.929&from=89221234567&to=101` # Рассинхронизация системного времени (/how-to-fix/time-sync) Модуль интеграции Itgrix проверяет точность синхронизации системного времени и сообщает на странице статуса в админке о больших расхождениях на следующих серверах: * сервер где установлен модуль интеграции Itgrix; * сервер Asterisk; * сервер CRM. Сильные отклонения могут создавать проблемы при работе модуля интеграции: * нарушение работы процедуры автоматического обновления токена авторизации в CRM; * ошибки выполнения запросов; * некорректные временные метки в CRM. Админка отображает расхождение времени для каждого сервера в секундах относительно глобального корректного времени. ## Настройка синхронизации времени на сервере [#nastroika-sinkhronizacii-vremeni-na-servere] Для устранения рассинхронизации системного времени рекомендуется настроить автоматическую синхронизацию времени на серверах при помощи служб синхронизации времени, таких как ntpd, chrony, timesyncd. Ниже приведены инструкции по настройке для распространённых операционных систем. | Операционная система | Инструкция по настройке | | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Red Hat (CentOS/Sangoma/FreePBX/Rocky) | [https://docs.redhat.com/en/documentation/red\_hat\_enterprise\_linux/7/html/system\_administrators\_guide/ch-configuring\_ntp\_using\_the\_chrony\_suite](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite) | | Debian | [https://wiki.debian.org/NTP](https://wiki.debian.org/NTP) | | Ubuntu | [https://documentation.ubuntu.com/server/how-to/networking/chrony-client/](https://documentation.ubuntu.com/server/how-to/networking/chrony-client/) | ## Настройка проверки точности синхронизации времени [#nastroika-proverki-tochnosti-sinkhronizacii-vremeni] Проверка точности синхронизации времени выполняется регулярно по расписанию при помощи SNTP и HTTP запросов к серверам, предоставляющим точное время. Параметры проверки можно изменить, добавив в файл конфигурации `/etc/itgrix_/config.json` блок `app.time_sync` с желаемыми параметрами. По умолчанию он отсутствует, что соответствует следующим значениям: ```json { "app": { "time_sync": { "enabled": true, "check_interval_min": 360, "retry_interval_min": 30, "sntp_server_list": [ "0.pool.ntp.org", "ru.pool.ntp.org", "time.google.com", "time.cloudflare.com" ], "sntp_samples": 5, "request_timeout_msec": 2000, "http_server_list": [ "https://google.com", "https://example.com", "https://lk.bx24asterisk.ru" ] } } } ``` Доступные настройки: * `enabled` - позволяет полностью отключить проверку точности синхронизации времени; * `check_interval_min` - интервал проверки точности синхронизации времени в минутах (по умолчанию 6 часов); * `retry_interval_min` - интервал повторных попыток проверки при ошибках; * `sntp_server_list` - список серверов времени для выполнения SNTP запросов (используется стандартный порт 123); * `sntp_samples` - количество SNTP запросов на каждый сервер; * `request_timeout_msec` - таймаут запросов в миллисекундах; * `http_server_list` - список адресов для проверки синхронизации времени \ по HTTP заголовку `Date`, используется когда SNTP запросы не проходят успешно. Отсутствующие опции принимают значения по умолчанию, указанные выше. # Требования к системе (/ustanovka-modulya/trebovaniya-k-sisteme) ## 1. Требования к телефонии Asterisk [#id-1.-trebovaniya-k-telefonii-asterisk] Требования можно проверить автоматически, с помощью нашего скрипта itgrix\_checker\\ Скачиваем скрипт проверки `curl -OJLk "https://itgrix.ru/download/itgrix_checker"` Запускаем скрипт `bash itgrix_checker` Настройка производится с аккаунта пользователя со следующими правами: * Просмотр и редактирование конфигурационных файлов Asterisk; * Установка дополнительного ПО на сервере, настройка его работы в качестве сервиса. | Обязательные требования | Как проверить | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1. Asterisk 13.0 и выше | asterisk -V
Ответ: Asterisk 13, FreePBX 14 и аналоги
Подойдет как Asterisk, так и FreePBX, Elastix, Issabel...
| | 2. В Asterisk включен и настроен AMI | asterisk -rx 'manager show settings'
Ответ:
Manager (AMI): Yes
| | 3. Важно! В Asterisk включено логирование звонков в таблицу CEL, которая находится в MySQL.

Список необходимых ивентов:
CHAN\_START
CHAN\_END
ANSWER
LINKEDID\_END
BLINDTRANSFER
ATTENDEDTRANSFER
PICKUP


| 1. Проверяем статус работы CEL:
asterisk -rx 'cel show status'
Ответ:
CEL Logging: Enabled
CEL Tracking Event: CHAN\_START
CEL Tracking Event: CHAN\_END
CEL Tracking Event: ANSWER
CEL Tracking Event: BLINDTRANSFER
CEL Tracking Event: ATTENDEDTRANSFER
CEL Tracking Event: LINKEDID\_END
CEL Tracking Event: PICKUP
...
CEL Event Subscriber: ODBC CEL backend
2. Проверяем информацию о последних событиях:
mysql
use asteriskcdrdb;
select id, eventtype, eventtime, cid\_num, exten, uniqueid, linkedid, channame from cel order by id desc limit 10;
Таблица должна быть не пустая, в ней должны отображаться события звонка.
Логин/Пароль для подключения к mysql обычно можно найти в /etc/asterisk/res\_odbc\_additional.conf
| | 4. Включена запись разговоров и в CDR есть информация об имени файла записи | select recordingfile from cdr order by calldate desc limit 10;
Если через АТС были звонки, то в ответе должны быть последние 10 названий файлов записей.
| | 5. Для работы кастомизатора необходим
PHP 5.3 и выше
| php -v
Пример вывода:
PHP 5.6.40 (cli) (built: Jan 22 2019 23:51:52)
| | 5.1. Необходим пакет **php-json** (обязательно, без него никакие кастомизации работать не будут) | php -r 'var\_dump(function\_exists("json\_decode"));'
Ожидаемый вывод:
bool(true)
| | 5.2. Для работы запросов в CRM из кастомизатора ([Битрикс24](/custom_bx/zaprosy-v-bitriks-iz-kastomizacii), [amoCRM](/custom_amo/zaprosy-v-amocrm-iz-kastomizacii)) необходим пакет **php-curl** (опционально, без него кастомизатор будет выполнять всё кроме HTTP-запросов) | php -r 'echo curl\_version()\["version"];'
Пример вывода:
7.47.0
| | 6. Для конвертации записей в mp3 с обновлением пути требуется разрешение UPDATE на таблицу CDR | Проверить права:
SHOW GRANTS FOR '\'@'\';
Добавить разрешение UPDATE:
GRANT UPDATE ON asteriskcdrdb.cdr TO '\'@'\';
| ## 2. Требования к CRM-системам [#id-2.-trebovaniya-k-crm-sistemam] ### Битрикс24 [#bitriks24] Настройка портала производится пользователем, обладающим административными правами. С 9.12.24 для РФ и РБ использовать приложения на облачном и коробочном портале Битрикс24 возможно только при включенном триале либо **оплаченной подписке на Маркетплейс** #### Коробочная версия [#korobochnaya-versiya] Для коробочной версии 1С-Битрикс24 должны быть установлены и иметь актуальную версию следующие модули:\ \- Главный модуль Битрикс24 версии 16.5.11 и выше;\ \- Модуль “REST API (rest)”;\ \- Модуль “Телефония”;\ \- Модуль “CRM”;\ \- Модуль “Push\&Pull”. Коробочный портал должен иметь **актуальную действующую лицензию**. В демо режиме и с истекшей лицензией указанные модули не работают. #### Облачная версия [#oblachnaya-versiya] Активная платная лицензия на Битрикс24 любого тарифа. ### amoCRM / Kommo [#amocrm-kommo] Особых требований к конфигурации amoCRM и Kommo нет. ## 3. Требования к сети [#id-3.-trebovaniya-k-seti] На сервере с модулем (обычно это сервер Asterisk), нужно разрешить **исходящие запросы** к: 1. Вашему порталу Битрикс24 (облачному или локальному) по протоколу https или http; 2. Серверу авторизации Битрикс24 [https://oauth.bitrix.info](https://oauth.bitrix.info) (не важно, облачный у вас Битрикс24 или коробочный!); 3. Серверу лицензирования модуля [https://lk.bx24asterisk.ru](https://lk.bx24asterisk.ru); 4. Серверу приложения [https://iw.bx24asterisk.ru](https://iw.bx24asterisk.ru). Для реализации полного функционала (click-to-call и прослушивание записей) из Битрикс24 должен быть доступ на сервер с модулем (проброшен порт 8077 и 8078). Для прослушивания разговоров - должен быть доступ на сервер с модулем с использованием протокола HTTPS: [проброшен порт 8078](/how-to-fix/ssl-certificate) и установлены корректные ssl сертификаты. * Битрикс24: если используется загрузка файлов записей напрямую на портал - настройка порта 8078 не требуется. * amoCRM: для прослушивания записей настройка порта 8078 обязательна. Это связано с [запретом браузерами смешанного содержимого](/how-to-fix/mixed-content-v-google-chrome). ### amoCRM / Kommo [#amocrm-kommo-1] В настройках виджета Itgrix, в поле 'Внешний адрес модуля для запросов Click-to-Call', адрес должен быть указан с протоколом **https.** \\ Начиная с версии модуля интеграции [3.0.0](/changelog-amo#3.0.0), для показа и скрытия [карточки звонка](/ustanovka-modulya/itgrix-amo-setup/kartochka-zvonka-v-amocrm) необходимо настроить и обеспечить возможность подключения пользователей к модулю интеграции по протоколу WSS. Адрес для подключения имеет вид `wss://:8078/crm/cardws`. Его можно настроить в виджете приложения в интерфейсе amoCRM. Необходимые условия для корректной работы: * адрес доступен с компьютера пользователя, это может быть адрес в локальной сети, адрес доступный через VPN или (не рекомендуется) внешний адрес; * настройки всех узлов маршрута между пользователем и адресом сокета карточки разрешают устанавливать соединение по протоколу WSS, это может потребовать дополнительной настройки имеющегося сервера Nginx или другого прокси-сервера; * на сервере где установлен модуль интеграции настроен валидный SSL-сертификат, который успешно верифицируется браузером пользователя, и этот сертификат указан в интерфейсе настройки модуля интеграции `http://:8077/config/module`; * сервер на котором установлен модуль интеграции и промежуточные узлы маршрута настроены для одновременной поддержки необходимого количества соединений, по одному на браузер с открытым интерфейсом amoCRM. Без этой настройки основной функционал приложения будет работать, но не будет отображаться карточка звонка. ## 4. Минимальные системные требования [#id-4.-minimalnye-sistemnye-trebovaniya] * Процессор от 2 ядер. * ОЗУ от 2 ГБ. * От 500 МБ свободного места на жестком диске (Коннектор + бэкап + лог). ## 5. Требования к операционной системе сервера [#id-5.-trebovaniya-k-operacionnoi-sisteme-servera] В системе должна быть установлена библиотека OpenSSL версии 1.0.2k и выше. **Более старые версии OpenSSL могут сделать невозможным выполнение необходимых запросов, например, при получении лицензии.** \ Для проверки версии, в консоли вводим команду: \ `openssl version` Для проверки введите в командной строке `# uname -a.` Хорошо проходит установка модуля на операционных системах: * CentOS 7 и выше. * Debian 7 и выше. На CentOS 6 по умолчанию установлена библиотека OpenSSL версии 1.0.1e, Itgrix будет работать только с обновленной версией OpenSSL 1.0.2k и выше. Мучительно проходит установка на FreeBSD. НЕ удалось провести интеграцию на операционных системах: * CentOS 5 * Debian 6 * Gentoo Если вы используете другую операционную систему, то для установки модуля необходимо, чтобы в репозиториях ОС были пакеты: `unixODBC`, `mysql-connector-odbc`, `mysql-server`. Если они уже установлены в ОС, то это сильно упростит установку модуля. # Более недоступный функционал (/custom_bx/custom-before-2.15/bolee-nedostupnyi-funkcional) Теперь невозможно управление созданием сущности, поэтому **удалены кастомизации поиска и создания сущности**: * **process\_entity\_creation\_params.php;** * **process\_search\_params.php.** Кастомизация **process\_search\_params.php** раньше в некоторых случаях использовалась для создания черных/белых списков по транкам. Теперь эти списки реализуются в кастомизации **need\_registration.php** (см. далее, как перенести черные/белые списки). В кастомизации **process\_final\_params.php** невозможно использовать данные о сущности. Во входных параметрах (объект **params**) удален блок данных: `"entity_data": {`\ ` "entity_id": "<Идентификатор сущности в битрикс>",`\ ` "entity_type": "<Тип сущности. Принимает значения: lead, company, contact>",`\ ` "was_created": "<Был ли лид создан модулем (для новых лидов). Принимает значение true или false>"`\ `}` Также в кастомизации **process\_final\_params.php** реализовывалась возможность удалить созданный лид/контакт в тех случаях, когда нужно показать карточку звонка, но не нужно создавать лид/контакт. Теперь в этом нет необходимости. # Черно/белые списки для версии до 2.15.0 (/custom_bx/custom-before-2.15/cherno-belye-spiski-dlya-versii-do-2.15.0) ### Черный/белый список (фильтрация по внутреннему номеру): [#chernyi-belyi-spisok-filtraciya-po-vnutrennemu-nomeru] Черный список внутренних номеров позволяет удалять в CRM дела и новых лидов по результату разговоров с выбранного набора внутренних номеров. Белый список внутренних номеров наоборот позволяет передавать в CRM дела по результату разговоров только с определенного набора внутренних номеров сотрудников. Для отмены регистрации звонков на определенные внутренние номера, например, 111, 112 и 113, редактируем файл **/opt/bx24asterisk/custom/process\_final\_params.php**. Если папки /opt/bx24asterisk/custom нет, редактируем файл **/opt/bx24asterisk/customizer.php** после строки **case 'process\_final\_params'.** Пример кода: ``` $action = 'register'; //$white_list = array('111', '112', '113'); $black_list = array('111', '112', '113'); // узнаём тип звонка // 2 = incoming $key = $params['conversation']['type'] == 2 ? 'to' : 'from'; // Условие для белого списка //if (!in_array($params['conversation'][$key], $white_list)) { // Условие для черного списка if (in_array($params['conversation'][$key], $black_list)) { $action = 'delete'; } return array( 'state' => 'success', 'data' => $params, 'action' => $action // эта строка должна присутствовать ); ``` При отмене регистрации звонка будет удалены дело и лид, если для этого звонка был создан новый лид. Подробно параметры[ описаны в статье](/custom_bx#5-process_final_params). ### Черный и белый список (фильтрация по транку): [#chernyi-i-belyi-spisok-filtraciya-po-tranku] Работает только для входящих звонков. Есть варианты настройки данной логики: * модуль полностью игнорирует звонки, нет отображения окон; * сотруднику будет показано окно и по окончании звонка модуль удалит дело и лид, в случае когда последний был создан модулем. Для первого варианта (полностью игнорируем звонки) необходимо указать в файле конфигурации (**/etc/bx24asterisk/config.json**) для параметра "**customize\_search\_params**" значение **TRUE** и написать код в файле **/opt/bx24asterisk/custom/process\_search\_params.php**. Если папки /opt/bx24asterisk/custom нет, редактируем файл **/opt/bx24asterisk/customizer.php** после строки **case 'process\_search\_params'**. Пример кода: ``` $action = 'register'; if ($params['TYPE'] === 2) { $trunks = array('2723033'); $key = array_key_exists('conversation', $params) ? 'conversation' : array_key_exists('call', $params) ? 'call' : false; // Условие для белого списка if (!in_array($params[$key] ['trunk'], $trunks)) { // Для черного списка условие будет таким: // if (in_array($params[$key] ['trunk'], $trunks)) { $action = 'ignore'; } } return array( 'state' => 'success', 'data' => $params, 'action' => $action ); ``` Для ситуации когда нужно показать окно, по окончании звонка удаляем дело и лид, если он был создан для этого звонка. Необходимо: * указать в файле конфигурации (**/etc/bx24asterisk/config.json**) для параметра "**customize\_final\_params**" значение **TRUE** * отредактировать код файла кастомизатора (**/opt/bx24asterisk/custom/process\_final\_params.php**). * если папки /opt/bx24asterisk/custom нет, то редактируем файл **/opt/bx24asterisk/customizer.php** после строки **case 'process\_final\_params'**: ``` $action = 'register'; $black_list = array(111, 112, 113); // Реализация черного списка if(!empty($params['conversation']['trunk']) && in_array($params['conversation']['trunk'], $black_list)) { // При реализация белого списка, условие будет такое //if(empty($params['conversation']['trunk']) || !in_array($params['conversation']['trunk'], $black_list)) { $action = 'delete'; } return array( 'state' => 'success', 'data' => $params, 'action' => $action // эта строка должна присутствовать ); ``` # Кастомизации (для версий до 2.15.0) (/custom_bx/custom-before-2.15) ## Как перенести кастомизации на новую версию [#kak-perenesti-kastomizacii-na-novuyu-versiyu] 1. Переименовать `get_updated_lead_fields.php` в `get_updated_entity_fields.php`; 2. Перенести код для черных/белых списков (если есть) из кастомизаций `process_search_params.php` и/или `process_final_params.php` в `need_registration.php`. ## Для версий с одним кастомизатором [#dlya-versii-s-odnim-kastomizatorom] Если у вас версия до 2.13.1, то у вас, скорее всего, единый файл кастомизации – его нужно будет разделить на отдельные файлы до переноса. ## Схема обработки звонка модулем интеграции Itgrix (bx24asterisk) [#skhema-obrabotki-zvonka-modulem-integracii-itgrix-bx24asterisk] (Схема для версий до 2.15.0) #### Описание схемы [#opisanie-skhemy] “Сущность” — это контакт или лид. **Краткое описание кастомизаций** | Файл кастомизации | Описание | | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | get\_search\_filter.php | Фильтруем полученные из Б24 сущности. (Для посвященных в Битрикс. Только для избранных.)

Можно выбрать по параметрам, с какими сущностями работать.
| | get\_updated\_activity\_fields.php | Обновление полей дела (в конце звонка) | | get\_updated\_entity\_fields.php | Обновить поля сущности (в конце звонка) | | need\_registration.php | Нужна ли регистрация?

Можно сделать черно-белые списки по внутреннему номеру/транку.
| | process\_entity\_creation\_params.php | Изменение параметров создания сущности в Б24. | | process\_final\_params.php | Изменение данных завершения звонка. | | process\_originate\_params.php | Изменение параметров при инициализации звонка из Битрикс.

Можно позвонить через другой транк, через другой контекст, сменить формат номера и прочее.
| | process\_phone\_number.php | Изменение номера получаемого телефона:

Можно сменить формат телефонного номера (+7, 8...).
| | process\_record\_file\_path.php | Кастомизация пути до файла записи разговора. | | process\_registration\_params.php | Изменение параметров регистрации звонка. | | process\_task\_creation\_params.php | Кастомизация создания задач по пропущенным звонкам. | ## Входные и выходные параметры кастомизаций [#vkhodnye-i-vykhodnye-parametry-kastomizacii] ### **1) process\_phone\_number** [#id-1-process_phone_number] Преобразование номеров – как внутренних, так и внешних. **Примеры использования** [Изменение номера телефона перед отправкой данных в CRM](/custom_common/client-phone-number) **Вход:** `{"params":` \ `{"phone": <номер>}`\ `}` **Вернуть:** `{"data":`\ `{"phone": <кастомизированный_номер>},`\ `"state": "success"`\ `}`\\ ### **2) process\_record\_file\_path** [#id-2-process_record_file_path] Преобразование пути до файла записи разговора. Примеры использования – [Кастомизация имени файла аудиозаписи](/custom_common/filepath) **Вход:** `{"params":` \ `{"call_id": },`\ `{"from": <номер>},`\ `{"to": <номер>},`\ `{"path": <путь_до_записи>}`\ `}` **Вернуть:** `{"data": {"path": <кастомизированный_путь_до_записи>},`\ `"state": "success"`\ `}`\\ ### **3) process\_originate\_params** [#id-3-process_originate_params] Изменение параметров при инициализации звонка из Битрикс24. Примеры использования – [Изменения номера\контекста для вызова в Астериск](/custom_bx/custom-before-2.15#vkhodnye-i-vykhodnye-parametry-kastomizacii) **Вход:** `{"params": {`\ `"caller_id": "",`\ `"channel": "",`\ `"context": "",`\ `"extension": "",`\ `"priority": ""`\ `}}` **Вернуть:** `{"data": {`\ `"caller_id": "",`\ `"channel": "",`\ `"context": "",`\ `"extension": "",`\ `"priority": ""`\ `}}` Опционально: `"codecs": "",`\ `"variable": "variable"`\\ ### **4) process\_search\_params** [#id-4-process_search_params] Изменение параметров поиска сущности, а также данных на входе.\\ Примеры использования: 1. [Черные и белые списки](/custom_common/black-white-list); 2. [Кастомизация поиска](/custom_bx/custom-before-2.15/kastomizaciya-poiska). **Вход:** ``` {"params": { (см. https://dev.1c-bitrix.ru/rest_help/scope_telephony/telephony/telephony_externalcall_register.php) "CALL_START_DATE": "<Дата, время начала звонка>" "CRM_CREATE": "<Создавать или нет новый лид (если номер не найден в CRM)>" "CRM_SOURCE": "" "LINE_NUMBER": "<Транк, на который пришел звонок>" "PHONE_NUMBER": "<Номер для поиска сущности в битрикс>" "SHOW": "<[0/1] Показывать ли карточку звонка при регистрации>" "TYPE": "<Направление звонка: 2 - входящий; 1 - исходящий>" "USER_ID": "<Идентификатор пользователя>", "conversation": {Данные о звонке}, "call": {Если есть разговор, придет этот набор вместо conversation}, "user": {} }} ``` **Вернуть:** `{"data": { - измененные входные параметры`\ `"<Название поля задачи в битрикс>": "<Значение этого поля>",`\ `}}` Опционально: `"action": "",`\ `"filter": { - параметры для поиска в битрикс. Логика описана в статье https://bx24asterisk.ru/support/30-customize_search_params`\ `"lead": {},`\ `"contact": {},`\ `"company": {}`\ `}` ### **5) process\_final\_params** [#id-5-process_final_params] Преобразование данных завершения звонка. Примеры использования: 1. [Организация черных и белых списков](/custom_common/black-white-list); 2. [Разные ответственные за пропущенные за разные транки](/custom_bx/default-resp-for-trunks). **Вход:** ``` {"params": { "ADD_TO_CHAT": "<Добавить сообщение о звонке в бизнес чат>", "CALL_ID": "<Идентификатор звонка в битрикс>", "DURATION": "<Длительность>", "STATUS_CODE": 200, "USER_ID": "<Идентификатор пользователя Битрикс, ответственного за разговор>", "conversation": { "answered_at": "<Время поднятие трубки>", "channel_id": "<Идентификатор канала>", "ended_at": "<Время окончания разговора>", "from": "<Номер позвонившего>", "from_local": <Локальный номер позвонившего. Принимает значение true или false>, "id": "<Идентификатор звонка>", "parent_channel_id": "<Идентификатор родительского канала>", "started_at": "<Время начала звонка>", "state": <Статус состояния звонка>, "state_code": "<Состояния звонка>", "to": "<Номер, кому пришел звонок>", "to_local": <Локальный номер принимающего. Принимает значение true или false>, "trunk": "<Внешний номер, на который поступил звонок>", "type": <Направление звонка. Принимает значения: 1 - внутренний; 2 - входящий; 3 - исходящий>, "type_code": "<Направление звонка. Принимает значения: incoming - входящий, outgoing - исходящий>", "was_answered": <Отвеченный звонок. Принимает значение true или false> }, "entity_data": { "entity_id": <Идентификатор сущности в битрикс>, "entity_type": "<Тип сущности. Принимает значения: lead, company, contact>", "was_created": <Был ли лид создан модулем (для новых лидов). Принимает значение true или false> } }} ``` **Вернуть:** ``` { "data": { "ADD_TO_CHAT": "<Добавить сообщение о звонке в бизнес чат>", "CALL_ID": "<Идентификатор звонка в битрикс. Не рекомендуется изменять!>", "DURATION": "<Длительность>", "STATUS_CODE": "", "USER_ID": "<Идентификатор пользователя Битрикс, ответственного за разговор>", }, "action": "", "state": "success" } ``` ### **6) process\_entity\_creation\_params** [#id-6-process_entity_creation_params] Событие возникает при входящем звонке с неизвестного номера. **Вход:** ``` {"params": { “type”: lead, // значения: contact, deal, lead "ASSIGNED_BY_ID":238, "COMMENTS":"", "OPENED":"Y", "PHONE": [ {"VALUE":"83432872875"} ], "SOURCE_ID":"7", "TITLE":"" }} ``` **Вернуть:** `{`\ `"data": {`\ `"<Название поля сущности в битрикс>": "<Значение этого поля>",`\ `},`\ `"state": "success"`\ `}` Примеры использования: 1. Описание полей лида в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php); 2. Описание полей контакта в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php); 3. Описание полей сделки в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/cdeals/crm_deal_fields.php). ### **7) process\_task\_creation\_params** [#id-7-process_task_creation_params] [Кастомизация создания задач по пропущенным звонкам](/custom_bx/task-for-missed-call) Событие возникает перед постановкой задачи (при пропущенном входящем звонке).\ Полное описание полей задачи в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/tasks/fields.php). **Вход:** ``` {"params": { "arNewTaskData": { "DEADLINE":"<Крайний срок исполнения>", "CREATED_BY": <Идентификатор постановщика>, "RESPONSIBLE_ID": <Идентификатор сотрудника, ответственного за задачу>, "TITLE":"<Заголовок задачи>", "UF_CRM_TASK": [ - связь задачи с сущностью. "L_11201" - состоит из типа сущности (L - лид, C - контакт, CO - компания, D - сделка) и ее идентификатора, которые указываются через символ "_". ] } }} ``` **Вернуть:** `{`\ `"data": {` \ `"arNewTaskData": { - массив полей для создания задачи`\ `"<Название поля задачи в битрикс>": "<Значение этого поля>"`\ `}`\ `},`\ `"state": "success"`\ `}` ### **8) get\_updated\_lead\_fields** [#id-8-get_updated_lead_fields] Обновление полей лида в конце входящего звонка работает только для лидов, которые созданы модулем. Примеры использования – [Обновление полей лида](/custom_bx/custom-before-2.15/obnovlenie-polei-lida) **Вход: Е** Параметры звонка описаны в 5 пункте process\_final\_params ``` {"params": { "conversations": { - набор всех разговоров, которые были в звонке "1550838819.13014": {<Набор данных о разговоре>}, "1550838850.13029":{<Набор данных о разговоре>} }, "answered_at":"", "ended_at":"", "from":"", "from_local":false, "id":"1550838797.13013", "started_at":"", "state":3, "to":"", "to_local":true, "trunk":"", "type":2 }} ``` **Вернуть:** `{`\ `"data": {`\ `"<Название поля лида в битрикс>": "<Значение этого поля>",`\ `},`\ `"state": "success"`\ `}` Описание полей лида в [API Битрикса](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php) ### **9) get\_updated\_activity\_fields** [#id-9-get_updated_activity_fields] Обновление полей дела в конце звонка. Примеры использования – [Обновление полей дела](/custom_bx/update-activity-fields) **Вход:** Обновление полей дела в конце разговора. Параметры звонка описаны в 5 пункте process\_final\_params ``` {"params": { "answered_at":"", "channel_id":"", "ended_at":"", "from":"", "from_local":false, "id":"", "parent_channel_id":"", "started_at":"", "state":3, "state_code":"hung", "to":"", "to_local":true, "trunk":"", "type":2, "type_code":"incoming", "was_answered":true }} ``` **Вернуть:** `{`\ `"data": {`\ `"<Название поля дела в битрикс>": "<Значение этого поля>",`\ `},`\ `"state": "success"`\ `}` # Изменения черных/белых списков в версии до 2.15.0 (/custom_bx/custom-before-2.15/izmeneniya-chernykh-belykh-spiskov) Ранее черные/белые списки по транкам реализовывались через кастомизацию **process\_search\_params.php**, а по внутренним номерам через **process\_final\_params.php**. Теперь все черные/белые списки реализуются в кастомизации **need\_registration.php**. ## Перенос черных/белых списков по внутренним номерам [#perenos-chernykh-belykh-spiskov-po-vnutrennim-nomeram] Например, если у вас в файле **process\_final\_params.php** был такой код черного списка по внутренним номерам: ``` $action = 'register'; //$white_list = array(111, 112, 113); $black_list = array(111, 112, 113); // узнаём тип звонка // 2 = incoming $key = $params['conversation']['type'] == 2 ? 'to' : 'from'; // Условие для белого списка //if (!in_array($params['conversation'][$key], $white_list)) { // Условие для черного списка if (in_array($params['conversation'][$key], $black_list)) { $action = 'delete'; } return array( 'state' => 'success', 'data' => $params, 'action' => $action // эта строка должна присутствовать ); ``` то теперь в файл **need\_registration.php** нужно написать такой код для черного списка: ``` $black_list = array('101', '102'); $key = $params['conversation']['type'] == 2 ? 'to' : 'from'; // 2 = incoming if (in_array($params['conversation'][$key], $black_list)) { $result = false; } return array( 'state' => 'success', 'data' => array( 'result' => $result ), ); ``` или такой код для белого списка: ``` $white_list = array('201', '202'); $key = $params['conversation']['type'] == 2 ? 'to' : 'from'; // 2 = incoming if (!in_array($params['conversation'][$key], $white_list)) { $result = false; } return array( 'state' => 'success', 'data' => array( 'result' => $result ), ); ``` ## Перенос черных/белых списков по транкам [#perenos-chernykh-belykh-spiskov-po-trankam] Например, если у вас в файле process\_search\_params.php был такой код черного списка по внутренним номерам: ``` $action = 'register'; if ($params['TYPE'] === 2) { $trunks = array('2723033'); $key = array_key_exists('conversation', $params) ? 'conversation' : array_key_exists('call', $params) ? 'call' : false; // Условие для белого списка if (!in_array($params[$key] ['trunk'], $trunks)) { // Для черного списка условие будет таким: // if (in_array($params[$key] ['trunk'], $trunks)) { $action = 'ignore'; } } return array( 'state' => 'success', 'data' => $params, 'action' => $action ); ``` то теперь в файл **need\_registration.php** нужно написать такой код: ``` if ($params['TYPE'] === 2) { // входящий $trunks = array('123456', '555666'); // Белый список if (!in_array($params['conversation'] ['trunk'], $trunks)) { $result = false } // Черный список //if (in_array($params['conversation'] ['trunk'], $trunks)) { // $result = false //} } return array( 'state' => 'success', 'data' => array( 'result' => $result ) ); ``` # Кастомизация поиска (/custom_bx/custom-before-2.15/kastomizaciya-poiska) **Начиная с версии 2.15.0 поиск сущности не осуществляется (теперь Битрикс сам создает сущность, если нужно), поэтому данная кастомизация УДАЛЕНА.** В начале звонка из телефонии на модуль интеграции поступает номер телефона. С этим номером модуль делает запрос в Битрикс24 для поиска сущности, к которой нужно прикрепить данный звонок. И далее работает с этой сущностью. Начиная с версии 2.8.52 модуля появилась возможность сделать фильтр по этим сущностям, чтобы ограничить поиск. ### Обычная схема поиска: [#obychnaya-skhema-poiska] 1. Выполняем поиск сущностей по номеру; 2. Получаем поля для трёх найденных сущностей (контакта, компании, лида) и берём первую валидную. Пример: по номеру нашлись 2 лида с ID 123 и 456. При получении полей лида 123 произошла ошибка. Лид 456 получить удалось, поэтому используем его. ### Кастомная схема поиска: [#kastomnaya-skhema-poiska] 1. Выполняем поиск дубликатов по номеру; 2. Выполняем поиск сущности, используя фильтр по полям, полученный в кастомизаторе. ID, полученные на шаге 1 используем, если не указаны иные. Пример: нашли 3 лида с ID 123, 456 и 789. Хотим использовать лиды только определённого статуса, например STATUS\_ID = "Some\_Status". Указываем эти параметры в кастомизаторе и выполняем поиск с использованием фильтра. В результате берём лид с подходящим статусом. При поиске используется API метод **crm.#entity#.list** (например, [для лидов](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_list.php)). Данные в кастомизаторе подставляются в параметр filter. #### Для изменения поиска нужно: [#dlya-izmeneniya-poiska-nuzhno] 1. [Включить кастомизатор](/custom_common/vklyuchenie-kastomizatora); 2. Поставить опцию "Кастомизировать параметры поиска" в конфиге. В файле **/opt/bx24asterisk/custom/process\_search\_params.php** кастомизатора нужно составить фильтр для поиска и передать его. Если папки /opt/bx24asterisk/custom нет, редактируем файл **/opt/bx24asterisk/customizer.php**, после строки **case 'process\_search\_params'**: Подробно параметры [описаны в статье.](/custom_bx) Вид параметров: `"filter": {` \ `"company": {"ID":"123", "NAME":"noname"},// фильтр для поиска по компаниям`\ `"contact": {"LAST_NAME":"Ivanoff"}, // фильтр для поиска по контактам`\ `"lead": {"STATUS_ID": "bad"} // фильтр для поиска по лидам`\ `}` Если один из массивов пуст, то поиск по такому виду сущности не выполняется. **Описание полей, которые можно использовать:** 1. [Поля лида](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php); 2. [Поля контакта](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_fields.php); 3. [Поля компании](https://dev.1c-bitrix.ru/rest_help/crm/company/crm_company_fields.php). ### Примеры: [#primery] Регистрируем звонки только на лиды, которые НЕ являются новыми ``` $filter = array( 'lead' => array( '!STATUS_ID'=> 'NEW' ) ); $params["filter"] = $filter; return array( 'state' => 'success', 'data' => $params ); ``` Эта кастомизация позволяет решить множество различных задач, например: 1. Сами создаём сущность и заставляем работать с ней; 2. Поиск среди несконвертированных лидов с суммой больше нуля ([Параметры](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_list.php)); 3. Поиск среди контактов с непустым именем/связанной компанией/сделкой и т.д.; 4. Поиск среди контактов определённого типа – клиент, кандидат на должность ([Параметры](https://dev.1c-bitrix.ru/rest_help/crm/contacts/crm_contact_list.php)). Все случаи, фильтры можно соединять, перемешивать. Лид менять на контакт и наоборот. # Новые возможности (/custom_bx/custom-before-2.15/novye-vozmozhnosti) Кастомизация **get\_updated\_lead\_fields.php** преобразована в **get\_updated\_entity\_fields.php.** Теперь она вызывается как для лидов, так и для контактов. Технически код скрипта остался прежним. При переходе на новую версию достаточно просто переименовать файл. В кастомизации **process\_task\_creation\_params.php** (кастомизация при постановке задачи по пропущенному звонку) теперь можно использовать данные о звонке. Во входных параметрах (объект **params**) добавлен блок данных **conversation**: ``` "conversation": { "answered_at": "<Время поднятие трубки>", "channel_id": "<Идентификатор канала>", "ended_at": "<Время окончания разговора>", "from": "<Номер позвонившего>", "from_local": "<Локальный номер позвонившего. Принимает значение true или false>", "id": "<Идентификатор звонка>", "parent_channel_id": "<Идентификатор родительского канала>", "started_at": "<Время начала звонка>", "state": "<Статус состояния звонка>", "state_code": "<Состояния звонка>", "to": "<Номер, кому пришел звонок>", "to_local": "<Локальный номер принимающего. Принимает значение true или false>", "trunk": "<Внешний номер, на который поступил звонок>", "type": "<Направление звонка. Принимает значения: 1 - внутренний; 2 - входящий; 3 - исходящий>", "type_code": "<Направление звонка. Принимает значения: incoming - входящий, outgoing - исходящий>", "was_answered": "<Отвеченный звонок. Принимает значение true или false>" } ``` # Обновление полей лида (/custom_bx/custom-before-2.15/obnovlenie-polei-lida) **В версии 2.15.0 кастомизация `get_updated_lead_fields` перенесена в `get_updated_entity_fields` и вызывается не только для лидов, но и для контактов. Новая статья:** [**Обновление полей сущности**](/custom_bx/update-entity-fields)**.** По умолчанию мы передаем в Битрикс24 стандартную информацию о звонке: * номер телефона клиента; * номер ответившего –> определяет того, кто станет ответственным за дело/звонок; * направление звонка (входящий/исходящий) – подпадает в название дела; * источник звонка; * комментарий нового лида, в котором будет указано, что он создан модулем. Но возникают ситуации, когда требуется подкорректировать эти данные. Например, можно: * убрать комментарий из лида, так как это поле используется операторами для заметок; * указать в поле "дополнительно об источнике", на какой транк поступил звонок. По завершению звонка появилась возможность изменить/обновить поля в лиде CRM Битрикс24. Это возможно сделать один раз, если лид создан модулем. То есть это должен быть звонок с неизвестного номера. Доступно с версии 2.7.119 модуля. Как реализовать: 1. В веб-интерфейсе в настройках модуля ([https://ip-asterisk:8078/config](https://ip-asterisk:8078/config)) установите галочку на пункте "Включить кастомизацию полей лида"; 2. Отредактируйте файл **/opt/bx24asterisk/custom/get\_updated\_lead\_fields.php**.\ Если папки /opt/bx24asterisk/custom нет, редактируем файл **/opt/bx24asterisk/customizer.php** после строки **case 'get\_updated\_lead\_fields'**: Image Подробно параметры [описаны в статье](/custom_bx). Ниже приведен скрипт, который в название лида пишет номер клиента, направление звонка либо статус пропущенного звонка, а в поле "**Дополнительно об источнике**" будет записан транк, через который прошел звонок: ``` // Нужно вернуть массив [обновляемое_поле = значение] $leadFields = array(); $direction = 'Входящий '; $number = $params['from']; $trunk=$params['trunk']; // 2 - входящий, 3 - исходящий if ($params['type'] == 3) { $direction = 'Исходящий '; $number = $params['to']; } if (empty($params['answered_at'])) { // пропущенный звонок $direction .= 'пропущенный '; } $leadFields = array( 'NAME' => $number . ' ' . $direction . 'звонок', 'SOURCE_DESCRIPTION'=>$trunk, ); return array( 'state' => 'success', 'data' => $leadFields ); ``` Описание полей в [**API Битрикса**](https://dev.1c-bitrix.ru/rest_help/crm/leads/crm_lead_fields.php) # Описание файла конфигурации (версия 3) (/for-admins/config) Путь по умолчанию\ **Битрикс24**: `/etc/itgrix_bx/config.json` **AmoCRM**: `/etc/itgrix_amo/config.json` После ручного редактирования убедитесь в валидности json файла\ (например, через сервис [https://jsonlint.com/](https://jsonlint.com/)).\ **Иначе модуль не будет работать.** **Для применения настроек перезапустите модуль:** `# systemctl restart itgrix_bx # systemctl restart itgrix_amo` либо `# service itgrix_bx stop # service itgrix_amo stop`\ `# service itgrix_bx start # service itgrix_amo start` Для изменения настроек через веб-интерфейс (админку), перезагружаться не нужно.\ Сохраняться нужно на каждой странице админки – `https://:8078/config` . ## app – раздел настроек работы приложения [#app-razdel-nastroek-raboty-prilozheniya] **Сопоставление внешних номеров телефона с источниками вызова в CRM:** `"trunks": {`\ `"2723033": {`\ `"source": "WEB",`\ `"default_responsible_id": 1035`\ `},`\ `"4993508890": {`\ `"source": "CALL",`\ `"default_responsible_id": 0`\ `}`\ `}` Для корректной работы модуля необходимо указать все используемые транки. Если не указать транк, то могут возникнуть проблемы с отображением окна при входящем. Транки можно узнать следующими способами: * в БД asterisk в таблице trunks (номера в столбце outcid); * в файле `/etc/asterisk/extensions_additional.conf` (в FreePBX extensions\_additional.conf), выполнив команду: `grep ^OUTCID /etc/asterisk/extensions{,_additional}.conf` * Либо транки можно получить прямым запросом в CEL\ `select distinct exten from cel where uniqueid=linkedid and length(cid_num)>4 and eventtype='CHAN_START' and length(exten)>4;` Для каждого транка можно настраивать источнк и [ответственного за транк](/settings/additional/trunk-responsible) на странице настроек `/config/trunks`. **Настройка максимальной длины внутренних номеров:** `"max_inner_phone_len": 4` По умолчанию это значение равно 4. Номера такой длины и менее будут считаться внутренними номерами. Эту настройку можно изменить если ваши внутренние номера длиннее 4 символов, но если номер клиента окажется в пределах этой длины, то звонок не будет зарегистрирован и обработан корректно. ## asterisk – Раздел настроек подключения к Asterisk [#asterisk-razdel-nastroek-podklyucheniya-k-asterisk] **Настройки подключения к AMI:** `"host": "127.0.0.1"`\ `"port": 5038`\ `"login": "bx24"`\ `"password": "bx24secret"` **Настройки инициации вызова в Asterisk:** `"originate": {`\ `"caller_id": "Звонок на #TO# <#TO#>",`\ `"channel": "SIP/#FROM#", (Вместо SIP можно указывать любой другой протокол IAX2, PJSIP)`\ `"context": "from-internal",`\ `"extension": "#TO#",`\ `"priority": "1"`\ `}` Про параметры originate в Asterisk можно прочитать [здесь](http://asterisk.ru/knowledgebase/Asterisk+Manager+API+Action+Originate/). **Путь до файлов с записями разговоров:** `"recordings_dir": "/var/spool/asterisk/monitor"` **Файлы с записями хранятся в поддиректориях согласно дате разговора:** `"recordings_dir_subdirs_by_date": true` **Комбинация для совершения перехвата вызова** (указывается настроенная на Астериск комбинация для распознавания перехвата): `"pickup_code": *8` ## bitrix – раздел настроек подключения к Битрикс24 [#bitrix-razdel-nastroek-podklyucheniya-k-bitriks24] **Адрес портала Битрикс24:**\ `"host": "https://portal.bitrix24.ru",` Будьте внимательны: если у вас коробочный 1С-Битрикс24 с протоколом http, здесь должен быть указан http\://, хотя обычно используется https\:// (в том числе для облачных порталов). **Адрес для click-to-call:**\ `"c2c_address" : "1.1.1.1"` Адрес для работы функции click-to-call из облачного Битрикс24, внешнего по отношению к сети компании. Нужен внешний (!) IP-адрес компании. **Адрес для получения записей:**\ `"recording_address" : "192.168.0.1"`\ Адрес, необходимый для формирования ссылки на получение записи разговора в деле. Рекомендуем указывать внутренний адрес сервера с модулем.\ Протокол и порт добавляются автоматически. **ID пользователя портала Битрикс24**, назначенного ответственным за пропущенные звонки с неизвестных номеров и за новые лиды:\ `"default_user_id": 1` **Использование внешних линий** при регистрации звонков в Битрикс24:`"use_external_lines": true` **Использование c2c-сервера:**\ `"use_c2c": true` **Создавать сущности (лиды/контакты) для входящих/исходящих разговоров:**\ `"create_entity_for_incoming": true,`\ `"create_entity_for_outgoing": true,` *true* – лиды/контакты создаваться будут,\ \&#xNAN;*false* – лиды/контакты создаваться не будут\ Параметры создания сущности могут быть #[кастомизированы.](/custom_bx#6-process_task_creation_params) **Создание задачи по пропущенному:** `"create_task_for_unanswered": false,` *true* – при пропущенном звонке будет создаваться задача. Параметры могут быть кастомизированы (см. раздел[ #task creation params](/custom_bx#6-process_task_creation_params)).\ \&#xNAN;*false* – задача создаваться не будет. **Логика регистрации пропущенного**\ `"unanswered_responsible_type": 0` 0 – пропущенный регистрируется на ответственного за сущность;\ 1 – пропущенный регистрируется на пользователя из последнего разговора (у кого звонил аппарат);\ 2 – пропущенный регистрируется на “пользователя по умолчанию”. **Префиксы:** `"prefixes": [`\ `"7",`\ `"8",`\ `"+7"`\ `]` **Загружать файлы записей разговора в CRM или они будут прослушиваться с локального сервера** (по ссылке): `"store_records_in_crm": true` *true* – записи будут выгружаться в Битрикс.\ \&#xNAN;*false* – в Битриксе будут только ссылки на записи. **У нас реализовано 2 способа прослушивания разговоров на портале:** 1\) Выгрузка записей при создании дела. При этом варианте запись отдаем в Битрикс, указывая к какому делу она принадлежит. Минусы этого способа – все пользователи портала смогут прослушивать все записи, тратится место на портале. **Важно**: перед отправкой файла его нужно сконвертировать в mp3. Как это сделать, можно прочитать в #[Статье базы данных](/custom_common/mp3-record). 2\) К делу прикрепляем плеер, который получает запись на стороне Asterisk.\ Есть нюанс: для случаев когда сервер с записями находится за NAT, ссылка на получение аудиозаписи будет указана либо на внешний адрес, либо на внутренний. Соответственно запись будет доступна либо тем, кто запрашивает ее извне, либо только тем, кто находится в одной сети с сервером.\ Если необходимо прослушивание записей извне, то необходимо открыть порт 8077 на маршрутизаторе, и в переменной Адрес для локальных сервисов `“address_int”` указать внешний IP. **Разрешённые пользователи (только в бесплатном режиме):** `"fallback_users": [`\ `12,`\ `34`\ `]` В этот список нужно указать id пользователей, с которыми будет работать модуль. Звонки остальных пользователей будут игнорироваться. ## customizer – раздел настроек кастомизаций [#customizer-razdel-nastroek-kastomizacii] **Включение кастомизатора:**\ `"is_enabled": true` **Путь до скрипта кастомизации** (в [этом файле](/custom_common/vklyuchenie-kastomizatora) возможно переопределять настройки приложения):\ `"program_path": "/opt/itgrix_bx/customizer.php"` У файла кастомизатора должны быть права на исполнение. Их можно добавить командой:\ `chmod +x /opt/itgrix_bx/customizer.php`\ При стандартной процедуре установки это делается автоматически. **Таймаут исполнения кастомизаций** (мс, рекомендуемое значение 500):\ `"execution_timeout_msec": 500` **Включение дополнительных возможностей кастомизации** (методы, начиная с версии 3.0.7):\ `"methods": {`\ `"process_final_params": false,`\ `"process_registration_params": false,`\ `"process_task_creation_params": false,`\ `"customize_activity": false,`\ `"customize_entity": false`\ `}` Кастомизации:\ `"process_final_params"` – параметров завершения звонка,\ `"process_registration_params"` – параметров регистрации разговора,\ `"process_task_creation_params"` – задачи после пропущенного звонка,\ `"customize_activity"` – дела после завершения звонка,\ `"customize_entity"` – сущности (лида, контакта), после завершения звонка. Подробнее про кастомизации можно узнать в разделе [Полезные кастомизации](/custom_bx). ## database – раздел подключения к MySQL [#database-razdel-podklyucheniya-k-mysql] **Параметры подключения к MySQL:**\ `"database": "asteriskcdrdb",`\ `"host": "127.0.0.1",`\ `"login": "freepbxuser"`\ `"password": "mysqlsecret",`\ `"port": 3306,` **Названия таблиц и полей в MySQL** (для типовых случаев оставляем значения по умолчанию): `"column_name_aliases": {`\ `"cdr_calldate": "calldate",`\ `"cdr_cnum": "cnum",`\ `"cdr_recordingfile": "recordingfile",`\ `"cdr_src": "src",`\ `"cdr_uniqueid": "uniqueid",`\ `"cel_channame": "channame",`\ `"cel_cid_num": "cid_num",`\ `"cel_eventtime": "eventtime",`\ `"cel_eventtype": "eventtype",`\ `"cel_exten": "exten",`\ `"cel_id": "id",`\ `"cel_linkedid": "linkedid",`\ `"cel_uniqueid": "uniqueid"`\ `}`\ `"table_name_aliases": {`\ `"cdr": "cdr",`\ `"cel": "cel"`\ `}` В большинстве конфигураций поля в MySQL выглядят именно так.\ При необходимости проверить можно SQL-запросом: `describe *имя_таблицы*`. ## server – Настройки ВЕБ-сервера [#server-nastroiki-veb-servera] **Адрес и порт, на которых запускается WEB-сервер** (по умолчанию адрес – 0.0.0.0, порт – 8077): `"host": "0.0.0.0"`\ `"port": "8077"` **Логин и пароль для доступа в админку:**\ `"login": "admin"`\ `"password": "123"` # Изменения в конфиге до версии 2.15.0 (/for-admins/config/izmeneniya-v-konfige-do-versii-2.15.0) **Для версий ДО 2.15.0:** Создавать лиды для входящих /исходящих разговоров: `"create_leads_for_incoming": true`\ `"create_leads_for_outgoing": true` true – лиды будут создаваться; false – лиды создаваться не будут. Параметры создания сущности могут быть [кастомизированы](/custom_bx). Создавать контакты и сделки для входящих/исходящих разговоров (функция Без лидов в CRM доступна с версии 2.11.9): `"create_contacts_for_incoming": false,`\ `"create_contacts_for_outgoing": false,` `"create_deals_for_incoming": false,`\ `"create_deals_for_outgoing": false,` true – контакты/сделки создаваться будут,\ false – контакты/сделки создаваться не будут. **Для версий ДО 2.15.0:** `"customize_activity"` – дела после завершения звонка,\ `"customize_entity"` – создание сущности (лида/контакта) после завершения звонка,\ `"customize_final_params"` – параметры завершения звонка (здесь, например, реализуются черные и белые списки),\ `"customize_search_params"` – параметры поиска сущности по номеру в Битриксе,\ `"customize_task"` – создание задачи после пропущенного звонка. # Описание файла конфигурации (до версии 3.0) (/for-admins/config/opisanie-faila-konfiguracii-before-3-0) Путь по умолчанию для Битрикс24: `/etc/itgrix_bx/config.json` Для пользователей AmoCRM: `/etc/itgrix_amo/config.json` После ручного редактирования убедитесь в валидности json файла (например, через сервис [https://jsonlint.com/](https://jsonlint.com/)). Иначе модуль не будет работать. **Для применения настроек перезапустите модуль:** `# systemctl restart itgrix_bx # systemctl restart itgrix_amo` либо `# service itgrix_bx stop # service itgrix_amo stop`\ `# service itgrix_bx start # service itgrix_amo start` Для изменения настроек через веб-интерфейс (админку), перезагружаться не нужно.\ Сохраняться нужно на каждой странице админки – `https://:8078/config` . ## App – раздел настроек работы приложения [#app-razdel-nastroek-raboty-prilozheniya] **Создавать сущности (лиды/контакты) для входящих/исходящих разговоров**\ (Начиная с версии 2.15.0): `"create_entity_for_incoming": true,`\ `"create_entity_for_outgoing": true,` *true* – лиды/контакты создаваться будут,\ \&#xNAN;*false* – лиды/контакты создаваться не будут. Параметры создания сущности могут быть [кастомизированы.](/custom_bx) Создавать новые дела для каждого переведенного вызова: `"create_new_activity_at_transfer": true` *true* – после каждого перевода вызова будет создаваться новое дело с ответственным сотрудником, на которого переведен вызов.\ \&#xNAN;*false* – будет создано одно дело для всего разговора со всеми переводами, ответственным за это дело будет последний разговаривавший сотрудник. **Создание задачи по пропущенному** `"create_task_for_unanswered": false,` *true* – при пропущенном звонке будет создаваться задача. Параметры могут быть кастомизированы (см. раздел[ task creation params](/custom_bx)).\ \&#xNAN;*false* – задача создаваться не будет. **Таймаут ожидания ответа от скриптов кастомизации**, мс (рекомендуемое значение 10000): `"customization_time_msec": 10000`\\ **Путь до скрипта кастомизации** (в [этом файле](/custom_common/vklyuchenie-kastomizatora) возможно переопределять настройки приложения): `"customizer_program_path": "/opt/bx24asterisk/customizer.php"` Если используется кастомизатор, то у него должны быть права на исполнение. Их можно добавить командой: `chmod +x /opt/bx24asterisk/customizer.php` Если кастомизатор не используется, то поле необходимо оставить пустым. **Включение дополнительных возможностей кастомизации** (методы для версий, начиная с 2.15.0): `"customize_activity"` – дела после завершения звонка,\ `"customize_entity"` – сущности (лида, контакта), после завершения звонка,\ `"customize_final_params"` – параметров завершения звонка,\ `"customize_registration_params"` – параметров регистрации разговора,\ `"customize_task"` – задачи после пропущенного звонка. Подробнее про кастомизации можно узнать в разделе [Полезные кастомизации](/custom_common). **Суффикс для папки со временными файлами** token и state (используется для запуска нескольких экземпляров приложения на одном сервере): `"generated_postfix": ""` Дата и время, начиная с которых загружаются события о разговорах (рекомендуемое значение - дата и время установки модуля): `"history_start_date": "2018-01-15 10:30:00"` **Уровень логирования:** `"log_level": "debug"` *debug* – фиксируем все события в логе;\ \&#xNAN;*info* – фиксирует всё, кроме отладочной информации;\ \&#xNAN;*warning* – фиксируем только исключительные ситуации, критические ошибки;\ \&#xNAN;*critical* – фиксируем только критические ошибки;\ \&#xNAN;*fatal* – фатальные ошибки. При нормальной работе ничего не выводится. **Отправлять информацию о новых лидах в бизнес-чат:** `"post_lead_info_to_chat": false` *true* – информация будет отправляться в бизнес-чат CRM. В нем также можно будет дополнительно настроить отдельные чаты по каждому клиенту либо один общий чат для всех совершенных звонков.\ \&#xNAN;*false* – информация отправлена не будет. **Префиксы:** `"prefixes": [`\ `"7",`\ `"8",`\ `"+7"`\ `]` **Загружать файлы записей разговора в CRM или они будут прослушиваться с локального сервера** (по ссылке): `"store_recordings_in_crm": true` *true* – записи будут выгружаться в CRM;\ \&#xNAN;*false* – в CRM будут только ссылки на записи. **У нас реализовано 2 способа прослушивания разговоров на портале:** 1\) Выгрузка записей при создании дела. При этом варианте запись отдаем в CRM, указывая к какому делу она принадлежит. Минусы этого способа – все пользователи портала смогут прослушивать все записи, тратится место на портале. Важно: перед отправкой файла его нужно сконвертировать в mp3. Как это сделать, можно прочитать в [Статье базы данных](/custom_common/mp3-record). 2\) К делу прикрепляем плеер, который получает запись на стороне Астериска.\ Есть нюанс: для случаев, когда сервер с записями находится за NAT, ссылка на получение аудиозаписи будет указана либо на внешний адрес, либо на внутренний. Соответственно запись будет доступна либо тем, кто запрашивает ее извне, либо только тем, кто находится в одной сети с сервером.\ Если необходимо прослушивание записей извне, то необходимо открыть порт 8077 на маршрутизаторе и в переменной Адрес для локальных сервисов `“address_int”` указать внешний IP. **Сопоставление внешних номеров телефона с источниками вызова в CRM:** `"trunk_to_source": {`\ `"2723033": "WEB",`\ `"4993508890": "CALL"`\ `}` Для корректной работы модуля необходимо указать все используемые транки. Если не указать транк, то могут возникнуть проблемы с отображением окна при входящем. Транки можно узнать следующими способами: * в БД asterisk в таблице trunks (номера в столбце outcid); * в файле `/etc/asterisk/extensions_additional.conf` (в FreePBX extensions\_additional.conf), выполнив команду: `grep ^OUTCID /etc/asterisk/extensions{,_additional}.conf`; * выполнить команду в базе данных CEL (самый надежный способ):\ `select distinct exten from cel where uniqueid=linkedid and eventtype='CHAN_START' and length(cid_num)>4 and length(exten)>4;` ## Asterisk – Раздел настроек подключения к Asterisk [#asterisk-razdel-nastroek-podklyucheniya-k-asterisk] **Настройки подключения к AMI:** `"host": "127.0.0.1"`\ `"port": 5038`\ `"user": "bx24"`\ `"password": "bx24secret"` **Настройки инициации вызова в Asterisk:** `"originate": {`\ `"caller_id": "Звонок на #TO# <#TO#>",`\ `"channel": "SIP/#FROM#", (Вместо SIP можно указывать любой другой протокол IAX2, PJSIP)`\ `"context": "from-internal",`\ `"extension": "#TO#",`\ `"priority": "1"`\ `}` Про параметры originate в Asterisk можно прочитать [здесь](http://asterisk.ru/knowledgebase/Asterisk+Manager+API+Action+Originate/). **Codecs и variable добавляется в кастомизаторе:** `//$params['codecs'] = 'someCodecName';`\ `//$params['variable'] = 'SIPADDHEADER="Call-Info:\;answer-after=0"';` **Путь до файлов с записями разговоров:** `"recordings_dir": "/var/spool/asterisk/monitor"` **Файлы с записями хранятся в поддиректориях согласно дате разговора:** `"recordings_dir_subdirs_by_date": true` **Комбинация для совершения перехвата вызова** (указывается настроенная на Астериск комбинация для распознавания перехвата): `"pickup_code": *8` ## Bitrix – раздел настроек подключения к Битрикс24 [#bitrix-razdel-nastroek-podklyucheniya-k-bitriks24] **Путь до портала Битрикс24:**\ `"host": "https://portal.bitrix24.ru",` Будьте внимательны: если у вас коробочный 1С-Битрикс24 с протоколом http, здесь должен быть указан http\://, обычно используется https\:// ( в том числе и для облачных порталов). **ID пользователя портала Битрикс24**, назначенного ответственным за пропущенные звонки с неизвестных номеров и за новые лиды: `"user_id": 1` Этот пользователь является первым ответственным за созданную сущность. Когда ответит другой пользователь, то ответственный сменится на ответившего пользователя. Если никто не ответит, то по умолчанию за сущность останется ответственным прежний пользователь. Он может отличаться от пользователя, под которым работает модуль. **Логин и пароль администратора в Битрикс24:** `"user_login": "login",`\ `"user_password": "password"` **Использование внешних линий** при регистрации звонков в Битрикс24: `"use_external_lines": "true"` ## Database **–** раздел подключения к MySQL [#database-razdel-podklyucheniya-k-mysql] **Параметры подключения к MySQL** (настраивали в разделе 2.2.1).\ Название БД должно соответствовать настройкам системы. `"database": "asteriskcdrdb",`\ `"host": "127.0.0.1",`\ `"user": "freepbxuser"`\ `"password": "mysqlsecret",`\ `"port": 3306,` **Названия таблиц и полей в MySQL** (для типовых случаев оставляем значения по умолчанию): `"column_name_aliases": {`\ `"cdr_calldate": "calldate",`\ `"cdr_cnum": "cnum",`\ `"cdr_recordingfile": "recordingfile",`\ `"cdr_src": "src",`\ `"cdr_uniqueid": "uniqueid",`\ `"cel_channame": "channame",`\ `"cel_cid_num": "cid_num",`\ `"cel_eventtime": "eventtime",`\ `"cel_eventtype": "eventtype",`\ `"cel_exten": "exten",`\ `"cel_id": "id",`\ `"cel_linkedid": "linkedid",`\ `"cel_uniqueid": "uniqueid"`\ `}`\ `"table_name_aliases": {`\ `"cdr": "cdr",`\ `"cel": "cel"`\ `}` В большинстве конфигураций поля в MySQL выглядят именно так.\ При необходимости проверить можно SQL-запросом: `describe *имя_таблицы*`. ## WebServer **–** Настройки встроенного в модуль ВЕБ-сервера [#webserver-nastroiki-vstroennogo-v-modul-veb-servera] **Адрес и порт, на которых запускается WEB-сервер**\ (по умолчанию адрес – `0.0.0.0`, порт – `8077`, `8078`): `“listen_host”: “0.0.0.0”`\ `“listen_port”: http“8077”`\ `“listen_port_secure”: “8078”` Для доступа в админку наберите IP-адрес сервера с Астериск (куда установлен модуль) и порт. Для админки используется только https (по умолчанию порт 8078). При входе по 8077 стоит редирект. **Адрес, по которому приложение будет доступно для внешних сервисов:**`“address_ext” : “1.1.1.1”` Адрес необходим для исполнения функции click-to-call из облачного Битрикс24, внешнего по отношению к сети компании. Нужен внешний IP-адрес компании. **Адрес для локальных сервисов:**\ `“address_int” : “192.168.0.1”`\ Адрес, необходимый для формирования ссылки на получение записи разговора в деле.\ Рекомендуем указать внутренний адрес сервера с модулем.\ Протокол и порт указывать не нужно – они добавляются автоматически. **Логин и пароль для доступа в админку:** `"user": "user_name"`\ `"password": "secret_password"` **Данные для браузерного расширения (пока не используются):** `"sockets_port": 8089` **Флаг для отключения http:** `"use_http": true` (по умолчанию) Значение *true* – позволяет использовать http протокол для следующих запросов: * запрос записи, * автораспределение, * click\_to\_call * callback обработчики. *false* – используется только https для всех запросов. Для доступа в админку используется только https (по умолчанию порт 8078). # Мониторинг состояния (/for-admins/status-monitoring) ## Мониторинг состояния [#monitoring-sostoyaniya] Начиная с версий Itgrix bx [3.6.0](/changelog-bx#3.6.0) и Itgrix amo [2.9.0](/changelog-amo#2.9.0), в API модуля интеграции добавляется метод проверки статуса приложения `:8077/status`. Периодическая проверка ответа на этот запрос может быть использована для отслеживания состояния приложения и автоматической реакции на проблемы. ## Примеры запросов [#primery-zaprosov] Ниже приводятся запросы отдельных элементов статусов с пояснениями их предполагаемого использования. Элементы извлекаются из ответа при помощи утилиты `jq` - процессора json-данных, [доступного для установки](https://stedolan.github.io/jq/download/) на совместимых с Itgrix системах. Полные данные о состоянии можно получить запросом: ``` curl -s --digest -u : ":8077/status" ``` Здесь `` - адрес сервера Asterisk, на который был установлен модуль.\ `-s` - уменьшает количество промежуточного вывода от `curl`.\ `--digest -u` - указывает способ авторизации.\ `` и `` - логин и пароль от админки. Реакция на выявляемые состояния приложения в примерах не описана и определяется потребностями пользователя. Пример ответа: ```json { "app": { "c2c": { "connected": true, "on": true, "portal": "example.bitrix24.ru", "stayon": false, "url": "https://apix.itgrix.ru:9004" }, "calls_queue": { "calls": 0, "lock": "locked in 384ns" }, "calls_storage": { "calls": 0 }, "crm": { "host": "https://example.bitrix24.ru", "manager": { "batch_queue": 0, "connector": { "app_type": "LicenseType_Subscription", "authseq": { "err": "", "sequences": 0 }, "on": true, "portal": "example.bitrix24.ru" }, "on": true }, "on": true, "users_cache": { "last_updated": "2023-05-11 13:03:55.485 +05:00", "phones": 39, "users": 120 } }, "crm_type": "bitrix", "customizer": { "enabled": true, "methods": { "customize_activity": true, "customize_attach_record_url": true, "customize_autodistribution": true, "customize_entity": true, "customize_show_call_card": true, "need_registration": true, "post_registration": true, "process_client_phone": true, "process_final_params": true, "process_originate_params": true, "process_record_file_path": true, "process_registration_params": true, "process_task_creation_params": true, "process_user_phone": true }, "path": "/opt/itgrix_bx/customizer/customize.php", "timeout": 2000 }, "err": "", "license_manager": { "currentLicense": { "offline": false, "type": "Professional", "valid_till": "2025-04-15" }, "on": true, "soft_mode": "ready" }, "lock": "locked in 279ns", "master": { "general": { "app_err": "", "app_state": "", "app_status": "Ok", "app_status_updated": "2023-04-27 08:58:38.172 +05:00" } }, "originated": 0, "pbx": { "ami": { "logged_in": true, "on": true, "pending_actions": 0 }, "cel_queue": { "calls": 0, "pending_events": 0 }, "db": { "connected": true, "dbConnector": { "on": true } }, "fmc_cache": { "last_refresh": "2023-05-11 13:03:55.485 +05:00", "phones": 39 }, "last_id": 713065, "on": true, "parked": 0, "sql_parser": { "originated": 0, "transfer_bridges": 0 }, "trunks": 2 }, "restarting": false, "version": "Itgrix_bx v3.10.12" }, "instance": { "config": "/etc/itgrix_bx/config.json", "index": 0, "log": "/var/log/itgrix_bx.log", "service": "itgrix_bx" } } ``` ### Остановка/перезапуск приложения [#ostanovka-perezapusk-prilozheniya] С помощью описанных ниже запросов можно отследить когда и почему приложение перестаёт работать.
``` curl -s --digest -u : ":8077/status?path=app.master.general.app_state ```
Варианты значений `app_state`: * При нормальной работе будет возвращаться значение `""`. * Значение `"stopped"` возвращается когда приложение столкнулось с ошибкой, препятствующей дальнейшей работе и ожидает действий со стороны пользователя. * Значение `"restarting"` возвращается когда приложение перезапускается. Это может быть вызвано проблемой, которая предположительно решится переподключением и/или коротким ожиданием, например при проблемах с сетью. Перезапуск также может быть и штатным, например при изменении настроек подключений.
``` curl -s --digest -u : ":8077/status?path=app.master.general.app_status" ```
`app_status` содержит общий статус приложения, который может быть `"Ok"`/`"Warning"`/`"Error"`. Это статус, который отображается вверху главной страницы админки. Во многих случаях он соответствует состоянию работает/перезапускается/остановлено, но в некоторых ситуациях может предоставлять дополнительную информацию. Например, он может помочь отличить штатный перезапуск от перезапуска в результате ошибки.
``` curl -s --digest -u : ":8077/status?path=app.master.general.app_err" ```
`app_err` содержит детали ошибки, на основании которой формируется текст ошибки под статусом приложения на главной странице. Этот элемент может быть полезен для выяснения причин сбоя. ### Смена лицензии [#smena-licenzii] Такой запрос позволяет заметить переключение на лицензию с меньшим функционалом, что может произойти не только при истечении срока действия лицензии, но и при проблемах соединения с сервером лицензирования.
``` curl -s --digest -u : ":8077/status?path=app.license_manager.currentLicense.type" ```
`license.type` возвращает тип лицензии, отображаемый вверху главной страницы админки. Возможные значения: * `"Professional"` - оплаченная лицензия с полным функционалом. * `"Subscription"` - лицензия "по подписке" с ограниченным функционалом. * `"Free"` - бесплатная лицензия с базовым функционалом.
``` curl -s --digest -u : ":8077/status?path=app.license_manager.currentLicense.valid_till" ```
`license.valid_till` содержит дату истечения лицензии (последний день когда она имеет силу) в формате `ГГГГ-ММ-ДД`. # Пример мониторинга через Zabbix (/for-admins/status-monitoring/primer-monitoringa-cherez-zabbix) Zabbix шаблон для мониторинга модуля Itgrix BX ### Требования [#trebovaniya] * Zabbix версии 6.0 или выше. Более ранние версии Zabbix не тестировались. * На хосте, с которого будет производится наблюдение, помимо Zabbix агента должна быть установлена утилита curl. ### Настройка [#nastroika] В качестве контролирующего может быть настроен любой хост, подключенный к Zabbix и имеющий доступ через веб к модулю Itgrix BX. Для этого на настраиваемом хосте найдите папку с пользовательскими настройками Zabbix агента. Скорее всего она будет располагаться в `/etc/zabbix/` и называться `zabbx_agentd.d` либо `zabbix_agent2.d` в зависимости от используемой версии Zabbix агента. Точный путь до папки с пользовательскими настройками можно посмотреть в конфигурационном файле агента (значения параметра Include). В этой папки создайте файл с именем `userparameter_itgrix-bx.conf` со следующим содержимым: ``` UserParameter=itgrix.bx.curl.auth[*],curl -s $4 -u '$2':'$3' '$1' ``` Перезагрузите сервис Zabbix агент с помощью команды ```bash systemctl restart zabbix-agent ``` либо команды (если используется Zabbix Agent 2) ``` systemctl restart zabbix-agent2 ``` ### Импорт и настройка шаблона в Zabbix [#import-i-nastroika-shablona-v-zabbix] В веб-интерфейсе Zabbix сервера в навигационном меню откройте пункт Настройка/Шаблоны (Configuration/Templates), нажмите кнопку Импорт (Import) и загрузите файл `template/zbx_template_itgrix_bx.xml`. Затем в разделе Настройка/Узлы (Configuration/Hosts) найдите контролирующий узел, откройте его настройки и добавьте шаблон Template Itgrix BX. Сохранив изменения, перейдите к настройкам макросов узла. Как минимум, необходимо задайть свои значения для `{$ITGRIX_BX_STATUS_URL}`, `{$ITGRIX_BX_USER}` и `{$ITGRIX_BX_PASSWORD}`. ### Макросы [#makrosy] | Имя | Описание | Значение по умолчанию | | --------------------------- | ----------------------------------------- | -------------------------- | | `{$ITGRIX_BX_STATUS_URL}` | Проверяемый адрес | sip.example.ru:8077/status | | `{$ITGRIX_BX_USER}` | Имя пользователя модуля | user | | `{$ITGRIX_BX_PASSWORD}` | Пароль пользователя | secret | | `{$ITGRIX_BX_CURL_OPT}` | Опции curl | --digest | | `{$ITGRIX_BX_LICENSE_WARN}` | Срок предупреждения об истечении лицензии | 7 | Примера конфигурационных файлов: [Скачать файл](/assets/userparameter_itgrix-bx.conf) Пример файла конфига [Скачать файл](/assets/zbx_template_itgrix_bx.xml) Пример файла шаблона (начиная с версии Itgrix 3.13.0) [Скачать файл]() Пример файла шаблона (до версии Itgrix 3.13.0) # Автоматическое управление задачами по пропущенному звонку (/settings/additional/auto-mange-tasks) ## Описание функционала [#opisanie-funkcionala] Включить функции автоматического создания задач по пропущенным и их автоматическое закрытие при успешном ответном звонке можно в настройках модуля интеграции. Когда сотруднику поступает входящий вызов, но звонок завершается без ответа, для данного сотрудника будет создана задача Перезвонить по пропущенному, содержащая детали звонка.\ Создаваемым задачам устанавливается дедлайн в один час. Имеется несколько вариантов логики определения ответственного сотрудника для создания задач по пропущенным звонкам: Задача закроется автоматически при завершении как исходящего, так и входящего звонка между любым сотрудником и этим номером.\ При этом закрываются все созданные модулем интеграции задачи для данного номера, даже если их несколько или у них разные ответственные сотрудники. ## Битрикс24 [#bitriks24] Задача связывается с сущностью, которой принадлежит телефон. Задачи, подлежащие закрытию, определяются по их названию, которое задаётся модулем интеграции и содержит номер телефона. Задачи со статусом выше чем "В процессе" не закрываются автоматически. Поскольку имя задачи важно для автоматического завершения, [кастомизация имён задач](/custom_bx#7-process_task_creation_params) может нарушать работу этой функции. Одновременно с задачами, также автоматически закрываются все дела типа "звонок", привязанные к данной сущности. ## amoCRM [#amocrm] Задачи, подлежащие закрытию, определяются по сущности (контакту) и ограничиваются только теми задачами, которые были созданы модулем интеграции. Задача считается созданной модулем, если её название соответствует используемому модулем шаблону, поэтому [кастомизация имён задач](/custom_amo#8-process_task_creation_params) может нарушать работу функции автозавершения. # Автоматическое поднятие трубки при звонках кликом из CRM (/settings/additional/autoanswer) В некоторых телефонах/софтфонах, есть функция автоподнятия трубки, модуль интеграции может отправлять sip заголовки в запросе звонка кликом для реализации этой функции. Sip заголовки можно указать в настройках модуля в разделе Asterisk - Variables (по умолчанию там уже прописан заголовок для некоторых сипфонов, например Microsip) Variables Включение автоподнятия в софтфоне на примере Microsip, Настройки - Авто ответ - SIP заголовок # Сквозная аналитика Битрикс24 через Itgrix (/settings/additional/end-to-end-analytics) ## **Что такое сквозная аналитика** [#chto-takoe-skvoznaya-analitika] Важно: Обратите внимание, что сквозная аналитика работает только для тарифов Битрикс24 Команда или Компания, либо в корпоративном портале (с установленными обновлениями). Сквозная аналитика Битрикс24 помогает определить, какие рекламные каналы приносят результат и стоят потраченных денег.\ К таким рекламным каналам относятся и номера телефонов, которые Вы размещаете в разных рекламных каналах (страницы сайтов для разных направлений или городов, журналы, радио, объявления на рекламных площадках и прочее).\ Благодаря сквозной аналитике, можно подсчитать распределение потока лидов по номерам телефонов, конверсию в сделки и даже посчитать ROI канала. Подробнее о сквозной аналитике в статье Битрикс24: [Что такое сквозная аналитика?](https://helpdesk.bitrix24.ru/open/8726963/) Модуль Интеграция с Asterisk: коннектор Itgrix от компании Айтигро умеет работать с этим инструментом Битрикс24 (начиная с версии 2.15.0). Как ее настроить, расскажем в этой статье. ## **Настройка Itgrix** [#nastroika-itgrix] Для того чтобы сквозная аналитика заработала нужно сделать настройки в Админке Itgrix на странице транков (`http://:8077/config/Trunks`). 1\. Добавьте номера телефонов в список Транков. Важно, чтобы номера транков совпадали с теми номерами, которые фигурируют в таблице CEL. Чтобы узнать точно, как они пишутся в CEL, можно cделать такой запрос в БД:\ `select distinct exten from cel where uniqueid=linkedid and length(cid_num)>4 and eventtype='CHAN_START' and length(exten)>4;` 2\. Установите галочку Внешние линии (см. рисунок). Указанные номера перенесутся в этот раздел и зарегистрируются в Битрикс24. Настройка транков в админке Айтигрикса Название линии - опциональный параметр, который будет отображаться в карточке звонка. Название линии отображается в заголовке карточки звонка ## **Настройка коллтрекинга в Битрикс24** [#nastroika-kolltrekinga-v-bitriks24] ### **Подключение источников** [#podklyuchenie-istochnikov] Для того чтобы привязать номер, нужно создать “источник трафика” на странице Сквозная аналитика в вашем портале. Добавить источник Процесс подключения описан в справке Битрикс24: [Подключение источников трафика](https://helpdesk.bitrix24.ru/open/8771305). Важно: задайте UTM-метку (поле utm\_source). Даже если вы ей не пользуетесь – просто напишите любое название. Без нее, к сожалению, не сработает. Добавить метку ### **Распределение телефонов** [#raspredelenie-telefonov] После сохранения настроек в Админке модуля на предыдущем шаге указанные телефоны должны появиться в настройках коллтрекинга в вашем корпоративном портале. Теперь нужно распределить их по источникам (см. рисунок). Процесс распределения описан в справке Битрикс24: [Распределение телефонов и email-адресов](https://helpdesk.bitrix24.ru/open/8771431). Если все верно, то после сохранения распределения номеров кнопка коллтрекинга выделится зеленым цветом. ## **Результаты** [#rezultaty] ### **Путь клиента** [#put-klienta] В результате при поступлении входящих звонков и создании лида/контакта (только для новых лидов/контактов!) можно увидеть, через какой источник поступил звонок. Для этого на странице лида в разделе Дополнительно нажмите кнопку Выбрать поле и выберите из предложенного списка Сквозную аналитику. Появится источник (в нашем примере “Маркетплейс Битрикс24”) и тип обращения “Звонок”. Если звонок поступил на номер телефона, который не был привязан к какому-либо источнику, или если номер был указан неверно, то в этом поле будет указан “Прочий трафик –> Звонок”. Путь клиента также можно увидеть в списке лидов/контактов в меню CRM.\ Выберите этот столбец для показа в настройке таблицы (шестеренка слева в шапке таблицы). ### **Отчеты сквозной аналитики** [#otchety-skvoznoi-analitiki] Самое главное, что в итоге удается сделать – построить отчет по входящим каналам. В меню Сквозная аналитика выберите меню Отчеты. Вы увидите автоматически сформированные графики, которые удобно анализировать – например, отслеживать эффективность работы источников. # Распознавание FMC номеров (/settings/additional/fmc-numbers) Технология FMC позволяет использовать мобильные номера сотрудников в качестве внутренних номеров. Единственная сложность в обработке звонков на такие номера - распознавание их как внутренних. При обычном звонке модуль понимает какой из номеров принадлежит клиенту, а какой сотруднику, потому что номер сотрудника короткий (до 4 символов), но при звонке на FMC номер ни один из номеров не является коротким номером, транком или пиром Астериска, оба номера выглядят как внешние. Поэтому в версиях Itgrix bx [3.6.0](/changelog-bx#3.6.0) и Itgrix amo [2.9.0](/changelog-amo#2.9.0) мы добавляем два новых механизма распознавания внутренних номеров специально для FMC. ## 1. Номера из CRM [#id-1.-nomera-iz-crm] Очевидно, что было бы удобно использовать уже имеющийся список номеров, желательно поддерживаемый в актуальном состоянии самими владельцами номеров. Такой список можно сформировать по профилям пользователей CRM. Детали зависят от конкретной CRM. **Номера проверяются по полному совпадению, включая префиксы.** ### Bitrix24 [#bitrix24] В Bitrix24 **профиль пользователя** может содержать несколько разных номеров телефонов, включая даже кастомные поля. Модуль будет использовать все поля типа "Телефон" для распознавания FMC номеров. Важно, что для поиска пользователя по номеру телефона задействуются только поля Телефон, Внутренний, Мобильный и Рабочий. ### amoCRM [#amocrm] Amo **не предоставляет доступ** к номерам в профиле пользователя, поэтому список телефонов сотрудников поддерживается отдельно **в настройках модуля**. Его можно найти на странице настроек бизнес-логики в Админке. Все номера из списка будут использоваться как для распознавания FMC, так и для определения пользователей. ## 2. Список шаблонов [#id-2.-spisok-shablonov] Если для реализации FMC сотрудникам выдаются специально выпущенные SIM-карты, то номера могут выглядеть однотипно, например `8123456XXXX` с отличиями только в последних цифрах. Для таких случаев мы добавили файл `/etc/itgrix_/fmc_patterns.txt`, в котором можно перечислить такие шаблоны. Этот файл читается в реальном времени, и его можно редактировать прямо во время работы модуля, в том числе автоматически. Пример содержимого файла `/etc/itgrix_/fmc_patterns.txt`: ``` 8123456???? *654321???? +71236540001 ``` **Шаблоны пишутся по одному на строку.** Первый шаблон в примере сработает для любого номера, который начинается на "8123456" и после этого имеет в конце ещё четыре цифры. Второй шаблон отличается тем, что может начинаться не только с "8", но и с любого другого префикса, например "+7", или совсем без префикса. Последний шаблон не включает специальных символов и сработает только для номера "+71236540001" буквально. ### Правила распознавания номеров по шаблонам [#pravila-raspoznavaniya-nomerov-po-shablonam] 1. Символ `*` означает любое количество (в том числе ноль) любых символов. 2. Символ `?` означает ровно 1 любой символ. 3. Все остальные символы, даже пробелы, означают буквально сами себя. 4. Одна строка файла - это один шаблон, и для успешного распознавания номер должен совпасть с шаблоном от начала до конца. Списком шаблонов нужно **пользоваться аккуратно**, потому что добавление недостаточно конкретных шаблонов может привести к распознаванию номеров клиентов как внутренних. Так, шаблон `?????` сделает все пятизначные номера внутренними, а шаблон, состоящий только из `*`, совпадёт с абсолютно любым номером. # Доп функции (/settings/additional) # Настройка задачи по пропущенному через админку (/settings/additional/parametry-sozdaniya-zadach) Целая группа типичных кастомизаций – [кастомизации задачи](/custom_bx/task-for-missed-call).\ При регистрации пропущенного звонка, модуль интеграции может создавать соответствующую задачу, обычно включающую ответственного, крайний срок и название, в которое входит номер телефона звонившего. В версиях Itgrix\_bx до [3.3.5](/changelog-bx#3.3.5) и Itgrix\_amo до [2.5.3](/changelog-amo#2.5.3) включительно, эти параметры были в основном фиксированы и могли меняться только кастомизацией: | Параметр | Старое значение | Новое значение в bx [3.4.0](/changelog-bx#3.4.0) / amo [2.6.0](/changelog-amo#2.6.0) | | --------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | Название задачи | Call back on missed call from \<номер> | Настраиваемый шаблон с тремя переменными | | Крайний срок | Один час от настоящего момента | Любое количество минут от конца звонка | | Ответственный | В соответствии с настрокой логики регистрации пропущенных звонков | Ответственный за звонок, Ответственный по умолчанию или конкретный пользователь | | Постановщик | Тот же, что и ответственный | Ответственный за задачу, Ответственный по умолчанию или конкретный пользователь | Теперь же мы добавили целый блок настроек: Блок настроек задачи в бизнес-логике Блок настроек задачи не отображается, если создание задач отключено **Название** задачи можно задавать произвольной строкой, в которую опционально можно включить следующие переменные: * `#ENTITY_PHONE#` – номер, с которого поступил звонок * `#TRUNK#` – номер транка на который поступил звонок * `#ENTITY_NAME#` – имя звонившей сущности (контакта/лида) в CRM Если используется имя сущности, то модулю придётся сделать один дополнительный запрос в Битрикс, чтобы его получить, и это может немного замедлить работу при большой нагрузке. В Амо дополнительный запрос не требуется. Шаблон названия задачи используется при [автозавершении](/settings/additional/auto-mange-tasks), поэтому после изменения шаблона старые задачи могут не завершаться автоматически **Крайний срок** теперь может быть любым с точностью до минуты. Считается от времени завершения звонка. **Постановщик задачи** (ранее никак не настраивался, это новая опция): Выбрать можно из трёх вариантов: * **Ответственный за задачу** – постановщик будет тот же, что и ответственный * **Пользователь по умолчанию** – ответственный по умолчанию, выбираемый вверху страницы бизнес-логики; [ответственные за транки](/settings/additional/trunk-responsible) работают и здесь! * Любой **конкретный пользователь** из CRM **Ответственный за задачу** также выбирается из трёх вариантов, и это не обязательно тот же пользователь, что назначается ответственным за сам звонок. * **Ответственный за пропущенный звонок** – выбирается в [логике регистрации пропущенного звонка](/settings/additional/trunk-responsible) * **Пользователь по умолчанию** – ответственный по умолчанию, выбираемый вверху страницы бизнес-логики; [ответственные за транки](/settings/additional/trunk-responsible) работают и здесь! * Любой **конкретный пользователь** из CRM # Выбор ответственного за пропущенный и за транк (/settings/additional/trunk-responsible) Поведение нашего модуля интеграции [можно кастомизировать](/custom_common). Многие клиенты этим пользуются, настолько, что сформировался ряд типичных, часто используемых кастомизаций.\ Но настройка кастомизаций – это техническая процедура, с которой скорее может справиться интегратор или опытный администратор, нежели рядовой пользователь. Поэтому мы стараемся постепенно включать самые востребованные типы кастомизаций в основной функционал модуля, делая решения доступными широкому кругу пользователей.\ Так было сделано, например, с [ч/б списками](/custom_common/black-white-list) в версии Itgrix\_bx [3.0.7](/changelog-bx#3.0.7). Следующий шаг в этом направлении – кастомизация [Разные ответственные по умолчанию за разные транки](/custom_bx/default-resp-for-trunks). Того же эффекта теперь можно добиться настройками в админке, вместо кастомизации. Новые настройки на странице транков в админке ## Поговорим об ответственности [#pogovorim-ob-otvetstvennosti] Чтобы понять зачем нужны новые настройки, вспомним как работают старые. На стринице настроек бизнес-логики в админке с версии [3.2.0](/changelog-bx#3.2.0) имеются настройки Ответственного за пропущенные звонки и Первого ответственного. Настройки логики ответственных в админке **Первый ответственный** – это тот, кто будет назначен ответственным при создании новых лидов/контактов. Это может быть тот, кому позвонили, либо ответственный по умолчанию. **Ответственный за пропущенные звонки** – это пользователь, на которого будут регистрироваться пропущенные звонки и ставиться задачи по ним. Он может браться из сущности, или это может быть тот, у кого звонил телефон, либо снова Ответственный по умолчанию. Настройка ответственного по умолчанию Повторяющимся мотивом здесь звучит **Ответственный по умолчанию**. Он настраивается в самом верху страницы бизнес-логики. Этот пользователь всегда крайний, если что – он оказывается отвественным. И за новые сущности, и за пропущенные звонки, и за задачи. Но в большой компании сваливать всё подряд на одного человека – слишком много ответственности. Поэтому мы добавили возможность перераспределить ответственность на нескольких человек, по транкам. ## Где логика в транках [#gde-logika-v-trankakh] Блок настройки транков Новый тип ответственного, который мы добавили в 3.4.0 – это **Ответственный за транк**. Этот ответственный подменяет собой Ответственного по умолчанию для входящих звонков на данный транк.\ Это значит, что если назначить транку конкретного ответственного пользователя, то в настройках Первого ответственного и Ответственного за пропущенный он станет Пользователем по умолчанию для звонков на данный транк. В виде схемы, можно просуммировать все варианты так: Логика назначения ответственных Ответственный за транк также может использоваться при создании задачи по пропущенному звонку, и об этом мы написали подробнее в [отдельной статье](/settings/additional/parametry-sozdaniya-zadach). Одно из возможных применений: когда один модуль интеграции работает на несколько компаний, назначить отдельного ответственного для транка каждой компании. Если не хочется ничего менять и нужно чтобы всё работало по-старому, достаточно оставить в транках "серый" вариант **Пользователь по умолчанию** # Автораспределение с учетом рабочего времени (/settings/autodistribution/autodistribution-and-timeman) Одна из основных функций модуля интеграции Itgrix – [автораспределение входящих звонков на ответственных сотрудников](/settings/autodistribution). Благодаря ей, звонки от каждого клиента всегда будут приходить на того менеджера, который работает с данным клиентом. Но что если этот менеджер в отпуске, на обеде или болеет? Чтобы избежать дозвона сотрудникам, которые заведомо не могут ответить, мы добавили новую настройку бизнес-логики - Проверять начат ли рабочий день для автоперевода. Настройка проверки статуса рабочего дня на странице бизнес-логики ### Логика работы [#logika-raboty] 1\) Если у пользователя начат рабочий день, то звонок, пришедший от клиента, за которого он ответственный, распределится на него 2\) Если работчий день не начат, либо на паузе, то звонок уйдет по стандартному пути в соответствии с [настройкой автораспределения](/settings/autodistribution#nastroika-konteksta-v-asterisk). ## Как управлять статусом рабочего дня [#kak-upravlyat-statusom-rabochego-dnya] Битрикс24 предлагает возможность начинать, ставить на паузу и завершать рабочий день в компоненте "Учет рабочего времени". Мы опираемся на данные этого компонента для проверки статуса. Окно управления рабочим днём справа в верхней полоске интерфейса Битрикса ## Как включить Учет рабочего времени [#kak-vklyuchit-uchet-rabochego-vremeni] Администратор портала может найти этот компонент в настройках CRM на странице ``` https://<ваш_портал>.bitrix24.ru/settings/configs/ ``` Этот компонент доступен на тарифах Профессиональный, Энтерпрайз и Копоративный портал. ## Разрешение timeman [#razreshenie-timeman] Некоторые пользователи увидят в админке такое предупреждение: Статус на главной странице админки в блоке Битрикс24 timeman – это разрешение от Битрикса на доступ к компоненту Учет рабочего времени. Технически, если оказывается что его нет, то это значит, что у модуля интеграции нет права проверять статус рабочего дня в Битриксе. Почему так может быть: * компонент Учет рабочего времени отключен у вас на портале, но его можно [включить](/settings/autodistribution/autodistribution-and-timeman#kak-vklyuchit-uchet-rabochego-vremeni) * компонент Учет рабочего времени недоступен на вашем тарифе Битрикса, рассмотрите возможность перехода на другой тариф. Если всё же возможности использовать Учет рабочего времени нет, это не проблема. **Сообщение об отсутствии разрешения timeman – только предупреждение, а не ошибка.** При отсутствии разрешения timeman, включать проверку статуса рабочего дня нельзя, это нарушит корректную работу автораспределения # Автораспределение в версии до 3.0.0 (/settings/autodistribution/autodistribution-before-3.0.0) Для автоматического направления входящего звонка на менеджера, ответственного за сущность (контакт\компания\лид) в CRM необходимо, чтобы в Asterisk был включен CURL. \ Проверить так: `$ asterisk -rx 'core show function CURL'` В результате должны получить описание функции curl. Если функция CURL отсутствует, то ее нужно устанавливать на сервер Asterisk. Далее в диалплане нужно создать контекст, на который звонок будет приходить ДО голосового приветствия. ### Настройка контекста в Asterisk [#nastroika-konteksta-v-asterisk] В файле **/etc/asterisk/extensions\_custom.conf** прописываем контекст. Пример контекста (обратите внимание на код, его нужно изменить): ``` [bx24transfer] exten => 1,1,Set(CURLOPT(httptimeout)=5) exten => 1,n,Set(CURLOPT(conntimeout)=5) exten => 1,n,Set(TOEXT=${CURL(http://localhost:8077/forward?phone=${CALLERID(num)},,5)}) exten => 1,n,GotoIf($[${TOEXT}]?from-internal,${TOEXT},1:ivr-1,s,1) ``` где\ `localhost:8077` – ip-адрес и порт сервера, на котором установлен модуль;\ `ivr-1,s,1` – контекст с IVR, куда уходит вызов в том случае, если не удалось найти номер в CRM;\ `CURLOPT(conntimeout)=5` – таймаут 5 сек для выполнения запроса (если на запрос не будут получен ответ, то звонок уйдет дальше по стандартному маршруту). **Логика работы следующая:** 1. Через модуль выполняется запрос в Битрикс24 с поиском ответственного за сущность по полученному номеру`http://localhost:8077/forward?phone=${CALLERID(num)}` 2. Внутренний номер ответственного записывается в переменную`{TOEXT}.` 3. Если внутренний номер найден – звонок переведется на ответственного (`GotoIf`). 4. Если номер не найден – звонок пойдет по второму пути (в данном примере `ivr-1,s,1`). **Есть** **нужно показать имя сущности на аппарате,** то настраиваем контекст следующим образом: ``` [bx24transfer] exten => 1,1,Set(CURLOPT(hashcompat)=yes) exten => 1,n,Set(CURLOPT(httptimeout)=5) exten => 1,n,Set(CURLOPT(conntimeout)=5) exten => 1,n,Set(HASH(forwardHash)=${CURL(http://localhost:8077/extendedForward?phone=${CALLERID(num)})}) exten => 1,n,Set(CALLERID(name)=${HASH(forwardHash,name)}) exten => 1,n,GotoIf($[${HASH(forwardHash,number)}]?from-internal,${HASH(forwardHash,numb ``` # Как найти нужный дефолтный контекст (/settings/autodistribution/default-context) Если ответственный не будет найден, то звонок должен уйти в контекст по умолчанию.\ В нашем примере это было `ivr-1,s,1` Если необходимо изменить это направление, тогда нужно узнать контекст, в который необходимо направить звонок, и указать его в файле **/etc/asterisk/extensions\_custom.conf**. Примеры * Для групп звонков используются контексты `ext-group,N,1`, где *N* – это номер группы. \ Номер группы можно узнать в Applications (Приложения) → Ring Groups (Группы вызова). * Маршрут для дополнительных назначений (custom destinations) можно узнать в Admin (Администратор) → Custom Destinations (Дополнительные назначения), в поле Target. * Для всех остальных случаев существует такой быстрый способ: * Переходим в Inbound Routes; * Выбираем маршрут; * Щёлкаем правой кнопкой мыши по полю с названием маршрута; * Выбираем "Исследовать элемент (Inspect element)" (см. рисунок). * В правом окне с исходным кодом страницы находим значение выбранного элемента. \ В нашем случае это `ext-group,3,1`. * Данный маршрут указываем в контексте `[bx24transfer]` вместо `ivr-1,s,1`.\ `exten => 1,n,GotoIf($[${TOEXT}]?from-internal,${TOEXT},1:ext-group,3,1)` В итоге, если ответственный не будет найден, входящий звонок уйдет на группу `ext-group,3` # Автораспределение звонка на ответственного менеджера (/settings/autodistribution) Модуль может определять ответственного за клиента сотрудника и переводить звонок на него.\ \ Для автоматического направления входящего звонка на менеджера, ответственного за сущность (контакт/компания/лид) в CRM, нужно настроить дополнительный контекст, куда направить все звонки на входящем маршруте. Либо можно включить этот контекст в любую точку вашей логики входящего звонка, например после выбора определенного маршрута на IVR. ### Порядок работы [#poryadok-raboty] 1. Входящий звонок в Asterisk поступает на специальный контекст, в котором вызывается запрос ответственного через модуль. 2. Имея номер телефона клиента, модуль обращается в CRM (Битрикс24 либо amoCRM),\ CRM возвращает название компании, и внутренний номер ответственного сотрудника. Если не нашел, то ответ будет пустой. 3. Контекст в Asterisk задает имя клиента и перевод на полученный внутренний номер.\ Если придет пустое значение, то уведет звонок по стандартному маршруту. Чтобы запрос сработал, в Asterisk должен быть включен CURL.\ Проверить можно так: `$ asterisk -rx 'core show function CURL'` В результате должны получить описание функции `CURL`. Если функция `CURL` отсутствует, то ее нужно установить на сервер Asterisk. Далее в диалплане создаем кастомный контекст, на который звонок будет приходить ДО голосового приветствия (подходящий кейс – распределить звонок до того, как клиент услышит IVR). ### Настройка контекста в Asterisk [#nastroika-konteksta-v-asterisk] В файле **/etc/asterisk/extensions\_custom.conf** прописываем контекст.\ Пример контекста (*обратите внимание на код – его нужно изменить*): ``` [itgrix-transfer] exten => _.,1,Noop(Itgrix transfer) same => n,Set(CURLOPT(hashcompat)=yes) same => n,Set(CURLOPT(httptimeout)=5) same => n,Set(CURLOPT(conntimeout)=5) same => n,Set(HASH(forwardHash)=${CURL(http://localhost:8077/forward?phone=${CALLERID(num)}&trunk=${EXTEN}&callid=${CHANNEL(linkedid)})}) same => n,Set(CALLERID(name)=${HASH(forwardHash,name)}) same => n,GotoIf($[${HASH(forwardHash,number)}]?from-internal,${HASH(forwardHash,number)},1:ivr-1,s,1) ``` где\ `localhost:8077` – IP-адрес и порт сервера, на котором установлен модуль, 8077 – дефолтное значение порта, на котором слушает модуль.\ `ivr-1,s,1` – контекст с IVR, куда уходит вызов в том случае если не удалось найти ответственного в CRM. [Как найти нужный контекст](/settings/autodistribution/default-context).\ `CURLOPT(conntimeout)=5` – таймаут 5 сек для выполнения запроса. Если на запрос не будут получен ответ, то звонок уйдет дальше по стандартному маршруту. **Логика работы:** 1. Через модуль выполняется запрос в CRM с поиском ответственного за сущность по полученному номеру: `http://localhost:8077/forward?phone=${CALLERID(num)}&trunk=${EXTEN}&callid=${CHANNEL(linkedid)}`.\ В ответ приходит внутренний номер и имя сущности. 2. `HASH(forwardHash)` – разделяет ответ на два параметра – `name` и `number`. 3. Если внутренний номер найдет – звонок переведется на ответственного `GotoIf`. 4. Если номер не найден – звонок пойдет по второму пути (в данном примере `ivr-1,s,1`). В запрос `/forward`также передаются параметры `trunk` и `callid`, которые могут понадобиться для [кастомизации автораспределения](/custom_bx#11-customize_autodistribution). Проверка выполнения запроса модулем на поиск сущности и внутреннего номера сотрудника, ответственного за нее:\ `curl http://localhost:8077/forward?phone=$81112223334` \ `number=164`\ В ответе видим 164 внутренний номер, который будет передан в диалплан Asterisk. (в примере запроса - тестовый номер) ### Включение контекста во FreePBX [#vklyuchenie-konteksta-vo-freepbx] Чтобы все заработало, необходимо включить наш кастомный контекст в диалплан FreePBX.\ Для этого воспользуемся модулем Custom Destinations. [Подробнее о Custom Destinations](http://wiki.merionet.ru/ip-telephoniya/19/rabotaem-s-modulem-custom-destinations-v-freepbx-13/). 1. Переходим по пути ***Admin** (Администратор) → **Custom Destinations** (Дополнительные назначения)* и нажимаем **Add Destination**: В поле Target указываем `itgrix-transfer,${EXTEN},1`. Нажимаем **Submit** и **Apply Config**.\ Контекст добавлен. Важно передать в контекст `${EXTEN}`, чтобы в дальнейшем можно было в запрос `/forward` передать транк (параметр `trunk=${EXTEN}`). 2\. Переходим в ***Connectivity** (Подключения) → **Inbound Routes** (Входящая маршрутизация)* выбираем входящий маршрут, для которого настраивается автораспределение, и в блоке **Set Destination** указываем **Custom Destinations** (Дополнительные назначения), выбираем `itgrix-transfer`. Автораспределение настроено. Можно перейти к [тестированию работы](/settings/test). # Передача номера транка и названия сущности при входящем звонке в CallerID (/settings/autodistribution/peredacha-nomera-tranka-i-nazvaniya-sushnosti-pri-vkhodyashem-zvonke-v-callerid) Отображение в софтфоне номера транка вместе с названием сущности при входящем звонке может быть полезно компаниям, у которых много внутренних номеров и которым важно знать, на какой из этих номеров поступил звонок. В админке модуля должна быть включена кастомизация автораспределения в разделе Настройки - Модуль Данный код нужно добавить в файл `/opt/itgrix_bx/customizer/actions/customize_autodistribution.php`
```php 'success', 'data' => $params, ); ```
# Настройка функций click-to-call (/settings/click-to-call) Битрикс24 поддерживает функцию click-to-call, когда при нажатии на телефонный номер в портале совершается звонок.\ Технически это выглядит так: * После нажатия пользователем на телефон в портале, команда уходит на модуль; * Модуль посылает команду originate в Asterisk (параметры можно скорректировать в настройках в админке и [кастомизаторе](/custom_common/c2c)); * Asterisk дозванивается сначала до оператора. Когда тот поднимет трубку, Asterisk отправит звонок клиенту. \ (как сделать автоподнятие трубки у оператора описано в [статье](/settings/additional/autoanswer)). ## Настройка click-to-call в админке модуля [#nastroika-click-to-call-v-adminke-modulya] Существует два варианта подключения:\ 1\) **Использовать наш click-to-call сервер** для передачи запросов (включен по умолчанию).\ Для разрешенных исходящих соединений с сервера, где установлен коннектор, этот вариант будет работать.\ \ 2\) Прямые запросы из Битрикс на коннектор - нужно Открыть порт 8077 на маршрутизаторе.\ \- В админке на странице Битрикс24 в поле “Адрес для запросов из Битрикса” (см. рисунок) укажите ваш внешний (!) IP-адрес или используйте url (указывая протокол http);\ \- Пробросьте порт 8077 на маршрутизаторе – на него будет приходить запрос из Б24, передаваться на модуль и модуль будет отправлять команду “позвонить” в Asterisk. Укажите внешний IP-адреса или url сервера Asterisk доступный для Битрикса Если вы используете PJSIP для всех пользователей, то изменить шаблон параметров команды originate на странице Asterisk в админке коннектора.
Настройте также Шаблон Caller ID. это фраза, которая будет отображаться в телефоне при звонке. В некоторых ситуациях звонок не работает при неверно указанном (для данной конфигурации Астериск) шаблоне.\ Если звонок не проходит попробуйте поменять значение в шаблоне на одно из ниже приведенных: * \#FROM# * \#TO# ## Настройка на стороне Битрикс24 [#nastroika-na-storone-bitriks24] ### 1. Задать приложение по умолчанию для исходящих звонков [#id-1.-zadat-prilozhenie-po-umolchaniyu-dlya-iskhodyashikh-zvonkov] В Битрикс24 перейдите в настройки телефонии **Интеграции → Телефония → Общие настройки** (см. рисунок) и выберите приложение по умолчанию.
В поле “**Номер для исходящего звонка по-умолчанию**” выберите пункт: “**Приложение: Интеграция с Asterisk - Itgrix**”. Если приложения нет в списке, то скорее всего не установилась связь с серверной частью: либо модуль не запущен, либо модуль не авторизовался в портале и нужно проверить через админку. Даже если приложение уже выбрано, выберите, пожалуйста, еще раз и обновите страницу. Это известный нам баг в Битриксе, находится в разработке. В поле “Номер для исходящего звонка по-умолчанию” выбрать пункт: “Приложение: Интеграция с Asterisk - Itgrix” ### 2. Настройка профилей пользователей Битрикс24 [#id-2.-nastroika-profilei-polzovatelei-bitriks24] Для корректной работы модуля у пользователей **должен быть указан внутренний номер** телефона на портале. Именно по нему модуль определяет, кому показать карточку и за кем зафиксировать ответственность за лида или контакт. Важно: Внутренние номера пользователей должны быть указаны.\ Если у пользователя нет внутреннего номера, то звонки и лиды этого пользователя не будут попадать в портал.
**Первый быстрый** способ указать внутренние номера через список пользователей телефонии: **Телефония → Настройки телефонии → Пользователи телефонии**.
У каждого пользователя телефонии должен быть указан внутренний номер, иначе звонки этого пользователя не будут попадать в CRM **Второй способ** – добавить внутренний номер напрямую через профиль сотрудника. Добавить внутренний номер напрямую через профиль сотрудника Важно: Если вы используете функцию FollowMe (перевод входящего звонок на сотовый телефон), то этот сотовый телефон тоже должен быть указан в профиле. # Особенности настройки после обновления Битрикс24 23.300.0 (/settings/click-to-call/osobennosti-nastroiki-posle-obnovleniya-bitriks24-23.300.0) Если ранее функция click-to-call была настроена для версии Битрикс24 ниже 23.300.0, то старый код для этой [настройки](/ustanovka-modulya/itgrix-bx-setup/offline/osobennosti-nastroiki-click-to-call-v-korobochnoi-versii-1s-bitriks24-v-zakrytoi-seti) необходимо удалить. Для возможности совершения звонков (click-to-call) из коробочной версии Битрикс24 в закрытой сети необходимо: В административном интерфейсе 1С-Битрикс24 (`/bitrix`) в разделе **Контент → Структура сайта →** **Файлы и папки** 1. Проверим наличие файла в котором будем производить изменения по следующему пути \ `local/php_interface/init.php` Если такого файла нет, изменять будем содержимое файла `bitrix/php_interface/init.php`или файл `init.php` для конкретного файла. ([документация по файлу init.php](https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\&LESSON_ID=2916))\\ 2. Добавим в `init.php` следующий код ```php \Bitrix\Main\Loader::includeModule('rest'); class MyEventProvider extends \Bitrix\Rest\Event\ProviderOAuth { public function send(array $queryData) { $http = new \Bitrix\Main\Web\HttpClient(); foreach($queryData as $key => $item) { if(preg_match('/192\.168\./', $item['query']['QUERY_URL'])) // directly sending handlers, having 192.168. in the address { $http->post($item['query']['QUERY_URL'], $item['query']['QUERY_DATA']); unset($queryData[$key]); } } if(count($queryData) > 0) { parent::send(array_values($queryData)); // all the rest is to be sent via the standard mechanism } } } \Bitrix\Rest\Event\Sender::setProvider(MyEventProvider::instance()); ``` 3. В данном коде нужно изменить шаблон `'/192\.168\./'` у функции `preg_match`: в нём должен быть адрес на который будут отправляться click-to-call запросы, это должен быть адрес по которому с сервера Bitrix24 доступна админка модуля, например, если админка модуля доступна по адресу `example.com:8077`, то шаблон будет `'/example\.com:8077/'` 4. Такой же адрес для запросов click-to-call должен быть указан в настройках модуля, в разделе Битрикс24:
Если не использовать код указанный выше, то на сервере Asterisk должны быть разрешены входящие запросы с адреса `https://oauth.bitrix.info` Получить IP адреса, с которых могут приходить входящие запросы, можно следующими командами: ``` curl https://dl.bitrix24.com/webhook/app.json curl https://dl.bitrix24.com/webhook/app-world.json ``` # Тест-кейсы для проверки работы интеграции (/settings/test) # amoCRM (/settings/test/test-amocrm) ## ## 1. Исходящий звонок на неизвестный номер с ответом [#id-1.-iskhodyashii-zvonok-na-neizvestnyi-nomer-s-otvetom] Совершите исходящий звонок с внутреннего номера на внешний номер телефона, ответьте, поговорите 6-10 секунд, положите трубку. Имейте в виду, что внешний номер **не должен быть указан как телефон сотрудника**, иначе звонок будет считаться внутренним вызовом и новый лид создан не будет. ### Результат: [#rezultat] 1\. Создан лид, ответственный за лид – сотрудник, совершивший исходящий звонок. 2\. Создано дело “звонок исходящий”, ответственный – сотрудник, совершивший звонок. 3\. В деле звонка прослушивается запись разговора. **Если не сработало, обратитесь к следующим статьям (или** [**свяжитесь с техподдержкой**](/contacts)**):** [Решение проблем с запуском приложения](/how-to-fix) [Включить проигрывание смешанного контента в браузере](/how-to-fix/mixed-content-v-google-chrome) ## 2. Входящий отвеченный звонок с известного номера [#id-2.-vkhodyashii-otvechennyi-zvonok-s-izvestnogo-nomera] 1. Совершите входящий звонок с известного внешнего номера (для которого в CRM уже создан Контакт); 2. Примите разговор на Вашем внутреннем номере; 3. Поговорите 6-10 секунд и положите трубку. ### Результат: [#rezultat-1] 1\. Если вы настроили автоматическое соединение с ответственным менеджером, вызов направлен на ответственного за контакт сотрудника; 2\. Во время звонка и разговора отобразилось всплывающее окно с информацией о позвонившем Контакте; 3\. Создано дело “Входящий звонок”, ответственный – сотрудник, принявший звонок; 4\. В деле звонка прослушивается запись разговора. **Если не сработало, обратитесь к следующим статьям (или** [**свяжитесь с техподдержкой**](/contacts)**):** [Как настроить автораспределение](/settings/autodistribution) [Решение проблем с запуском приложения](/how-to-fix) [Решение проблем с записью звонков](/how-to-fix/mixed-content-v-google-chrome) ## 3. Исходящий отвеченный звонок на известный номер кликом в amoCRM [#id-3.-iskhodyashii-otvechennyi-zvonok-na-izvestnyi-nomer-klikom-v-amocrm] 1\. Совершите исходящий звонок с внутреннего номера на внешний номер телефона. Для этого нажмите на телефонную трубку или номер телефона в Контакте.\ 2\. После этого команда вызова будет отправлена в Asterisk. К вам на внутренний телефон (внутренний номер берется из вашего профиля) поступит звонок. Ответьте и звонок уйдет на внешний номер Контакта.\ 3\. Дождитесь ответа Контакта, поговорите 6-10 секунд, положите трубку. ### Результат: [#rezultat-2] 1\. Во время звонка и разговора отобразилось всплывающее окно с информацией о Контакте; 2\. Создано дело “звонок исходящий”, ответственный – сотрудник, совершивший звонок; 3\. В деле звонка прослушивается запись разговора.\\ **Если не сработало, обратитесь к следующей статье (или** [**свяжитесь с техподдержкой**](/contacts)**)**: [Решение типичных проблем со звонком по клику](/how-to-fix/kak-pochinit-click-to-call) # Битрикс24 (/settings/test/test-bitrix24) ## 1. Исходящий звонок на неизвестный номер с ответом [#id-1.-iskhodyashii-zvonok-na-neizvestnyi-nomer-s-otvetom] ### Действия: [#deistviya] 1. Совершите исходящий звонок с внутреннего номера на внешний номер телефона через телефонный аппарат/сипфон, либо номеронабиратель Битрикс24 (Телефония в панели чатов, чтобы открыть окно набора номера) \ В профиле пользователя Битрикс24 **должен быть указан этот внутренний номер**.\ Исходящий **номер, на который вы звоните, не должен** быть указан у кого-то в профиле (иначе звонок будет считаться внутренним и не запишется);\ После этого команда вызова будет отправлена в Asterisk. 2. К вам на внутренний телефон (внутренний номер берется из вашего профиля) придет звонок. Ответьте и звонок уйдет на внешний номер. 3. Поговорите 6-10 секунд, положите трубку. Исходящий звонок на неизвестный номер с ответом ### Результат: [#rezultat] 1\. Во время звонка и разговора отобразилось всплывающее окно; 2\. Создан лид, ответственный за лид сотрудник – человек, совершивший исходящий звонок; 3\. Создано дело “звонок исходящий”, ответственный – сотрудник, совершивший звонок; 4\. В деле звонка прослушивается запись разговора. **Если не сработало, обратитесь к следующим статьям (или** [**свяжитесь с техподдержкой**](/contacts)**):** [Решение проблем с запуском приложения](/how-to-fix) [Решение проблем с записью звонков](/how-to-fix/reshenie-problem-s-zapisyu-zvonkov) [Не показывается карточка звонка во время разговора](/how-to-fix/ne-poyavlyaetsya-kartochka-zvonka-vo-vremya-razgovora) ## 2. Входящий отвеченный звонок с известного номера [#id-2.-vkhodyashii-otvechennyi-zvonok-s-izvestnogo-nomera] ### Действия: [#deistviya-1] 1. Совершите входящий звонок с известного внешнего номера (для которого в CRM есть лид или Контакт); 2. Примите разговор на Вашем внутреннем номере; 3. Ответьте и поговорите 6-10 секунд, положите трубку. Входящий отвеченный звонок с известного номера ### Результат: [#rezultat-1] 1\. Если вы настроили автоматическое соединение с ответственным менеджером, вызов направлен на ответственного за контакт сотрудника; 2\. Во время звонка и разговора отобразилось всплывающее окно с информацией о позвонившем Контакте/Лиде; 3\. Создано дело “Входящий звонок”, ответственный – сотрудник, принявший звонок; 4\. В деле звонка прослушивается запись разговора.\\ **Если не сработало, обратитесь к следующим статьям (или** [**свяжитесь с техподдержкой**](/contacts)**):** [Как настроить автораспределение](/settings/autodistribution) [Не показывается карточка звонка звонка во время разговора](/how-to-fix/ne-poyavlyaetsya-kartochka-zvonka-vo-vremya-razgovora) [Решение проблем с записью звонков](/how-to-fix/reshenie-problem-s-zapisyu-zvonkov) ## 3. Исходящий отвеченный звонок на известный номер кликом в Битрикс24 [#id-3.-iskhodyashii-otvechennyi-zvonok-na-izvestnyi-nomer-klikom-v-bitriks24] ### Действия: [#deistviya-2] 1\. Совершите исходящий звонок с внутреннего номера на внешний номер телефона. Для этого нажмите на телефонную трубку или номер телефона в карточке Контакта/Лида/Сделки.\ 2\. После этого команда вызова будет отправлена в Asterisk. К вам на внутренний телефон (внутренний номер берется из вашего профиля) придет звонок. Ответьте и звонок уйдет на внешний номер Контакта.\ 3\. Дождитесь ответа Контакта, поговорите 6-10 секунд, положите трубку. ### Результат: [#rezultat-2] 1\. Во время звонка и разговора отобразилось всплывающее окно с информацией о Контакте; 2\. Создано дело “звонок исходящий”, ответственный – сотрудник, совершивший звонок; 3\. В деле звонка прослушивается запись разговора. **Если не сработало, обратитесь к следующей статье (или** [**свяжитесь с техподдержкой**](/contacts)**)**: [Настройка функции click-to-call](/settings/click-to-call) [Решение типичных проблем со звонком по клику](/how-to-fix/kak-pochinit-click-to-call) # Установка модуля интеграции AmoCRM и Asterisk (/ustanovka-modulya/itgrix-amo-setup) 3 простых шага установки! Инструкция полной установки в видео ## ## 1. Установка приложения в amoCRM. [#id-1.-ustanovka-prilozheniya-v-amocrm] Установку нужно осуществлять под учетной записью с правами Администратора. Для корректной работы приложения, необходимо установить приложение в amoCRM. Раздел amoМаркет\ В поисковой строке наберите **Itgrix**, либо Asterisk. Выберите приложение **"Asterisk connector Itgrix"**. либо по ссылке **https\://***company***.*****amocrm.ru*****/settings/widgets#amo\_itgrix**\ где *company*.*amocrm.ru* - название вашей amoCRM.
Согласитесь с передачей данных и установите приложение. \\ ## 2. Настройка функции click-to-call и отображения карточек звонков [#id-2.-nastroika-funkcii-click-to-call-i-otobrazheniya-kartochek-zvonkov] Выберите: Использовать наш click-to-call сервер, либо укажите IP-адрес сервера с модулем, для того, что принимать запросы на звонок по клику из CRM. Выберите нужно ли показывать карточку звонка. [см. описание](/ustanovka-modulya/itgrix-amo-setup/kartochka-zvonka-v-amocrm)\ **Обязательно сохраните данные.** **Важно: Если вы не используете внешний c2c сервер, то нужно указать внешний адрес вашей сети и пробросить порт 8077 до сервера, где установлена серверная часть коннектора.** **При использовании нашего сервера с2с, на сервере с модулем должен быть доступен наш адрес [https://apix.itgrix.ru](https://apix.itgrix.ru).** ## 3. Установка модуля на сервер. [#id-3.-ustanovka-modulya-na-server] Видео процесса установки **2.1 Установка** Для установки воспользуйтесь автоматическим скриптом.\ Скачайте скрипт по ссылке\ `wget https://itgrix.ru/download/autoinstaller_amo.sh` Запустите скрипт\ `bash autoinstaller_amo.sh` В конце установки **задайте login/password** для входа в админку модуля. В дальнейшем эти данные можно будет изменить в конце конфиг файла `/etc/itgrix_amo/config.json` в разделе "server". **2.2 Запуск модуля** Если в операционной системе установлена **служба systemctl** , то **модуль запуститься автоматически**, либо запускаем его **вручную**: `service itgrix_amo start`\ `service itgrix_amo status` **2.3 Настройка модуля интеграции**\ Далее настройку мы рекомендуем производить через мастер настройки в Админке модуля (веб-интерфейс доступен по ссылке `http://:8077/config/master`). ## 4. Шаги мастера: [#id-4.-shagi-mastera] 1. **Подключение к Базе данных.**\ Мастер найдет доступы к БД. Также будет проверена доступность таблиц CEL, CDR, и последние записи в них. Если данные не найдены, их можно найти следующим образом\ Смотрим файлы: `/etc/asterisk/res_odbc.conf` или `/etc/asterisk/res_odbc_additional.conf`Находим:\ `[asteriskcdrdb]`\ `username=>freepbxuser`\ `password=>mysqlsecret`\ Вы можете создать своего пользователя в MySQL. Потребуются права на чтение таблиц с данными CDR и CEL. 2\. **Подключение к Астериск.** Выберите существующего пользователя или создайте нового, от имени которого модуль будет отправлять команды в AMI. Если модуль установлен не на сервер Астериск, то для создания пользователя нужно:\ 1\) внести изменения в файл `/etc/asterisk/manager_custom.conf`\ (если его нет, правим файл `/etc/asterisk/manager.conf`): `[amo]`\ `secret = asterisksecret` (**укажите свой**)\ `deny = 0.0.0.0/0.0.0.0`\ `permit = 127.0.0.1/255.255.255.0`\ `read = cdr,reporting,originate`\ `write = reporting,originate` 2\) После добавления нового пользователя нужно перегрузить Asterisk для загрузки новых данных командой\ `asterisk -rx 'manager reload’` 3\. **Способ хранения файлов записей** Укажите путь до файлов записей. Обычно они лежат по адресу `/var/spool/asterisk/monitor`\ Выберите, как организована структура каталогов. Для FreePBX по умолчанию они разложены по подпапкам Год/Месяц/День. 4\. **Подключение к amoCRM.** Укажите здесь адрес портала, просто скопировав его из адресной строки.\ Нажмите "Получить код".\ В открывшемся окне авторизуйтесь в своей CRM и получите код.\ Полученный код укажите в поле. Пройдите проверку. 5\. **Завершение** Завершите настройку, нажав кнопку "Завершить" в конце страницы и автоматически перейдете на страницу Бизнес-логики ## 5. **Бизнес-логика** [#id-5.-biznes-logika] Если все этапы пройдены успешно, завершите настройку.\ Вы будете перенаправлены в раздел настройки Бизнес-логики. `http://:8077/config#business_logic,`\ где `` - адрес сервера с Asterisk, на который установлен модуль интеграции. Настройте логику работы коннектора. Обязательно укажите **соответствие номеров** в телефонии и пользователей в CRM. Если у одного пользователя есть несколько внутренних номеров или настроено перенаправление на сотовый, то для корректной регистрации звонков на дополнительные номера их **нужно прописать в админке** либо в конфиге: `"amo": {`\ `"users": {`\ `"101": "user_id_1",`\ `"102": "user_id_1",`\ `"89121234567": "user_id_1"`\ `}`\ `}` **Для сохранения настроек нажмите кнопку “Сохранить” на каждой измененной странице.** ## 6. Настройка https ссылок для прослушивания записей разговоров [#id-6.-nastroika-https-ssylok-dlya-proslushivaniya-zapisei-razgovorov] В админке Настройки - Модуль
1. Нужно **включить функцию** "Использовать https порт". 2. Порт по умолчанию 8078 (можно изменить). Для того, чтобы записи были доступны снаружи сети, порт **8078 должен быть открыт** до Астериска. 3. **Добавить путь** к сертификату и ключу. Обычно их можно найти по адресу `/etc/asterisk/keys/` Нужны адреса на файлы `<ваш домен>.pem` и `<ваш домен>.key` Проще всего получить сертификат через сервис [letsencrypt](https://letsencrypt.org/ru/). 4. Сохранить настройки. **Установка завершена!** Для прослушивания разговоров CRM - должен быть доступ на сервер с модулем с использованием протокола HTTPS: [проброшен порт 8078](/how-to-fix/ssl-certificate) и установлены корректные ssl сертификаты. Это связано с [запретом браузерами смешанного содержимого](/how-to-fix/mixed-content-v-google-chrome). Дополнительно можно * настроить [автораспределение](/settings/autodistribution), * проверить [функцию click-to-call](/ustanovka-modulya/itgrix-amo-setup#2.-nastroika-funkcii-click-to-call-i-otobrazheniya-kartochek-zvonkov), При необходимости проведите дополнительные [кастомизации](/custom_common). Для тестирования рекомендую придерживаться [описанного порядка тестов](/settings/test/test-amocrm). # Карточка звонка в amoCRM (/ustanovka-modulya/itgrix-amo-setup/kartochka-zvonka-v-amocrm) В карточке звонка будет предоставлена информация о контакте/компании из совершаемого звонка, а также список сделок и задач этого аккаунта. **Важно:** карточка звонка получает из CRM дополнительную информацию о контакте и связанных сущностях, что приводит к дополнительной нагрузке на API amoCRM. В amoCRM ограничение на количество запросов зависит от тарифа вашего аккаунта, стандартно [7 запросов в секунду](https://www.amocrm.ru/developers/content/api/recommendations/) По умолчанию карточка выключена, чтобы не увеличивать нагрузку на API. Количество дополнительных API запросов на каждый показ карточки: $$ N = 3 + 2X $$ , где Х - \<количество сделок>, связанных с контактом (на каждую сделку по 2 запроса). Для включения карточки звонка, необходимо в настройках виджета, включить галочку "Показывать карточку звонка, настроить и обеспечить возможность подключения пользователей к модулю интеграции по протоколу WSS.
Адрес для подключения имеет вид `wss://:8078/crm/cardws`. Его можно настроить в виджете приложения в интерфейсе amoCRM. Необходимые условия для корректной работы: * адрес доступен с компьютера пользователя, это может быть адрес в локальной сети, адрес доступный через VPN или (не рекомендуется) внешний адрес; * настройки всех узлов маршрута между пользователем и адресом сокета карточки разрешают устанавливать соединение по протоколу WSS, это может потребовать дополнительной настройки имеющегося сервера Nginx или другого прокси-сервера; * на сервере где установлен модуль интеграции настроен валидный SSL-сертификат, который успешно верифицируется браузером пользователя, и этот сертификат указан в интерфейсе настройки модуля интеграции `http://:8077/config/module`; * сервер на котором установлен модуль интеграции и промежуточные узлы маршрута настроены для одновременной поддержки необходимого количества соединений, по одному на каждую вкладку браузера с открытым интерфейсом amoCRM для каждого пользователя. Для корректной работы **необходимо разрешить уведомления**: 1. Уведомления о событиях (нотификациях) страницы amoCRM в браузере. 2. В своем аккаунте в amoCRM нотификацию по звонкам (на скрине указаны минимально необходимы настройки). Карточка звонка не будет показана, если не существует контакта или компании, связанного со звонком. Такое может случиться, если в коннекторе отключено создание контакта для новых звонков. Включить эту опцию можно в веб-интерфейсе настройки коннектора на **странице Бизнес-логика.** 3\. Карточка звонка не будет показана, если не существует контакта, связанного со звонком. Такое может произойти, если в модуле отключено создание контактов для новых звонков. Включить эту опцию можно в веб-интерфейсе администратора В текущей версии работа карточки звонка не поддерживается при создании "неразобранного". Рекомендуем отключить показ карточки звонка (иначе она может быть показана после окончания разговора). # Особенности настройки ограниченного режима (/ustanovka-modulya/itgrix-amo-setup/osobennosti-nastroiki-ogranichennogo-rezhima) После окончания лицензии либо завершения триального периода приложение уходит в ограниченный режим (restricted mode). Укажите до 2-х пользователей в разделе Бизнес-логика – **Начните писать имя** и список нужных пользователей подтянется из АмоСРМ. Список отличий Free версии от Professional. | | Free | Proffessional | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------- | | Цена за 1 месяц | 0 | от 1500 | | Число пользователей | 2 | неограничено | | Число транков (телефонных номеров) | неограничено | неограничено | | Полный функционал телефонии:
- автоматическое соединение с ответственным (автораспределение)
- создание контакта и сделки для входящих и исходящих звонков
- создание звонка и прикрепление ссылки на запись звонка
- ответственный за новый контакт - последний разговаривающий сотрудник
- совершение исходящих вызовов по клику на номер
| + | + | | Возможность создавать "неразобранное" для входящих звонков | - | + | | Возможность отключить создание контактов для входящих либо исходящих звонков | - | + | | Бизнес логика | | | | Возможность выбора дефолтной воронки и статуса | + | + | | Cоответствие транков и воронок продаж | - | + | | Создание задач по пропущенному звонку | - | + | | Автозакрытие задач после успешного звонка | - | + | | Возможность выбрать первого ответственного за звонок | - | + | | Возможность выбрать ответственносго за пропущенный | - | + | | Черный и белый списки (фильтр по внутреннему номеру сотрудника) | - | + | | Соответствие транков и пользователей по умолчанию | - | + | | Возможности кастомизации | | | | Возможность загрузить в CRM старые звонки, когда модуль еще не был установлен (флаг --history\_date) | + | + | | Изменение формата номера телефона перед отправкой в CRM (process\_client\_phone) | + | + | | Изменение параметров вызова (originate) перед отправкой в Asterisk (process\_originate\_params) | + | + | | Кастомизация пути до записи и конвертация в mp3 (process\_record\_file\_path) | + | + | | Черные и белых списки (фильтр по внутреннему номеру сотрудник или по транку) (need\_registration) | - | + | | Назначать разных ответственных по умолчанию за пропущенные звонки, пришедшие по разным транкам (process\_call\_params) | - | + | | Дополнить контакт и сделку любыми данными о звонке (process\_contact\_creation\_params, process\_lead\_creation\_params) | - | + | | Дополнить звонок любыми данными (process\_call\_params) | - | + | | Кастомизация задачи по пропущенному звонку (process\_task\_creation\_params) | - | + | # Установка модуля интеграции Битрикс24 и Asterisk (/ustanovka-modulya/itgrix-bx-setup) 3 простых шага установки! Инструкция полной установки в видео ## 1. Установка и настройка модуля в Битрикс24 [#id-1.-ustanovka-i-nastroika-modulya-v-bitriks24] ### 1.1. Установка приложения [#id-1.1.-ustanovka-prilozheniya] Есть **два способа** установки приложения. Первый подойдет **только для облачной** версии Битрикс24,\ а второй как для облачной так **и для коробочной.** #### 1 способ: [#id-1-sposob] На сайте Битрикс24 в разделе **Маркет (Приложения)** введите в поиске "Itgrix" и выберите [**Asterisk интеграция: Itgrix**](https://www.bitrix24.ru/apps/app/itgro.asterisk/?utm_source=bz/)(или просто перейдите по [ссылке](https://www.bitrix24.ru/apps/app/itgro.asterisk/?utm_source=bz/)). Нажмите кнопку **Попробовать,** введите **название своего облачного портала** и нажмите **Продолжить**. Вы будете перенаправлены на приложение в вашем корпоративном портале.\ Согласитесь с условиями использования и пользовательским соглашением, и завершите установку. Приложения доступны для установки, только если у вас есть **активная платная лицензия Битрикс24** либо **включен демо-режим**.\ \ С 09.12.2024 для установки **любых интеграционных приложений** должен быть включен триал, либо **оплачена подписка на Маркетплейс.**\ Подробнее о Маркет Плюс в [отдельной статье.](/faq/bx24-market-subscription) #### 2 способ: [#id-2-sposob] Зайдите в раздел **Приложения - Маркет** в вашем корпоративном портале (раздел в левом боковом меню), введите в поисковой строке **"Itgrix"** и выберите **Asterisk интеграция - Itgrix,** нажмите Установить. коннектор Itgrix в вашем корпоративном портале Согласитесь с условиями пользовательского соглашения и завершите установку. После установки откроется форма для контактов. Введите свои данные для получения информации об окончания лицензии. После заполнения формы вы увидите число дней до завершения лицензии и кнопки для самостоятельно покупки лицензии. С 09.12.24 Изменилась структура приложений для **Маркета**\ **В доменной Ru зоне** работает приложение по подписке [**Интеграция Asterisk и Битрикс24** ](https://www.bitrix24.ru/apps/app/itgro.asterisk/?utm_source=bz/).\ Ранее работающее приложение с оранжевым лого скрыто из РФ Маркетплейса.\ \ **В доменах KZ** и других работает приложение [**Asterisk интеграция: Itgrix** ](https://www.bitrix24.kz/apps/app/itgro.asteriskbx24free/?utm_source=bz/).\ \ Все ранее установленные приложения на порталах сохраняются, их удалять не советуем. При первой установке действует **бесплатный тестовый период – 7 дней и еще на 7 дней продлеваем при обращении в ТП** затем автоматически включается [ограниченный режим](/faq/itgrix-versions). ### 1.2. Передача прав на использование приложения всем авторизованным пользователям [#id-1.2.-peredacha-prav-na-ispolzovanie-prilozheniya-vsem-avtorizovannym-polzovatelyam] Заново зайдите в раздел **Приложения - Маркетплейс**, откройте вкладку **Установленные** приложения, а затем Права доступа – и предоставьте всем пользователям портала права на использование приложения. Откройте раздел Приложения - Маркет Зайдите в раздел Установленные Приложения → Установленные → Права доступа В появившемся окне нужно выбрать раздел Другое и отметить **“Все авторизованные пользователи”**. Затем сохранить изменения, нажав Выбрать. Другое → Все авторизованные пользователи →  Выбрать ### 1.3 Установка внутренних номеров телефонов пользователям Битрикс24 [#id-2-ustanovka-modulya-na-server-asterisk] Для успешной работы у пользователей должны быть указаны внутренние номера телефонов.\ Карточка звонка будет показываться и звонки будут фиксироваться только для тех пользователей, у которых указан внутренний номер. Указать внутренний номер можно каждому пользователю самостоятельно в своем профиле. Либо администратору через список сотрудников. ## 2. Установка модуля на сервер Asterisk [#id-2.-ustanovka-modulya-na-server-asterisk] Удобнее всего установить модуль на сервер с Asterisk. Если нет возможности установить модуль на сервер с Asterisk, то можно установить его на сервер с коробочным Битрикс24, либо на сторонний сервер, подходящий [по техническим параметрам](/ustanovka-modulya/trebovaniya-k-sisteme). ### Видео процесса установки [#video-processa-ustanovki] Процесс установки модуля Itgrix на сервер Asterisk ### Пошаговая инструкция [#poshagovaya-instrukciya] 1\. **Откройте Консоль** (Терминал), войдите на сервер Asterisk:\ `ssh -l root`\ где `` - это адрес сервера Asterisk, куда будет установлен модуль.\ Введите пароль. 2\. Для автоматической установки **скачайте скрипт** командой:\ `wget https://itgrix.ru/download/autoinstaller_bx.sh` 3\. **Запустите установку** командой:\ `bash autoinstaller_bx.sh` Скрипт автоматически определит разрядность системы (32х/64х), скачает нужную версию архива, установит приложение и задаст первичные настройки. 4\. В конце установки **задайте login/password** для входа в интерфейс настройки модуля (админку). В дальнейшем эти данные можно будет изменить в конфиг-файле, который можно найти здесь: `/etc/itgrix_bx/config.json` 5\. Для **перехода в мастер установки** скопируйте и вставьте в браузер ссылку, показанную в конце процесса установки вида:\ `http://:8077/config/master`\ Где `` - это адрес сервера, на который был установлен модуль. Если в операционной системе установлена служба systemctl, то модуль запустится автоматически. Если systemctl нет, то запускаем модуль вручную:\ `service itgrix_bx start` Проверка статуса:\ `service itgrix_bx status` ## 3. Настройка модуля интеграции [#id-3.-nastroika-modulya-integracii] Далее настройку мы рекомендуем производить через мастер настройки Itgrix в Админке (веб-интерфейс модуля интеграции).\ Мастер настройки размещен по адресу:\ `http://:8077/config/master`\ Где`` - адрес сервера Asterisk, на который был установлен модуль.\ Перейдите по ссылке, подтвердите в браузерном уведомлении, что доверяете источнику.\ Для входа используйте **логин и пароль**, установленные на прошлом шаге. Для полной настройки модуль нужно будет подключить (указать адрес/логин/пароль) к трем системам:\ \- к базе данных MySQL,\ \- к AMI интерфейсу Asterisk,\ \- к корпоративному порталу Битрикс24. Схема подключения модуля ### Видео процесса настройки [#video-processa-nastroiki] ### Пошаговая инструкция настройки [#poshagovaya-instrukciya-nastroiki] #### **Шаг 1.** Подключение к Базе данных. [#shag-1.-podklyuchenie-k-baze-dannykh] Мастер найдет доступы к БД. **Согласитесь** с ними.\ Он проверит доступность таблиц CEL (call event log) и наличие в них актуальных записей (за последний час).\ Проверит наличие таблицы CDR (call detail record) и названия файлов записей в ней. **Если данные не найдены.**\ Проблема, скорее всего, в модуле или в связи с базой. Тогда данные можно найти следующим образом:\ Смотрим файлы:\ `/etc/asterisk/res_odbc.conf` или `/etc/asterisk/res_odbc_additional.conf`. Находим:\ `[asteriskcdrdb]`\ `username=>freepbxuser`\ `password=>mysqlsecret` Указываем эти данные на странице мастера настройки. Вы можете создать своего пользователя в MySQL. Потребуются права на чтение таблиц с данными CDR и CEL. #### **Шаг 2.** Подключение к Asterisk. [#shag-2.-podklyuchenie-k-asterisk] Выберите существующего пользователя или создайте нового, от имени которого модуль будет отправлять команды в AMI. Если **мастер не находит пользователей**, то он либо установлен не на сервер с Asterisk, либо имеются проблемы с подключением к серверу. В этом случае, пожалуйста, [обратитесь в техподдержку](/contacts). **Если модуль установлен не на сервер с Астериск**,\ то для создания пользователя:\ 1\) Внесите изменения в файл `/etc/asterisk/manager_custom.conf`\ (если его нет, правим файл **/etc/asterisk/manager.conf**): `[bx24]`\ `secret=asterisksecret (укажите свой)`\ `deny=0.0.0.0/0.0.0.0`\ `permit=127.0.0.1/255.255.255.0`\ `read=cdr,reporting,originate`\ `write=reporting,originate` 2\) После добавления нового пользователя нужно перезагрузить Asterisk командой:\ `asterisk -rx 'manager reload’` #### **Шаг 3**. Подключение к Битрикс24. [#crm-authorization] **1. Укажите доменное имя портала**, просто скопировав его из адресной строки (например, `https://portal.bitrix24.ru`).\ Должен быть указан протокол https (если у вас на портале не выбрано другое). *** **2. Выберите, какое из приложений в портале вы используете:** * Интеграция с Asterisk: **бесплатный** коннектор Itgrix (для маркета в регионах KZ и .com) * Интеграция с Asterisk: Itgrix **по подписке** [Подробнее о подписном приложении](/faq/bx24-market-subscription) **3. Нажмите на кнопку Получить код.** Учетная запись Битрикс24 должна обладать правами Администратора (можно сделать отдельную запись). Не рекомендуется использовать учетную запись интегратора т.к. в дальнейшем она может быть удалена, что приведет к ошибке авторизации модуля. \*\*\*\* Если вы уже были авторизованы в портале, то вам откроется страница с длинным 20-ти значным кодом.\ Если вы не авторизованы, то сначала нужно авторизоваться, а затем выполнить этот шаг.\ Далее введите код в поле \*\*\*\* Код авторизации и **нажмите кнопку Проверить.** **Возможные ошибки:** * Пользователь, под которым вы авторизовались, **не является админом** на портале\ (вы должны быть администратором, чтобы передать приложению нужные права для работы); * Выбрано **не то приложение**, которое установлено на портале (измените приложение, получите код заново и нажмите кнопку Повторить шаг); * Для подписного приложения должна быть активна лицензия на Маркет.Плюс. В [тарифах Битрикс24](https://www.bitrix24.ru/prices/) есть ограничение на количество администраторов портала. Не превышайте это количество.\ На корпоративных порталах для авторизации приложения важно, чтобы пользователь был в составе компании (не экстранет, не уволенный). #### **Шаг 4.** Настройка бизнес-логики [#shag-4.-nastroika-biznes-logiki] Если все этапы пройдены успешно, завершите настройку. Вы будете перенаправлены в раздел настройки **Бизнес-логики**. Для сохранения настроек нажмите кнопку **Сохранить** на каждой измененной странице. Настройка бизнес-логики в веб-интерфейсе коннектора Установка завершена.\ Для тестирования работы используйте [описанный порядок тестов](/settings/test/test-bitrix24). Дополнительно \ \- проверьте работу [функцию click-to-call](/settings/click-to-call), \ \- настройте [автораспределение](/settings/autodistribution) входящих звонков, \ \- определитесь со [сквозной аналитикой](/settings/additional/end-to-end-analytics).\ При необходимости проведите дополнительные [кастомизации](/custom_bx). Для прослушивания разговоров по ссылкам в CRM - должен быть доступ на сервер с модулем с использованием протокола HTTPS: [проброшен порт 8078](/how-to-fix/ssl-certificate) и установлены корректные ssl сертификаты. Если используется загрузка файлов записей напрямую на портал - настройка порта 8078 не требуется. Это связано с [запретом браузерами смешанного содержимого](/how-to-fix/mixed-content-v-google-chrome). Прослушивание по ссылкам доступно в разделе CRM - Еще - Мои дела. В фильтре поиска нужно выбрать Тип - Звонок Входящий/Исходящий. В любом случае не стесняйтесь писать в нашу [техническую поддержку](/contacts) через чат в вашем Битриксе или через телеграмм. Скачать отчет для техподдержки можно со страницы Состояние системы.
# Особенности настройки ограниченного режима (/ustanovka-modulya/itgrix-bx-setup/osobennosti-nastroiki-ogranichennogo-rezhima) После окончания лицензии либо завершения триального периода приложение уходит в ограниченный режим (restricted mode). Укажите до 2-х пользователей в разделе Бизнес-логика – **Начните писать имя** и список нужных пользователей подтянется из Битрикс24. [Полный список ограничений](/faq/itgrix-versions) # Настройка модуля для работы в закрытой сети (/ustanovka-modulya/itgrix-bx-setup/offline) ### Почему не подходит стандартное решение [#pochemu-ne-podkhodit-standartnoe-reshenie] 1. Проверка наличия лицензии осуществляется запросом к серверу лицензирования lk.bx24asterisk.ru. Без доступа в Интернет проверка лицензии невозможна. 2. Для работы приложения в Битрикс24 необходимо получать токены через сервер авторизации oauth.bitrix.info(один раз при начальной настройке и далее автоматически раз в час). Без доступа в Интернет модуль не сможет получить доступ к порталу, даже если портал находится в той же закрытой сети. 3. Регулярно выпускаются обновления модуля с новым функционалом. В стандартном решении обновления скачиваются с нашего сайта bx24asterisk.ru и устанавливаются скриптом update.sh в поставке модуля, но без доступа в Интернет обновления не скачать. Модуль интеграции Itgrix\_bx способен работать **с коробочным порталом Битрикс24** в сети **без доступа в Интернет**. Для работы в таком режиме необходимо: * скачать установочный файл для [офлайн установки](/faq/offline-install); * [выполнить авторизацию офлайн](/ustanovka-modulya/itgrix-bx-setup/offline/offline-auth) с помощью модуля "Itgrix: Автономная авторизация"; * [получить лицензионный ключ](/ustanovka-modulya/itgrix-bx-setup/offline/offline-license) (офлайн лицензию); * при [релизе новых версий](/changelog-bx) выполнять [офлайн обновление](/faq/offline-update).
# Как выполнить авторизацию оффлайн (/ustanovka-modulya/itgrix-bx-setup/offline/offline-auth) Модуль "Itgrix: Автономная авторизация" для коробочного портала Битрикс24 позволяет приложению "Itgrix: интеграция Битрикс24 и Asterisk" использовать модуль REST API без доступа к серверу авторизации oauth.bitrix.info. После установки модуль автономно создаст токен авторизации с длинным сроком действия. Скопировав его в файлы коннектора Itgrix, приложение авторизуется в копр.портале с закрытым внешним доступом. ## Шаг 1 Скачать архив модуля [#shag-1-skachat-arkhiv-modulya] Архив модуля авторизации предоставляется менеджером по запросу клиента ## Шаг 2 Поместить архив в папку портала [#shag-2-pomestit-arkhiv-v-papku-portala] Поместить архив в директорию портала Битрикс24:\ `<директория_портала>/local/modules` Полный путь до архива может иметь такой вид:\ `/home/<имя_пользователя>/<домен>/local/modules/itgro.authprovider.zip` Распаковать архив: ```bash cd <директория_портала>/local/modules unzip ./itgro.authprovider.zip && rm ./itgro.authprovider.zip ``` ## Шаг 3 Установка приложения [#shag-3-ustanovka-prilozheniya] Зайти на страницу списка доступных решений по адресу:\ `https://<домен>/bitrix/admin/partner_modules.php?lang=ru` Убедиться, что приложение "Itgrix: Автономная авторизация (itgro.authprovider)" присутствует в списке решений.\ Если решение отмечено как не установленное, нажать "Установить" в меню слева. Результат: ## Шаг 4 Получение кода авторизации [#shag-4-poluchenie-koda-avtorizacii] Перед получением кода нужно убедиться что приложение "Коннектор Itgrix" установлено на портале. В противном случае код будет пустой. Зайти на страницу приложения по адресу:\ `https://<домен>/bitrix/admin/settings.php?mid=itgro.authprovider&lang=ru` Убедиться, что приложение успешно отображает страницу настроек со сгенерированным токеном авторизации: # Как получить лицензию оффлайн (/ustanovka-modulya/itgrix-bx-setup/offline/offline-license) В случае, когда невозможно обеспечить доступ с сервера, где установлено приложение Itgrix, до сервера лицензирования **lk.bx24asterisk.ru**, вы можете вручную получить лицензионный ключ, и тогда приложению не нужно будет обращаться к серверу лицензирования. В этом случае лицензия будет применима только на данном портале и **ограничена аппаратным обеспечением** вашего сервера.\ При изменении аппаратного обеспечения лицензионный ключ для данного портала может быть перевыпущен бесплатно. Для работы с лицензионным ключом система должна удовлетворять следующим дополнительным требованиям: 1. Физическая, а не виртуальная машина 2. Архитектура `x64` 3. Модуль интеграции Itgrix запускается от пользователя `root` Процесс лицензирования оффлайн состоит из следующих шагов: 1. Получить **HardwareID** - код, содержащий информацию о вашем аппаратном обеспечении 2. Передать HardwareID менеджеру Itgro 3. После приобретения лицензии, вам предоставят лицензионный ключ 4. Применить лицензионный ключ ## Как получить HardwareID [#kak-poluchit-hardwareid] Сведения об аппаратном обеспечении, необходимые для лицензирования, содержатся в коде **HardwareID**, который можно получить в интерфейсе настройки модуля интеграции на странице покупки лицензии. Ссылка для перехода на эту страницу появляется на главной странице рядом с лицензией если у вас нет активной лицензии или до окончания срока её действия осталось менее двух недель. Ссылка на страницу покупки лицензии Можно также сразу открыть страницу покупки лицензии по адресу: `http://:8077/config/buy_license#offline` Вверху страницы должен быть выбран вариант лицензирования **"Лицензионный ключ".** Выбор способа лицензирования Далее HardwareID нужно скопировать или скачать в виде файла из поля **"Ваш HardwareID".** При перезагрузке страницы HardwareID генерируется заново, но содержащаяся в нём информация об аппаратном обеспечении не меняется, поэтому сохранять HardwareID заново каждый раз не нужно.\ Сохраненный файл передайте в чат технической поддержке либо пришлите на указанную почту. ## Как применить лицензионный ключ [#kak-primenit-licenzionnyi-klyuch] После приобретения лицензии, менеджер по продажам предоставит вам лицензионный ключ на Itgrix, который нужно применить.\ Для этого на странице покупки лицензии в интерфейсе настройки модуля интеграции нужно скопировать содержимое ключа в поле **"Введите лицензионный ключ"** и нажать **"Применить".** Альтернативно, вместо этого можно поместить файл лицензионного ключа `license.key` (имя файла важно) в директорию установки модуля интеграции `/opt/itgrix_bx/`.\ Если у вас [настроено несколько копий](/for-admins/zapusk-dopolnitelnoi-kopii-modulya) модуля интеграции, то для каждой копии нужен свой лицензионный ключ с соответствующим именем, например `license-1.key`.\ Ключи на один и тот же портал могут быть копиями или могут быть сгенерированы менеджером Itgro в рамках одной покупки. При таком способе применения лицензии, ключ будет задействован: * При ближайшей автоматической проверке лицензии * При перезапуске службы модуля интеграции `systemctl restart itgrix_bx` * При нажатии на кнопку проверки лицензии на главной странице интерфейса настройки модуля интеграции # Особенности настройки click-to-call в коробочной версии 1С-Битрикс24 в закрытой сети (/ustanovka-modulya/itgrix-bx-setup/offline/osobennosti-nastroiki-click-to-call-v-korobochnoi-versii-1s-bitriks24-v-zakrytoi-seti) Актуально только для версий Битрикс24 до 23.300.0, для более поздних версий информация в отдельной [статье](/settings/click-to-call/osobennosti-nastroiki-posle-obnovleniya-bitriks24-23.300.0) Для возможности совершения звонков (click-to-call) из коробочной версии Битрикс24 в закрытой сети необходимо внести изменения в файл \ `/home/bitrix/www/bitrix/php_interface/dbconn.php`,\ который можно найти через административный интерфейс 1С-Битрикс24 в разделе **Контент → Структура сайта → Файлы и папки → bitrix → php\_interface → dbconn.php**, В файл добавьте код:\ `if($_REQUEST['COMMAND'] === 'startCallViaRest' || $_SERVER['REQUEST_URI'] === '/rest/voximplant.call.startViaRest.json') {define('BITRIXREST_URL', ':8077');}`\ где вместо **`:8077`** введите внутренний адрес вашего сервера с установленным модулем интеграции. Если не использовать код указанный выше, то на сервере Asterisk должны быть разрешены входящие запросы с адреса `https://oauth.bitrix.info`