Realizziamo un IVR con Asterisk [Terza parte]

Completiamo l’IVR aggiungendo le opzioni che possono essere scelte dall’utente quando effettua una chiamata sul nostro numero. Inizialmente avevamo specificato che le opzioni dovevano essere “1″ per il reparto commerciale (supponiamo che risponda all’interno 200) e “2″ per quello tecnico (supponiamo che risponda all’interno 201). In caso di nessun tasto premuto, il sistema in automatico passerà la chiamata in segreteria (supponiamo sia l’interno 300).

Per implementare tutto questo continuiamo ad aggiungere le seguenti estensioni nel contesto “[sportello]“.

;In caso venga selezionato il tasto 1 si passa all'interno 200 (reparto commerciale)
exten => 1,1,Dial(SIP/200,20)
; il telefono squilla per 20 secondi e poi si chiude
exten => 1,2,Hangup

;in caso venga selezionato il tasto 2 si passa all'interno 201 (reparto tecnico)
exten => 2,1,Dial(SIP/201,20)
; il telefono squilla per 20 secondi e poi si chiude
exten => 2,2,Hangup

;l'estensione i viene scelta in caso l'utente sbaglia il tasto premuto
exten => i,1,Goto(s,3)

;in caso l'utente attenda in linea e scade il timeout viene scelta questa estensione
exten => t,1,Dial(SIP/300,20)

Vediamo meglio le ultime due righe del contesto:

  • l’estensione i viene eseguita quando l’utente digita un tasto sul telefono che non ha nessuna estensione relativa configurata (nel nostro caso qualsiasi tasto diverso da 1 o 2). In questo caso viene eseguita l’applicazione GOTO che ha il compito di rimandare la chiamata nel contesto [sportello] sull’estensione s. In pratica se l’utente sbaglia tasto il messaggio viene ripetuto daccapo;
  • l’estensione t viene eseguita quando l’utente non preme alcun tasto fino alla scadenza del timeout impostato all’inizio del contesto, in questo caso decidiamo di inoltrare la chiamata alla segreteria (interno 300).

Fate pure i vostri test e comunicatemi i risultati, magari per commentarli insieme.

Se vuoi aggiornamenti su Realizziamo un IVR con Asterisk [Terza parte] inserisci la tua e-mail nel box qui sotto:

Tag: ,

Commenti

  1. [1]

    Ciao complimenti per questi approfondimenti.
    Perché non affronti anche la questione del VAD che si ha con Eutelia o altri provider…

  2. [2]

    Grazie per i complimenti ed accetto il suggerimento per i prossimi post.
    ciao

  3. [3]

    Complimenti.
    Poche parole, ma chiare che raggiungono subito lo scopo.
    ciao

  4. [4]

    Vorrei chiederti se e’ possibile associare un IVR ad un numero telefonico Voip; mi spiego meglio.
    La mia numerazione interna e’ del tipo 12xx, 22xx oppure 27xx, quindi ho dei numeri Voip 1234, 1232, 2256, 2700 ecc.
    Vorrei crearmi un numero Voip (Es:2222, questo numero e’ a tutti gli effetti un numero VoIP interno, ma non voglio collegarlo ad un telefono fisico VoIP) dove poter associare un IVR; quindi se dal telefono Voip 1234 digito il numero 2222 vorrei sentire dire:
    -digita 1 per chiamare l’ufficio vendite
    -digita 2 per chiamare l’ufficio tecnico
    e cosi’ via.

    E’ possibile fare una cosa del genere?
    Puoi aiutarmi?

    Ti ringrazio
    Saluti
    Andrea

  5. [5]

    Andrea, tu vorresti da un interno del centralino digitare il numero 2222 e sentire l’ivr, se non ho capito male questo dovresti implementarlo sempicemente impostando l’estensione 2222.
    se non sono chiaro chiedi pure
    ciao

  6. [6]

    Esatto vorrei da un telefono VoIP, registrato sul centralino Asterisk digitare il 2222(definito su asterisk, ma non registrato perche’ non e’ collegato fisicamente ad un telefono)e sentire IVR.Quello che non so fare e’ come configurare il 2222 associato al IVR.
    Grazie
    Andrea

  7. [7]

    Ciao sono ancora con questo problema, ma ho fatto alcuni passi avanti. Ricapitolo il tutto(ho cambiato numero invece del 2222 ho 8888).

    Ho installato Trixbox 2.6.1
    Sto cercando di configurare un risponditore (a mano senza interfaccia web).
    Ho aggiunto il context “custom-mio-ivr” nel file “extentions_custom.conf”.
    In breve cosa fa.
    Da un telefono VoIP digito il numero 88888 e sento “enter-ext-of-person” allora se:
    a-digito 1 o 2 mi connetto ai numeri 3000 o 3001
    b-digito un numero diverso da 1 o 2 risento “enter-ext-of-person”
    c-se non digito niente DOVREI sentire “vm-goodbye”

    E’ tutto okey eccetto questo caso:
    quindi dopo aver chiamato il numero 8888 non digito nessun altro numero, dovrei aspettarmi di vedere eseguire le istruzioni

    exten => t,1,Playback(vm-goodbye)
    exten => t,2,Hungup()

    invece non sono eseguite.

    Di seguito c’e’ il listato del context e del log.

    [trixbox1.localdomain asterisk]# vi extensions_custom.conf
    #include extensions_hud.conf
    [from-internal-custom]
    include => custom-mio-ivr

    [custom-mio-ivr]

    exten => 8888,1,Answer()
    exten => 8888,n,Set(TIMEOUT(response)=10)
    exten => 8888,n,Background(enter-ext-of-person)
    exten => 8888,n,WaitExten(,)
    exten => 1,1,Dial(SIP/3000)
    exten => 1,2,Hungup()
    exten => 2,1,Dial(SIP/3001)
    exten => 2,2,Hungup()
    exten => i,1,Playback(pbx-invalid)
    exten => i,2,Goto(custom-mio-ivr,8888,1)
    exten => t,1,Playback(vm-goodbye)
    exten => t,2,Hungup()

    [trixbox1.localdomain asterisk]#

    trixbox1*CLI>
    – Executing [8888@from-internal:1] Answer(“SIP/3002-09d96a80″, “”) in new stack
    – Executing [8888@from-internal:2] Set(“SIP/3002-09d96a80″, “TIMEOUT(response)=10″) in new stack
    – Response timeout set to 10
    – Executing [8888@from-internal:3] BackGround(“SIP/3002-09d96a80″, “enter-ext-of-person”) in new stack
    – Playing ‘enter-ext-of-person’ (language ‘en’)
    – Executing [8888@from-internal:4] WaitExten(“SIP/3002-09d96a80″, “|”) in new stack
    – Timeout on SIP/3002-09d96a80, continuing…
    – Executing [8888@from-internal:5] Wait(“SIP/3002-09d96a80″, “1″) in new stack
    – Executing [8888@from-internal:6] Congestion(“SIP/3002-09d96a80″, “20″) in new stack
    == Spawn extension (from-internal, 8888, 6) exited non-zero on ‘SIP/3002-09d96a80′
    – Executing [h@from-internal:1] Macro(“SIP/3002-09d96a80″, “hangupcall”) in new stack
    – Executing [s@macro-hangupcall:1] ResetCDR(“SIP/3002-09d96a80″, “w”) in new stack
    – Executing [s@macro-hangupcall:2] NoCDR(“SIP/3002-09d96a80″, “”) in new stack
    – Executing [s@macro-hangupcall:3] GotoIf(“SIP/3002-09d96a80″, “1?skiprg”) in new stack
    – Goto (macro-hangupcall,s,6)
    – Executing [s@macro-hangupcall:6] GotoIf(“SIP/3002-09d96a80″, “1?skipblkvm”) in new stack
    – Goto (macro-hangupcall,s,9)
    – Executing [s@macro-hangupcall:9] GotoIf(“SIP/3002-09d96a80″, “1?theend”) in new stack
    – Goto (macro-hangupcall,s,11)
    – Executing [s@macro-hangupcall:11] Hangup(“SIP/3002-09d96a80″, “”) in new stack
    == Spawn extension (macro-hangupcall, s, 11) exited non-zero on ‘SIP/3002-09d96a80′ in macro ‘hangupcall’
    == Spawn extension (macro-hangupcall, s, 11) exited non-zero on ‘SIP/3002-09d96a80′
    trixbox1*CLI>

  8. [8]

    ciao Francesco,
    il mio problema invece è questo.
    Ho creato un menu che si comporta in questo modo:
    -risponde
    -elenca le scelte disponibili(premete1per,2per..)
    -attende la digitazione 6 secondi
    -ripete l’elenco delle scelte
    -attende di nuovo la digitazione 6 secondi
    -manda alla voicemail di un interno per lasciare un messaggio.
    eccoti il codice:

    [UfficioAperto]
    exten => UfficioAperto,1,Ringing()
    exten => UfficioAperto,2,Wait(4)
    exten => UfficioAperto,3,Answer
    exten => UfficioAperto,4,Wait(1)
    exten => UfficioAperto,5,Background(rec/wav/1)
    exten => UfficioAperto,6,Background(rec/wav/2) ;la voce che elenca le scelte
    exten => UfficioAperto,7,WaitExten(6)
    exten => UfficioAperto,8,Background(rec/wav/2) ;di nuovo la voce per la scelta
    exten => UfficioAperto,9,WaitExten(6)
    exten => UfficioAperto,10,Goto(ext-local,${VM_PREFIX}1000,1)
    exten=1,1,Goto(SelezioneUno|SelezioneUno|1)
    exten=2,1,Goto(SelezioneDue|SelezioneDue|1)
    exten=3,1,Goto(SelezioneTre|SelezioneTre|1)
    exten=4,1,Goto(SelezioneQuattro|SelezioneQuattro|1)
    exten=9,1,Goto(SelezioneCinque|SelezioneCinque|1)
    exten=i,1,Goto(TastoNonValido|TastoNonValido|1)

    il mio problema:
    se ricevo la chiamata esterna su un trunk voip nessun problema.
    se ricevo la chiamata su un trunk pstn………..

    espongo:
    Io ho un spa3102.
    Riceve una chiamata su pstn e la gira sul voip.
    Un numero chiama il mio numero pstn, il 3102 mi gira la chiamata sul voip, e faccio suonare un ring group per venti secondi.
    -Se durante questo tempo il chiamante riaggancia, la chiamata finisce immediatamente e il ringgroup smette di far suonare i telefoni immediatamente.
    -Se uno dei telefoni del ring group risponde i due si sentono e se il chiamante riaggancia il 3102 riaggancia e la chiamata viene fatta terminare e la persona all’interno avverte chiaramente il tono di fine chiamata che è segnalato dal centralino, quindi significa che ha riconosciuto la fine della chiamata.

    il problema nasce durante un ivr..
    se il chiamante, invece di effettuare una scelta, riaggancia mentre il menu gli sta elencando le scelte, la chiamata non viene terminata, cioè:
    -la mia linea rimane aperta(se uno mi chiamasse in quel momento troverebbe occupato)
    -il menu continua ad andare avanti e arriva fino alla voicemail(lasciandomi fastidiosi messaggi vuoti!)
    -solo dopo la voice mail la linea viene rilasciata.

    Hai qualche idea?

    Colo

  9. [9]

    sembra che il gw non avverta il centralino che la chiamata è terminata

  10. [10]

    Problema risolto.
    Essendo sotto un centralino PSTN i toni generati dallo stesso sono differenti da quelli della telecom di conseguenza l’spa non riconosceva la fine della comunicazione.
    Buona continuazione.

  11. [11]

    bene
    anche se non avevo capito che eri dietro un centralino PSTN

Inserisci il tuo commento