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

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

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

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

mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение mthawk »

switch, если подскажете решение, как ложить queue_log в базу данных (у меня posgresql) — буду очень признателен!
ded
Сообщения: 15623
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение 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.   
mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение mthawk »

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

Пока что единственное решение, что я вижу - в экстене 'h' по окончании работы Queue() запускать AGI, который получит среди прочих переменных окружения uniqueid звонка и потом по этому uniqueid открывать queue_log находить запись COMPLETECALLER / COMPLETEAGENT с данным uniqueid и брать данные из этой строки.
Но как по мне - на костылях....
mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение mthawk »

ded, так как же, даже с помощью стандартного приложения MySQl для астериск положить queue_log в базу??
не совсем понимаю....
mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение mthawk »

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

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

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

Через Manager API, например, можно получить информацию о звонках в очереди, но о том, кто уже соединен с оператором - нет.
ded
Сообщения: 15623
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение ded »

mthawk, Вам просто нужна панель.
Мы используем FOP2, switch - cвою разработку.
Там все ваши желания
- визуализированы,
- интерактивны.
mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение 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, что данный звонок более неактивен.

Опять же.. не очень прямо, но надеюсь заработает. Буду тестить. Отпишусь о результатах, если кто-то когда-то пойдет по моим граблям.
mthawk
Сообщения: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение mthawk »

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

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

Сообщение mthawk »

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

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

Сообщение ded »

То есть перефразируя - не могу получить значение COMPLETE пока статус UNCOMPLETE?
Кайф!
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH