...

Идентификатор звонка в ELMA для Asterisk

Тема в разделе "Вопросы по функционалу", создана пользователем a.zahlebin, 15 июн 2018.

Метки:
  1. a.zahlebin

    a.zahlebin New Member

    Добрый день!

    ELMA интегрирована с Asterisk (FreePBX). Возникла необходимость в карточке взаимоотношения отобразить статус вызова (был номер занят, недоступен, или звонок состоялся), длительность звонка и ссылку на запись разговора. Все это можно вытянуть из Asterisk с помощью Asterisk AMI. Но как идентифицировать звонок из ELMA? Может, кто-нибудь знает, хранит ли ELMA какой-либо идентификатор, чтобы обратиться к Asterisk и отыскать звонок в общей массе звонков? Или может быть есть какие-то методы в самой ELMA? Описания пространств EleWise.ELMA.CRM.Telephony, EleWise.ELMA.IntegrationAsterisk, сожалению, в документации нет.
     
  2. akarimov

    akarimov Member

    у объекта звонок ELMA есть специальное UniqueId в которое можно вносить этот идентификатор из Астериск. По умолчанию насколько мне известно не заполняется.
     
  3. akarimov

    akarimov Member

    у объекта звонок ELMA есть специальное UniqueId в которое можно вносить этот идентификатор из Астериск. По умолчанию насколько мне известно не заполняется.
     
  4. a.zahlebin

    a.zahlebin New Member

    Спасибо за ответ! Да, это поле я видел, но как его заполнить? В Asteriske каждый звонок имеет поле уникальное поле с тем же именем - UniqueId. Промониторил ответ от Asterisk при наборе номера (вызов Originate): сервер возвращает этот UniqueId в ответе OriginateResponse (то есть, ответом на Originate). Вопрос: как Элмой принять этот ответ и записать поле в UniqueId объекта "Звонок" Элмы? Я так понимаю, поле по умолчанию не заполняется? Как тогда отключить это "умолчание"?
     
  5. akarimov

    akarimov Member

    Зависит от того как вы эти звонки создаете. В моем случае было достаточно залезть в cdr Астериска и забрать необходимые данные. Про отключение умолчания не совсем понял, настроить поведение Элмы настройками не получится, пока все что приходит на ум, это в объект звонок поставить обработчик записи (искать в базе знаний OnPostInsert) и в нем сразу после звонка получать необходимые данные пользуясь Asterisk API или залезая в БД как это делал я.
     
  6. a.zahlebin

    a.zahlebin New Member

    Добрый день! Спасибо большое. Звонок создается на стороне ELMA стандартными средствами.

    Видимо, так и придется делать. Поделитесь, каким образом Вы реализовали поиск в CDR именно "нужного" звонка. На что ориентировались? Время создания звонка в ELMA и время записи в CDR отличаются на несколько секунд. Вы искали ближайший к времени звонка, совпадающий по исходящему и набираемому номеру? Или как-то иначе? Прошу, поделитесь опытом! Заранее благодарю!
     
  7. akarimov

    akarimov Member

    Добрый.
    В моем конкретном случае был немного другой кейс, мне было достаточно с нуля записать все звонки в ELMA за период, поэтому я тупо брал CDR за период, на всякий искал записан ли уже такой звонок, если нет - создавал запись. Поскольку стандартными средствами ELMA создание звонков было отключено, ничего искать не нужно было (только контролировать дубли именно в этом мне помогал UniqueId)
    Первое что приходит в голову это да искать ближайший к времени совпадающий по А/В номерам, но решение еще зависит от задачи, уточните зачем вам вообще это нужно?
     
  8. a.zahlebin

    a.zahlebin New Member

    Задача следующая: руководство хочет видеть в истории взаимоотношений в ELMA CRM+ не только информацию о закрытом звонке, но и факт того, что он действительно состоялся, а также прослушать его запись прямо из карточки взаимоотношения. У менеджеров план по количеству результативных звонков. Если бы в карточке для исходящего звонка заполнялся UniqueID, по нему без труда нашли бы нужный в CDR.
     
  9. akarimov

    akarimov Member

    Ну в таком случае скорее всего оперативность "сразу" не требуется, можно раз в сутки обходить все звонки из CDR - создавать нехватающие (звонили не через карточку) и обновлять существующие, принцип сопоставления тот что вы описали (в принципе не так уж и важно сопоставить правильно, главное чтобы все звонки конкретному контрагенту присутствовали в карточке)
    А вот по выдергиванию записи интересно как реализуете, взаимодействие с линукс системами из ELMA приходилось делать, но не сказал бы что это было "без труда".
     
  10. a.zahlebin

    a.zahlebin New Member

    Добрый день!

    В общем, пока задача решилась так: отлавливаем событие добавления/закрытия взаимоотношения "Звонок", коннектимся к БД CDR Астериска и достаем оттуда ближайший по времени звонок с номера пользователя, авторизованного в текущий момент. Заполняем соответствующие поля в карточке взаимоотношения. Решение не самое красивое.

    Все же, поизучав внутренности, видим, что в момент звонка ЭЛМА, видимо, вызывает как-то метод EleWise.ELMA.IntegrationAsterisk.Managers.AsteriskManager.MakeCall.

    Этот метод, в конечном итоге, вызывает OriginateAction() из библиотеки AsterNET. Результатом работы метода является AsterNET.Manager.Response.ManagerResponse, содержащий поля, в которые записывается результат выполнения действия OriginateAction. В том чисте и искомый нами UniqueID.

    Вопрос: ELMA получает эти данные из ManagerResponse? Как забрать от туда UniqueID?
     
  11. akarimov

    akarimov Member

    MakeCall возвращает объект типа AsterNET.Manager.Response.ManagerResponse
    Судя по всему этот Id даже обрабатывается программой - в классе EleWise.ELMA.IntegrationAsterisk.Model.DialModel есть это поле, почему не пишется в базу неясно.
    На вторую часть вашего вопроса ответ очевидно - обратиться в техподдержку ELMA чтобы сделали запись uniqueId в соотв. поле звонка.
    А расскажите в порядке обмена опытом как решили задачу получения записи звонка из Asterisk по UniqueId
     
  12. a.zahlebin

    a.zahlebin New Member

    Спасибо за интерес к данной теме! Пока готово только отображение информации по звонку. Как только сделаем вывод записи (если получится, конечно :)), то дам знать. И еще вопрос: как передать в сценарий набранный по кнопке "позвонить" номер?
     
  13. arkarimov

    arkarimov Member

    Тема интересная, сам много делал в плане интеграции с Asterisk, самым востребованным у сотрудников оказалась мелочь - автоинформатор который за 2 минуты до совещания обзванивает участников совещания, и говорит им железным голосом что им назначено совещание. В разы улучшилась дисциплина совещаний.
    Сложный вопрос, скрещивать js +c# это дорога к костылям в ELMA, с чем связан такой вопрос? Можете описать ситуацию в которой это необходимо?
     
  14. a.zahlebin

    a.zahlebin New Member

    Необходимо это вот для чего. Нужно узнать номер набранного телефона, чтобы поиск по БД Asterisk был однозначный. Сейчас мы ищем ближайшую по времени звонка запись только по номеру, с которого совершен звонок. Номер, который набирали, не ясно, как получить в обработчике события. Вообще, история звонков в ELMA (таблица CallHistory), к сожалению, никак не связана с таблицей взаимоотношений. Быть может, возможно узнать хотя бы, из какого объекта было создано новое взаимоотношение (то есть, отследить "родителя" события, которое обрабатываем?
     
  15. akarimov

    akarimov Member

    Действительно не пишется в объект номер набранного телефона, явного прописания объекта родителя также нет, но есть ряд полей которые заполняются, и исходя из которых можно судить о родителе (по наличию/отсутствию данных) это Lead,Sale,Contact,Contractor
    В принципе можно выдернуть телефоны связанные со всеми этими объектами и ограничить поиск ими.
     

Поделиться: