Asterisk Script ausführen lassen, wenn Anruf angenommem wird?

monotek

Neuer User
Mitglied seit
7 Jul 2004
Beiträge
99
Punkte für Reaktionen
0
Punkte
0
Ich habe hier einen Asterisk 1.4.x Server mit FreePBX stehen, der mehrere Telefonnummern und Extensions (SIP Devices) verwaltet.

Ich möchte gern erreichen, dass bei eingehenden Anrufen, die von einer Person angenommen werden, ein Script ausgeführt wird. Also direkt nach Annahme des Anrufs, nicht erst nach dem beenden.

Dem Script sollen die angerufene Telefonnummer, die Telefonnummer des Anrufers und die Extension die den Anruf angenommen hat übergeben werden.

Wie kann man so was realisieren?

Gibts da eventuell irgendwo ein Beispiel, das ich mir mal ansehen könnte?

Danke im Voraus :)
 
Zusammengefasst müsste ich also folgendes tun:

- eine neue Extension erstellen
- die Extension auf alle eingehenden Anrufe/Nummern reagierne lassen
- ein Macro (ist das ein AGI SCript?) erstellen, welches das gewünschte Script aufruft
- wenn Anruf angenommen wird führe Dial Command mit Macro aus

Puh... das is derzeit noch etwas zu hoch für mich. Ich seh ja noch nicht mal bei den Extensions durch.

Gibts hier jemanden, der sowas schon mal gemacht und mal ein Beispielscript posten kann?
 
Zuletzt bearbeitet:
Ein Macro ist ein Macro, kein AGI. Ein Macro kann aber einen Aufruf zu einem Agi enthalten, so interpretiere ich die Doku.
http://www.das-asterisk-buch.de/2.1/extensions.ael.html#ael-macros
Ein Makro ist erstmal nur ein Context im Dialplan, in diesem wird dann bestimmt was gemacht wird.

Mal so ausm Kopf:
[default]
Code:
[macro-blablubb]
exten => s,1,NoOp(im Macro)
exten => s,n,AGI(machwas)


[default]
exten => 4711,1,Dial(SIP/123,M(blablubb))
Ohne Gewähr. Die *-Doku bedarf manchmal der Interpretationskünste eines Talmud-Gelehrten. Reine Auslegungssache eben ;-)

Viel Erfolg.
 
Ich versteh das jetzt so:

- Nummer 4711 wird angerufen
- Anruf wird auf SIP Device 123 zugestellt
- danach wird das macro blablubb ausgeführt
- das agi im macro kann dann mein Script sein

richtig?

Ich will ja aber nicht manuell zustellen.

Oder ist das die Schreibweise für: "Wenn SIP Device 123 den Anruf annimmt führe Macro aus"?
 
Zuletzt bearbeitet:
Ah OK. Danke :)

Komme leider erst morgen wieder an den Asterisk Server ran.

Noch ne Frage:

Die Extension kann ich ja mit der Variable ${EXTEN} an das Script übergeben.
Wo finde ich aber die angerufene Nummer?
Muss ich mir die aus der Varibale ${CHANNEL} holen?
 
Zuletzt bearbeitet:
Auch hier würd ich sagen ausprobieren. :)
 
Ich habe jetzt mal folgendes in meine extensions_custom.conf eingetragen:

Code:
[from-internal-custom]
exten => _X.,1,Answer()
exten => _X.,n,Dial(SIP/${EXTEN}||M(test^${CALLERID(num)^${EXTEN}^${CHANNEL}))
exten => _X.,n,Hangup()

[macro-test]
exten => s,1,NoOp(Macro test)
exten => s,n,System(/bin/echo "caller=${ARG1} exten=${ARG2} called=${ARG3}" >> /tmp/test)

Wenn ich einen internen Anruf mache wird automatisch aufgelegt.
Das Macro wird im Log angezeigt aber es wird kein File erzeugt.

Hab ich nen Fehler drin oder liegts an der Einbindung in FreePBX?

Anbei mal das Log:
-- Executing [2003@from-internal:1] Answer("SIP/2000-082fd8b8", "") in new stack
-- Executing [2003@from-internal:2] Dial("SIP/2000-082fd8b8", "SIP/2003||M(test^2000") in new stack
== Spawn extension (from-internal, 2003, 2) exited non-zero on 'SIP/2000-082fd8b8'
-- Executing [h@from-internal:1] Macro("SIP/2000-082fd8b8", "hangupcall") in new stack
-- Executing [s@macro-hangupcall:1] GotoIf("SIP/2000-082fd8b8", "1?skiprg") in new stack
-- Goto (macro-hangupcall,s,4)
-- Executing [s@macro-hangupcall:4] GotoIf("SIP/2000-082fd8b8", "1?skipblkvm") in new stack
-- Goto (macro-hangupcall,s,7)
-- Executing [s@macro-hangupcall:7] GotoIf("SIP/2000-082fd8b8", "1?theend") in new stack
-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] Hangup("SIP/2000-082fd8b8", "") in new stack
== Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/2000-082fd8b8' in macro 'hangupcall'
== Spawn extension (macro-hangupcall, s, 9) exited non-zero on 'SIP/2000-082fd8b8'
 
Zuletzt bearbeitet:
Hab den Fehler gefunden. es fehlt eine } nach "${CALLERID(num)"

Nun funktioniert es schon mal für interne Anrufe.

Um es auch für externe Anrufe nutzen zu können, musste ich den Context ändern.

Das ganze sieht dann so aus:

Code:
[from-pstn-custom]
exten => _XXXX.,1,Answer()
exten => _XXXX.,n,Dial(SIP/${EXTEN}||M(test^${CALLERID(num)}^${EXTEN}^${CHANNEL}))
exten => _XXXX.,n,Hangup()

[macro-test]
exten => s,1,NoOp(Macro TEST)
exten => s,n,System(/bin/echo "caller=${ARG1} exten=${ARG2} called=${ARG3}" >> /tmp/test)

Jetzt habe ich aber das Problem, dass als exten die angerufene Telefonnummer und nicht die Nummer des annehmenden SIP Devices gesetzt wird.

Wie komme ich wieder zur Nummer des SIP/Device, dass den Anruf annimmt?
 
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.