Einfaches Dial-Skript (PHP)

!n$t!nct

Neuer User
Mitglied seit
18 Aug 2009
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin noch ganz in dem Thema Asterisk und AGI-Skripte.

Ich habe einen Server mit Debian, einer ISDN-Karte und Asterisk. Der Anruf irgendeiner Nummer von der Asterisk-CLI (über die ISDN-Karte) klappt auch wunderbar.

So jetzt hätte ich gerne ein einfaches PHP-Skript erstellt, welches eine Nummer wählt und sobald abgehoben wird, ein Soundfile abspielt (wie z.b "tt-monkeys") - wird später dann noch erweitert.

Hat vielleicht jemand ein ähnliches Skript, welches nur etwas angepasst werden muss? Oder vielleicht eine andere Idee, wie er/sie mir helfen kann? Würde mich über viele Antworten freuen.

Achso ich muss noch dazu sagen, dass mein Server leider keine Soundkarte besitzt - ich hoffe, das ist kein Problem bzw. macht keine Probleme.

extensions.conf
Code:
[general]
static = yes
writeprotect = yes

[sonstige]

[meine-telefone]
exten => 2000,1,Set(TIMEOUT(absolute)=20)
exten => 2000,2,Dial(SIP/2000,20)
exten => 2000,3,Hangup
;exten => 2001,1,Set(TIMEOUT(absolute)=20)
;exten => 2001,2,Dial(SIP/2000,20)
;exten => 2001,3,Hangup

;exten => _0[1-9].,1,Dial(SIP/${EXTEN}@ext-sip-account)
;exten => _09[1-9].,1,Dial(misdn/g:intern/${EXTEN},30,tr)
;exten => _0[1-9].,1,Dial(misdn/g:intern/${EXTEN},30,tr)

exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)

exten => 8888,1,Answer()
exten => 8888,2,Playback(tt-monkeys)
exten => 8888,3,Hangup()

exten => 300,1,Answer
exten => 300,2,AGI(agi-test.agi)
exten => 300,3,Hangup()

exten => 400,1,Answer
exten => 400,2,AGI(jukebox.agi)
exten => 400,3,Hangup()

exten => 1234,1,Answer()
exten => 1234,2,AGI(daniel.php)
exten => 1234,3,Hangup()

[intern]
; exten => _0[1-9].,1,Set(CALLERID(num)=(
;exten => _X.,1,misdn_check_l2l1(g:out|2)
; exten => _X.,n,dial(mISDN/g:out/${EXTEN})

;exten => 2001,1,misdn_check_12l1(g:out|2)

;exten => (hier steht Nummer1),1,misdn_check_l2l1(g:out|2)


exten => _0[1-9].,1,Dial(misdn/g:intern/${EXTEN},30,tr)


;exten => _0[1-9].,2,Playback(misdn/g:intern/${EXTEN},30,tr)
;exten => _0[1-9].,3,Hangup()


[intern_in]
;exten => (hier steht Nummer1),1,VoiceMail(2000)
;exten => (hier steht Nummer1),n,Dial(SIP/2000,10,tr)
;exten => (hier steht Nummer1),1,Dial(SIP/2001,10,tr)
exten => (hier steht Nummer2),1,Answer()
exten => (hier steht Nummer2),2,Playback(tt-monkeys)
exten => (hier steht Nummer2),3,Hangup()
exten => i,n,Dial(SIP/2000,10,tr)

Was ich bisher habe:
Code:
#!/usr/bin/php -q
<?php

 $socket = fsockopen("(Hier steht die Asterisk IP)","5038", $errno, $errstr, $timeout);
 fputs($socket, "Action: Login");
 fputs($socket, "Username: admin");
 fputs($socket, "Secret: geheim");

 fputs($socket, "Action: Originate");
 fputs($socket, "Channel: 1");
 fputs($socket, "Context: meine-telefone");
 fputs($socket, "Exten: 1234");
 fputs($socket, "Priority: 1");
 #fputs($socket, "Callerid: Asterisk Automatic Wardial");

 #fputs($socket, "Action: Logoff");

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

 ?>


Gruß !n$t!nct
 
Zuletzt bearbeitet:
also alles was du hier gepostet hast beantwortest du doch schon mit deinen beispielen?

Code:
               $timeout = 10; 
               $asterisk_ip = "127.0.0.1"; 
               $socket = fsockopen($asterisk_ip,"5038", $errno, $errstr, $timeout); 
               fputs($socket, "Action: Login\r\n"); 
               fputs($socket, "UserName: admin\r\n"); 
               fputs($socket, "Secret: geheim\r\n\r\n"); 
               $wrets=fgets($socket,128); 
               fputs($socket, "Action: Originate\r\n" ); 
	       fputs($socket, "Channel: SIP/0190433433@sipgate\r\n");
               fputs($socket, "Exten: 1002\r\n" ); 
               fputs($socket, "Context: intern_in\r\n" ); 
               fputs($socket, "Priority: 1\r\n" ); 
               fputs($socket, "Callerid: anonymous\r\n" ); 
               fputs($socket, "Async: no\r\n\r\n" ); 
               $wrets=fgets($socket,128);
wenn du intern telefonieren willst kannst auch eine local anstelle von sip oder sonst welchen nehmen ... fputs($socket, "Channel: local/2000@meine-telefone\r\n");


jetzt sollte dein skript gehen ;)
 
Hallo vielen Dank für deine Antwort.

Allerdings funktioniert das nicht, hier mal die Fehlermeldung:

Code:
debian*CLI> console dial 1234@meine-telefone
[Nov  5 14:15:11] WARNING[6741]: chan_oss.c:686 setformat: Unable to re-open DSP device /dev/dsp: No such file or directory
    -- Executing [1234@meine-telefone:1] Answer("Console/dsp", "") in new stack
 << Console call has been answered >>
    -- Executing [1234@meine-telefone:2] AGI("Console/dsp", "daniel.php") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/daniel.php
AGI Tx >> agi_request: daniel.php
AGI Tx >> agi_channel: Console/dsp
AGI Tx >> agi_language: en
AGI Tx >> agi_type: Console
AGI Tx >> agi_uniqueid: 1257426911.3
AGI Tx >> agi_callerid: unknown
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: 1234
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: meine-telefone
AGI Tx >> agi_extension: 1234
AGI Tx >> agi_priority: 2
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >>
AGI Rx << Extension '/var/lib/asterisk/agi-bin/daniel.php' not present.
AGI Tx >> 510 Invalid or unknown command
[Nov  5 14:15:11] ERROR[6742]: utils.c:966 ast_carefulwrite: write() returned error: Broken pipe
    -- AGI Script daniel.php completed, returning 0
    -- Executing [1234@meine-telefone:3] Hangup("Console/dsp", "") in new stack
  == Spawn extension (meine-telefone, 1234, 3) exited non-zero on 'Console/dsp'
 << Hangup on console >>

Das Skript:

Code:
!/usr/bin/php -q
<?php

               $timeout = 10;
               $asterisk_ip = "hier steht die ip des servers";
               $socket = fsockopen($asterisk_ip,"5038", $errno, $errstr, $timeout);
               fputs($socket, "Action: Login\r\n");
               fputs($socket, "UserName: admin\r\n");
               fputs($socket, "Secret: geheim\r\n\r\n");
               $wrets=fgets($socket,128);
               fputs($socket, "Action: Originate\r\n" );
               fputs($socket, "Channel: local/2000@meine-telefone\r\n");
               fputs($socket, "Exten: 1200\r\n");
               fputs($socket, "Context: intern_in\r\n" );
               fputs($socket, "Priority: 1\r\n" );
               fputs($socket, "Callerid: anonymous\r\n" );
               fputs($socket, "Async: no\r\n\r\n" );
               $wrets=fgets($socket,128);
 ?>


Gruß !n$t!nct

Ergänzung vom 06.11.2009

Dummer Fehler: Asterisk IP war falsch ....

Mhhmm ok derselbe Fehler kam einmal nicht, jetzt kommt er wieder ....
 
Zuletzt bearbeitet:
Hallo !n$t!nct

Das Problem liegt an der "broken pipe", also der fehlerhaften Socket-Verbindung zwischen AMI und PHP. Ich habe dasselbe Problem und komme irgendwie nicht weiter.

Hast Du inzwischen eine Lösung gefunden?

Danke und Gruss
amc
 
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.