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

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

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

mapt34 Gravatar mapt34

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

пришел сюда, т.к. нашел весьма сходную информацию в 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-файлов из свободных каналов. Вопрос: каким образом реализовать очередь в данной задаче?

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

пришел сюда, т.к. нашел весьма сходную информацию в 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-файлов из свободных каналов. Вопрос: каким образом реализовать очередь в данной задаче?

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