The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Как донабрать номер с помощью DTMF после коннекта "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Маршрутизаторы CISCO и др. оборудование. (VoIP)
Изначальное сообщение [ Отслеживать ]

"Как донабрать номер с помощью DTMF после коннекта "  +/
Сообщение от shag (??) on 14-Янв-11, 17:55 
через voip dial-peer ?

Т.е требования следующие: нужно набрать некий номер, подождать пока там снимут трубку и тоном пропищать то, что набрал предварительно с клавиатуры звонящий.

После долгих поисков я нашел решение только для pots, но у меня voip...

Нужно это для чего: Требуется подключить несколько небольших оффисных АТСок по ИП МАКСИМАЛЬНО дешево к головному оффису.

Я предполагаю использовать для этого ATA-186. Соответственно с прошивкой h323 она спокойно переадресует все звонки циске, но вот принимает ТОЛЬКО звонки на 2 прописанных у нее номера. Соответственно если набрать один из этих номеров, дождатся пока АТС поднимет трубку и потом пропищать DTMFом внутренний номер абонента все должно заработать.

Т.е. схема подключения такая: CISCO-3825 - IP - ATA-186 - FXO - CO - PBX.

Или может есть другие варианты подцепить простую, ничего, кроме меди, не поддерживающую АТС к Циске в головном оффисе?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Как донабрать номер с помощью DTMF после коннекта "  +/
Сообщение от j_vw on 14-Янв-11, 20:16 
> через voip dial-peer ?
> Т.е требования следующие: нужно набрать некий номер, подождать пока там снимут трубку
> и тоном пропищать то, что набрал предварительно с клавиатуры звонящий.

Смотрите в сторону (согласовывайте) dtmf-relay

> Нужно это для чего: Требуется подключить несколько небольших оффисных АТСок по ИП
> МАКСИМАЛЬНО дешево к головному оффису.
> Я предполагаю использовать для этого ATA-186. Соответственно с прошивкой h323 она спокойно
> переадресует все звонки циске, но вот принимает ТОЛЬКО звонки на 2
> прописанных у нее номера. Соответственно если набрать один из этих номеров,
> дождатся пока АТС поднимет трубку и потом пропищать DTMFом внутренний номер
> абонента все должно заработать.

Ну, вариант...
Только, уж если ATA, то, по мне, красивше ее SCCP шить и регистрить как e-phone.

> Т.е. схема подключения такая: CISCO-3825 - IP - ATA-186 - FXO -
> CO - PBX.

Только не FXO, а FXS ;)

> Или может есть другие варианты подцепить простую, ничего, кроме меди, не поддерживающую
> АТС к Циске в головном оффисе?

Я предпочитаю в таких решениях использовать AddPac....
Ну, и если вы берете шлюз с комбинацией FXO и FXS портов на одной железке, то можно и без "железной тетки" обойтись.....
Из более дешевого (ну, по хорошему, не сильно) цеплял длинки по сип....
Но, честно говоря, не понравилось....

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Как донабрать номер с помощью DTMF после коннекта "  +/
Сообщение от shag (??) on 07-Фев-11, 12:49 
2 недели мучительного копания в доках и инете и написал скрипт!

Вот он, только не вычищеный от мусора и лишних переменных. Вешается обязательно на ВХОДЯЩИЙ диал-пир.


proc init { } {
    global param
    set param(interruptPrompt) true
    set param(abortKey) *
    set param(terminationKey) #
    global i
    set i 0
    global dest
    set dest 7520

}

proc act_Setup { } {
    global dest
    
    puts "\nproc init_perCallvars"
    global ani
    global dnis
    global i
    set i 0
    set ani ""
    set dnis ""
    
    set dest 7520

    set ani [infotag get leg_ani]
    puts "\nANI $ani"
    set dnis [infotag get leg_dnis]
    puts "\nDNIS $dnis"
    set out [infotag get leg_outgoing]
    puts "\nOUT $out"
    set in [infotag get leg_incoming]
    puts "\nIN $in"
    set nam [infotag get leg_display_info]
    puts "\nNAME   $nam"
    puts "\nDEST   $dest"


#    set callInfo(newguid) true
#    set callInfo(mode) "rotary"
#    set callInfo(usrDstAddr) “7520”
#    set callInfo(usrSrcAddr) $ani
#    set callInfo(displayInfo) $nam
#
    set callInfo(alertTime) 20
#    set callInfo(destinationNum) "7520"
#    set callInfo(originationNum) $ani
#    set new_gtd [object create gtd gtd_setup_ind IAM]

    
      leg setupack leg_incoming
      leg proceeding leg_incoming
      leg connect leg_incoming
      fsm setstate PLACECALL
      call_Place
      return
}

proc call_Place {} {    
      global dest
      leg setup $dest callInfo leg_outgoing
      fsm setstate PAUSE

    
}

proc call_SendPause { } {

    global dnis
    global dest

    puts "\nSTATUS IS - [infotag get evt_status]\n"
    set status [infotag get evt_status]
    set out [infotag get leg_outgoing]
    puts "\nOUTpause $out"


    if {$status == "ls_000"} {
        puts "\nCALL ACTIVE\n"
        puts "\nDEST IS - $dnis\n"
        media play leg_outgoing %s2000
        puts "\nPAUSE PLAYED\n"
    } else {
           if {$status == "ls_007" && $dest == "7520"} {
           puts "\nCALL RESTART\n"
           puts "\nDEST IS - 7521\n"
           set dest 7521
           fsm setstate PLACECALL
           call_Place
           return
           }
        puts "\nCALL FAILED\n"
        call close
      }

}

proc call_SendDigit { } {

    global i
    global dnis
    global digit

    set out [infotag get leg_outgoing]
    puts "\nOUTdigit $out"

    if {$i < [string length $dnis]} {
        set digit [string index $dnis $i]
        leg senddigit leg_outgoing $digit -t 200
        media play leg_outgoing %s400
        incr i
    }

    if {$i == [string length $dnis]} {
        puts "\nDTMF COMPLETE\n"
        fsm setstate CALLACTIVE
    }

}

proc call_Activ {} {
  
     connection create leg_incoming leg_outgoing
     set out [infotag get leg_outgoing]
     puts "\nOUTconnect $out"
}

proc call_Cleanup { } {

    call close

}
init


#----------------------------------
#   State Machine
#----------------------------------
  

  set FSM(any_state,ev_disconnected) "call_Cleanup,same_state"
  set FSM(CALL_INIT,ev_handoff) "act_Setup,PLACECALL"
  set FSM(CALL_INIT,ev_setup_indication) "act_Setup,PLACECALL"
  set FSM(PLACECALL,ev_any_event) "call_Place,PAUSE"
  set FSM(PAUSE,ev_setup_done) "call_SendPause,PAUSESENT"
  set FSM(PAUSESENT,ev_media_done) "call_SendDigit,same_state"
  set FSM(CALLACTIVE,ev_disconnected) "call_Cleanup,CALLDISCONNECTED"
  set FSM(CALLACTIVE,ev_media_done) "call_Activ,same_state"
  set FSM(CALLDISCONNECTED,ev_disconnected) "call_Cleanup,same_state"
  set FSM(CALLDISCONNECTED,ev_disconnect_done) "call_Cleanup,same_state"

  fsm define FSM CALL_INIT


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру