[Problem] Asterisk ankommend --> ausgehend kein Ton

Ossie

Neuer User
Mitglied seit
22 Nov 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo Forumsmitglieder,
ich bin neu in diesem klasse Forum - herzliche Grüße an alle!
Ich bin alter IT- und Netzwerkhase und habe auch bei meinen Kunden in den vergangenen Jahren mittlere bis größere ISDN-Anlagen installiert und betreut.
Da im Moment ja die große Zwangsumstellungs-Welle ISDN auf VoIP immer noch rollt, beschäftige ich mich seit einem Jahr immer mal wieder mit Asterisk.
Mittlerweile habe ich bei zwei Kunden (die mit der Fritzbox nicht auskommen ...) einen Linux-Pc mit Asterisk 15.4.1 und entsprechenden SIP-Telefonen aufgestellt.

Alles funktioniert prima, ankommend als auch ausgehend. Aber ein Problem habe ich bisher nicht lösen können.

Der Kunde hat einen Notdienst. Abends nach Feierabend wird eine Weiterleitung auf das Telefon des Mitarbeiters, der Notdienst hat, eingeschaltet.
Kommt ein Anruf, wird der sofort weitergeleitet. Das Telefon des Mitarbeiters klingelt, aber nach dem Abheben ist Stille - kein Ton.
Nach langem Recherchieren habe ich in den PJSIP-Endpoint des Providers den Parameter "inband_progress=yes" eingefügt. Ab da war der Ton da, die Teilnehmer konnten sich unterhalten.
Aber: nun hört der Anrufer keinen Rufton mehr. Es herrscht Stille, bis der Notdienst-Mitarbeiter abnimmt.

Seitdem recherchiere und probiere ich herum. Obwohl "normale" Telefonate (rein und raus) funktionieren, ohne Ports am Router weiterzuleiten, habe ich diverse Ports (5060 und 10000-20000) im Router geöffnet, ohne Verbesserung. SIP-ALG ist ausgeschaltet.

Nochmal: es betrifft nur Telefonate, die reinkommen und gleich wieder (per Dial-Funktion) wieder rausgehen.

Ich bin ratlos. Hat jemand mit mehr Erfahrung einen heißen Tipp für mich?

Gruß Ossie
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
11,825
Punkte für Reaktionen
247
Punkte
63
Moinsen


Progress() wird auch gerne für "Early Media" genutzt.
Versuchs doch mal ohne Progress aber mit einem Flag im Dial() ...
Dial(PJSIP/whatever,120,m(default))
...hört der Anrufer "Early Media" anstatt "Tuuuut .... Tuuuut" ?

PS: Kenn mich mit der PJSIP Syntax ( noch nicht ) so gut aus ;)
PPS: Welcome aboard :)
 
Zuletzt bearbeitet:

Ossie

Neuer User
Mitglied seit
22 Nov 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo koyaanisqatsi,
>> PPS: Welcome aboard
Danke - und danke für Deine schnelle Antwort.
Ich habe deinen Tipp gleich mal ausprobiert.
"inband_progress" wieder rausgenommen, "m(default)" ans Dial-Kommando gehängt.
Jetzt ist auch ohne "inband_progress" erstaunlicherweise Ton da, man kann miteinander reden.
Aber: Jetzt ist auch ohne "inband_progress" kein Rufton zu hören.
Arghhh!!!
 

koyaanisqatsi

IPPF-Urgestein
Mitglied seit
24 Jan 2013
Beiträge
11,825
Punkte für Reaktionen
247
Punkte
63
Das ist korrekt ;)
Das Flag m() sollte statt "Tuuut Tuuut" nämlich "Music on hold" abspielen.
...macht aber, genau wie Progress(), die Audiokanäle ( RTP ) vor einem Abnehmen auf.
Hast du keine moh konfiguriert/aktiviert (musiconhold.conf) ?
Denn dort liesse sich eine Klasse für "Early Media Ansage"/MoH in der Form hinterlegen...
"Bitte warten - Ein Mitarbeiter ist gleich für sie da"
 
Zuletzt bearbeitet:

sonyKatze

