Telefonalarm mit Asterisk

stäubel

Neuer User
Mitglied seit
11 Aug 2006
Beiträge
198
Punkte für Reaktionen
0
Punkte
16
Hallo zusammen

Möchte mal versuchen ob ich es mit Asterisk hinkriege einen
Telefonalarm auszulösen.
D.h. jemand ruft an, spricht etwas auf und legt auf.

Anschliessend wählt Asterisk Telefonnummern hintereinander,
bis jemand abhebt und mit einer Taste quittiert.
Dieser hört anschliessend die aufgesprochene Meldung.

Wir würdet ihr das lösen?
Ich kenne leider nur die Callfiles und frage mich, ob
es vielleicht noch anders möglich ist dies zu lösen.

Ich habe auf diesem Test-Asterisk
auch die Realtime mySQL Anbindung installiert.
Gibt es vielleicht sogar die Möglichkeit anstatt per Callfile
über einen Eintrag in der Datenbank einen Call auszulösen?

Wäre für jeden Hinweis sehr dankbar!!

Grüsse Stäubel
 
das würde ich am einfachsten und auch elegantesten mit einer PHP-AGI Applikation lösen. Da kannst Du nicht nur alle Informationen aus Deiner MySQL Datenbank lesen, sondern Du kommst auch komplett ohne Callfile aus.
Hierzu ruft Asterisk das PHP Script auf und führt die entsprechenden Schritte aus, die Du beschrieben hast.

viel Erfolg!
 
Hallo spiderstar

Vielen Dank für deine Hilfe.
Aber ist dann das Problem nicht, dass das AGI-Script
auch sofort beendet wird, sobald der Anrufer auflegt?

Bei mir müsste eben, wenn ein Anrufer anruft,
Asterisk beginnen Leute zu informieren.
Wenn dann der Anrufer auflegt, muss Asterisk aber unbedingt
mit der Alarmierung selbständig weiter machen.

Viele Grüsse

Stäubel
 
Vielen Dank!!!!
Du hast mir sehr geholfen.
Das werd ich gleich mal austesten.

Grüsse Stäubel
 
Hallo Spiderstar

Kannst du mir vielleicht nochmals ein Stichwort geben? :oops:

Habe nun so ein Dead-AGI-PHP geschrieben,
welches wenn der Anrufer auflegt auch weiter läuft.
Wenn ich allerdings in diesem AGI-PHP wie folgt ein Dial drin habe:

Code:
fwrite(STDOUT,"EXEC Dial CAPI/EICON/0441234567\:0791234567/b 60 \"\"\n");
fflush(STDOUT);
$result = trim(fgets(STDIN,4096));
checkresult($result);

Wird dieses Dial doch abgebrochen, wenn der Anrufer auflegt.
Wahrscheindlich darf ich das nicht mit einem Dial lösen.

Aber sowas aus dem Script aufzurufen ist auch unschön, oder:

Code:
asterisk -rx 'dial 0791234567@default'

Ich weiss einfach nicht wie man den Asterisk dazu bewegen
kann ohne Callfiles von sich aus einen Anruf auszuführen.

Wäre sehr dankbar, für jeden noch so kleinen Hinweis.

Viele Grüsse Stäubel

Nachtrag:
Glaube werde jetzt einfach aus dem Dead-AGI-PHP das Manager
Interface ansprechen. So sollte ich es lösen können:

Code:
<?php

 $socket = fsockopen("192.168.0.53","5038", $errno, $errstr, $timeout);
 fputs($socket, "Action: Login\r\n");
 fputs($socket, "UserName: admin\r\n");
 fputs($socket, "Secret: blabla\r\n\r\n");

 fputs($socket, "Action: Command\r\n");
 fputs($socket, "Command: reload\r\n\r\n");
 $wrets=fgets($socket,128);

?>
Quelle: http://www.voip-info.org/...

Habe gerade noch gelesen, dass DeadAGI veraltet
sei und bei neueren Asterisk Versionen entfernt werden soll.

b14ck schrieb:
For the record: DeadAGI is deprecated in asterisk 1.6 and will be soon removed. It's not really an elegant way to handle this sort of thing. Basically, any program which needs to run after the call has been hungup probably shouldn't be an AGI :) You should be using AMI and listening for events, or using dialplan and reading the Dial() command flags (hint: one of them allows you to break out and continue running code after the callee or caller has hungup).
Quele: http://www.trixbox.org/...
 
Zuletzt bearbeitet:
Hallo Stäubel,

eins vorweg, Dead_AGI brauchst Du ab Asterisk 1.6 nicht mehr. Das war nur früher dazu gut, ein AGI ohne Channel zu starten.

Das Problem mit dem Dial im AGI ist, dass das AGI sozusagen die Kontrolle über den Channel verliert, sobald Du ein Dial ausführst.

Mit dem Wählen über AMI hast Du das Problem, dass Du erst mal keine Rückmeldung bekommst. Du weißt also nicht, ob der Anruf sauber erzeugt wurde. Außerdem kannst Du das AGI nicht unterbrechen, sobald jemand quittiert. Und Du musst entweder in festen Zeitintervallen wählen oder dem Originate ausreichend viele Retries mitgeben.

Mein Vorschlag wäre, das AGI aufzurufen, damit eine Variable zu setzen, die Du im Context in den Dial-Befehl einbaust. Dial selber aber über den Context. Damit wird das AGI erst mal beendet. Wenn jetzt jemand ran geht kannst Du über ein Makro die Quittier-Taste abfragen und die Sache beenden. Wenn niemand ran geht oder die Taste nicht drückt, dann gehst Du im Context weiter und führst das AGI erneut aus. Damit Du weißt wo Du in der Reihenfolge bist, musst Du im AGI z.B. eine (vererbbare) Variable mit der nächsten anzurufenden Datensatz-ID oder ähnliches setzen.

Wie Du das auch immer machst, denk bitte daran vorher für einen freien Kanal zu sorgen. Sonst wählst Du alle durch und nicht ein einziger Anruf ist wirklich erzeugt worden. Außerdem sollten die erforderlichen Daten im AGI oder wo auch immer geprüft und ggf. angepasst werden. Mir ist mal regelmäßig ein FollowMe auf die Bretter gegangen, weil ein Benutzer es irgendwie geschafft hat, eine Nummer mit Leerzeichen einzutragen.

Rentier
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.