Die Idee zu einer Serverüberwachung kommt irgendwann von selbst, wenn man mehrere Asterisk-Serve betreibt. Um halbwegs einen normalen Anruf nachzustellen, hatte ich mir überlegt, einen Asterisk-Server einen anderen anrufen zu lassen, der dann abhebt und lauscht. Der anrufende Asterisk sollte dann eine DTMF-Tonfolge senden, die der angerufene Server dann prüft, also z.B. 1234567890#. Empfängt der angerufene Server diese Daten korrekt, kam offensichtlich eine Verbindung zustande. Man kann das nun noch etwas näher an die Realität anpassen, indem man die DTMF-Signale wirklich als Audiodaten verschickt, man muss hier dann nur als DTMF inband angeben (aber auch empfangsseitig!).
Auf dem Server, der den Call empfängt kann man folgendes Shellskript aufrufen. Dieses Skript wird dann einen Anruf an den sendenden Server tätigen, der dann wiederum mit einer Extension des empfangenen Servers verbunden wird.
#!/usr/bin/php4
<?php
# Die Callerid ist untereinander ziemlich egal, es ist das, was man im Display sehen würde.
$callerid=999;
# Hier kommt die Extension für den empfangenden Server hin:
$exten=1234;
$zufall=rand(1,100000);
echo ">> Testcall...\n";
$fd=fopen("tmp.txt", "w");
fputs($fd, "Channel: SIP/4321@sip.example.com\n");
fputs($fd, "MaxRetries?: 1\nRetryTime: 60\nWaitTime: 30\nContext: default\nExtension: $exten\nPriority: 1\n");
fputs($fd, "Callerid: $callerid\n");
fclose($fd);
copy("tmp.txt", "/var/spool/asterisk/outgoing/$zufall");
?>
Zusätzlich brauchen wir noch in der /etc/asterisk/extensions.conf (wenn wir nicht ausschließlich auf Realtime setzen) einige Einträge:
;Check Testcall with DTMF 123456789#
exten => 1234,1,Answer
exten => 1234,2,Read(nummern|ha/system|11|skip|1|20)
exten => 1234,3,NoOp?
exten => 1234,4,Hangup
Dies ist nur ein Anfang, d.h. der Server wird in die Extension 1234 gehen und im
NoOp? an Priorität 3 sieht man dann die übertragene Nummer, also die 123456789. Mehr macht das Skript noch nicht, aber den Phantasien sind ja keine Grenzen gesetzt.
Auf dem sendenden Server muss natürlicha uch irgendwas sein und das steckt auch im Dialplan (Datei extensions.conf):
exten => 4321,1,Answer
exten => 4321,2,Playback(ha/security-system)
exten => 4321,3,SIPdtmfMode?(rfc2833)
exten => 4321,4,SendDTMF?(123456789#|300)
exten => 4321,5,Hangup
Wie geschrieben, das Skript ist nicht richtig fertig, es ist eher ein Ansatz und das nicht mal der Beste. Man ruft also das Skript auf dem angerufenen Server auf und schaut, was sich so tut. Bei Fragen hierzu bitte Mail an mich, z.B. über das Formular auf
http://www.rowi.net.
Rolf