Jump to content

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


Recommended Posts

Здравствуйте. Появилась потребность в подключении 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

Link to post
Share on other sites
9 минут назад, bos сказал:

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

 

 

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

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

 

Edited by progxaker
Link to post
Share on other sites

в зависимости от версии астера, начиная, по-моему, с 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
Link to post
Share on other sites
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


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

Link to post
Share on other sites

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

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

2021-02-09_16-27.png

Link to post
Share on other sites

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

Link to post
Share on other sites
1 час назад, progxaker сказав:

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

ASTERISK_CALLRECS_FORMAT

 

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

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

ASTERISK_CALLRECS_CEL_TAB_NAME

 

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

Link to post
Share on other sites
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 не шифровал, но когда сам разбирал ногу сломал, вот и пришёл лечиться)

Link to post
Share on other sites
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, но вот что ему пихать и что получается на выходе - загадка)

Link to post
Share on other sites
2 часа назад, bos сказал:

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

 

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

Link to post
Share on other sites
2 часа назад, nightfly сказал:

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

 

 

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

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

Link to post
Share on other sites
годину тому, progxaker сказав:

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

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

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

spacer.png

 

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

Link to post
Share on other sites
2 часа назад, nightfly сказал:

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

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

spacer.png

 

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


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

Link to post
Share on other sites
  • 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

Edited by progxaker
Link to post
Share on other sites
5 минут назад, Ромка сказал:

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

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

Edited by progxaker
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By nightfly
      Ой, кажись уже следующий год начался, а релиза еще небыло. Вы заметили? Да? Вот, тогда получите, распишитесь - стабильный релиз Ubilling 1.1.4 rev 7876 Bringer of Conflict.
       
      Коротко о изменениях:
      Изменения в структуре БД. см. дамп. alter.ini: новая опция PT_MAXDAY управляющая максимальным днем тарификации Мощных тарифов. alter.ini: новая опция PT_CHARGEONREG управляющая флагом начисления АП при обнаружении нового пользователя на «мощном тарифе». alter.ini: новая необязательная опция ROS_NAS_PPPOE_SESSION_INFO_IN_PROFLE регулирующая отображения состояния PPPoE подключения юзера для Mikrotik NAS. alter.ini: новая необязательная опция STICKY_NOTES_NOPREVIEW отключающая превью личных заметок при отображении списком. alter.ini: новая необязательная опция PON_OLT_UPTIME_IN_PROFILE включающая отображение аптайма OLT в профиле пользователя. alter.ini: новая необязательная опция PON_REALTIME_SIGNAL_IN_PROFILE включающая отображение сигнала ONU в профиле пользователя в режиме «realtime». Может существенно замедлять загрузку профиля юзера. alter.ini: новая необязательная опция PON_REALTIME_EXTEN_INFO_IN_PROFILE включающая отображение дополнительной информации по ONU в профиле пользователя в режиме «realtime». Может существенно замедлять загрузку профиля юзера. alter.ini: новая опция DSTAT_ENABLED управляющая включением функционала «детальной статистики». Просто никогда ее не включайте. Мы предупредили. userstats.ini: новая, необязательная опция PAYMENTS_ONLYPOSITIVE включающая показ только платежей с суммой >0 в кабинете пользователя. Модуль Мощи тарифов: исправлена проблема «с постоянно наступающим первым числом». Но это не точно. Модуль «Планирование работ»: исправлено неадекватное поведение, при попытках устанавливать состояния несуществующим задачам. Модуль «Популярность тарифов»: теперь более адекватно определяет активность пользователей. Модуль Живи с этим: добавлена возможность не строгого поиска юзеров по наименованию тарифа. Модуль «Профиль пользователя»: добавлена возможность отображения состояния PPPoE подключения юзера для Mikrotik NAS. Работает через Mikrotik API. Модуль Служба ритуальных услуг: в отчете по подключениям больше не показывается график, в случае если ранее не происходило похорон. Модуль Зависть: теперь любому завистливому устройству, можно добавлять количество строк, которым будет произведен КУСЬ при сохранении в архив. Модуль TrinityTV: исправлена проблема при регистрации пользовательских устройств не имеющих MACа по коду. Модуль Склад: реализовано новое право WAREVIEW позволяющее вашим сотрудникам просматривать материалы израсходованные на их задачи. Модуль УКВ: исправлена проблема с NaN вместо пустого АРПУ в финансовом отчете на системах с PHP 7.4. Модуль Видеонаблюдение: для DVR-ов добавлено поле кастомного URL предварительного просмотра. Модуль ПОНизатор: теперь умеет отображать много разных интересных штук, включая температуры и аптаймы для OLT C-Data/Stels 11xx (firmware >= 2.4.06) и V-Solution 1600D. Модуль «Профиль пользователя»: теперь может отображать много дополнительной инфы для PON-юзеров. Отображение регулируется опциями: PON_OLT_UPTIME_IN_PROFILE, PON_REALTIME_SIGNAL_IN_PROFILE, PON_REALTIME_EXTEN_INFO_IN_PROFILE. Модуль История СМС сообщений: добавлено отображение адреса рядом с логином пользователя для улучшения визуального восприятия и читабельности. Модуль «Консоль разработчика»: добавлена возможность отображения результата SQL-запроса в виде таблицы с полями. Новый модуль «Поиск по складу»: находится в «черной магии» и помогает найти все расходные операции совершенные вокруг конкретного пользователя. Модуль «Профиль пользователя»: теперь плагины профиля, из «черной магии» могут прятаться в зависимости от прав пользователя. Модуль «Персональные заметки и напоминания»: откровения теперь также могут быть запланированы на конкретный день недели. Модуль Askozia монитор: прослушивание из браузера в силу окончания поддержки Adobe Flash Player, переехало на HTML5 Audio. Модуль «Askozia монитор»: добавлена возможность скачивания записей звонков в MP3 и OGG. Модуль «Планирование работ»: улучшен контроль доступа к задачам репрессированных пользователей. Модуль «Живи с этим»: исправлена проблема расчлененных пользователей при создании задач с поиском по городу. Кабинет пользователя: модуль «Видеонаблюдение» теперь также показывает суммарную стоимость услуги. Авторизация абонентов DHCP на MikroTik методом IP + MAC при помощи КучаГен: решительные и кардинальные изменения в скриптах для получения графиков по статистике трафика абонента с Mikrotik. RemoteAPI: вызов asterisk теперь принимает новый параметр getcontragentdata возвращающий данные связанного контрагента для определенного пользователя. UbillingTelegram: добавлена обертка для отсылки ботом клавиатур.  
      Возможно важные ссылочки:
      Вот тут полный чейнджлог. А это рекомендации к обновлению, если их кто-то еще читает. знаете... обновленную демку могли бы и сами найти.  

    • By Nejron
      Дано: 
      сервер Dell PowerEdge R710
      проц 2* Intel Xeon E5620 
      оператива 2* 8Gb
      сетевая 4-портовая broadcom NetXtreme II BCM5709
      На железе стоит VMware ESXi 5.1.0
      в нутри крутится виртуалка с FreeBSD 12.2
      на которой работает билинг интернет провайдера "Ubilling: 1.1.3 rev 7831"
      один выход сетевухи смотрит на абонов, второй в инет
      входящий канал инета 1гигабит, 
      при трафике в +/- 800Mb 2 ядра проца загружаются в 100% и прокачать больше трафика биллинг не может
      нагрузка по обработке очередей сетевых карт висит на 2 ядрах  kernel {if_io_tqg_5} и kernel {if_io_tqg_7},
      остальные ядра проца по большей части простаивают.
      Кто что посоветует в решении данной проблемки ? 
      Как можно размазать нагрузку между ядрами? 
    • By nikollas
      Добрый день. В наличии PPPoE сервера, MPD5 + pf, FreeBSD 9.1. Оптическая сетевая 10G, многопоточная. Развернул для этих же целей FreeBSD 11.4 и столкнулся с проблемой разброса прерываний по ядрам проца.
      На 9-ке можно без проблем руками раскидывать прерывания командой "cpuset -l ядро -x № прерывания". Получается картина
       
      procstat -at | grep irq
       
      intr             irq264: ix0:que    0    8 wait    -         
      intr             irq265: ix0:que    3    8 wait    -         
      intr             irq266: ix0:que    2    8 wait    -         
      intr             irq267: ix0:que    3    8 wait    -         
      intr             irq268: ix0:link   0    8 wait    -         
      intr             irq269: ix1:que    2    8 wait    -         
      intr             irq270: ix1:que    3    8 wait    -         
      intr             irq271: ix1:que    1    8 wait    -         
      intr             irq272: ix1:que    1    8 wait    -         
      intr             irq273: ix1:link   3    8 wait    -         
       
      На 11-ке раскидать руками ОС не дает, это делается автоматом и большая часть нагрузки уходит на 1-й проц, на остальных нагрузки получается раза в 2-3 меньше. 
       
      procstat -at | grep irq

      intr                irq259: ix0:q0        0    8 run     -         
      intr                irq260: ix0:q1       -1    8 wait    -         
      intr                irq261: ix0:q2       -1    8 wait    -         
      intr                irq262: ix0:q3       -1    8 wait    -         
      intr                irq263: ix0:q4       -1    8 wait    -         
      intr                irq264: ix0:q5       -1    8 wait    -         
      intr                irq265: ix0:link     -1    8 wait    -         
      intr                irq266: ix1:q0       -1    8 wait    -         
      intr                irq267: ix1:q1       -1    8 wait    -         
      intr                irq268: ix1:q2       -1    8 wait    -         
      intr                irq269: ix1:q3       -1    8 wait    -         
      intr                irq270: ix1:q4       -1    8 wait    -         
      intr                irq271: ix1:q5       -1    8 wait    -     
       
      vmstat -i
       
      irq259: ix0:q0                  26389637      10083
      irq260: ix0:q1                   1780629        680
      irq261: ix0:q2                   1864978        713
      irq262: ix0:q3                   5651474       2159
      irq263: ix0:q4                   2437979        931
      irq264: ix0:q5                   2519809        963
      irq265: ix0:link                       1          0
      irq266: ix1:q0                  16177017       6181
      irq267: ix1:q1                   2918329       1115
      irq268: ix1:q2                   2561989        979
      irq269: ix1:q3                   3170112       1211
      irq270: ix1:q4                   3907708       1493
      irq271: ix1:q5                   5857000       2238

      Просьба подсказать, можно ли что то подкрутить в настройках что бы можно было руками накидывать прерывания на ядра.
    • By a_n_h
      Всем доброго дня!
        Пните в нужном направлении - где можно отредактировать страницу:
      https://wiki.ubilling.net.ua/lib/exe/detail.php?id=sigreq2&media=sigreq2_front.png
    • By SerSkiner
      Доброго времени суток колеги!после долгого пинания Микротика в качестве НАС возникло желание попробовать Accel-ppp. В связи с этим такой вопрос может кто-то поделиться конфигами НАС для Юбиллинга(а еще если есть пример конфига)Настроить планирую роздачу адресов Асселем без QinQ.Заранее большое спасибо
×
×
  • Create New...