Ergebnis 1 bis 15 von 15

Thema: Asterisk und AGI mit Bash - Variable übergeben

  1. #1
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54

    Asterisk und AGI mit Bash - Variable übergeben

    Hallo Freunde,

    ich versuche gerade ein kleines AGI Script auf Bash zu schreiben, damit bei eingehenden Anrufen in meiner SQL Datenbank der Name aufgelöst werden kann.

    Das Script funktioniert bereits, wenn ich es auf der Shell ausführe, ich frage mich jedoch, wie ich es schaffen kann, dass ich aus dem AGI, BASH Script die Variable dem Asterisk übergeben kann.

    Mein Script:
    Code:
    #/bin/bash -x
    IP_ADDR=localhost
    TABLE_NAME=kurzwahl
    USER_NAME=XXX
    IP_ADDR=localhost
    PASSWORD=XXX
    
    SQL=`echo "SELECT name from telephone_nr where durchwahl=$1" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $TABLE_NAME `
    CIDNAME=`echo $SQL | cut -d " " -f2-3`
    
    echo "SET VARIABLE NAME \"$CIDNAME\"\n"
    
    exit 0;
    Wenn ich im Asterisk ein Noop auf $NAME durchführe, ist es leer. Wenn ich es per Shell mit der Rufnummer starte, ist die Variable gefüllt.

    Hat jemand eine Ahnung, wie ich aus dem Bash Script die Variable dem Asterisk übergeben kann ?

    Danke!

  2. #2
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von chris-toph Beitrag anzeigen
    echo "SET VARIABLE NAME \"$CIDNAME\"\n"
    dieses Kommando ist falsch. Wenn du den stdout deines Scriptes dumpst muss es zum Setzen der Variable 'CALLERID(name)' beispielsweise so aussehen:

    Code:
    exec Set CALLERID(name)="testname"
    dein Script muss also irgendwann mal etwas wie
    Code:
    echo 'exec Set CALLERID(name)="testname"'
    ausfuehren.

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  3. #3
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    Hallo,

    vielen Dank für Deine schnelle Antwort. Irgendwie scheint aber auch das nicht zu funktionieren. Selbst wenn ich die CallerId(name) auf den festen wert "Testname" lasse, es wird nicht angezeigt. Auch die Variable ist leer.

    An was könnte das liegen ?

    Danke!

  4. #4
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von chris-toph Beitrag anzeigen
    An was könnte das liegen ?
    hast du mal Asterisk mit debug laufen lassen? Dann muss dort sowas wie:
    Code:
    [Jul 23 10:12:03]     -- AGI Script Executing Application: (Set) Options: (CALLERID(name)=testname)
    erscheinen, wenn dein Script eine entsprechende Anweisung auf stdout ausgibt.

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  5. #5
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    Mmm, der macht irgendwie garnichts:

    Code:
    AGI Tx >> agi_request: lookup.sh
    AGI Tx >> agi_channel: mISDN/2-1
    AGI Tx >> agi_language: de
    AGI Tx >> agi_type: mISDN
    AGI Tx >> agi_uniqueid: 1279873741.62772
    AGI Tx >> agi_callerid: XXXXXX
    AGI Tx >> agi_calleridname: unknown
    AGI Tx >> agi_callingpres: 0
    AGI Tx >> agi_callingani2: 0
    AGI Tx >> agi_callington: 0
    AGI Tx >> agi_callingtns: 0
    AGI Tx >> agi_dnid: unknown
    AGI Tx >> agi_rdnis: unknown
    AGI Tx >> agi_context: incoming
    AGI Tx >> agi_extension: XXXXX
    AGI Tx >> agi_priority: 1
    AGI Tx >> agi_enhanced: 0.0
    AGI Tx >> agi_accountcode:
    Du sagst, dass mein script auf stdin muss, mein script sieht nun wie folgt aus:

    Code:
    #/bin/bash -x
    IP_ADDR=localhost
    TABLE_NAME=kurzwahl
    USER_NAME=XXX
    IP_ADDR=localhost
    PASSWORD=XXX
    
    SQL=`echo "SELECT name from telephone_nr where durchwahl=$1" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $TABLE_NAME `
    TCIDNAME=`echo $SQL | cut -d " " -f2-3`
    
    echo 'exec Set CALLERID(NAME)="$TCIDNAME"'
    
    exit 0;
    ...muss da noch was geaendert werden ? - ich bin verwirrt.

  6. #6
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von chris-toph Beitrag anzeigen
    Mmm, der macht irgendwie garnichts:
    starte ihn z.B. so:
    Code:
    asterisk -vvvvvvvvvncT
    die Shell im Debug Mode 'bash -x' zu starten ist uebrigens sehr schlecht, da der Debug-Output evtl. zu Fehlinterpret. im Asterisk fuehren kann..

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  7. #7
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    Mm..ne - ich seh im Debug garnichts..das bash -x hab ich entfernt..

    EDIT: Ohje - ich habe bei meinem Script das "!" vergessen. Also im "#!/bin/bash". Das war das Problem. Nun funktioniert es - vielen dank für alles!
    Geändert von chris-toph (23.07.2010 um 11:43 Uhr)

  8. #8
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    Mmm,

    das Script läuft zwar perfekt - jedoch hab ich irgendwie, weshalb auch immer ein "Broken Pipe" in meinem Debug. An was könnte das denn liegen ?

    Code:
    [Jul 26 14:59:54] VERBOSE[11385] logger.c:     -- Launched AGI Script /var/lib/asterisk/agi-bin/lookup.agi
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_request: lookup.agi
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_channel: DAHDI/12-1
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_language: en
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_type: DAHDI
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_uniqueid: 1280149194.789690
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_callerid: XXX 
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_calleridname: unknown
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_callingpres: 1
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_callingani2: 0
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_callington: 33
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_callingtns: 0 
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_dnid: XXX  
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_rdnis: unknown
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_context: s2m
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_extension: XXXX
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_priority: 2  
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_enhanced: 0.0
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> agi_accountcode:
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> 
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Rx << exec Set lookupcid="8002"
    [Jul 26 14:59:54] VERBOSE[11385] logger.c:     -- AGI Script Executing Application: (Set) Options: (lookupcid=8002)
    [Jul 26 14:59:54] VERBOSE[11385] logger.c: AGI Tx >> 200 result=0
    [Jul 26 14:59:54] ERROR[11385] utils.c: write() returned error: Broken pipe
    [Jul 26 14:59:54] VERBOSE[11385] logger.c:     -- AGI Script lookup.agi completed, returning 0
    Mein Script:

    Code:
    #!/bin/bash
    TELNR=$1
    IP_ADDR=localhost
    TABLE_NAME=kurzwahl
    USER_NAME=XXX
    IP_ADDR=localhost
    PASSWORD=ZZZZ
    
    SQL=`echo "SELECT kurzwahl from telephon_nr where durchwahl=$TELNR" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $TABLE_NAME `
    TCIDNAME=`echo $SQL | cut -d " " -f2-3`
    if [ "$TCIDNAME" > "1" ]; then
    echo "exec Set lookupcid=FIL:\"$TCIDNAME"\"
    
    else
    exit 0;
    
    fi
    
    exit 0;
    Vielen Dank im Voraus!

  9. #9
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von chris-toph Beitrag anzeigen
    Mmm,

    das Script läuft zwar perfekt - jedoch hab ich irgendwie, weshalb auch immer ein "Broken Pipe" in meinem Debug. An was könnte das denn liegen ?
    weil das Script seinen Input von Asterisk auf stdin nicht 'wegliest'.

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  10. #10
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    hey,

    vielen Dank für Deine Antwort. Und wie kann ich das anpassen, dass es klappt ?

    Danke!

  11. #11
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von chris-toph Beitrag anzeigen
    vielen Dank für Deine Antwort. Und wie kann ich das anpassen, dass es klappt ?
    also ich verwende fuer AGI nur awk (keine Shell) Scripten

    wie es bei einer Shell geht kann ich nicht genau sagen. Vielleicht das
    Code:
    while read a;do :;done
    moeglichst weit vorne im Script ausfuehren. Ohne Gewaehr. Natuerlich stehen hier nuetzliche Daten drin, die du aber offenbar nicht brauchst. Deswegen Daten einlesen und wegwerfen.

    Jedes 'exec ' Kommando erzeugt auch noch etwas Input (Status) von Asterisk.
    Abe vielleicht reicht es schon so wie beschrieben.

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  12. #12
    Moderator Avatar von rentier-s
    Registriert seit
    19.10.2006
    Ort
    Niederbayern
    Beiträge
    2.093
    Hallo,

    sollte man nicht grundsätzlich nach jedem Befehl, den man an Asterisk schickt, den stdin auslesen und auswerten? Sonst erkennt man im AGI doch nicht, wenn der Befehl aus irgendwelchen Gründen nicht richtig verarbeitet wurde.

    Ich lese am Ende jedes AGIs den stdin einfach nochmal komplett aus. Damit kommt die Warnung mit der Broken Pipe bei mir kaum mehr vor. Und wenn, dann hab ich sie ehrlich gesagt immer ignoriert. Außer dass die Daten ungenutzt bleiben, kann doch eigentlich nicht passieren, oder?

    Svenja
    Alles schöne im Leben ist entweder verboten, zu teuer oder macht dick!

  13. #13
    IPPF-Fünfhundert-Club
    Registriert seit
    13.11.2005
    Beiträge
    711
    Zitat Zitat von rentier-s Beitrag anzeigen
    sollte man nicht grundsätzlich nach jedem Befehl, den man an Asterisk schickt, den stdin auslesen und auswerten?
    doch, sicherlich. Ich mache das in meinen awk Scripten immer so. Aber fuer eine Minimalloesung geht's wie beschrieben evtl. noch einfacher.

    Ich lese am Ende jedes AGIs den stdin einfach nochmal komplett aus. Damit kommt die Warnung mit der Broken Pipe bei mir kaum mehr vor
    richtig.

    Außer dass die Daten ungenutzt bleiben, kann doch eigentlich nicht passieren, oder?
    ich habe auch noch keine anderen 'Nebenwirkungen' gesehen

    - sparkie
    PBX Functionality:____ISDN-GSM-SIP Gateway
    PBX Software:_________debian 6.0 + asterisk 1.6.2.14-rc1 + chan_lcr 1.7 (TE/NT-mode) + chan_dongle r13
    PBX Hardware:_________Intel D945GSEJT + HFC-S (PCI/USB) + HUAWEI E169
    Terminal Equipment:___Gigaset SX205
    DSL/GSM/CABLE Router:_Jetway JNF92-270-LF + JAD3INLANG + debian 6.0 + some firewalling awk-scripts
    FRITZ!Box:____________nein danke

  14. #14
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    Hallo,

    leider scheint das mit dem

    Code:
    while read a;do :;done
    nicht zu funktionieren. Gibt es ggf. noch andere Tipps ?

    Danke!

  15. #15
    IPPF-Fortgeschrittener
    Registriert seit
    11.12.2008
    Beiträge
    54
    So,

    nach langem hin und her, hab ich es nun endlich hinbekommen:


    Code:
    #!/bin/bash
    TELNR=$1
    IP_ADDR=localhost
    TABLE_NAME=kurzwahl
    USER_NAME=XX
    IP_ADDR=localhost
    PASSWORD=XXX
    stdin="0"
    
    while [ "$stdin" != "" ]
    do
    read stdin
    if [ "$stdin" != EOF ]
    then
    echo $stdin >> /dev/null
    fi
    done
    
    SQL=`echo "SELECT kurzwahl from telephon_nr where durchwahl=$TELNR" | mysql -h $IP_ADDR -u $USER_NAME -p$PASSWORD $TABLE_NAME `
    TCIDNAME=`echo $SQL | cut -d " " -f2-3`
    if [ "$TCIDNAME" > "1" ]; then
    echo "exec Set lookupcid=FIL:\"$TCIDNAME"\"
    
    read response
    echo $response >> /dev/null
    
    else
    exit 0;
    
    fi
    
    exit 0;
    Danke an alle, die mir hier geholfen haben.

Ähnliche Themen

  1. CLIR von Asterisk übergeben
    Von kombjuder im Forum Patton Inalp
    Antworten: 3
    Letzter Beitrag: 15.07.2009, 21:17
  2. cmd Authenticate Eingabe per variable übergeben
    Von Crackstar im Forum Asterisk Skripte
    Antworten: 10
    Letzter Beitrag: 16.09.2008, 12:01
  3. massige variable übergeben in Manager-Interface (AMI)
    Von Fredjam im Forum Asterisk Skripte
    Antworten: 0
    Letzter Beitrag: 31.07.2008, 09:51
  4. rufnummer per dtmf an asterisk übergeben
    Von psuter im Forum Asterisk Allgemein
    Antworten: 2
    Letzter Beitrag: 20.06.2005, 14:31
  5. CallerID von asterisk an Telefonanlage übergeben
    Von joern.jung im Forum Asterisk ISDN Allgemein
    Antworten: 11
    Letzter Beitrag: 05.01.2005, 11:31

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •