Перейти до

Записи звонков Asterisk


Рекомендованные сообщения

Здравствуйте. Появилась потребность в подключении Asterisk к UBilling с возможностью записи разговоров.

Данный функционал(со стороны Asterisk) выполнил через MixMonitor.

exten => _XXX,1,MixMonitor(/var/records/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav)

Сделал базу CDR, привязал к UBilling'у, но вот прослушать/скачать записи не получается.
Хочется понять в каком формате(имя и расширение) сохранять, чтобы он мог их прочитать.
P.S. В alter.ini аргументы ASTERISK_ENABLED=1, ASTERISK_CALLRECS_PATH=<папка>(права есть, группы назначены).

2021-02-08_21-23.png

Ссылка на сообщение
Поделиться на других сайтах

Если есть возможность можете связать их через  поле filename в астере это допиливается легко 
или использовать готовый инструмент  http://prog-it.github.io/Asterisk-CDR-Viewer-Mod/ 

Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
9 минут назад, bos сказал:

Если есть возможность можете связать их через  поле filename в астере это допиливается легко 
или использовать готовый инструмент  http://prog-it.github.io/Asterisk-CDR-Viewer-Mod/ 

 

 

CDR Viewer Mod - это весьма заманчиво. Ранее рассматривал этот вариант. Оставил, как запасной) Есть ведь встроенная функция в UBilling, поэтому хочется воспользоваться ею.
Про поле filename, правильно ли понимаю, что при вызове, вместе с записью, добавляется запись в таблицу, где указано полученное имя?
Что-то вроде:

exten => 100,1,Set(filename="...")

 

Відредаговано progxaker
Ссылка на сообщение
Поделиться на других сайтах

в зависимости от версии астера, начиная, по-моему, с 13го:
1) same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav);

2)  нужно создать такое поле  в самой таблице ))
3*)   иногда, если вы пишите через cdr_adaptive_odbc в разделе  добавить алиасов) 

table=cdr

alias start => calldate

alias filename => filename

  • Thanks 1
Ссылка на сообщение
Поделиться на других сайтах
22 минуты назад, bos сказал:

в зависимости от версии астера, начиная, по-моему, с 13го:
1) same => n,Set(CDR(filename)=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}_${CALLERID(num)}_${CALLERID(dnid)}.wav);

2)  нужно создать такое поле  в самой таблице ))
3*)   иногда, если вы пишите через cdr_adaptive_odbc в разделе  добавить алиасов) 

table=cdr

alias start => calldate

alias filename => filename


Спасибо тебе добрый человек)
Сегодня попробую, но думаю проблем не возникнет.

Ссылка на сообщение
Поделиться на других сайтах

К сожалению без проблем не обошлось)

Запись разговора есть, запись в БД есть, но UBilling продолжает игнорировать файл.
Выставлял и 777, и запись менял(с .wav и без), однако не помогло.

2021-02-09_16-27.png

Ссылка на сообщение
Поделиться на других сайтах

1) посмотрите код веб страницы которую вы используете для просмотра в ubilling, думаю вопрос в том что при выборке он ищет определенный столбец  где находится имя записи
2) как я вижу еще может тянутся название с СEL(но опять таки нужно понимать какое поле используется) что-то мне подсказывает что ориентироваться ubilling хочет на UNIQUEID
но без исходного кода страницы сказать что либо сложно

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, progxaker сказав:

и запись менял(с .wav и без)

ASTERISK_CALLRECS_FORMAT

 

1 час назад, progxaker сказав:

запись в БД есть, но

ASTERISK_CALLRECS_CEL_TAB_NAME

 

И вообще это все скорее вопросы к Pautiina.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, bos сказал:

1) посмотрите код веб страницы которую вы используете для просмотра в ubilling, думаю вопрос в том что при выборке он ищет определенный столбец  где находится имя записи
2) как я вижу еще может тянутся название с СEL(но опять таки нужно понимать какое поле используется) что-то мне подсказывает что ориентироваться ubilling хочет на UNIQUEID
но без исходного кода страницы сказать что либо сложно

 

2 часа назад, nightfly сказал:

ASTERISK_CALLRECS_FORMAT

 

