Fórumok
Hali!
IVR témában kellene nekem help! Nemrég kaptam egy asterisk-es feladatot.
A feladat, hogy a felhasználó felhívja a számot, amire én IVR-ből
adott menüvel az adatlekérdezés menüponthoz irányítom. Itt két
bepötyögött számsor alapján SQL-ből vissza kell adjak neki egy számot.
A hangfile-rögzítés, meg minden megvan, csak nem tudom, milyen
algoritmussal szedjem ki a bepötyögött számokat, hogy megetessem
az SQL-lel.
Szóval ha valaki tud ilyen ideillő dialplan részletet, vagy macro-t
akkor megköszönném!
PLS HELP!
Előre is Köszi
CadilLAC
Hozzászólások
Nem értem igazán mit akarsz és félek ezzel nem vagyok egyedül.
Erre gondolsz?:
- vagy egy IVR és egy publikus behívó száma
- az IVR-nek van egy Adatlekérdezés menüje
- itt lehetőség van két számsor megadása után "visszakapni egy számot"
Hogy érted, hogy visszakapni egy számot?
- felolvasni egy szám digit-eit
- vagy zene-"szám"-ot playback-elni, ami a kódhoz tartozik?
Hali!
Az első.
Behív, a gépnő válaszol, a hívó bepötyög egyszer 8 számjegyet, mégegyszer 8 számjegyet, ezek alapján pedig nekem MySQL-ből ki kell olvasnom egy ezekhez tartozó harmadik számot(integer), amit a gépnő visszaolvas a hívónak.
CadilLAC
Valami ilyesmi lenne. Nem tudom, hogy miként akarod elérni az adatbázist, én ODBC-t feltételeztem.
extensions.conf:
[submenu]
exten => _X.,1,NoOp(Welcome in this submenu)
; Read the first number
exten => _X.,n,Read(number1|enter_number1|8||10)
; Read the second number
exten => _X.,n,Read(number2|enter_number2|8||10)
; Now you have got number1 and number2
; Look for number in the database
exten => _X.,n,Set(number=${ODBC_GET_NUMBER(${number1},${number2})})
; To be or not to be
exten => _X.,n,GotoIf($["${number}"=""]?not_found)
; Say number
exten => _X.,n,SayNumber(${number},f)
exten => _X.,n(not_found),Hangup()
Lehet van benne kicsi elírás, de szerintem így mennie kell.
func_odbc.conf:
[GET_NUMBER]
dsn=yourdsn
read=SELECT `number` FROM `numbers` WHERE `number1` = '${ARG1}' AND `number2` = '${ARG2}'
Megjegyzés:
- enter_number1 hangfájl: "adja meg az első számot"
- enter_number2 hangfájl: "adja meg a második számot"
- a /var/lib/asterisk/sounds-ba rakd be
- ha nem kell, akkor egyszerűen hagyd üresen a Read-nál: Read(number2||8||10)
- a Read a végén az 10-el azt jelzi, hogy 10 sec-ig vár
- ODBC esetén be kell még állítanod a "yourdsn"-t és az asterisket úgy kell fordítani, hogy a unixodbc fennt van a gépen
- a SayNumber angolul mondja be, magyar bemondásra nincs lehetőség alapból
- ha mégis akarod, akkor az egy kicsit körülményes: fel kell venni a magyar hangokat és át kell írni a say.c-t az asteriskben (remélem azt használja a SayNumber ...)
Nos?
Hali!
No eljutottam a dologig.
Sajnos az SQL query eléggé bonyolult, belefagyott az ODBC.
Szimpla queryvel működött, de ebbe belefagyott:
SELECT balance FROM `card_balance` WHERE account in
(select concat(card_data.tax, card_data.cardtype) from card_data, employee_data where card_data.tax = employee_data.tax and card_data.bin = 'xxxxxx' and card_data.cardtype = 'xx' and card_data.cardnumber = 'xxxxxxx' and employee_data.birthdate = 'xxxx-xx-xx')
Pedig helyes adatokkal töltöm fel az X-et, és az asterisk-es gépről MySQL Query Browserrel ugyanaz a query lefut.
Úgyhogy valami PHP-s AGI scriptet próbálok írni, de ha meg tudtok segíteni sablonos példakóddal, akkor megköszönném.
Üdv
CadilLAC
Emlékeim szerint bizonyos query hossz felett nem dolgozik megfelelően (sehogy?).
Ezt a köv. módokon kerülheted meg:
- tárolt eljárás
- külső script hívás (system)
- AGI hívás (ez lehet tetszőlegesen bash/c/perl/php/etc)
a voip-info.org -on abszolute kiváló examplek vannak, és google is segít :-)
a saynumber kiváloan beszél magyarul is, nem kell átírni semmit se...
a hangot fel kell tölteni (jó,ezt írtad Te is :), valamint set(language)=hu
avagy uezt megtenni a sip és dahdi (zaptel) conf-ban (ill. ki mit használ még)