Newsgroup: it.tlc.telefonia.voip
Titolo: Script agi per database

Vorrei realizzare uno script agi per asterisk in modo che un chiamante
debba usare una password per accedere ad un numero tipo chiamo il mio
ivr premendo il tasto 3 acceddo a mario ma chide la password e dopo
suona...
Grazie per la collaborazione

 suona...
...hai dimenticato...dopo aver suonato mi porta una pizza e una bibita e 
il caffé. Tutto gratis ovviamente :-)
Non te la prendere oggi avevo voglia di trollare e il tuo post mi ha 
ispirato.


Uno dei soliti mi immagino sei un consulente a pagamento? tutti uguali
comunque scusa degli errori ma avevo la tastiera con le batterie
scariche, comunque non sto chiedendo di farmi lo script ma di aiutarmi
un idea la ho già e solo che non mi funziona... e quindi chiedo della
documentazione aggiuntiva, Grazie

 documentazione aggiuntiva, Grazie
Ti consiglio di postarla cosi che chi vede errori te lo fa presente e
chi cerca qualcosa di simile riesce a trovarlo un domani

 un idea la ho già e solo che non mi funziona... e quindi chiedo della
E perchè non posti lo script, come faremmo altrimenti a tentare di 
risolvere il problema senza scriverne uno da zero?
Comunque dal mio punto di vista se la casistica è ragionevolmente 
piccola e non ci sono necessità di scalare non servono nè script AGI nè 
database, si possono fare le stesse cose direttamente nel dialplan.
Questo è un mero prototipo ripescato negli appunti, stralcialo delle 
funzioni che non ti servono e adattalo al tuo caso specifico. In linea 
di massima funziona così:
a) all'arrivo della chiamata verifica il CLI, se identificato inoltra 
direttamente alla destinazione configurata.
b) se non viene abbinato alcun cli invia un messaggio di invito a 
digitare la password.
c) se la pass è verificata inoltra alla destinazione corrispondente 
altrimenti ricomincia o chiude a seconda dei casi.
---8<-----------------------------------------------------------------
;
; ----------------------------- Definizione variabili globali
;
[globals]
FWD_ROUTE = mISDN/8
EXT_NUM_01 = 025558!
; cli accettati e inoltrati direttamente a destinazione
CLI_BO_01 = 515522.
CLI_PA_01 = 976677.
; codici cliente
ACT_BO = 123456
ACT_PA = 789012
; destinazioni di inoltro
FWD_BO_01 = 3334444421
FWD_PA_01 = 3995555534
; destinazione di copertura, supervisore
FWD_FBK = 312012345
; timers
TIMEOUT_TRUNK = 40
TIMEOUT_SIP = 20
TIMEOUT_IAX = 20
;
MSG_CPATH = /var/lib/asterisk/sounds/custom/maint24x7x365/
REC_MPATH = /var/spool/asterisk/monitor/
;
[inbound-assistenza]
exten => _${EXT_NUM_01},1,Answer
exten => _${EXT_NUM_01},2, NoOp
exten => 
_${EXT_NUM_01},3,MixMonitor(${REC_MPATH}${STRFTIME(${EPOCH},,%Y)}/${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}.gsm|b)
;
exten => 
_${EXT_NUM_01}/_${CLI_BO_01},4,Dial(${FWD_ROUTE}/${FWD_BO_01},${TIMEOUT_TRUNK})
exten => 
_${EXT_NUM_01}/_${CLI_PA_01},4,Dial(${FWD_ROUTE}/${FWD_PA_01},${TIMEOUT_TRUNK})
exten => _${EXT_NUM_01},4,Goto(act-check-ivr,s,1)
;
exten => _${EXT_NUM_01},5,Hangup
;
; ----------------------------- ivr convalida account
;
[act-check-ivr]
exten => s,1,Playback(${MSG_CPATH}benvenuto)
exten => s,2,DigitTimeout,5
exten => s,3,ResponseTimeout,15
exten => s,4,Background(${MSG_CPATH}chiedi_codice)
; inoltra a...
exten => ${ACT_BO},1,Goto(fwd-bo,s,1)
exten => ${ACT_PA},1,Goto(fwd-pa,s,1)
; timeout, errore
exten => t,1,Goto(s,4)
exten => i,1,Playback(invalid)
;
; ----------------------------- inoltra a reperibiltà h24 Bologna
;
[fwd-bo]
exten => s,1,Playback(${MSG_CPATH}inoltro)
exten => s,2,Dial(${FWD_ROUTE}/${FWD_BO_01},${TIMEOUT_TRUNK},r)
exten => s,n,Playback(${MSG_CPATH}inoltro-spv)
exten => s,n,Dial(${FWD_ROUTE}/${FWD_FBK},${TIMEOUT_TRUNK},r)
exten => s,n,Playback(${MSG_CPATH}retry)
exten => s,n,Hangup
;
; ----------------------------- inoltra a reperibiltà h24 Palermo
;
[fwd-pa]
exten => s,1,Playback(${MSG_CPATH}inoltro)
exten => s,2,Dial(${FWD_ROUTE}/${FWD_PA_01},${TIMEOUT_TRUNK},r)
exten => s,n,Playback(${MSG_CPATH}inoltro-spv)
exten => s,n,Dial(${FWD_ROUTE}/${FWD_FBK},${TIMEOUT_TRUNK},r)
exten => s,n,Playback(${MSG_CPATH}retry)
exten => s,n,Hangup
---8<-----------------------------------------------------------------
-- 
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"

 un idea la ho già e solo che non mi funziona... e quindi chiedo della
E perchè non posti lo script, come faremmo altrimenti a tentare di
risolvere il problema senza scriverne uno da zero?
Pensavo una cosa del genere
Passi effettuati da me
1.       ho creato un file richiesta_codice.wav nel formato giusto
mono 8 khz ecc ecc e lo ho inserito in /var/lib/asterisk/sounds come
routine.
2.       ho creato un file controlla_codice.php con il seguente
contenuto
#!/usr/bin/php5 -q
<?php
//***Caricamento classi per interfacciamento as Asterisk
require_once('/var/lib/asterisk/agi-bin/phpagi.php');PERCORSO
PHPAGI.PHP
$agi=new AGI();
$agi->set_variable("CODICE_OK",0);
if($pass.txt($argv[1])=='OK')FILE DOVE CONTROLLARE LE PASSWORD
    $agi->set_variable("CODICE_OK",1);
//
Ed ho inserito il file con i permessi giusti di esecuzione (come da
bravo e vecchio utente unix) nella dir /var/lib/asterisk/agi-bin
3.       ho creato un file pass.txt con due passord di prova separate
dal return (a capo e via)
4.       ho modificato il contesto così
exten=>s,1,Answer
exten=>s,2,Read(CODICE,richiesta_codice.wav,5,,1,2)
exten=>s,3,AGI(controlla_codice.php,${CODICE})
exten=>s,4,GotoIf($[${CODICE_OK} = 1 ]?5:6)
exten=>s,5,Dial(SIP/2004)NUMERO DELL’INTERNO CHE MI OCCORRE
exten=>s,6,Hangup
Adesso mi sorge spontanee delle domande e poi dimmi se imparo oppure
no?
Il file pass.txt dove lo inserisco?
Il contesto che ho creato è giusto? Oppure al posto delle s devo
inserire l’interno (extension) tipo exten=>2004,1,Answer……?
Domandona dove lo inserisco il contesto?
 Adesso provo a fare alcune modifiche a quello che hai postato tu e
vedo Grazie per adesso sei un professionista serio

 Domandona dove lo inserisco il contesto?
Se ti serve per trattare una chiamata entrante devi trovare il modo di 
richiamarlo dal contesto dove tratti le chiamate entranti.


Mandi! ipvoice
  In chel dì si favelave...
i> Vorrei realizzare uno script agi per asterisk in modo che un chiamante
i> debba usare una password per accedere ad un numero tipo chiamo il mio
i> ivr premendo il tasto 3 acceddo a mario ma chide la password e dopo
i> suona...
...io ho trovato grande ispirazione da:
 
http://etel.wiki.oreilly.com/wiki/index.php/Main_Page
-- 
  Il Premier si è tirato su il mento,
  ma le balle gli cascano da tutte le parti		(?)


la riga è solo una prova cioè uno pseudo

cosa cambia dal codice trixbox al codice di asterisk? perchè ho notato
alcune differenze ma piccolissime.
come posso fare con questo avendo cambiato alcune cose tipo:
[globals]
FWD_ROUTE = quì non so cosa inserire?
EXT_NUM_01 = 025558! il numero deve essere tronato o intero con il
prefisso tipoi 0232456589 completo?
; cli accettati e inoltrati direttamente a destinazione
CLI_BO_01 = 515522.
CLI_PA_01 = 976677.
; codici cliente
ACT_BO = 123456
ACT_PA = 789012
; destinazioni di inoltro
FWD_BO_01 = 3334444421
FWD_PA_01 = 3995555534
; destinazione di copertura, supervisore
FWD_FBK = 312012345
; timers
TIMEOUT_TRUNK = 40
TIMEOUT_SIP = 20
TIMEOUT_IAX = 20
;
MSG_CPATH = /var/lib/asterisk/sounds/custom/maint24x7x365/  questa
presumo sia la directory dove inserire i file wav redatti a puntino?
REC_MPATH = /var/spool/asterisk/monitor/ quasta è la dir dove
inserisce le registrazioni in wav?
;
[inbound-assistenza]
exten => _${EXT_NUM_01},1,Answer
exten => _${EXT_NUM_01},2, NoOp
exten =>
_${EXT_NUM_01},3,MixMonitor(${REC_MPATH}${STRFTIME(${EPOCH},,%Y)}/$
{STRFTIM­E(${EPOCH},,%Y%m%d-%H%M%S)}-${CALLERID(num)}.gsm|b)
;
exten =>
_${EXT_NUM_01}/_${CLI_BO_01},4,Dial(${FWD_ROUTE}/${FWD_BO_01},$
{TIMEOUT_TRU­NK})
exten =>
_${EXT_NUM_01}/_${CLI_PA_01},4,Dial(${FWD_ROUTE}/${FWD_PA_01},$
{TIMEOUT_TRU­NK})
exten => _${EXT_NUM_01},4,Goto(act-check-ivr,s,1)
;
exten => _${EXT_NUM_01},5,Hangup
;
; ----------------------------- ivr convalida account
;
Adesso ho un dubbio perchè il codice di un mio ivr su trixbox  è
diverso?

Scusate di tutte queste domande è per capire come funziona a me piace
molto....

 diverso?
Beh, almeno perchè il codice di trixbox è (o dovrebbe) essere orientato 
alla versatilità mentre il mio prototipo è pensato per risolvere 
un'esigenza specifica.
