Список форумов Asterisk Forum Asterisk Forum
The Asterisk Open Source PBX - Russian Community
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ПравилаПравила   ГруппыГруппы   ИзбранноеИзбранное    LinksСсылки   РегистрацияРегистрация 
 RSSRSS   ПрофильПрофиль   Войти и проверить личные сообщения   ВходВход 

Вызов из Queue нужного exten

 
Список форумов Asterisk Forum -> Asterisk-Dev    вывод темы на печать
Предыдущая тема :: Следующая тема  
Автор Сообщение
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 10:24    Заголовок сообщения: Вызов из Queue нужного exten

Вопрос следующий. Работает очередь, стратегия-rrmemory..
В ней регистрируется динамически агенты...
Возникла необходимость - постоянно при переводе звонка на следующий номер зареганный в очереди - проверять его балланс. Для этого мне необходимо - вызвать екстен, в котором будет произведена проверка баланса номера. Вопрос, как это сделать, может кто где ковырял(ет) исходники queue? Может быть я не увидел, в queue.conf для этого есть какие-либо настройки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
awsswa



Зарегистрирован:
28.04.2012
Сообщения: 1642
Откуда: Russia, Пермь

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 11:06    Заголовок сообщения:

сделайте агентов через Local
и будет вызов агентов через стандарные context прописанный в юзерах
там уже сделаете что необходимо - проверите баланс

вот написанное руками - через вебку также делается
http://awsswa.livejournal.com/26961.html

_________________
платный суппорт по мере возможностей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Skype Name
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 12:08    Заголовок сообщения:

Так не подходит, нужна именно динамическая регистрация (мобильных телефонов), происходит так:
AddQueueMember(queuetax,Dongle/dongle1/${CALLERID(num)})

удаление проиходит так:
RemoveQueueMember(queuetax,Dongle/dongle1/${EXTEN})

Если только файл queue.conf на лету менять, но потом надо reload делать, сомнительно получается...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
awsswa



Зарегистрирован:
28.04.2012
Сообщения: 1642
Откуда: Russia, Пермь

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 13:37    Заголовок сообщения:

По моему очередь тут совсем не причем
вам просто нужна проверка баланса на ваших USB модемах ?

это делается отдельным bash скриптом и поиском легко ищется

_________________
платный суппорт по мере возможностей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Skype Name
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 18:45    Заголовок сообщения:

Причем..
Вот ссылка на мой проектик. эти неразрешенные грабли из него
http://asteriskforum.ru/viewtopic.php?t=12845

Added after 3 hours 26 minutes:

Как я понял основной исходник Очереди, в исходниках Asterisk - это файл app_queue.c... Кто поскажет как и в какой функции исходника - корректно ввести свою функцию вызова диалплана, например, с помощью использования уникального аргумента в строке инициализации queue.
Прописав этот аргумент например, в строке очереди как - мой екстен и включив в config.conf - этот exten в который будет осуществлятся переход из очереди, для выполнения диалплана и последующего Return в точку вызова - с продолжением выполнения очереди..
Я немного знаю Си. Может кто подскажет, откуда лучше ковырять, исходник большой + заголовочные файлы...

Added after 45 minutes:

 awsswa @ Вс Окт 18, 2015 17:37 писал(а):
По моему очередь тут совсем не причем


Вот ссылка на выложенные конфиги проектика:
http://forum.cxem.net/index.php?showtopic=155802


Последний раз редактировалось: sipov (Пт Окт 23, 2015 17:06)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
awsswa



Зарегистрирован:
28.04.2012
Сообщения: 1642
Откуда: Russia, Пермь

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 19:18    Заголовок сообщения:

Еще раз
у нас например 100 таксистов и 10 USB модемов

вот по этому вот так AddQueueMember(queuetax,Dongle/dongle1/${CALLERID(num)}) делать нельзя

или вы нас собрались удивить и собрать связку из 100 USB модемов ?

Уже давно сотовые операторы дают привязку городского номера с КУЧЕ симок - звонок с ЛЮБОЙ симки будет выглядеть как будто вы звоните с ОДНОГО НОМЕРА

В идеале ваши агенты в очереди это номера сотовых таксистов и вызывать их надо через Local выбирая любой свободный модем или SIP линию

_________________
платный суппорт по мере возможностей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Skype Name
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 19:34    Заголовок сообщения:

Это разве все имеет отношение к вопросу про очередь? И какая очереди разница 100 или 2 таксиста в ней..
Единственный способ добавить динамически агента в очередь - AddQueueMember..
Это отсюда взято - "AsteriskTM: будущее телефонии .Второе издание. Джим Ван Меггелен, Лейф Мадсен и Джаред Смит"

И потом, я не прошу просто ответить - ради ответить, а хотел по-существу вопроса ответ увидеть или ближе к этому... На нету и суда нет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
awsswa



Зарегистрирован:
28.04.2012
Сообщения: 1642
Откуда: Russia, Пермь

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 19:41    Заголовок сообщения:

да все правильно - AddQueueMember

но Local/8906123456

и вызов тоже через Local - где и сделать проверку того что вам нужно

_________________
платный суппорт по мере возможностей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Skype Name
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Окт 18, 2015 20:04    Заголовок сообщения:

Управление Диспетчером - реализовано с мобилы посредством dtmf, в этом и фишка.. Диспетчер работает сам по-себе и управляется полностью с мобилы через dtmf, интернет тоже не нужен...
И как Админ системы будет с мобилы менять queue.conf не понятно? А если он один из таксистов? Функционал системы урезан по сравнению с инет-сип системами, но в этом и суть проекта - он такой как задуман. Аналоги только в железе видел...

Про Local - знаю, в свое время с ним пытался добиться нужного функционала... Но не было нужной динамики очереди - отказался...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Вс Ноя 01, 2015 11:39    Заголовок сообщения:

Решено, ЧАСТИЧНО - так как таксист все-таки будет успевать принять один вызов с нулевым балансом своего счета - после чего сразу удаляется из очереди. Работает это дело - следующим образом:

Из контекста очереди:
    [callcenter]
    ...
    exten => 999,n,Queue(queuetax,td,,,60,,subQueueConnected)
    ...

Из макроса:
    [macro-subQueueConnected]
    exten =>s,1,NoOp()
    same =>n,Verbose(4, dynamic balans ${MEMBERNAME})
    same =>n,SET(DYNAMIC_AGENT=${MEMBERNAME:15:12})
    ; Получаем значение баланса агента
    same =>n,MYSQL(Connect connid localhost root taxer asterisk)
    same =>n,MYSQL(Query resultid ${connid} SELECT current_balance FROM users WHERE user_id='${DYNAMIC_AGENT}')
    same =>n,MYSQL(FETCH fetchid ${resultid} NUM_AGBALANCE)
    ; Очищаем результат, он нам больше не нужен
    same =>n,MYSQL(Clear ${resultid})
    same =>n,NoOP(NumberBallance - ${NUM_AGBALANCE})
    same =>n,MYSQL(Disconnect ${connid})
    ; Получим тариф за заказ
    same =>n,MYSQL(Connect connid localhost root taxer asterisk)
    same =>n,MYSQL(Query resultid ${connid} SELECT price FROM tariffs)
    same =>n,MYSQL(FETCH fetchid ${resultid} NUM_ZKTARIFF)
    ; Очищаем результат, он нам больше не нужен
    same =>n,MYSQL(Clear ${resultid})
    same =>n,NoOP(NumberTariff - ${NUM_ZKTARIFF})
    same =>n,MYSQL(Disconnect ${connid})
    ;
    ; Сравним - если баланс менее мин.суммы - на удаление из очереди, если более не удаляем
    same =>n,GotoIf($[${NUM_AGBALANCE} < ${NUM_ZKTARIFF}]?zerobalance:)
    same =>n,DumpChan()

....
    same =>n(zerobalance),Playback(/var/lib/asterisk/indtmf/zerobalance)
    ; Выполняем удаление агента из очереди и БД
    same =>n(yesdbagqueuedel),RemoveQueueMember(queuetax,Dongle/dongle1/${DYNAMIC_AGENT})
    same =>n,MYSQL(Connect connid localhost root taxer asterisk)
    same =>n,MYSQL(Query resultid ${connid} DELETE FROM tblagentqueue WHERE AgentQueue ='${DYNAMIC_AGENT}')
    same =>n,MYSQL(Query resultid ${connid} DELETE FROM tblgpsagent WHERE gpsAgent='${DYNAMIC_AGENT}' ORDER BY gpsAgent DESC)
    ; Дисконектимся
    same =>n,MYSQL(Disconnect ${connid})
    same =>n,Playback(/var/lib/asterisk/loggedoff/agent-loggedoff)
    same =>n,HangUp

В итоге де-регистрация из очереди и невозможность зарегатся в ней, до пополнения своего баланса...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
virus_net



Зарегистрирован:
05.10.2014
Сообщения: 377
Откуда: Москва

Статус: Оффлайн 

СообщениеДобавлено: Пн Ноя 02, 2015 06:22    Заголовок сообщения:

[offtop]
А что будет, если MySQL вернет error на каком то из этапов ?
А если MySQL не найдет пользователя и NUM_AGBALANCE будет просто пустым ?

Вообщем что я хочу сказать:
У вас обработчик ошибок просто отсутствует, это плохо.
Все sql запросы и логику лучше переделать на AGI, где в скрипте реализовать обработчик ошибок и вероятно некие действия, если случилась ошибка или ошибки. А ели все ОК, то возвращать в dialplan необходимое действие.
[/offtop]

_________________
mega-net.ru - IT аутсорсинг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора Телефон
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Пн Ноя 02, 2015 10:22    Заголовок сообщения:

 virus_net @ Пн Ноя 02, 2015 10:22 писал(а):
[offtop]
А что будет, если MySQL вернет error на каком то из этапов ?
А если MySQL не найдет пользователя и NUM_AGBALANCE будет просто пустым ?

[/offtop]


Можно конечно вставить что то типа:

    same =>n,MYSQL(FETCH fetchid ${resultid} NUM_AGBALANCE)
    same =>n,GotoIf($[${fetchid} = 0]?yesdbagqueuedel:)

для проверки - на пустое значение, если ошибка тоже ничего хорошего или плохого не случиться... Здесь вызов инициирован очередью, значение NUM_AGBALANCE сформировано на стадии регистрации в очереди и поэтому оно точно есть, иначе номер бы не знала очередь и вызова его не произошло бы... Здесь отладка и продукты - Asterisk и MySQl - отвечают за базар Smile...
С ошибками та же история - MySQL не загружен ничем другим, стоит на localhost и отладка показала, что сбоев не было...
И так как проектик, не коммерческий - поставляется и работает устойчиво - так как есть...
Если же появятся вышеобозначенные грабли в работе Диспетчера - в частном порядке можно будет подумать и о реализации на скриптах и тэ.дэ
А так не вижу смысла усложнять то, что и так хорошо робит.. По принципу - если работает - не трогай, трогай если не работает... Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
sipov



Зарегистрирован:
17.10.2015
Сообщения: 27

Статус: Оффлайн 

СообщениеДобавлено: Сб Ноя 07, 2015 13:55    Заголовок сообщения:

Кто-то может дать ссылку, где разбирают или ковыряют исходники Asterisk? Интересует модуль app_queue.c и его окружение пока. Может буржуйский ресурс, кто знает?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Список форумов Asterisk Forum -> Asterisk-Dev Ответить на тему
Страница 1 из 1

Добавить в Избранное

 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
You cannot attach files in this forum
You cannot download files in this forum