View Full Version : gateway gsm, dtmf e asterisk: problemi
darkbasic
16-10-2008, 17:15
Ho un gateway Portech MV-374 e utilizzo il codec alaw/ulaw per comunicare fra centralino e gateway gsm.
Impostando dtmfmode=inband ho dei problemi con il riconoscimento dei DTMF (non ne azzecca mai uno e li sbaglia sempre allo stesso modo).
Mettendo dtmfmode=rfc2833 invece il riconoscimento funziona, salvo cannarne qualcuno a random quando il cellulare con cui chiamo il gateway non ha molto campo :'(
E' normale questa cosa? Temo di sì purtroppo, vero? :(
In tal caso ho pensato ad una possibile soluzione: inserire due volte il numero da chiamare via dtmf separando i due numeri con un #, salvo poi verificare in asterisk se la parte prima del # e quella dopo coincidono (nel caso coincidano compone il numero, altrimenti da un messaggio di errore e butta giu).
Un'altra soluzione che mi è venuta in mente è il text to speach tramite festival (magari festival+mbrola che è una soluzione qualitativamente migliore).
Che ne pensate?
P.S.
Allego la parte di config incriminata:
[131]
type=friend
call-limit=1
canreinvite=no
context=gsm2sip
regexten=131
;dtmfmode=inband
dtmfmode=rfc2833
fromuser=131
username=131
secret=secret
host=dynamic
insecure=very
qualify=yes
disallow=all
allow=ulaw
;allow=alaw
(131 è il gateway gsm)
[gsm2sip]
exten => _500,1,Answer
exten => _500,n,Set(TIMEOUT(digit)=3)
exten => _500,n,Set(TIMEOUT(response)=6)
exten => _500,n,DISA(no-password|myphones)
(500 è il numero che chiama il gateway gsm quando riceve una telefonata)
Non ho ancora provato il 2-stages-dialing del portech, che voi sappiate funzionerebbe meglio oppure è soggetto agli stessi problemi?
darkbasic
18-10-2008, 10:44
up
dawid999
18-10-2008, 21:19
hmmm perchè ulaw al posto di alaw oppure gsm?
hai provato con dtmf impostato a info?
il 13/10 portech ha fatto uscire un nuovo firmware,ti consiglio di metterlo su (finalmente gli sms funzionano bene lol).
come sono settate le impostazioni dtmf del portech?
darkbasic
20-10-2008, 23:53
Impostazioni del gateway quando utilizzo inband su asterisk:
- Inband DTMF
- Mobile DTMF debounce: 80
Quando invece su asterisk imposto rfc2833 metto rfc2833 anche sul gateway.
Ho notato che con inband spesso e volentieri i numeri tendono ad essere duplicati, quindi probabilmente va aggiustato il valore di debounce (in effetti di default il gateway era impostato per usare rfc2833).
Edit: ho notato che nelle impostazioni DTMF nel cellulare ho DTMF:lungo, forse va impostato su corto
Domani proverò anche con info.
Per quanto riguarda il firmware ho letto che bisogna mandargli una mail per farselo inviare :confused:
Mi confermi che è così?
Ciao e grazie
darkbasic
20-10-2008, 23:55
hmmm perchè ulaw al posto di alaw oppure gsm?
Era giusto per sapere quale codec stesse utilizzando, quando debuggo mi piace eliminare il maggior numero di variabili possibile.
darkbasic
21-10-2008, 00:32
Ecco il mio piccolo workaround...
Se 1234 è il numero della sim nel centralino e 9876 è il numero da chiamare, salvo nella rubrica del cell il seguente numero: 1234p9876*9876
In questo modo il centralino verifica se il numero prima dell'asterisco corrisponde a quello dopo ed eventualmente effettua la telefonata, altrimenti riattacca.
Ovviamente se il numero non è salvato in rubrica ma bensì viene digitato dall'utente tutto ciò non ha senso in quanto l'utente può dare conferma o meno della correttezza previo spelling (in questo caso l'asterisco non sarà presente nel DTMF inviato e asterisk agirà di conseguenza).
Tradotto in codice:
[myphones]
exten => _X.,1,Answer()
exten => _X.,n,Set(i=1)
; Controllo l'eventuale presenza di * in quanto se presente va verificata la correttezza del numero ricevuto (i numeri in rubrica sono salvati in questo modo: numero*numero)
exten => _X.,n,While($[${i} <= ${LEN(${EXTEN})}])
exten => _X.,n,GotoIf($["${EXTEN:$[${i}-1]:1}" = "*"]?rubrica)
exten => _X.,n,Set(i=$[${i} + 1])
exten => _X.,n,EndWhile()
; Non c'è traccia di *, il numero ricevuto non può essere verificato quindi deve esserne fatto uno spelling e va chiesto all'utente se il numero inserito è corretto
exten => _X.,n,Set(i=1)
exten => _X.,n,While($[${i} <= ${LEN(${EXTEN})}])
exten => _X.,n,SayNumber(${EXTEN:$[${i}-1]:1})
exten => _X.,n,Set(i=$[${i} + 1])
exten => _X.,n,EndWhile()
; DA COMPLETARE
exten => _X.,n,Hangup()
; RUBRICA
; Controllo che ci siano altri numeri prima di *
exten => _X.,n,GotoIf($[${i} = 1]?errato)
; Controllo che * non sia l'ultimo numero
exten => _X.,n,GotoIf($[$[${i} + 1] > ${LEN(${EXTEN})}]?errato)
exten => _X.,n,GotoIf($[${EXTEN:${i}:$[${LEN(${EXTEN})-${i}}]} = ${EXTEN:0:$[${i}-1]}]?chiama:errato)
; ERRATO
exten => _X.,n(errato),Hangup()
; CHIAMA
exten => _X.,n(chiama),Dial(SIP/${EXTEN}@EuteliaVoIP,20)
exten => _X.,n,Hangup
Ho notato che quando con il cellulare termino la chiamata, il telefono chiamato continua a squillare (tral'altro per molto più tempo dei 20 secondi per cui dovrebbe squillare al massimo). Come mai?
dawid999
21-10-2008, 11:42
in sip responses ti conviene mettere 180 ringing in off e 183 session progress su on, in questo modo eviti ad esempio che il portech ti dia il segnale di libero quando in realtà il telefono che stai chiamando è spento o non raggiungibile.
Per il firmware, si,scrivi all'indirizzo e-mail che viene indicato (il 370 e 372 sono scaricabili dal sito ma sono differenti da quelli del 374).
Il problema si presenta per chiamate in entrata (portech-->centralino) o in uscita (centralino-->portech)?
per chiamare in uscita nella tabella 'lan to mobile' ti conviene mettere # sotto 'call num' cosi eviti il two stage dialing e potrai chiamare direttamente in uscita senza dover digitare una volta connesso al portech il numero da chiamare.
quindi sul dialplan ti basterà passare al portech direttamente il numero da chiamare:
exten=>_0.,1,Dial(SIP/portech/${EXTEN:1})
Personalmente non ho mai avuto problemi di dtmf con valori di default del portech e "auto" lato asterisk.In ogni caso penso che conviene prima giocare con quelli e sfruttare workaround simili solo come ultima risorsa.
darkbasic
21-10-2008, 12:21
in questo modo eviti ad esempio che il portech ti dia il segnale di libero quando in realtà il telefono che stai chiamando è spento o non raggiungibile.
Perfetto, era una delle cose che ti volevo chiedere :)
Il problema si presenta per chiamate in entrata (portech-->centralino) o in uscita (centralino-->portech)?
Sicuramente per le chiamate in entrata, per quelle in uscita non ci ho fatto caso ma non mi sembra.
per chiamare in uscita nella tabella 'lan to mobile' ti conviene mettere # sotto 'call num' cosi eviti il two stage dialing e potrai chiamare direttamente in uscita senza dover digitare una volta connesso al portech il numero da chiamare.
Gia fatto, l'unico inconveniente era per l'appunto che squillava prima ancora di sapere se il numero era occupato o meno.
Personalmente non ho mai avuto problemi di dtmf con valori di default del portech e "auto" lato asterisk.In ogni caso penso che conviene prima giocare con quelli e sfruttare workaround simili solo come ultima risorsa.
Senz'altro, lo scriptino l'ho fatto solo ed esclusivamente perché nel frattempo mi permette comunque di chiamare e in ogni caso mi da un feedback per vedere se il numero ricevuto è corretto o meno.
darkbasic
21-10-2008, 14:19
Ho provato anche con il portech con impostazioni di default (rfc2833 e Mobile DTMF debounce: 80) e dtmfmode=auto in asterisk (dtmf lungo nel cellulare, che è il valore di default): niente da fare :muro:
Ecco alcune prove inviando 01234567890123456789:
rfc2833/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf lungo nel cell):
012345578901234567899
rfc2833/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf breve nel cell):
012345578901234467899
Inband/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf lungo nel cell):
00124556788990012245566788999
Inband/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf breve nel cell):
01245567890122455667899
Info/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf lungo nel cell):
012345678901234567899
Info/Mobile DTMF debounce: 80 e dtmfmode=auto (dtmf breve nel cell):
01234567890123456789
Quest'ultima combinazione sembrerebbe funzionare, ma basta un ulteriore tentativo per dimostrare che anch'essa non funziona:
012345678901234567899
Non so più che pesci pigliare, la regolazione Mobile DTMF debounce non l'ho toccata perché non sembra produrre effetti..
darkbasic
21-10-2008, 15:01
Fottuti motorola: ho provato con un LG e dtmfmode=info e per ora nessun problema :mad:
L'invio automatico dei dtmf del mio motorola fa veramente cagare, si riesce ad inviare il numero voluto soltanto inviando a mano i dtmf e tenendo premuti i tasti per mezzo secondo almeno :muro:
P.S. forse il nome più appropriato sarebbe motoSola, per essere peggio di un LG (!) -senza antenna per giunta- ce ne vuole...
darkbasic
21-10-2008, 15:15
Ho notato che quando con il cellulare termino la chiamata, il telefono chiamato continua a squillare (tral'altro per molto più tempo dei 20 secondi per cui dovrebbe squillare al massimo). Come mai?
Problema risolto, non so come. Semplicemente ora non ci fa più (voglio sperare che non sia colpa del motosola anche in questo caso :mad: )
dawid999
21-10-2008, 15:55
hehe :)
in ogni caso fai la richiesta per il nuovo firmware, magari risolvi pure il problema del motorola ;)
(fai l'aggiornamento del fimrware solo con IE con firefox o altri non vuole caricarlo perchè non sono supportati)
darkbasic
21-10-2008, 18:58
hehe :)
in ogni caso fai la richiesta per il nuovo firmware, magari risolvi pure il problema del motorola ;)
Gia fatta, sto aspettando che mi rispondano ;)
(fai l'aggiornamento del fimrware solo con IE)
Azz questa è una bella scocciatura invece, perché devo procurarmi un pc con winzozz :muro:
darkbasic
21-10-2008, 23:29
Oggi ho continuato a smanettarci, a parte quella piccola incompatibilità portech/motosola :D devo dire che il gateway che mi hai consigliato è davvero _FANTASTICO_ ;)
Al momento mi manca da configurare solo la parte relativa alla gestione delle code e lo smistamento verso altri provider qualora tutte le sim siano occupate, ho preferito non farlo stasera perché voglio studiarmi con calma la situazione e scegliere la soluzione più adeguata.
Non ho ancora provato a forzare il callerid delle chiamate in uscita, ma penso che sia impossibile e che dovrò ripiegare sul classico #31#... Confermi? :stordita:
darkbasic
22-10-2008, 21:44
Mi è venuto un dubbio.. nell'utilizzo delle code che ho fatto finora il fine è sempre stato raggiungere un gruppo di interni, ma come gestico le code per l'utilizzo di un _CANALE_? :eek:
Mi spiego meglio: a me serve che gli utenti si spartiscano una sim (la 131 stando al config che ho postato), dando priorità assoluta alle chiamate provenienti da un determinato interno (il 132, ovvero le chiamate provenienti dall'altra sim) e alle chiamate in entrata (tutti coloro che vogliono comunicare tramite DISA).
La facevo semplice e invece mi sono bloccato :help:
P.S.
Sono ufficialmente innamorato delle time conditions, è troooppo bello non avere rotture di scatole sul cellulare quando sono all'università :D
dawid999
22-10-2008, 23:52
callerid non puoi forzarlo penso.
invece di macchina win usa ie4linux
http://www.tatanka.com.br/ies4linux/page/Main_Page
lo uso sempre per configurare i portech da linux :)
riguardo alle code non ho capito benissimo cosa vorresti fare?
se ci sono chiamate che provengono da trunk differenti e finiscono nella coda perchè gestire le priorità delle chiamate nella coda? :)
se uno che finisce in coda e vuole aspettare lo fa altrimenti mette giu :)
ma forse ho capito male io?:p
darkbasic
23-10-2008, 12:23
Mi spiego meglio:
Ho più interni che vogliono chiamare e ho a disposizione un solo trunk con call-limit=1. Uno di questi interni deve poter scavalcare la coda e telefonare per primo appena il trunk si libera in barba agli altri che stanno aspettando da molto tempo prima di lui. Inoltre questo stesso trunk deve poter ricevere delle telefonate in ingresso (l'ideale sarebbe se il portech potesse gestire anche l'avviso di chiamata e conseguentemente dare massima priorità alle chiamate in ingresso, ma forse questo è chiedere troppo).
darkbasic
23-10-2008, 18:54
Ho scoperto perché il motorola svarionava :eek:
A differenza di molti altri cellulari, quando invia i DTMF in seguito al carattere speciale p emette il suono relativo. Il suono arrivava fino al microfono e il centralino lo interpretava come un'ulteriore dtmf :eek:
Ho provato a coprire il microfono e ora funziona alla perfezione :mad: :muro:
In compenso ho scoperto che non mi prende l'ip per le sim 3 e 4, ho contattato l'assistenza portech e mi hanno chiesto accesso remoto.
dawid999
24-10-2008, 20:26
hehe in realtà per accedere alle sim 1 e 2 usi l'ip 192.168.0.100 per la 3 e 4 192.168.0.102 :)
con l'ultimo aggiornamento hanno messo tutto sotto un unico ip
darkbasic
24-10-2008, 20:33
Si ma come secondo ip mi mette 0.0.0.0 e non mi da la possibilità di configurarlo :muro:
Ho provato a resettare e a riconfigurare tutto più volte e alla fine si è deciso a prendermelo, ma nonostante tutto il tizio della portech crede che ci sia qualcosa che non va e vuole dare un'occhiata. Ormai penso che lo ribeccherò online lunedì..
Sai darmi una mano invece per il problema con le code?
dawid999
27-10-2008, 08:37
in ogni caso per configurare il portech usa ie4linux,purtroppo si riesce a configurare/visualizzare bene solo con quello.
puoi gestire la priorità delle chiamate che entrano in coda con la variabile QUEUE_PRIO ma non penso sia esattamente quello che vorresti tu...
http://www.voip-info.org/wiki/view/Asterisk+call+queues
The new addition provides the ability to operate queues as priority queues in addition to the current FIFO mode. This gives the ability to queue a call not at the end of the queue but anywhere in the queue, according to the call's priority.
Now you can have just one queue servicing all the calls (more important and less important) with the right order. The priority of a call entering a queue is determined by a special channel variable, QUEUE_PRIO. Higher values of this variable mean higher priority. By not setting this variable, all calls have the same priority, 0, by default (FIFO). E.g.
; Important clients
exten => 111,1,Playback(welcome)
exten => 111,2,SetVar(QUEUE_PRIO=10)
exten => 111,3,Queue(support)
; Less important clients
exten => 112,1,Playback(welcome)
exten => 112,2,SetVar(QUEUE_PRIO=5)
exten => 112,3,Queue(support)
dawid999
27-10-2008, 09:23
potresti eseguire un controllo per verificare quale interno sta chiamando e in base a quello settare la variabile
darkbasic
28-10-2008, 06:54
Sì, sto usando ie4linux :D
Le priorità le avevo gia viste, ma rimane il problema fondamentale: come faccio a creare una coda per l'utilizzo di un trunk? :(
Non penso che possa mettere come member dei canali!
dawid999
28-10-2008, 08:23
beh alla fine il portech è "un interno sip" che risponde alle chiamate e poi le forwarda sulla rete gsm.come dispositivo può tranquillamente rispondere ad una chiamata sip senza inoltrarla subito vero la rete gsm,infatti la chiamata avviene in 2 passaggi.
non so però se si possa inserire in una coda,sto andando un po a naso, è una cosa che non ho mai provato :p
darkbasic
29-10-2008, 19:17
Non seguo il tuo ragionamento: il portech è sì un interno SIP, ma quando io devo telefonare lo utilizzo come se fosse un trunk.
Mi posteresti un codice di esempio per capire cosa intendi?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.