VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Запись разговоров в очереди.

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Запись разговоров в очереди.

Сообщение rioakaanhell »

Asterisk 11.2-cert без надстроек ("рукописный")
Собственно проблема такая.

Есть очредь приема звонков:

Код: Выделить всё

same => n,Queue(sop,XxTtm,,,5,,testmonitor)
Очередь выглядит так:

Код: Выделить всё

[sop]
setinterfacevar=yes
joinempty=yes
leavewhenempty=no
maxlen=0
retry=5
strategy=ringall
timeout=600
wrapuptime=0

setinterfacevar=yes
setqueueentryvar=yes
setqueuevar=yes

member=Local/529@incoming-ivr/n
member=Local/504@incoming-ivr/n
member=Local/541@incoming-ivr/n
member=Local/363@incoming-ivr/n
member=Local/329@incoming-ivr/n
member=Local/513@incoming-ivr/n
member=Local/514@incoming-ivr/n
member=Local/367@incoming-ivr/n
member=Local/633@incoming-ivr/n
member=Local/609@incoming-ivr/n
member=Local/605@incoming-ivr/n
member=Local/681@incoming-ivr/n

В контексте incoming-ivr на текущий момент описана включение записи разговоров для каждого екстеншена. Т.е. в очереди около 20 мемебров, создается 20 звуковых файлов, 19 из которых пустые. В один, тот кто взял трубку пишется разговор. Т.к. запись с перекодированием файла из вав в мп3, то запусткается соотвественно 19 процессов перекодирования пустых файлов. Хоть и пустые, но ресурсы кушают. При 10-15 одновременных входах в эту очередь ЛА под 7-9 тысяч и сервер соответсвенно в даун.

Попробовал запускать макрос записи разговоров из очереди. Собственно в строке входа в очередь выше, он называется testmonitor.
Как бы все хорошо, макрос запускается, при поднятии агентом трубки и выполняется только для того, кто взял трубку.

Остается одно но. В макросе формируется имя файла и запускается MixMonitor с именем файла. Файл пишется, все хорошо.
В том же макросе через CDR(filename) запихивается имя файла в базу, по которому его потом ищет вебка статистики. Все это работает при обычном звонке ext-ext нормально. А вот из очереди оно не пишет эту строку в базу цдр. Т.е. статистика звонка есть, файл записи есть, а вот имени фала нет.

Как решить эту проблему?

Спасибо.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Запись разговоров в очереди.

Сообщение ded »

Можно было бы обсуждать, как минимум, имея код этого макроса записи разговоров перед глазами, не так ли?
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Запись разговоров в очереди.

Сообщение rioakaanhell »

Абсолютно с Вами согласен.

Код: Выделить всё

[macro-testmonitor]
exten => s,1,NoOp(Start Monitor)
same => n,Set(MON_FILE=${UNIQUEID}-${STRFTIME(${EPOCH},,%Y-%m-%d-%H_%M)}-${CALLERID(num)}-${CDR(dst)})
same => n,Set(MON_OPT=nice -n 19 /usr/bin/lame -b 32  --silent "${WAV}/${MON_FILE}.wav"  "${MP3}/${MON_FILE}.mp3" && rm -f "${WAV}/${MON_FILE}.wav" && chmod o+r "${MP3}/${MON_FILE}.mp3")
same => n,NoOp(Write into ${MON_FILE})
same => n,Set(CDR(filename)=${MON_FILE}.mp3);
same => n,MixMonitor(${WAV}/${MON_FILE}.wav,b,${MON_OPT})
same => n,NoOp()
Точно такое же скрипт на звонках exten -> exten только с проверкой в базе на разрешение писать/не писать работает на ура.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Запись разговоров в очереди.

Сообщение virus_net »

а сделать Noop на hangup`е (exten => h) и посмотреть значение переменной пробовалось ?
или включить вербоз и смотреть когда происходит вставка в CDR

asterisk cdr macro -> Setting CDR fields in “connected” macro -> Hangup Handlers
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Запись разговоров в очереди.

Сообщение rioakaanhell »

Огромное спасибо за Hangup Handlers. Будем раскуривать.
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Запись разговоров в очереди.

Сообщение rioakaanhell »

virus_net писал(а): или включить вербоз и смотреть когда происходит вставка в CDR
Какое значение verbose должно быть, что бы была видна вставка CDR после звонка?
Спасибо.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Запись разговоров в очереди.

Сообщение virus_net »

rioakaanhell, скажите вас забанили в гугле ? или не искать необходимую вам же информацию это ваша принципиальная позиция ?

http://forum.asterisk.ru/viewtopic.php? ... 3&start=30

Код: Выделить всё

CLI> core set debug 1 cdr_mysql.so

Код: Выделить всё

...
[Aug  8 08:07:52] DEBUG[67234]: cdr_mysql.c:339 mysql_log: SQL command as follows: INSERT INTO cdr (`calldate`,`clid`,`src`,`dst`,`dcontext`,................
...
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: Запись разговоров в очереди.

Сообщение Samael28 »

http://samael28.blogspot.com/2010/10/blog-post.html
Как раз очереди. Плюшки и самописные конфиги прилагаются.
Мой профайл на Upwork
rioakaanhell
Сообщения: 16
Зарегистрирован: 26 мар 2014, 17:35

Re: Запись разговоров в очереди.

Сообщение rioakaanhell »

virus_net, да дело в том, что не забанили, а то что нашел, не работает :(

cdr_mysql не использую, пишу через odbc. Сейчас на тестовой поставил дебаг всей системы. Но записи цдр все-равно нет.
Вот когда очередь отрабатывает, то запись в базу queue_log в дебаге есть:

Код: Выделить всё

root@testvoip:~# tailf /var/log/asterisk/full | grep res_config_odbc
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Skip: 0; SQL: INSERT INTO queue_log (time, callid, queuename, agent, event, data1, data2, data3, data4, data5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 1 ('time') = '2014-08-11 18:02:17.378818'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 2 ('callid') = '1407765732.112'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 3 ('queuename') = 'sop'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 4 ('agent') = 'NONE'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 5 ('event') = 'ENTERQUEUE'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 6 ('data1') = ''
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 7 ('data2') = '442'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 8 ('data3') = '1'
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 9 ('data4') = ''
[2014-08-11 18:02:17.379] DEBUG[9528][C-00000018] res_config_odbc.c: Parameter 10 ('data5') = ''
[2014-08-11 18:02:24.404] DEBUG[9528][C-00000018] res_config_odbc.c: Skip: 0; SQL: INSERT INTO queue_log (time, callid, queuename, agent, event, data1, data2, data3, data4, data5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

Такого типа, а вот логов записи цдр - нет. По этому и спросил как его увидеть-то?

Samael28, читал, познавательно, спасибо. Я так понимаю, Вы переименовываете файл просто в конце, так как Вам нужно?

У меня проблема в том, что имя файла генерится во время разговора (старт макроса), но в базу не записывается.
Сейчас уже вроде нагородил, что в екстеншене h имею уже название файла через внутреннюю базу используя как ключ имя канала. (Спасибо Samael28, Вашу идею использовал) Но остался вопрос с трансферами которые существуют в 90% случаев - агент принимает звонок из входящей очереди и переводи на специалиста. Тогда в макросе и конечный канал имеют разные имена и получение имени файла становится невозможным под данной схеме.
При этом задаю CDR(filename) и в завершении звонка вызывая NoOp(${CDR(filename)}) он мне показывает содержимое переменной, но в базе поле не заполняется. Как бы заявленно, что цдр без пробле пишет кастомные поля, лишь бы в базе такое было, но не хочет он писать.
Если объявить в cdr_managers.conf в мапингах filename => filename, то начинет писать поля, но дублируются записи, т.е. по одному звонку в таблице две идентичные записи, что тоже не очень хорошо.

В общем я уже сам запутался, что есть как оно работает и зачем это все..
Может пнете в нужном направлении? Мне не надо расписаного решения, мне просто задайте направление движения.
Задача в том, что надо писать звонки из очереди. Звонок пришел - зашел в очередь - агент взял трубку, запустилась запись разговора (как получить имя файла и запихнуть в базу) - звонок перевели (надо запихнуть имя файла в новую запись цдр уже для переведенного человека). Как-то так.
Спасибо.
Плюс
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Запись разговоров в очереди.

Сообщение ded »

Задача в том, что надо писать звонки из очереди. Звонок пришел - зашел в очередь - агент взял трубку, запустилась запись разговора (как получить имя файла и запихнуть в базу) - звонок перевели (надо запихнуть имя файла в новую запись цдр уже для переведенного человека).
Что такое CDR? Журнал свершившихся звонков.
Запись в базу CDR откладывается только после того, как вызов завершился, повесили трубку. Тогда заносятся данные кто звонил, кому, сколько длился разговор, и пр.
Как присваиваете имя файла, если файла ещё нет? Теоретически да, можно во временную переменную, ну и т.д.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH