.titleBar { margin-bottom: 5px!important; }

Brauche Hilfe für spezielle SMS-Anwendung

Dieses Thema im Forum "Asterisk Skripte" wurde erstellt von betateilchen, 4 Dez. 2005.

  1. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Hallo !

    Ich kann zwar inzwischen im Dialplan fast alles irgendwie hinbiegen, aber mit Skripten stehe ich auf Kriegsfuß.

    Ich möchte gerne folgendes machen:

    - Mein SMS-fähiges Festnetztelefon ist über IAXy mit dam Asterisk verbunden
    - ich kann vom Festnetztelefon aus eine SMS absetzen, die der Asterisk korrekt mit SMS() annimmt und in das entsprechende Verzeichnis /var/spool/asterisk/sms schreibt (diese Dateien mit dem kryptischen Filename)

    Soweit ist alles klar. Nun kommt der "schwierige" Teil:

    Ab jetzt geht der SMS Versand nicht mehr über die SMS() Applikation oder die smsq weiter, sondern über ein spezielles AGI Skript (das ich vom Gatewaybetreiber schon habe). Dieses Skript rufe ich einfach im Dialplan mit agi(sendsms|Empfängernummer|Text|[Absendernummer]) auf. Das funktioniert auch soweit.

    Mit fehlt nun die Verbindung zwischen dem Spoolfile und dem Send-Skritp. Das heißt, aus der Datei im Spoolverzeichnis, die von SMS() angelegt wird, müßten irgendwie die benötigten 3 Werte ausgelesen und an den Dialplan zurückgegeben werden, damit ich das AGI zum Versenden damit füttern kann.

    Die Beiträge hier im Forum zum Thema SMS & Asterisk habe ich durch - da wird so ein Fall noch nicht behandelt.

    Danke für Unterstützung.
     
  2. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    bau Dir einfach noch ein agi-skript, das nichts anderes macht als die SMS-Datei zu parsen und dann einfach ein paar set_var ausführt die dann die Werte für sendsms, ... etc. beinhalten. Dann die Variablen an das andere agi-Skript übergeben.

    Oder aber du modifizierst das AGI-Skript, dass es das gleich selber macht und Du statt den 4 Parametern nur den Dateinamen des spoolfiles übergibst.

    Fertig.
     
  3. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Du hast zumindst genau erkannt, was ich haben möchte :mrgreen: und wer baut mir bitte so ein AGI Skript ? (Das war eigentlich der Hintergrund meines Postings)
     
  4. rajo

    rajo Admin-Team

    Registriert seit:
    31 März 2004
    Beiträge:
    1,958
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Na, so schwer ist das doch nicht. Ein Test-agi-Skript gibt es im asterisk/agi Ordner, auf voip-info.org sollte die Funktionsweise für AGI genauestens beschrieben sein und wie man shell-skriptet erfährt man hier: http://www.netzmafia.de/skripten/unix/unix8.html.
    Ansonsten: "man grep", "man sed", "man cut", "man tr" -- mehr sollte nicht notwendig sein. :)
     
  5. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    ich sehe das problem darin, herrauszufinden welche datei die aktuelle SMS ist;
    sonst kein problem, habe zwar nicht viel ahnung von perl - das würde ich mir aber noch zutrauen.
     
  6. betateilchen

    betateilchen Grandstream-Guru

    Registriert seit:
    30 Juni 2004
    Beiträge:
    12,882
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    am Letzenberg
    Da im Normalfall nur eine Datei in diesem Spool-Verzeichnis steht, sollte der Dateiname keine Rolle spielen, wenn man das ganze einfach in eine Schleife packt, die für alle Dateien (*) das Script ausführt und die bearbeitete Datei danach löscht.
     
  7. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    ich schau mir das ganze mal an
     
  8. chaos2000

    chaos2000 Aktives Mitglied

    Registriert seit:
    22 Aug. 2004
    Beiträge:
    2,028
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Ort:
    LE
    schau mal hier drauf:
    Code:
    #!/usr/bin/perl -w
    #
    
    
    $delete=0;                                  #vorhandene Dateien löschen?
    $dir = $ARGV[0];                         #Verzeichnis (übergabewert)
    
    
    
    chdir($dir);
    my @files = glob("*");
    #print @files;
    
    foreach $f (@files){
        open(DATEI, $f);
        @lines = <DATEI>;
        close(DATEI);
    
    #    print 'File: '.$f;
        my ($destination, $sender, $text);
    
        foreach $i (@lines){
      
    	$i=~m/da=(\w+)/;
            $destination = $1;
        
    	$i=~m/oa=(\w+)/;
    	$sender = $1;
        
    	$i=~m/ud=(\w+)/;
    	$text = $1;
        }
    #    print $text;
        
        if($delete){unlink($f);}
    
    
    #hier müsste jetzt dein script zum senden der nachricht(en)
    }
    
    schwierig wird es wenn die Variablen an Asterisk zurück gegeben werden sollen.
     
  9. Liquido

    Liquido Neuer User

    Registriert seit:
    13 Jan. 2006
    Beiträge:
    57
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Beruf:
    System-Engineer
    Halli Hallo,

    ich wollte ein Script haben um eingehende SMS per Email zu versenden und hab deines hier gleich als Vorlage benutzt.

    Ich poste das Script mal hier, viellleicht hat ja noch jemand verwendung dafür.

    Code:
    #!/usr/bin/perl -w
    #
    
    
    $delete=1;                                  #vorhandene Dateien löschen?
    $dir = "/var/spool/asterisk/sms/mtrx/";                         #Verzeichnis (übergabewert)
    
    
    
    chdir($dir);
    my @files = glob("*");
    # print @files;
    
    foreach $f (@files){
        open(DATEI, $f);
            @lines = <DATEI>;
        close(DATEI);
    
        #    print 'File: '.$f;
        my ($destination, $sender, $text);
    
        foreach $i (@lines){
    
            if ( $i=~m/scts=(\X+)/ )  {
            $destination = $1 }
    
            if ( $i=~m/oa=(\X+)/ ) {
            $sender = $1; }
    
            if ( $i=~m/ud=(\X+)/ ) {
            $text = $1; }
        }
        #print $sender;
        #print $text;
        #print $destination;
    
        if($delete){unlink($f);}
    
        $mail = "echo '" . $text . $destination  . "' | mail hans.muster\@muster.com -s 'SMS von " . $sender ."'";
    #    print $mail
        system ($mail);
        
    }