Nehmen wir an, wir wollten über das Manager-Interface die Anzahl der Nachrichten in einer Voicemailbox abfragen. Diese einfache Aufgabe lässt sich leicht mit einem Skript für expect lösen.
Folgendes Expect-Skript verbindet sich mit dem AMI, loggt sich ein und gibt schließlich die Anzahl der neuen und alten Nachrichten in der angegebenen Mailbox aus:
#!/usr/bin/expect # # Aufruf: ./vmcount.exp 1234@default # der Benutzer-Zugang wie in manager.conf eingerichtet: set username "admin" set secret "geheim" set host "127.0.0.1" set port "5038" if {[llength $argv] != 1} { send_user "Fehler: Geben Sie eine Mailbox an!\n" exit 1 } # erstes Argument ist die abzufragende Mailbox: set mailbox [lindex $argv 0] send_user "Mailbox: $mailbox\n" # Durchschleifen von stdout zum User abschalten: log_user 0 # Verbindung zum AMI öffnen: spawn telnet $host $port # für den Fall, daß telnet abbricht weil keine Verbindung # hergestellt werden kann: expect_before eof { send_user "Fehler beim Verbinden.\n" exit 1 } # auf die Zeichenfolge "Manager" warten und bei Erfolg # ein Login-Paket senden: # expect "Manager" { send_user "Verbunden.\n" send "Action: Login\nUsername: $username\nSecret: $secret\n\n" # Beachten Sie, daß telnet Zeilenumbrüche (\n) automatisch # in CR LF (\r\n) umwandelt. Man darf hier also nicht \r\n # angeben. } # Login erfolgreich?: # expect { -re "Response:\\s*Error" { send_user "Login fehlgeschlagen.\n" exit 1 } -re "Response:\\s*Success" { send_user "Eingeloggt.\n" # Anzahl der Mailbox-Nachrichten abfragen: send "Action: MailboxCount\nMailbox: $mailbox\n\n" } } expect { -re "Response:\\s*Error" { send_user "Abfragen der Mailbox fehlgeschlagen.\n" exit 1 } -re "Response:\\s*Success" {} } expect { -re "NewMessages:\\s*(\[\\d]*)" { send_user "Neue Nachrichten: $expect_out(1,string)\n" } } expect { -re "OldMessages:\\s*(\[\\d]*)" { send_user "Alte Nachrichten: $expect_out(1,string)\n" } } # Ausloggen - nicht unbedingt nötig, aber sauber: send "Action: Logoff\n\n"
Wir speichern das Skript als vmcount.exp
und setzen es mit chmod a+x vmcount.exp auf
ausführbar.
Aufruf:
$ ./vmcount.exp 123@default Mailbox: 123@default Verbunden. Eingeloggt. Neue Nachrichten: 0 Alte Nachrichten: 0