• Проверка на занятость линии и как лучше это сделать?

    @dronmaxman
    VoIP Administrator
    exten = s-BUSY,1,Playback(${CallisBusy})

    Не делай так, это устаревшая конструкция ломающая CDR. Не надо менять EXTEN.

    Для решения твоей проблемы, попробуй вот так. Я не тестировал этот код, написал из головы.

    Через MOH
    - создаешь папку с новым MOH, например тут /usr/share/asterisk/moh_busy
    - кладешь в эту папку два файла, 01_busy.slm и 02_ring.slm.
    - правишь musiconhold.conf, добавляешь

    [busy]
    mode=files
    directory=moh_busy

    не забудь сделать moh reload

    В результате Dial будет проигрывать файлы из этой директории (moh_busy) во время звонка по очереди.

    exten => _X.,1,NoOp(-------MAIN-DIALPLAN---------)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNKNOWN"]?unknown)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INVALID"]?invalid)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNAVAILABLE"]?unavailable)
     same => n,ExecIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INUSE"]?SET(MOH_FILE=busy))
     same => n,ExecIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "BUSY"]?SET(MOH_FILE=busy))
     same => n,Dial(PJSIP/${EXTEN},60,m(${MOH_FILE}))
    ;; Unavailable
     same => n(unavailable),Noop(---Unavailable---)
     same => n,PlayBack(unavailable)
     same => n,HangUp()
    ;; Unknown
     same => n(unknown),Noop(----Unknown----)
     same => n,PlayBack(unknown)
     same => n,HangUp()
    ;; Invalid
     same => n(invalid),Noop(----Invalid----)
     same => n,PlayBack(invalid)
     same => n,HangUp()


    или так

    exten => _X.,1,NoOp(-------MAIN-DIALPLAN---------)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNKNOWN"]?unknown)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INVALID"]?invalid)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "UNAVAILABLE"]?unavailable)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "INUSE"]?busy)
     same => n,GotoIf($["${DEVICE_STATE(PJSIP/${EXTEN})}" = "BUSY"]?busy)
     same => n,Dial(PJSIP/${EXTEN},60)
     same => n,HangUp()
     same => n(busy),Dial(PJSIP/${EXTEN},60,m(busy))
     same => n,HangUp()
    ;; Unavailable
     same => n(unavailable),Noop(---Unavailable---)
     same => n,PlayBack(unavailable)
     same => n,HangUp()
    ;; Unknown
     same => n(unknown),Noop(----Unknown----)
     same => n,PlayBack(unknown)
     same => n,HangUp()
    ;; Invalid
     same => n(invalid),Noop(----Invalid----)
     same => n,PlayBack(invalid)
     same => n,HangUp()
    Ответ написан
    7 комментариев