Asterisk ivr help kellene

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?

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 :-)