ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы и их решения Asterisk как такового

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

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

Сообщение mthawk » 01 окт 2010, 13:03

switch, если подскажете решение, как ложить queue_log в базу данных (у меня posgresql) — буду очень признателен!
mthawk
 
Сообщений: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение ded » 01 окт 2010, 13:13

Не везёт вам!
Для 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.   
ded
 
Сообщений: 15824
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение mthawk » 01 окт 2010, 13:34

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

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

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

Сообщение mthawk » 01 окт 2010, 13:37

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

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

Сообщение mthawk » 01 окт 2010, 14:07

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

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

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

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

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

Сообщение ded » 01 окт 2010, 14:36

mthawk, Вам просто нужна панель.
Мы используем FOP2, switch - cвою разработку.
Там все ваши желания
- визуализированы,
- интерактивны.
ded
 
Сообщений: 15824
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение mthawk » 01 окт 2010, 18:55

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 » 04 окт 2010, 10:38

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

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

Сообщение mthawk » 05 окт 2010, 18:37

И снова Приветствую вас, коллеги.
Вот такая возникла проблема. Событие COMPLETECALLER / COMPLETEAGENT не заносится в лог пока не завершатся все операторы в экстене 'h'
Т.е. на момент запуска AGI-скрипта из лога еще нечего брать.
Пробовал делать Hangup и SoftHangup ничего не помогает.
Что можно сделать?
mthawk
 
Сообщений: 17
Зарегистрирован: 30 сен 2010, 16:53

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

Сообщение ded » 05 окт 2010, 19:15

То есть перефразируя - не могу получить значение COMPLETE пока статус UNCOMPLETE?
Кайф!
ded
 
Сообщений: 15824
Зарегистрирован: 26 авг 2010, 19:00

Пред.След.

Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH