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

Исходящие очереди

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

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

malamut
Сообщения: 18
Зарегистрирован: 05 май 2011, 23:13

Re: Исходящие очереди

Сообщение malamut »

Ну да, в терминологии сам чёрт ногу сломит. Но суть не в этом. Четыре последовательных Dial - это круто, но это не очередь.

Хотелось, чтобы при звонке на внешний номер во-первых, звонок уходил через рандомную незанятую линию из 10 - это раз. Два - если все линии заняты, об этом бы сообщалось позвонившему и он бы вставал в очередь в ожидании, когда хотя бы одна освободится.

Всё просто. Пока у меня есть такой вот кусок для двух GSM каналов:

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

; Звонки на сотовые
[to-gsm]
; Если указана исходящая линия - всё просто
exten => _gsmli.eX-89XX.,1,Dial(SIP/${EXTEN:0:8}/${EXTEN:9},120,T)
; Иначе сложней - проверяем, есть ли свободные линии
exten => _89XX.,1,GotoIf($["${GROUP_COUNT(publick@gsm)}" >= "2"]?noline)
; Вроде как есть свободные...
exten => _89XX.,n,Set(GROUP(gsm)=publick)			; Устанавливаем группу, дабы считать каналы
; Ok, проверяем - не мегафоновский ли номер вызываем?
exten => _89XX.,n,Set(PR=${EXTEN:1:3})
exten => _89XX.,n,GotoIf($[$["${PR}"="921"] | $["${PR}"="931"] | $["${PR}"="921"]]?prefer-megafon)
; Не мегафоновский
exten => _89XX.,n,GotoIf($["${DEVICE_STATE(SIP/gsmline2)}" = "NOT_INUSE"]?tele2:megafon)
; Или всё же мегафоновский...
exten => _89XX.,n(prefer-megafon),GotoIf($["${DEVICE_STATE(SIP/gsmline1)}" = "NOT_INUSE"]?megafon:tele2)
; Соединяемся
exten => _89XX.,n(tele2),Dial(SIP/gsmline2/${EXTEN},120,T)
exten => _89XX.,n(megafon),Dial(SIP/gsmline1/${EXTEN},120,T)
; Если все каналы заняты
exten => _89XX.,n(noline),Set(__CALLED_GSM_NUM=${EXTEN})	; Запоминаем вызываемый номер
exten => _89XX.,n,Goto(ivr-gsm,no-line,1)
Проблема в том, что а) вызывается не рандомный номер, б) нету очереди и крайне плохо обрабатывается ситуация когда всем надо срочно позвонить.

Очередь, очевидно, решает все эти проблемы. И вопрос был в том, как заставить очередь вызывать члена, передавая ему номер (без понятия, какая правильная терминология тут должна использоваться).
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Исходящие очереди

Сообщение ded »

Терминология такая: нет понятия очередь для исходящих.

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

*CLI> core show function RAND                                                                                                   
*CLI>                                                                                                                           
  -= Info about function 'RAND' =-                                                                                                  
                                                                                                                                    
[Syntax]                                                                                                                            
RAND([min][,max])                                                                                                                   
                                                                                                                                    
[Synopsis]                                                                                                                          
Choose a random number in a range                                                                                                   
                                                                                                                                    
[Description]                                                                                                                       
Choose a random number between min and max.  Min defaults to 0, if not                                                              
specified, while max defaults to RAND_MAX (2147483647 on many systems).                                                             
  Example:  Set(junky=${RAND(1,8)});                                                                                                
  Sets junky to a random number between 1 and 8, inclusive.   
Изучайте фукции.
awsswa
Сообщения: 2390
Зарегистрирован: 09 июн 2012, 10:52
Откуда: Россия, Пермь skype: yarick_perm

Re: Исходящие очереди

Сообщение awsswa »

Обязательно рандомно ? по кругу нельзя ?

Для круга вот решение:

Есть 3 SIP провайдера, сделать dialplan чтоб набор шел циклически по кругу
Провайдеры: sipgate, arinos, sipnet
Первый звонок на 1 провайдера, 2 звонок на второго и т.д.

[context]
exten => _X.,1,ExecIF($["${DB_EXISTS(dial/count)}" = "0"]?Set(DB(dial/count)=0))
exten => _X.,n,Set(DB(dial/count)=${IF($[${DB(dial/count)} > 2]?1:$[${DB(dial/count)} +1])})
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "1"]?Dial(SIP/${EXTEN}@sipgate,,tT))
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "2"]?Dial(SIP/${EXTEN}@arinos,,tT))
exten => _X.,n,ExecIF($["${DB(dial/count)}" = "3"]?Dial(SIP/${EXTEN}@sipnet,,tT))
exten => _X.,n,Hangup

и еще - мегафон проверяется не обязательно через номер телефона, можно по коду оператора - 25002 Мегафон

Вообще интересная ситуация - когда кому-то надо позвонить - вы не даете звонить ? оригинально :)
платный суппорт по мере возможностей
malamut
Сообщения: 18
Зарегистрирован: 05 май 2011, 23:13

Re: Исходящие очереди

Сообщение malamut »

Ну, это исходящие для небольшого офиса. Городская линия там своя, а для мобилок стоит GSM шлюз на два канала - в целом да, если оба канала заняты, то на мобилу не позвонить, нефиг)

И что такое код оператора? Мне надо отправлять звонки на мегафон предпочтительно через симку мегафона, остальные - через симку теле2. Как по вызываемому номеру можно узнать оператора, кроме как по коду после 8 (+7)?

Опять же, про Rand я знаю и могу расширить приведённый выше пример на 10 линий с использованием Rand. Но, например, проблему ожидания это не уберёт. Очередь всё же не просто так придумали, и обладает она весьма важным функционалом для случае нескольких равноправных каналов. Посему и хотелось именно её. Без неё же, конечно, сколочу костыльчик, более-менее подходящий, почему бы и нет.
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Исходящие очереди

Сообщение ded »

Очередь всё же не просто так придумали, и обладает она весьма важным функционалом для случае нескольких равноправных каналов.
Пожалуйста, не рвите мозг! Почитайте для чего придумали очередь: http://asterisk.ru/knowledgebase/Asterisk+call+queues
malamut
Сообщения: 18
Зарегистрирован: 05 май 2011, 23:13

Re: Исходящие очереди

Сообщение malamut »

Забавно. Именно для того, что мне надо. Для возможности обслуживания большого количества вызовов небольшим количеством операторов. Никто не говорил, что вызовы обязаны приходить извне, а уходить на локальные телефоны. Вызов поступает во чередь, ждёт своего часа и уходит освободившемуся оператору.
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Исходящие очереди

Сообщение ded »

Читаем и забавимся вместе, вслух, чтобы никто не упрекнул нас словом "никто":
Система очередей вызовов состоит из следующих компонентов:

Поступающие вызовы помещаются в очередь.
Участники, обрабатывающие очередь, отвечают на вызовы, поступающие в очередь (в их качестве могут быть либо екстеншены либо пользователи, зарегистрировавшиеся в системе в качестве агентов).
Порядок распределения поступающих вызовов между участниками, обрабатывающими очередь, зависит от определенной для нее стратегии распределения вызовов.
Продублирую оригинал:
Queues consist of

Incoming calls being placed in the queue
Members that answer the queue (extensions or users that login as agents)
A strategy for how to handle the queue and divide calls between members
Разницу между Incoming и Outgoing calls усекаете?
Всё ещё нет?
Ну тогда продолжайте строить фанерный велосипед.
malamut
Сообщения: 18
Зарегистрирован: 05 май 2011, 23:13

Re: Исходящие очереди

Сообщение malamut »

Усекаю. Любой вызов с телефона с точки зрения Asterisk - incoming. Любой вызов от астериска - outgoing. Пофиг, кто куда звонит, главное, что звонят через сервер и сервер обрабатывает и коммутирует звонки. Серверу вообще пофиг, чем является линия - внешним каналом или подключённым SIP-телефоном. С внешней входящей линии поступает вызов в очередь и уходит на внешнюю же линию, только исходящую - вот что происходит в любом случае.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: Исходящие очереди

Сообщение Wapo »

Живо себе представил - есть входящий в очереди. Один из исходящих (участников очереди, представленный внешним каналом) начинает вызывать абонента. Тот не ответил. Дальше что? Следующий агень-канал начинает ДОЛБИТЬ этот вызов?

Что-то с логикой в данном случае не прокатывает.
ded
Сообщения: 15626
Зарегистрирован: 26 авг 2010, 19:00

Re: Исходящие очереди

Сообщение ded »

Нет не прокатывает. Можно и рубаху не сверху, а через ноги одевать, не расстёгивая, человеку же пофиг как одето, главное - одето?
Извращённая логика.
При входящих из мира соединениях на операторов механизм очереди знает о состоянии операторов - In use и не подбрасывает звонок уже занятому оператору, и не будет его долбить новыми попытками, как хочется ТС.

Вот обостнование что серверу не пофиг: упрощённая картинка, разделяем внутренних пользователей (extensions), помятую даже, что они могут быть внешними как с точки зрения нахождения, так и с точки зрения логики диал-плана, статических и динамических агентов очередей. Итак, операторы SIP/10, SIP/11, SIP/12 звонят во внешний мир? Условно - через шлюз - SIP/Gateway/8901234567
C точки зрения коммутации - да, как-бы всё равно, но при исходящем (от оператора SIP/10) звонке через Астериск на SIP/Gateway/8901234567 мы можем получить отлуп (статус занято, или congestion) от шлюза (занят порт FXO, или сим-карта) и занят абонент 8901234567. Если ТС хочет фанерный велосипед, то он через рандомный выбор при статусе "занято" будет долбить кого? что?
Если все линии свободны а занят абонент 8901234567 будем механически долбить пока он не освободится? Такой сценарий есть в старых АТС, типа - автодозвон. Но это нифига не очередь. ТС уже указал, что не разбирается в терминах.
Если все линии заняты а абонент 8901234567 свободен, то будет долбить и выстраивать в очередь? Не лучше ли подключиться к ИП-оператору и не устраивать себе головняк?
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH