Telefonzentrale mit Asterisk ?

Aber wie verringert das die Zahl der genutzten SIP-Kanäle und behält dabei die IVR-Funktion bei?
Hier scheint es wohl zu funktionieren (leider auch kein Asterisk im Spiel). Im Endeffekt ist ein Befehl für den Asterisk gesucht, der einen Anruf NICHT über eine zweite Leitung vermittelt sondern an die Fritzbox zurückgibt mit der Info, an welche Nebenstelle der zurückgegebene Anruf gehen soll ...
 
Wie Konferenz, das macht dann das (IP-)Telefon.

Early Media, Call Files ?
Bei Early Media wird sozusagen das "tut tut" in was brauchbares "verwandelt".
...zum Beispiel: Music on Hold
 
Zuletzt bearbeitet:
Danke für deine Tipps Koy, in diesem Fall kann ich aber beim besten Willen nicht mehr folgen :)

Um hier dennoch weiter zu kommen, würde ich gerne eine denkbare Alternative angehen: Ausgangssituation ist eine Fritzbox am Telekom IP-Anschluss mit Asterisk als SIP-Nebenstelle. Das IVR ist realisiert und arbeitet. Neben der SIP-Nebenstelle gibt es noch weitere DECT- und Analog-Nebenstellen an der Fritzbox. An diese Nebenstelle wird durch der IVR im Asterisk verbunden. Dabei sind jedoch bereits beim ersten Anrufer 3 von maximal 5 möglichen gleichzeitigen SIP-Verbindunen in der Fritzbox "belegt", womit ein weiterer Anrufer zwar bis ins IVR des Asterisk gelangen würde, von dort aus jedoch nicht mehr weitervermittelt werden kann, da kein freier SIP-Kanal mehr zur Verfügung steht. Aktuell erhält Anrufer 2 in diesem Fall ein Besetzt-Zeichen und fliegt aus der Leitung.
Wie muss die extensions.conf angepasst werden, dass Anrufer zwei solange in der Asterisk IVR verweilt, bis seine Vermittlung möglich ist (weil z. B. Anrufer 1 aufgelegt hat)?
Ich denke hier an so etwas wie eine Warteschlangen-Funktion. Erst wenn der gewünschte Teilnehmer "frei" oder in diesem Fall "erreichbar" ist, wird das Gespräch verbunden ...
 
hat jemand eine Idee, ob und wenn ja wie ich dem Asterisk sagen kann, dass er erst verbinden/weiterleiten soll, wenn der Teilnehmer erreichbar ist (in diesem Fall die Leitung frei)? muss zwangsläufig der Weg über eine Warteschleife gegangen werden oder ginge es auch ohne?

anbei die aktuelle extensions.conf
Code:
[anrufregel]