ASTERISK_CALLRECS_CEL_TAB_NAME

 

И вообще это все скорее вопросы к Pautiina.

 

Насчёт CEL думал, но это уже более подробная таблица, и в документации указано что "ASTERISK_CALLRECS_CEL_TAB_NAME" необязательна(т.е. и так работать может). Про "ASTERISK_CALLRECS_FORMAT" в самом конфиге прописано, что "можете оставить пустым и тогда буду смотреть все файлы", но попробую снова.
Про исходный код, вроде PHP и JS не шифровал, но когда сам разбирал ногу сломал, вот и пришёл лечиться)

Ссылка на сообщение
Поделиться на других сайтах

я в пхп не очень силен, может поправите, но селект идет к cel
https://github.com/nightflyza/Ubilling/blob/887dc31198f1b402bbf800806da1ce4be763affc/api/libs/api.asterisk.php#L842

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, bos сказал:

я в пхп не очень силен, может поправите, но селект идет к cel
https://github.com/nightflyza/Ubilling/blob/887dc31198f1b402bbf800806da1ce4be763affc/api/libs/api.asterisk.php#L842

 

Пытался разобраться в коде, и запутался.
 

if (!empty($this->recordingsPath)) {
	if (isset($each['app_data']) and in_array($each['app_data'], $allVoiceFiles)) {
		$fileUrl = self::URL_ME . '&astercallrecs=' . urlencode($each['app_data']);
		$data[] = $this->getSoundcontrols($fileUrl);
	} elseif (isset($each['recordingfile']) and in_array($each['recordingfile'], $allVoiceFiles)) {
		$fileUrl = self::URL_ME . '&astercallrecs=' . urlencode($each['recordingfile']);
		$data[] = $this->getSoundcontrols($fileUrl);
	} else {
		$data[] = '';
	}
}

 

recordingPath у меня есть, значит выясняем allVoiceFiles. В нём записывает ответ getCallsDir, но вот что ему пихать и что получается на выходе - загадка)

Ссылка на сообщение
Поделиться на других сайтах

http://ubilling.net.ua/api_doc/classes/Asterisk.html#source-view
есть еще такой документ) и как вариант все же назвать имя файла ${UNIQUEID} и подключить CEL - о чем написано в святом писании документации 

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, bos сказал:

http://ubilling.net.ua/api_doc/classes/Asterisk.html#source-view
есть еще такой документ) и как вариант все же назвать имя файла ${UNIQUEID} и подключить CEL - о чем написано в святом писании документации 

 

Хех. Похоже, что придётся) О результатах отпишусь завтра. Или сегодня, если просто ${UNIQUEID} зайдёт)

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, nightfly сказал:

Посмотрел одним глазом. Там по неизвестной мне причине, используется флэшовый плеер. Так, что все тлен.

 

 

Ха-ха) Переходим на китайскую поделку?) Если серьёзно, то что же, придётся использовать CDR Viewer.

Вам спасибо за потраченое время. Может позже кто заменит на HTML5)

Ссылка на сообщение
Поделиться на других сайтах
годину тому, progxaker сказав:

Может позже кто заменит на HTML5)

Я у себя сегодня, уже быстренько все мигрировал на html5 audio :P

Причем оно сложноее, так как пришлось еще на лету конвертировать gsm в OGG чтобы оно игралось в браузере. С голым астериском все должно быть радикально проще.

spacer.png

 

пинайте Pautiina либо bobr-kun - всякое про астериск, это их психоделическое творчество.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, nightfly сказал:

Я у себя сегодня, уже быстренько все мигрировал на html5 audio :P

Причем оно сложноее, так как пришлось еще на лету конвертировать gsm в OGG чтобы оно игралось в браузере. С голым астериском все должно быть радикально проще.

spacer.png

 

пинайте Pautiina либо bobr-kun - всякое про астериск, это их психоделическое творчество.


Хм-м) Окей, буду пинать)

Ссылка на сообщение
Поделиться на других сайтах
  • 3 weeks later...
Опубліковано: (відредаговано)