Mitglied
Mitglied seit
6 Aug 2009
Beiträge
608
Punkte für Reaktionen
41
Punkte
28
Kommt ein Anruf, wird der sofort weitergeleitet. Das Telefon des Mitarbeiters klingelt, aber nach dem Abheben ist Stille […] inband_progress=yes […] nun hört der Anrufer keinen Rufton mehr
Bei solchen Feinheiten bist Du erstmal auf Dich allein gestellt. Du bist gezwungen genau zu analysieren, was überhaupt auf den beiden Leitungen passiert. Eine Möglichkeit ist Wireshark mitlaufen zu lassen.
  1. Welche Statūs erhältst Du vom Provider: Trying (100) und dann Ringing (180) oder Progress (183)?
  2. Welche Statūs gibst Du weiter?
  3. Falls Du 183 erhältst, ist darin SDP enthalten; kommt bereits RTP?
  4. Falls Du RTP erhältst, wohin (IP-Adresse : Port) gibst Du dieses RTP weiter?
  5. Falls Du SDP erhältst, wie ist die Direction? a=sendonly
Daher bitte nicht Recherchieren, sondern erstmal analysieren und berichten. Für den Start würde ich ein Dial() ganz ohne irgendwelche Optionen nutzen.
 
Zuletzt bearbeitet:

Ossie

Neuer User
Mitglied seit
22 Nov 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo koyaanisqatsi:
Du hast mich auf den richtigen Weg geschubst.
Ich habe mit MOH herumgespielt und diverse Variationen ausprobiert. Wie Du schon schriebst: MOH öffnet die Audiokanäle.
Weiteres Lesen in der Asterisk-Bibel (O'Reilly: "Asterisk - The Definitive Guide") brachte mich zur "Answer()"-Funktion. "Progress()" hatte ich vorher schon mal ohne Erfolg ausprobiert, aber "Answer()" hat's dann gebracht!

Bei dem Kunden läuft das so: Der Chef drückt bei Feierabend eine "forward"-Taste an seinem Telefon. Kommt ein Anruf (im Kontext "ankommend"), meldet Asterisk
"302 moved temporarily"
"Now forwarding PJSIP/49xxxxxx-00000039 to 'Local/[email protected]' (thanks to PJSIP/jens20-0000003a)"
Der Anruf geht in den Kontext "ausgehend". Dort frage ich den Channeltype ab. Ist er "Local", mache ich "Answer()" und anschließend den "Dial()". Ist der Channeltype nicht "Local", wird der "Answer()" übergangen.
Nun klappt alles - ohne "inband_progress" (welches ja den Rufton killte) und sogar ohne "m" im Dial-Kommando - man hört das (Asterisk-generierte) Rufzeichen.

Danke für Deinen Anschubser!

sonyKatze:
Du hast natürlich völlig recht: Bei Problemen geht nichts über systematisches Sammeln von Informationen, um dann analysieren zu können. Als jemand, der in der Vor-PC-Zeit Mainframes installiert und repariert hat, habe ich (manchmal schmerzhaft ...) gelernt, wie wichtig das ist.

Ich habe natürlich mit "PJSIP set logger on" Daten gesammelt und z.B. dabei gesehen, daß ein "Ringing (180)" rausging. Aber Du weißt ja auch, daß das alles sehr aufwendig (und vor allem zeitaufwendig) ist - und mir saß die Zeit (sprich: der Kunde) im Nacken - und so habe ich eben herumprobiert - sorry.

An beide:
Seitdem ich mich mit Asterisk beschäftige, habe ich Stunden über Stunden recherchiert, viele, viele Internetseiten (auch die originalen von Digium, asterisk.org usw.) gelesen und viele Foren besucht. Dabei hat man viel über Detail-Lösungen von speziellen Problemen gelernt.

Aber irgendwie sind das alles immer nur Bruchstücke. Was ich vermisse, ist eine umfassende Übersicht über die gesamten Zusammenhänge - die Logik, die dahinter steckt - was an einzelnen Schritten passiert (oder passieren muß), damit ein Anruf erfolgreich ist. Wer sendet welche Nachrichten wohin, welche Pakete verschiedensten Inhalts von wem wohin geschickt werden und wie beantwortet werden müssen. Im Groben weiß man das eigentlich, aber wenn man ein Problem lösen muß, kommt es ja auf das Detail an. Siehe mein geschildertes Problem - jetzt scheint es zu klappen, aber warum genau es jetzt funktioniert, kann man nur vermuten.

Ich habe natürlich viel in der Asterisk-Bibel gelesen (ich hatte eine ältere Version als PDF). Mit deren Hilfe kann man sich sehr schnell einen kleinen funktionierenden Dialplan zusammenbauen - aber das große umfassende Hintergrundwissen finde ich da nicht.

Ich habe mir sogar kurzfristig die neueste (5.) Ausgabe beschafft, die schon Asterisk 16 abdeckt. Ich war etwas schockiert: Die wichtige "pjsip.conf" und deren Inhalt wird gar nicht erwähnt, sondern beschrieben, wie man mit händisch einzugebenden SQL-Befehlen die Daten in die Asterisk-Datenbank einspeist.

Geht's noch? Ein Asterisk-Anfänger (und das sind ja die, die in dieser Bibel lesen) muß jetzt auch noch SQL-Befehle können? Eine Textdatei ist doch viel schneller und einfacher geändert, wenn man erstmalig herumprobiert, als wenn man die Daten in der Datenbank umständlich mit "Insert-", "Delete-" und "Update"-Befehlen bearbeiten muß. Und "Music on Hold" finde ich in dieser Ausgabe nicht mal im Stichwortverzeichnis ....

Tja - genug gejammert. Trotzdem halte ich Asterisk für eine tolle Software und werde mich weiter damit beschäftigen.

Ich danke Euch beiden für Mühe, Zeit und Hilfe und kämpfe weiter.

Wie sagt dieser Naturmensch im Fernsehen immer am Ende seiner Sendung? "Bleiben Sie fasziniert" ....
 

sonyKatze

Mitglied
Mitglied seit
6 Aug 2009
Beiträge
608
Punkte für Reaktionen
41
Punkte
28
Didaktik in der Informatik … Problem bei SIP ist, dass es so flexibel ist, dass es kaum eine Antwort gibt. Teilweise findest Du in Hochschul-Vorlesungen Diagramme, wie einige Fälle normalerweise ablaufen, siehe Universität Ulm. Teilweise in SIP-Schulungen. Teilweise in RFCs, siehe 3665 und 5589. Aber solche Dinge katalogisiert eine Internet-Suchmaschine falsch. Wenn ich eine SIP-Fibel finde, in der einfach nur Abläufe dokumentiert sind, poste ich das hier. Übrigens mein Tipp: Wenn Du beim Kunden schon reine VoIP/SIP-Infrastrukturen hast, würde ich statt Asterisk mal FreeSWITCH anschauen. Dessen Kern ist nicht wie bei Asterisk SS7 sondern schon rein SIP. Das macht einiges einfacher.
 

sonyKatze

Mitglied
Mitglied seit
6 Aug 2009
Beiträge
608
Punkte für Reaktionen
41
Punkte
28
Hat meine Link-Liste geholfen?
Answer() hat’s dann gebracht
Bin mir alles andere sicher, ob das der richtige Weg ist. In meiner kleinen Welt wäre der richtige Weg nicht den Audio-Kanal aufzumachen sondern die richtigen SIP-Statūs zu senden.
 

Ossie

Neuer User
Mitglied seit
22 Nov 2019
Beiträge
4
Punkte für Reaktionen
0
Punkte
1
Hallo sonyKatze,
ich bin (angenehm ...) überrascht, daß Du dich nach so langer Zeit noch zu diesem Thread meldest.
Ich schrieb weiter oben:
--------------------------
Bei dem Kunden läuft das so: Der Chef drückt bei Feierabend eine "forward"-Taste an seinem Telefon. Kommt ein Anruf (im Kontext "ankommend"), meldet Asterisk
"302 moved temporarily"
"Now forwarding PJSIP/49xxxxxx-00000039 to 'Local/[email protected]' (thanks to PJSIP/jens20-0000003a)"
Der Anruf geht in den Kontext "ausgehend". Dort frage ich den Channeltype ab. Ist er "Local", mache ich "Answer()" und anschließend den "Dial()". Ist der Channeltype nicht "Local", wird der "Answer()" übergangen.

----------------------------------
Das Forwarding macht ja das SIP-Telefon alleine (Transfer-Taste). Dann läuft ja der oben beschriebene Mechanismus an.
Wie würdest Du das lösen (SIP-Status senden)? Hast Du dafür mal ein Dialplan-Beispiel?

Gruß Ossie

Eigentlich müsstest Du nur die Statūs durchreichen. Daher steht immer noch die Frage im Raum, welche Statūs Du bekommst, wenn Du weiterleitest. Irgendwas ist auf diesem Teilstück krumm. Soweit ich das verstanden habe: Der Anruf wird weitergeleitet und an irgendeinen VoIP/SIP-Anbieter übergeben. Der wiederum leitet ins alte Telefonnetz. Dein VoIP/SIP-Anbieter gibt Dir während dem Ganzen verschiedene Statūs. Welche bekommst Du bevor der Ruf aufgebaut ist? Und dann die anderen fünf Fragen oben.
 

gehtdoch

Neuer User
Mitglied seit
3 Feb 2019
Beiträge
103
Punkte für Reaktionen
7
Punkte
18
Hallo Ossie,
aus meiner Sicht gehst Du einen unnötig aufwändigen Weg und machst Dir Gedanken über Dinge, die andere für Dich längst gelöst haben - mit einem Klick bekommst Du derartige 0815-Anforderungen mit viel geringerem Aufwand auf GUI-Ebene gelöst.

Ich würde Dir empfehlen, mal FreePBX z.B. anzuschauen. Da hast Du gleich mehrere Dinge auf einen Schlag:
  • einen SIP-Server (wie Asterisk)
  • eine mächtige Web-GUI für die strukturierte Verwaltung der gesamten Telefonanlage
  • eine Web-GUI für die einzelnen User mit individuellen Rechten je User
Auf diese Weise bekommst Du per Click derart viele Features mit minimalem Aufwand, die sogar nach Anleitung (falls nötig) auch Deine Kunden nutzen können. Im konkreten Fall ist hier die Funktion Follow Me z.B. denkbar. Da kannst Du eingehende Anrufe auf eine Nummer auf beliebig viele andere Nummern (intern und extern) setzen (bei Auswahl unterschiedlichster Konzepte). Ohne auch nur eine Zeile Quellcode / Programmierung anfassen zu müssen.

Aber: nun hört der Anrufer keinen Rufton mehr. Es herrscht Stille, bis der Notdienst-Mitarbeiter abnimmt.

Weiteres Lesen in der Asterisk-Bibel (O'Reilly: "Asterisk - The Definitive Guide") brachte mich zur "Answer()"-Funktion. "Progress()" hatte ich vorher schon mal ohne Erfolg ausprobiert, aber "Answer()" hat's dann gebracht!
Progress dürfte ein 183 session progress generieren. Dieses wiederum spielt ein von Asterisk erzeugtes ring back (im Rahmen von moh) ein - alles, bevor die Verbindung steht (200 OK). Der RTP-Strom wird zu diesem Zeitpunkt logischerweise vom SIP-Provider unterbunden -> daher funktioniert das auch nicht. Mit Answer() hast Du dann die Verbindung akzeptiert (und somit klickt auch der Gebührenzähler für den Caller) - ab jetzt leitet der SIP-Provider auch beliebige RTP-Daten durch (-> Der Caller bezahlt ja - also alles gut).
 

sonyKatze

Mitglied
Mitglied seit
6 Aug 2009
Beiträge
608
Punkte für Reaktionen
41
Punkte
28
Irgendwie ist mein Post im Post von Ossie gelandet. Wurden die versehentlich zusammengelegt? Egal, also nochmal als eigener Post:

Eigentlich müsstest Du nur die Statūs durchreichen. Daher steht immer noch die Frage im Raum, welche Statūs Du bekommst, wenn Du weiterleitest. Irgendwas ist auf diesem Teilstück krumm. Soweit ich das verstanden habe: Der Anruf wird weitergeleitet und an irgendeinen VoIP/SIP-Anbieter übergeben. Der wiederum leitet ins alte Telefonnetz. Dein VoIP/SIP-Anbieter gibt Dir während dem Ganzen verschiedene Statūs. Welche bekommst Du bevor der Ruf aufgebaut ist? Und dann die anderen fünf Fragen oben.
 

3CX PBX - GRATIS
Linux / Win / Cloud

Neueste Beiträge

Statistik des Forums

Themen
233,714
Beiträge
2,037,486
Mitglieder
352,603
Neuestes Mitglied
ett2