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
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,201
Beiträge
2,247,952
Mitglieder
373,765
Neuestes Mitglied
walterronald99
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.