Разобравшись в коде(две недели назад, хех), узнал то, что было необходимо - в каком формате необходимо подавать записи БД. На самом деле в любом, главное, чтобы столбец с названием файла назывался app_data или recordingfile. Дабы не пересоздавать базу, добавил в else изменённую запись.

if (!empty($this->recordingsPath)) {
    if (isset($each['app_data']) and in_array($each['app_data'], $allVoiceFiles)) {
        $fileUrl = self::URL_ME . '&astercallrecs=' . urlencode($each['app_data']);
        $data[] = $this->getSoundcontrols($fileUrl);
    } elseif (isset($each['recordingfile']) and in_array($each['recordingfile'], $allVoiceFiles)) {
        $fileUrl = self::URL_ME . '&astercallrecs=' . urlencode($each['recordingfile']);
        $data[] = $this->getSoundcontrols($fileUrl);
    } elseif (isset($each['filename']) and in_array($each['filename'], $allVoiceFiles)) {
        // То, что в each - это название столбца, в моём случае у меня всё было в filename
        $fileUrl = self::URL_ME . '&astercallrecs=' . urlencode($each['filename']);
        $data[] = $this->getSoundcontrols($fileUrl, urlencode($each['filename']));
    } else {
        $data[] = '';
    }
}


Дальше проблемы с плеером. У меня версия UBilling 1.0.6(не обновлял, потому что на тестовом стенде, хех), поэтому он не работает(может сейчас работает в новых версиях). Переписал на HTML5:
 

protected function getSoundcontrols($fileUrl, $filename) {
    $result = '';
    if (!empty($fileUrl)) {
        $playableUrl = $fileUrl . '&playable=true';
        $playerId = 'player_' . wf_InputId();
        $playControlId = 'controller_' . wf_InputId();
        if($filename != "" && file_exists($this->recordingsPath . $filename))
            $result .= wf_tag('audio', false, '', 'controls="" id="' . $playerId . '" preload="none" style="width:
 200px;"') . wf_tag('source', false, '', 'src="' . $playableUrl . '" type="audio/wav"') . wf_tag('audio', true);
    }
}


Можно ещё дописать проверку на то, указано ли расширение в alter.ini и другие аспекты, но думаю этим уже займутся сопровождающие.

Итого:
image.png.fee5426783b063255bf9822c28e63661.png

Відредаговано progxaker
Ссылка на сообщение
Поделиться на других сайтах
Опубліковано: (відредаговано)
5 минут назад, Ромка сказал:

2021-02-26_17-26.thumb.png.4ae1c417fefc55a8b18ade42d44673d6.png

Модуль Askozia монитор ... А топик называет "... Asterisk"... Хотя да, мне известно, что теперь используется одна функция для воспроизведения записей, но для понимания кода, оставил здесь своё решение. Да и в документацию неплохо бы добавить, что необходимо писать имена файлов в ранее указанные столбцы, а то не все шарят в PHP)

Відредаговано progxaker
Ссылка на сообщение
Поделиться на других сайтах
  • 2 months later...

Сегодня добавлен pull request от @bobr-kun. Как только примут в основную ветку, посмотрю и отпишусь, а после можно и тему закрывать.

Ссылка на сообщение
Поделиться на других сайтах

@nightfly "поклеил, как есть", а сам не дожидаясь, проверил у себя. Можно было не 300px, 285, потому что при диагонали 4:3 и "лупы" 80% есть небольшой отступ, но это лишь детали. Основной вопрос закрыт, тему можно закрывать.

Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, progxaker сказав:

потому что при диагонали 4:3

spacer.png

 

Только вчера мне втирали, что при разрешении 800*600 на ЭЛТ мониторе интерфейс не достаточно контрастно выглядит и не всюду помещается. Пощадите.

ЗЫ и да, я знаю что с аксессибилити в контексте экранных ридеров тоже пизец полный. А еще есть протанопия, дейтеранопия, тританопия etc...

