Страница 2 из 3

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 13:03
mthawk
switch, если подскажете решение, как ложить queue_log в базу данных (у меня posgresql) — буду очень признателен!

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 13:13
ded
Не везёт вам!
Для PostgreSQL надо вероятно писать свой обработчик, который парсит queue.log и данные запихивает в базу.
Если был бы стандартный мускул, то есть аппликация

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

*CLI> core show application MYSQL 
*CLI> 
  -= Info about application 'MYSQL' =-                                                                                                            
                                                                                                                                                  
[Synopsis]                                                                                                                                        
Do several mySQLy things                                                                                                                          
                                                                                                                                                  
[Description]                                                                                                                                     
MYSQL():  Do several mySQLy things                                                                                                                
Syntax:                                                                                                                                           
  MYSQL(Set timeout <num>)                                                                                                                        
    Set the connection timeout, in seconds.                                                                                                       
  MYSQL(Connect connid dhhost dbuser dbpass dbname)                                                                                               
    Connects to a database.  Arguments contain standard MySQL parameters                                                                          
    passed to function mysql_real_connect.  Connection identifer returned                                                                         
    in ${connid}                                                                                                                                  
  MYSQL(Query resultid ${connid} query-string)                                                                                                    
    Executes standard MySQL query contained in query-string using established                                                                     
    connection identified by ${connid}. Result of query is stored in ${resultid}.                                                                 
  MYSQL(Nextresult resultid ${connid}                                                                                                             
    If last query returned more than one result set, it stores the next                                                                           
    result set in ${resultid}. It's useful with stored procedures                                                                                 
  MYSQL(Fetch fetchid ${resultid} var1 var2 ... varN)                                                                                             
    Fetches a single row from a result set contained in ${result_identifier}.                                                                     
    Assigns returned fields to ${var1} ... ${varn}.  ${fetchid} is set TRUE                                                                       
    if additional rows exist in result set.                                                                                                       
  MYSQL(Clear ${resultid})                                                                                                                        
    Frees memory and datastructures associated with result set.                                                                                   
  MYSQL(Disconnect ${connid})                                                                                                                     
    Disconnects from named connection to MySQL.                                                                                                   
  On exit, always returns 0. Sets MYSQL_STATUS to 0 on success and -1 on error.   

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 13:34
mthawk
SolarW мы говорим о разный вещах. Вы - об отчетах по уже совершившимся звонках.
А мне нужна информация о конкретном текущем звонке в очереди. Кто звонит, кому, сколько проговорил, почему завершился звонок.

Пока что единственное решение, что я вижу - в экстене 'h' по окончании работы Queue() запускать AGI, который получит среди прочих переменных окружения uniqueid звонка и потом по этому uniqueid открывать queue_log находить запись COMPLETECALLER / COMPLETEAGENT с данным uniqueid и брать данные из этой строки.
Но как по мне - на костылях....

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 13:37
mthawk
ded, так как же, даже с помощью стандартного приложения MySQl для астериск положить queue_log в базу??
не совсем понимаю....

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 14:07
mthawk
switch, задача - формировать в своей внутренней системе учета вызовов (postgresql), для которой уже давно есть интерфейс (раньше все работало через простой Dial), записи на каждый поступивший звонок вида "когда" - "кто" - "ответили или нет" - "сколько проговорил" "причина завершения звонка" - "ссылка на файл записанного разговора".

Раньше, по завершении работы Dial, DeadAGI собирал переменные окружения и вносил все в базу.
С переходом на queue возникла большая проблема со сбором этих данных.

Кроме того у операторов отображается информация о текущем входящем звонке (построено на SNMP опросе текущих активных звонков астера откуда доставался входящий звонок на номер оператора.) Я успел обратить внимание, что через show channels больше нельзя увидеть кому из операторов звонят.

Через Manager API, например, можно получить информацию о звонках в очереди, но о том, кто уже соединен с оператором - нет.

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 14:36
ded
mthawk, Вам просто нужна панель.
Мы используем FOP2, switch - cвою разработку.
Там все ваши желания
- визуализированы,
- интерактивны.

Re: После Queue диалплан не выполняется.

Добавлено: 01 окт 2010, 18:55
mthawk
switch, да. concise если быть точнее.
Звонок в queue в show channels выглядит следующим образом:

Вот зашел звонок в экстен с очередью :

H323/ip$A.B.C.D:38183/1573 ! default ! 456 ! 5 ! Up ! Queue ! testq|dtT||||testq.agi ! 100100 ! ! 3 ! 11 !H323/W.X.Y.Z-396320

Вот пошел на агента вызов
H323/W.X.Y.Z-396320 ! default ! 456 ! 1 ! Up ! AppQueue ! (Outgoing Line) ! 380933929174 ! ! 3 ! 6 ! H323/ip$A.B.C.D:38183/1573

В таком же точно виде снимается по SNMP. Как видно номера агента тут нет.

Из Manager API по команде QueueStatus достаются только звонки ожидающие соединения. Соединенный звонок уже не отдается.

Пока обдумываю такое своеобразное решение - запускаемый при соединении с агентом testq.agi заносит в таблицу связку MEMBERINTERFACE - uniqueid.
Из нее и можно получить кто в данный момент на линии с агентом, пока запись не обновится при наступлении COMPLETEAGENT / COMPLETECALLER, что данный звонок более неактивен.

Опять же.. не очень прямо, но надеюсь заработает. Буду тестить. Отпишусь о результатах, если кто-то когда-то пойдет по моим граблям.

Re: После Queue диалплан не выполняется.

Добавлено: 04 окт 2010, 10:38
mthawk
switch, да. У оператора, принимающего звонок есть web-интерфейс, на котором он видит номер звонящего ему.
Там же все завязано на внутреннюю базу данных абонентов по номеру телефона.
И очень важно, что бы с того момента как зазвенит телефон у каждого оператора и до того момента как оператор положит трубку на экране висела информация по звонящему ему номеру.
Повторюсь, сейчас это реализовано через snmp-опрос мибов, отвечающих за таблицу активных звонков.
Но с переходом на queue я пока не знаю как еще можно сделать, кроме того способа о котором я написал выше.

Re: После Queue диалплан не выполняется.

Добавлено: 05 окт 2010, 18:37
mthawk
И снова Всем хорошего настроения!
Вот такая возникла проблема. Событие COMPLETECALLER / COMPLETEAGENT не заносится в лог пока не завершатся все операторы в экстене 'h'
Т.е. на момент запуска AGI-скрипта из лога еще нечего брать.
Пробовал делать Hangup и SoftHangup ничего не помогает.
Что можно сделать?

Re: После Queue диалплан не выполняется.

Добавлено: 05 окт 2010, 19:15
ded
То есть перефразируя - не могу получить значение COMPLETE пока статус UNCOMPLETE?
Кайф!