PDA

Voir la version complète : Reconnaissance des touches



VirtualCed
17/01/2011, 22h04
Bonjour,

Je souhaite utiliser mon Asterisk comme passerelle, que j'appelle avec mon GSM et de la je peux rappeler ailleurs.

J'ai cherché sur Google et j'ai trouvé ceci


[Recall]
exten => s,1,SetLanguage(fr)
exten => s,2,SIPDtmfMode(inband)
exten => s,3,DigitTimeout(4)
exten => s,4,ResponseTimeout(5)
exten => s,5,Read(Teltotel,beep,10)
exten => s,6,SayDigits(${Teltotel:0:1})
exten => s,7,SayDigits(${Teltotel:1:1})
exten => s,8,SayNumber(${Teltotel:2:2})
exten => s,9,SayNumber(${Teltotel:4:2})
exten => s,10,SayNumber(${Teltotel:6:2})
exten => s,11,SayNumber(${Teltotel:8:2})
exten => s,12,WaitExten

exten => #,1,GoTo(Recall,s,1)
exten => i,1,GoTo(Recall,s,1)
exten => t,1,GoTo(Recall,s,1)

exten => *,1,Dial(SIP/${Teltotel}@wengo-out)
exten => *,2,Hangup()


Il se plaignait du SetLanguage, je l'ai supprimé.
Pour le setdtmf, j'ai testé les trois valeurs mais aucune n'a rien changé.

Je me suis dit que c'était un soucis de reconnaissance du dtmf alors j'ai testé ceci (trouvé via Google)


[lecture]
exten => s,1(start),Gotoif($[ "${LEN(${extensao})}" < "3"]?collect:pstn)
exten => s,n,NoOp(Executing - ${extensao} - )
exten => s,1(collect),Read(digito,,10)
exten => s,n,SayDigits(${digito})
exten => s,n,Set(extensao=${extensao}${digito})
exten => s,n,GoTo(start)
exten => s,n(pstn),GoTo(from-pstn,s,1)
exten => h,1,hangup()

Et la le système me dit bien les touches que j'ai enfoncée.

J'essaye donc de reprendre la partie lecture de ce bout de code pour l'implanter dans l'autre mes sans succès.

Mon but final étant de faire


J'appelle avec mon GSM vers Asterisk.
Je tape une extension pour arriver à la gestion du transfert
Il vérifie que c'est mon numéro le caller id
Je tape un numéro
Il me le confirme
Je valide
Il appelle


Cela m'a l'air assez basique, mais je ne trouve pas :(

Je viens aussi de tenter de lire chiffre par chiffre


[Recall]
exten = accueil,1,Answer()
exten = accueil,n,Playback(not-as-important)
exten = accueil,n(debut),Gotoif($[ "${LEN(${extencomp})}" < "10"]?recup:int)
exten = accueil,n(recup),Read(chiffre,,1)
exten = accueil,n,Set(extencomp=${extencomp}${chiffre})
exten = accueil,n,GoTo(debut)
exten = accueil,n,Dial(SIP/${extencomp}@cust1000-sortant)


Il lit le premier chiffre, lit le deuxième (le concatène au premier) puis il part trop tôt :


-- Executing [accueil@Recall:3] GotoIf("SIP/didww.uk2-00000003", "1?recup:int") in new stack
-- Goto (Recall,accueil,4)
-- Executing [accueil@Recall:4] Read("SIP/didww.uk2-00000003", "chiffre,,1") in new stack
-- Accepting a maximum of 1 digits.
-- User entered '8'
-- Executing [accueil@Recall:5] Set("SIP/didww.uk2-00000003", "extencomp=8") in new stack
-- Executing [accueil@Recall:6] Goto("SIP/didww.uk2-00000003", "debut") in new stack
-- Goto (Recall,accueil,3)
-- Executing [accueil@Recall:3] GotoIf("SIP/didww.uk2-00000003", "1?recup:int") in new stack
-- Goto (Recall,accueil,4)
-- Executing [accueil@Recall:4] Read("SIP/didww.uk2-00000003", "chiffre,,1") in new stack
-- Accepting a maximum of 1 digits.
-- User entered '1'
-- Executing [accueil@Recall:5] Set("SIP/didww.uk2-00000003", "extencomp=81") in new stack
-- Executing [accueil@Recall:6] Goto("SIP/didww.uk2-00000003", "debut") in new stack
-- Goto (Recall,accueil,3)
-- Executing [accueil@Recall:3] GotoIf("SIP/didww.uk2-00000003", "0?recup:int") in new stack
[Jan 17 21:47:02] NOTICE[29001]: pbx.c:3739 pbx_extension_helper: No such label 'int' in extension 'accueil' in context 'Recall'
[Jan 17 21:47:02] WARNING[29001]: pbx.c:9602 pbx_parseable_goto: Priority 'int' must be a number > 0, or valid label
== Spawn extension (Recall, accueil, 3) exited non-zero on 'SIP/didww.uk2-00000003'


Je précise que je tourne avec Asterisk 1.6.2.x (x = 7 sur Ubuntu et x = 1 sur Debian)

Merci de votre aide.
cEd

Reaper
18/01/2011, 01h14
Bonjour, vous êtes perdu pour une simple raison d'utilisation de script écrit par les autres. en fait votre lecture de chiffres fonctionne, sauf que, le script il est juste mauvas.

Alors je vous conseille de:

Créer is script simple qui fais Read() et qui Noop votre variable (3 lignes avec answer)

Second étape, votre scenario est trop long, il faut simplifier, je vous propose de:

1: Répondre
2: Comparer si numero de l'appelant est dans une base de données astdb, si oui continuer, sinon bye.
3: Vous donner le dialtone
4: Appel

Pour réaliser tout ça il vous faut les fonctions:
gotoif
DB
DISA (le dialtone)

Pour apprendre comment les utiliser, dans asterisk il faut taper:
core show application NOM
core show function NOM

par exemple core show application disa

A vous de jouer.

ineagu
23/02/2011, 16h58
salut,

Je fait tout ceci avec l interface web freepbx...

1- incomming route avec mon callerid
2 - set destination vers un disa avec password

voila!
IN