Відредаговано nightfly
  • Haha 2
Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

  • Схожий контент

    • Від camchatix
      Добрий день,
      створили запасний NAS із зайвою хромосомою, все працює але коли треба вбити сесію користувача - то у списку NAS серверів лише один (той що основний)
      переназначити швидкість теж не можу
      я так розумію пакети CoA Disconnect, CoA connect, PoD - ідуть на IP адресу старого NAS ?
    • Від grach_witch_cheese
      Вітаю, колеги!
      Маю наступну схему:
      DHCP-сервер: Accel-PPP (IPoE) DHCP-Relay: MikroTik RADIUS: Запущений безпосередньо на сервері uBilling Зараз авторизація абонентів здійснюється за MAC-адресою, але планується перехід на авторизацію через Option 82.
      У документації uBilling наведені приклади конфігурацій, коли DHCP-сервер працює локально (на самому uBilling) і містить відповідні шаблони для обробки Option 82.
      Однак немає чіткої інформації про використання Option 82 при віддаленому DHCP-сервері, зокрема, коли Accel-PPP використовується як DHCP-сервер у режимі remote та налаштований через Купаген.
      Питання:
      Чи можливо використовувати Accel-PPP як віддалений DHCP-сервер з авторизацією через Option 82? Якщо так, то де відбувається парсинг значень Remote-ID і Circuit-ID? Де в цьому випадку мають зберігатися шаблони для Option 82? Буду вдячний за роз'яснення або посилання на відповідні приклади.
    • Від nightfly
      Ubilling 1.5.2 rev 9302 Book of Endings
       
      Зміни в структурі БД. alter.ini: нова опція FASTPROFITCALC_ENABLED, що вмикає швидкий підрахунок прибутку. alter.ini: нова необов'язкова опція KARMA_IN_PROFILE що вмикає показ карми в профілі користувача. alter.ini: нова опція SWITCHES_AUTH_ENABLED, що вмикає довідник даних авторизації пристроїв. alter.ini: нова опція PON_SCRIPTS_ENABLED, що вмикає підтримку скриптів OLT в ПОНізаторі. alter.ini: нова опція PON_ONU_FDB_SELFFILTER, що вмикає фільтр MAC-ів при відображенні FDB за ONU. alter.ini: нова опція USERBYIP_ENABLED, що вмикає виклик userbyip в RemoteAPI. alter.ini: пачка нових опцій PB_FASTURL_*, що керують поведінкою модулю відсилання коротких посилань на оплату. Модуль PONizer: виправлена помилка зникнення PON інтерфейсів при опиті BDCOM GP3600 Модуль “Профіль користувача”: для опису плагінів профілю та оверлеїв на кшталт “чорної магії” тепер опційно можливо вказувати link_target. Модуль “Панель задач”: для опису елементів панелі задач, тепер опційно можна вказувати LINK_TARGET. Модуль Записи телефонних розмов: вирішено проблеми швидкодії, при перегляді списку записів дзвінків. Модуль “Записи телефонних розмов”: більше не призводить до вичерпання пам'яті процесу, при перегляді великих архівів дзвінків. Модуль “Записи телефонних розмов”: новий аудіо-плеєр для прослуховування записів з візуалізацією аудіо-хвилі. Модуль “Пошук оплат”: реалізовано можливість швиденького підрахунку прибутку по обраних чекбоксами платежах. Модуль УКВ: реалізовано можливість швиденького підрахунку прибутку по обраних чекбоксами платежах. Модулі Мапа обладнання та користувачів: трішки вичищено код. Ліпше не стало. Модуль “Мапа будинків”: поле пошуку при розташуванні будинку, тепер попередньо заповнено локацією, при переході за посиланням “розташувати на мапі”. Модуль “Панель задач”: опція TB_QUICKSEARCH_INLINE змінила свою поведінку, та може тепер приймати значення 0|1|2. Модуль “Звіт по трафіку”: виправлено проблему відображення графіків OphanimFlow для NAS на роздільних здатностях менше ніж FullHD. Кабінет користувача: в модулі “Відеоспостереження” відображення попереднього перегляду каналів користувача, стало трішки притомнішим. Сховище зображень: трішки покращено поведінку форми завантаження. RemoteAPI: новий виклик onusigcompressor, що радикально стискає розпухаючі дані історії сигналів ONU. RemoteAPI: новий виклик pbxmonrefill, що оновлює кеш записів телефонних розмов. RemoteAPI: новий виклик userbyip, що повертає дані про користувача за його IP. OpenPayz: в бекенді та фронтенді platon виправлено проблему диких заокруглень, при вказанні зовнішньої комісії.  
      Повний чейнджлог
      Оновлена демка
       

    • Від TELESTAT
      Автоматизація Call-центру | UserSide, Abills, Ubilling та іншими | IP-АТС ТЕЛЕСТАТ – для Інтернет-провайдерів



       

      IP-АТС ТЕЛЕСТАТ — це ваш надійний партнер у сфері IP-телефонії, що забезпечує ефективну роботу кол-центру та високий рівень обслуговування клієнтів.
      Ми не просто пропонуємо готове рішення, ми створюємо те, що вам потрібно.
      Додаткові модулі, функціонал, звіти — усе для того, щоб ваша телефонія відповідала викликам вашого бізнесу.
      Ви отримаєте інструмент, який буде працювати на вас.


      🟣  Інтеграція:
      Можливість інтеграції з білінг-системами або CRM\ERP, зокрема з UserSide, Abills, Ubilling, OneBox та іншими.
      Інтеграція відбувається за допомогою API (зовнішньої системи), та дозволяє створити злагоджену екосистему для бізнесу.
       
      📦  Приклади інтеграції:
      ~~~~~~~~~~~~~~~
      ✅  Інтелектуальна маршрутизація дзвінків – автоматичне перенаправлення на IVR або черги в залежності від типу клієнта (новий, існуючий, VIP) та часу доби.
      ✅  Автоматичне інформування – миттєве повідомлення про аварії чи інші важливі події.
      ✅  Самообслуговування через IVR – перевірка статусу послуг чи балансу, керування послугами та інші автоматизації.
      ✅  Гнучке керування послугами – активація, пауза, кредитування за запитом клієнта.
      ✅  Відображення даних клієнта – ім’я, адреса чи логін відображаються при вхідному дзвінку та в журналі дзвінків, що полегшує роботу операторів.
       

      🟣  Інтеграція з AI:
      Інтеграція з Google Text2Voice та, опційно, з 🤖 OpenAI Whisper чи іншими сервісами для роботи з аудіо, текстом та даними, виводячи якість обслуговування на новий рівень.

      🟣  Інтеграція з Telegram, TurboSMS, поштою, веб-сайтом:
      Автоматизовані повідомлення про пропущені дзвінки та голосові. Надсилання SMS клієнтам. Кнопка на вашому веб-сайті значно покращить комунікацію з клієнтами.

      🟣 Власний API:
      Наявність доступу до API дозволяє працювати із ТЕЛЕСТАТ більш гнучко та створювати додаткові інтеграції.


       
      ℹ️  Також ви отримаєте з ТЕЛЕСТАТ:
      ~~~~~~~~~~~~~~~
      ➕ Зменшення кількості пропущених дзвінків;
      ➕ Швидка реакція операторів на всі запити;
      ➕ Повна автоматизація ключових процесів;
      ➕ Детальні звіти для аналізу;
      ➕ Інструменти оцінювання роботи операторів;
      ➕ Інформація про дзвінки в реальному часі — більше жодної невизначеності;



      📩  Дізнайтесь більше або замовте консультацію вже зараз:
      👉 Телефон: +38 044 227-8-278
      👉 Телефон: +38 067 508-1-100
      👉 E-mail:     sales@telestat.biz
      👉 Вебсайт:  telestat.biz

      📲  Telegram:
      Напишіть нам!

      📎  Презентація:
      Завантажити презентацію!


      🚀  Оптимізуйте свій кол-центр разом з IP-АТС ТЕЛЕСТАТ!
       
    • Від ppv
      Після оновлення до 1.5.1 не відображаються сигнали на
      OLT BDCOM P3310B (Device version10.1.0B)

      та
      P3608-2TE (Firmware Version10.1.0E). 

      3310C та P3608B ніяких проблем немає, знімає все добре. 
      З GPON3600-8 все зрозуміло будуть виправлення в Ubilling: 1.5.2.
       
      Може в когось було щось подібне? Хочу знати куди копати.
×
×
  • Створити нове...