Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение под *NIX системы > обработка состояния вызова в *


Автор: mihanik 13.1.2013, 17:49
Привет!

Заморочился с настройкой asterisk.

Никак не могу понять как отследить "занятость телефона".
Вроде в диалплане всё прописал, но... Протокол-то (и сам телефон) предполагает неограниченное количество разговоров в одном канале...

Т.е. я хочу, сделать так, что если человек уже разговаривает, то к нему уже не приходил бы звонок...
Сейчас это не работает.

Прошу помощи!!!

Код

[localsets]

    exten => _XXX,1,Answer()            ; Отвечам на звонок на трёхзначные внутренние телефоны


    same => n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?number_not_exists)    ; Если номер не существует - переходим к метке  "number_not_exists"


    same => n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?number_not_connected)    ; Если номер существует, но недоступен переходим к метке "number_not_connected"


    same => n,MixMonitor(${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d)}-${STRFTIME(${EPOCH},,%H%M%S)}.wav)    ; Начинаем запись разговора в файл 
                            
    same => n,Dial(SIP/${EXTEN},,Xx)    ; Набираем номер внутреннего телефона
    
    same => n,GotoIf($["${DIALSTATUS}" = "BUSY"]?number_is_busy:number_not_connected)  ; если занято, то сообщим об этом

    same => n,Hangup()            ; в конце - повесим трубку

; ****************
; обработка ошибок
; ****************
    same => n(number_not_exists),Playback(sdd/wrongnumber)    ; неверный номер
    same => n(number_not_exists),Hangup()

    same => n(number_not_connected),Playback(sdd/phoneisdown)    ; номер есть, но аппарат не подключен (или просто недоступен)
    same => n(number_not_connected),Hangup()

    same => n(number_is_busy),Playback(sdd/numberisbusy)    ; занято
    same => n(number_is_busy),Hangup()



Добавлено через 6 минут и 56 секунд
Устаревшие параметры файла sip.conf: incominglimit и outgoinglimit

    Incominglimit = number of calls the local extension can originate to Asterisk.
    Outgoinglimit = number of calls Asterisk will terminate to local extension. 

:-(

Автор: mihanik 13.1.2013, 21:31
Решил так:

в sip.conf у экстеншенов добавил параметр 

Код

call-limit=1


и диалплан привёл к виду

Код

[localsets]

; Отвечам на звонок на трёхзначные внутренние телефоны
    exten => _XXX,1,Answer()

; Если номер не существует - переходим к метке  "number_not_exists"
    same => n,GotoIf($["${SIPPEER(${EXTEN},status)}" = ""]?number_not_exists)

; Если номер существует, но недоступен переходим к метке "number_not_connected"
    same => n,GotoIf($["${SIPPEER(${EXTEN},status):0:2}" = "UN"]?number_not_connected)

; Начинаем запись разговора в файл
    same => n,MixMonitor(${EXTEN}-${STRFTIME(${EPOCH},,%Y%m%d)}-${STRFTIME(${EPOCH},,%H%M%S)}.wav)     

; Набираем номер внутреннего телефона                            
    same => n,Dial(SIP/${EXTEN},10)    

; если занято, то сообщим об этом
    same => n,GotoIf($["${DIALSTATUS}" = "CHANUNAVAIL"]?number_is_busy)  

; в конце - повесим трубку
    same => n,Hangup()            

; ****************
; обработка ошибок
; ****************
    same => n(number_not_exists),Playback(sdd/wrongnumber)    ; неверный номер
    same => n(number_not_exists),Hangup()

    same => n(number_not_connected),Playback(sdd/phoneisdown)    ; номер есть, но аппарат не подключен (или просто недоступен)
    same => n(number_not_connected),Hangup()

    same => n(number_is_busy),Playback(sdd/numberisbusy)    ; занято
    same => n(number_is_busy),Hangup()



Не очень красиво, но работает. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)