exten => 621,1,Answer()
exten => 621,2,Background(hello)
exten => 621,3,Background(hello2)
exten => 621,4,Dial(SIP/**600@Fritzbox)

exten => 1,1,Playback(auswahl1)
exten => 1,2,Dial(SIP/**610@Fritzbox)

exten => 2,1,Playback(auswahl2)
exten => 2,2,Dial(SIP/**611@Fritzbox)

exten => i,1,GoTo(621,3)

Das Problem ist, dass der Teilnehmer 610 oder 611 evtl. nicht in (DECT-)Reichweite ist oder schlicht kein SIP-Kanal zur Verfügung steht um dort hin zu verbinden. Mit der aktuellen Konfiguration ist es dem Asterisk jedoch "egal", ob es die Nebenstelle gibt und diese erreichbar ist - es wird verbunden und ggfs. eben aus der Leitung geworfen.
 
Zuletzt bearbeitet:
Guten Morgen und Danke Koy!

Ich denke, mit dem ExecIf-Befehl
Code:
exten => 123,1,ExecIf($[${CALLERID(num)} = 101],SayDigits,123)
exten => 123,n,SayDigits(678)
und Device-State könnte es klappen
Code:
exten => 100,1,ExecIf($[ ${DEVICE_STATE(SIP/${EXTEN})} = INUSE ]?Busy)
exten => 100,2,Dial(SIP/${EXTEN})
Bei mir sieht das dann aktuell so aus:
Code:
exten => 2,1,Playback(auswahl2)
exten => 2,2,ExecIf($[ ${DEVICE_STATE(SIP/$**600@Fritzbox)} = BUSY ]?Busy)
exten => 2,3,Dial(SIP/**610@Fritzbox)

Im Fall von "Besetzt/Nicht erreichbar" würde ich allerdings ganz gerne ein Sound-File abspielen, solange bis eben nicht mehr besetzt ist. Dazu müsste "?Busy" vermutlich ersetzt werden durch z. B. "Play(Sound-File)". Leider hänge ich hier an der Syntax ... im ExecIf-Beispiel wird mit Komma's getrennt, im Device-State-Beispiel nicht ...
 
folgender Code:
Code:
exten => 2,1,Playback(auswahl2)
exten => 2,2,ExecIf($[ ${DEVICE_STATE(SIP/$**610@Fritzbox)} = BUSY ]?Play(hello))
exten => 2,3,Dial(SIP/**600@Fritzbox)
liefert folgendes Ergebnis:
Code:
    -- Executing [2@anrufregel:1] Playback("SIP/Fritzbox-00000000", "auswahl2") in new stack
    -- <SIP/Fritzbox-00000000> Playing 'auswahl2.ulaw' (language 'de')
    -- Executing [2@anrufregel:2] ExecIf("SIP/Fritzbox-00000000", "0?Play(hello)") in new stack
    -- Executing [2@anrufregel:3] Dial("SIP/Fritzbox-00000000", "SIP/**600@Fritzbox") in new stack
Das Problem ist die Syntax in Zeile zwei "?Play(hello)", zu sehen in der Ausgabe Zeile drei.

Hat jemand einen Tipp zur korrekten Syntax?
 
Moin

Jetzt hab ich eine Stunde im Asteriskbuch nach Play() gesucht, kann aber nur Playback() finden.
Kann es eventuell ein Flüchtigkeitsfehler sein ?
...oder bin ich zu doof zum Suchen ?
 
Playback, stimmt. Das Problem ist jedoch (auch) in der Syntax ... und ich komme einfach nicht weiter

Code:
    -- Executing [2@anrufregel:1] Playback("SIP/Fritzbox-00000000", "auswahl2") in new stack
    -- <SIP/Fritzbox-00000000> Playing 'auswahl2.ulaw' (language 'de')
    -- Executing [2@anrufregel:2] ExecIf("SIP/Fritzbox-00000000", "0?Playback(hello)") in new stack
    -- Executing [2@anrufregel:3] Dial("SIP/Fritzbox-00000000", "SIP/**600@Fritzbox") in new stack
wieso schreibt er "0?Playback(hello)"
 
Ist das Ergebnis der Prüfung...
0 == false (negativ)
1 == true (positiv)
 
Ich rufe von der Nebenstelle **610 aus an und lasse prüfen, ob die besetzt ist. Falls besetzt spiele "hello", falls nicht besetzt, gehe zu 3., wobei ich dachte, dass man "falls nicht dann gehe zu" nicht extra erwähnen muss?
Das eigentlich Ergebnis der Prüfung sollte 1 == true sein ... zumindest gibt das das CLI aus, wenn ich von 610 aus anrufe und mich an die 610 verbinden lasse:
Code:
Called SIP/**610@Fritzbox
    -- Got SIP response 486 "Busy Here" back from 192.168.185.1:5060
    -- SIP/Fritzbox-00000003 is busy
 
"Fehler" gefunden!
Code:
exten => 2,1,Playback(auswahl2)
exten => 2,2,ExecIf($[ ${DEVICE_STATE(SIP/$**610@Fritzbox)} = BUSY ]?:Playback(hello))
exten => 2,3,Dial(SIP/**600@Fritzbox)
Der/ein Doppelpunkt hat gefehlt. Allerdings wird das Playback jetzt zwar ausgeführt, jedoch anschließend dennoch zu 2,3 gesprungen. Ich dachte, das ist eine Schleife, in der er solange bleibt, bis die Leitung frei / das Ergebnis der Prüfung false ist?
 
Meist sinds die Gänsefüßchen, probier mal die Prüfung auf den String: = "BUSY"
Hinter dem Doppelpunkt kommt nach meinen Verständnis das: Wenn nicht, dann führe dies aus
 
Danke Koy, die Prüfung funktioniert bereits einwandfrei. Das Problem war der fehlende Doppelpunkt bzw. die Verwechslung von true und false.

Mein hoffentlich letztes Problem in diesem Zusammenhang ist nun nur noch, dass egal ob true (mit abspielen des Sound) oder false (ohne abspielen) zu 2,3 gesprungen wird. Ich möchte, dass die Prüfung und das Abspielen der Sound-Datei solange stattfindet, bis "true" eben nicht mehr gegeben ist.
 
Mach dann die selbe Prüfung mit GotoIf() direkt unterm ExecIf() und lass sie ins ExecIf() springen.
 
Geschafft:
Code:
exten => 2,1,Playback(auswahl2)
exten => 2,2,ExecIf($[ ${DEVICE_STATE(SIP/$**600@Fritzbox)} = BUSY ]?GoTo(2,4):Playback(hello))
exten => 2,3,GoToIf($[ ${DEVICE_STATE(SIP/$**600@Fritzbox)} = BUSY ]?:2,2)
exten => 2,4,Dial(SIP/**620@Fritzbox)
 
Zu früh gefreut ... funktioniert nicht wie erhofft. Device-State liefert praktisch immer 0 als Ergebnis zurück. Werde dazu aber evtl. einen anderen oder neuen (?) Thread suchen/öffnen. Kann zwar auch für's IVR von Bedeutung sein aber ich denke ein allgemeinerer oder eben expliziter Device-State-Thread bringt an dieser Stelle mehr nutzen
 
Moin
Ist zwar Syntaxmässig wieder aus dem Gedächtnis (ungeprüft), aber probier doch mal...
Code:
same => n(busyloop),ExecIf($[${DEVICE_STATE(SIP/Fritzbox)}="BUSY"]?Playback(hello):Goto(busyloop))
...also ExecIf() und GotoIf() quasi als Einzeiler.
...mit Korrektur des zu überprüfenden Peers ;)

Prioritätsbezeichner (Label, Sprungmarken)
Sind äußerst praktisch.
Die eindeutige Bezeichnung lässt auch nach Jahren erahnen wofür sie gedacht sind.
...und lassen sich im Texteditor suchen, wenn die extensions.conf sehr groß geworden ist.
 
Zuletzt bearbeitet:
Morgen Koy! :)
Aus der Schleife kommt der Anrufer doch nie wieder raus, oder?
 
Wenn die begehrte 1 kommt schon ;), denn nach dem Playback() wird sie verlassen und die nächste Priorität abgearbeitet.
Also das überflüssige GotoIF(), wenn es nicht gelöscht wurde.
?führe_aus_bei_1:führe_aus_bei_0
 
Zuletzt bearbeitet:
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.