Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

организация очереди для call-файлов

0

пришел сюда, т.к. нашел весьма сходную информацию в http://asterisk-support.ru/forum/topics/7668/

задача следующая: отправляем факсы большому числу получателей (500+) с использованием call-файлов. для отправки имеем несколько каналов.

сейчас для отправки в extensions.conf используется:

; вызываем абонента с использованием доступных линий
; если все заняты (выставлен call-limit в sip.conf)
; то повторяем попытку позже, через определенный таймаут
[fax_with_threads]
exten => send,1,Dial(SIP/линия1/${RECEIVER},30)
exten => send,n,Dial(SIP/линия2/${RECEIVER},30)
exten => send,n,Dial(SIP/линия3/${RECEIVER},30)
exten => send,n,Dial(SIP/линия4/${RECEIVER},30)
exten => send,n,Goto(send-${DIALSTATUS},1)
exten => send-CANCEL,1,Hangup()
exten => send-ANSWER,1,Hangup()
exten => send-NOANSWER,1,Hangup()
exten => send-BUSY,1,Hangup()
exten => send-CONGESTION,1,Wait(10)
exten => send-CONGESTION,n,GoTo(send,1)
exten => send-CHANUNAVAIL,1,Wait(10)
exten => send-CHANUNAVAIL,n,GoTo(send,1)

[faxsend-t38]
exten => faxout,1,Set(STARTTIME=${SHELL(date +%s)} )
exten => faxout,n,Wait(2)
; проигрываем приветствие
exten => faxout,n,Playback(/mnt/asterisk_call_records/fax,skip)
exten => faxout,n,Set(FAXFILE=${TIFF_2_SEND})
exten => faxout,n,Set(FAXOPT(ecm)=yes)
exten => faxout,n,Set(FAXOPT(headerinfo)=${TAGLINE})
exten => faxout,n,Set(FAXOPT(maxrate)=14400)
exten => faxout,n,Set(FAXOPT(minrate)=4800)
exten => faxout,n,Set(FAXOPT(localstationid)=${LOCALSTATIONID})
exten => faxout,n,WaitForSilence(500,1,15)
exten => faxout,n,SendFAX(/mnt/asterisk_call_records/faxes/${FAXFILE},dfzs)

пример call-файла:

Channel:Local/send@fax_with_threads
Callerid:"FaxSender"<1111>
Maxretries:{maxRetries}
Waittime:300
RetryTime:60
Context:faxsend-t38
Extension:faxout
Priority:1
SetVar: T38CALL=1
Set:TAGLINE=IBS-Alfa
Set:LOCALSTATIONID=+7(8442)600-200
Set:RECEIVER=78442{fax}
Set:FAX_ID={faxId}
Set:TIFF_2_SEND={faxId}.tif

собственно все работает, но при большом количестве call-файлов, замечено, что некоторые "вылетают" со странной ошибкой OutgoingSpoolFailed.

Видимо при слишком большом количестве "отказов" со стороны выделенных каналов вылетает faxwiththreads, так и не установив соединение.

В той теме что приведена в начале, рассмотрен вопрос реализации очереди для call-файлов из свободных каналов. Вопрос: каким образом реализовать очередь в данной задаче?

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

спросил 2013-09-03 17:20:38 +0400

mapt34 Gravatar mapt34
1 1

обновил 2013-09-03 18:53:41 +0400

zzuz Gravatar zzuz flag of Russian Federation
7174 2 6 75
http://line24.ru/

Comments

кто-нить видит мой ответ? Я - не вижу...

switch ( 2013-09-03 18:55:31 +0400 )редактировать

Вижу . Нормально всё.

zzuz ( 2013-09-03 18:56:11 +0400 )редактировать

тоже вижу, спасибо

mapt34 ( 2013-09-03 18:59:23 +0400 )редактировать

о, теперь и я вижу ;))

switch ( 2013-09-03 18:59:41 +0400 )редактировать

2 Ответа

0

Используйте AMI для возможности отслеживания статуса звонков и нормального выполнения ваших сценариев. Генерировать по 500 файлов уж странная затея.

ссылка удалить спам редактировать

ответил 2013-09-03 18:55:48 +0400

zzuz Gravatar zzuz flag of Russian Federation
7174 2 6 75
http://line24.ru/
0

Очереди не получится применить, так как в своей работе очереди ориентируются на состояние локальных абонентов, а в вашем случае никак не узнать состояние внешних абонентов и/или каналов. В общем вам нужно реализовывать это самостоятельно. Файлами это сделать проблематично, я это сделал программой на PHP, которая работает с астериском через AMI. Сначала рассчитывается максимально возможная плотность вызовов, затем по таймеру создается вызов. Если превышено допустимое количество каналов новые вызовы не создаются. Отдельный обработчик смотрит в AMI и ловит события, чтобы узнать текущий прогресс обзвона и состояние.

ссылка удалить спам редактировать

ответил 2013-09-03 18:54:34 +0400

switch Gravatar switch
8334 11 7 92
http://lynks.ru/

Comments

чуток растолкую свое понимание :-) пускаем все звонки в очереди через Local extension - например назовем его "callque". пишем демона который при запуске через AMI считает сколько вызовов в callque ("Action: Status" с регексом на "Local\/[0-9][a-z]+@callque-\w" или типа того...) - функа functionA(). Ставим хук на AMI евент Hangup с выполнением functionA(). в этой функе переносим колл-файл или берем вызов из очереди в базе (кому как нравиться - я-бы файлы не создавал а просто запускал Originate с опцией async, а флажки все в таблице). отдельного обработчика не надо - можно из контекста состояние обновлять по идее...

octopas ( 2013-09-05 23:25:07 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2013-09-03 17:20:38 +0400

Просмотрен: 849 раз

Обновлен: Sep 03 '13

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.