[Frage] Telefonate an Mobiltelefone per Callthrough abwickeln - Wahlvorgang automatisieren

Jung-Fernmelder

Neuer User
Mitglied seit
15 Dez 2016
Beiträge
32
Punkte für Reaktionen
2
Punkte
8
Sehr geehrte Damen und Herren,

seit nun mehreren Tagen arbeite ich an einem sehr spezifischen Thema. Das Ziel ist es, dass die vorhandene Asterisk-Telefonanlage bei einem ausgehenden Anruf per Dialplan Mobiltelefonnummern erkennt und Mobiltelefonnummern über einen Callthrough-Anbieter anruft. Der Hintergrund ist, dass der Provider des eigentlichen Telefonanschlusses (Unitymedia Baden-Württemberg) für Anrufe an Mobiltelefonnummern etwa 20 ct / min berechnet, während der Callthrough-Anbieter 3U Holding AG mit einem Preis von 3,9 ct / min wesentlich preiswerter ist. Die Erkennung von Mobiltelefonnummern mithilfe des Dialplanes funktioniert problemlos, während das Wählen der Mobiltelefonnummer mit dem Callthrough-Anbieter noch Probleme bereitet. Um mit diesem Callthrough-Anbieter telefonieren zu können, muss man zuerst eine Zugangsnummer anrufen, danach wird eine Preisansage vorgelesen. Diese Preisansage soll unbedingt jedes Mal durch den Benutzer angehört werden, da es schon Callthrough-Anbieter gegeben haben soll, die über Nacht ihre Preise um einen großen Faktor, beispielsweise um den Faktor 50, erhöht haben. Um unnötige Kosten zu verhindern, muss also die Preisansage durch den Benutzer jedes Mal angehört werden; nur so kann der Anruf bei einer unerwarteten und heftigen Preiserhöhung abgebrochen werden. Nach der Preisansage muss man dann die Mobiltelefonnummer, die man anrufen möchte, eintippen und zur Terminierung eine Raute tippen.
Dies soll nun - abgesehen von der auditiven Kostenkontrolle durch den Benutzer - automatisiert werden. Daher habe ich versucht, im Dial-Befehl mit der Option M zu arbeiten und die Eingabe der Mobiltelefonnummer und der der Terminierung dienenden Raute in ein Makro, welches einen entsprechenden SendDTMF-Befehl enthält, auszulagern. Dies funktioniert abgesehen davon, dass die Preisansage nicht mehr zu hören war, ohne weitere, erkennbare Mängel. Um diesen Mangel zu verhindern versuchte ich noch eine Vielzahl weiterer Tricks, scheiterte jedoch stets kläglich. Daher möchte ich mich nun an Sie wenden. Welche Ideen haben Sie, um die beschriebene Funktion zu erreichen? Wie muss ich den entsprechenden Abschnitt im Dialplan gestalten? Mit welchen Befehlen kann ich arbeiten? Sehr hoffe ich nun auf Ihre Mithilfe und darauf, dass Sie mir "auf die Sprünge helfen" können werden. Ferner würde ich auch gerne auf mein letztes Thema im Cisco-Unterforum hinweisen, welches leider noch nicht beantwortet wurde. Hat doch noch jemand eine Idee zu meinem Problem mit dem Cisco SPA232D? Dieses Problem persistiert in der Tat und es würde mich sehr freuen, eventuell auch für dieses Problem Lösungsansätze zu erhalten. Bitte veröffentlichen Sie auch zu diesem Problem Ihren Lösungsansatz, wenn Ihnen etwas einfällt. In diesem Sinne möchte ich mich dafür bedanken, dass Sie meinen Text gelesen haben und ich möchte Ihnen natürlich insbesondere für Ihre Bemühungen danken, mir in Bezug auf dieses Problem zu helfen.


Mit freundlichen Grüßen

Jung-Fernmelder
 
Callthrough wird immer problematisch sein, allein schon deshalb, weil sich die Rufaufbauzeit weiter verlängert. Ich würde mir einen Anbieter suchen, der einen SIP-Account zur Verfügung stellt und den Asterisk direkt dort anmelden.
 
Sehr geehrte Damen und Herren,

herzlich möchte ich für Ihre Antworten danken, vor allem der Hinweis auf den WaitForSilence-Befehl war interessant. Auch möchte ich für den Tipp in Bezug auf den SIP-Anbieter danken. Ich möchte jedoch nicht noch einen weiteren Dienstvertrag mit einer weiteren Telefongesellschaft abschließen und mich um die Begleichung von noch mehr Rechnungen kümmern. Ferner würde dann auf den Telefonen der angerufenen Personen eine andere Nummer angezeigt, was ein paar Personen verunsichern könnte. Ich halte Callthrough für die einfachere Lösung, vor allem in Bezug auf die Bezahlung der Verbindungen, die einfach über monatlichen Rechnungen von meinem eigentlichen Anbieter (Unitymedia Baden-Württemberg) abgerechnet werden. In der Tat bin ich mir darüber im Klaren, dass sich durch das Callthrough und insbesondere durch die Preisansage die Rufaufbauzeit weiter verlängert. Dies wird jedoch nicht als störend empfunden, zumindest nicht für die Benutzer dieser Asterisk-Telefonanlage.
Mit dem WaitForSilence-Befehl habe ich mich beschäftigt und in meinen Dialplan (in die extensions.conf) folgenden Kontext eingebaut:
Code:
[MobilfunkCallthrough]
exten => _01[5-7].,1,Dial(SIP/39,,tM(DTMFMobilfunkCallthrough^${EXTEN}))
exten => _01[5-7].,n,Hangup()
include => ausgehend
 
[macro-DTMFMobilfunkCallthrough]
exten => s,1,NoOp(Nun soll eine Mobilfunknummer mithilfe des Callthrough-Dienstes 01801011078 gewählt werden.)
exten => s,n,SendDTMF(wwww01801011078)
exten => s,n,WaitForSilence(2000,11)
exten => s,n,NoOp(Nun war es still.)
exten => s,n,SendDTMF(wwww${ARG1}#)

In der Tat konnte ich nun mein Mobiltelefon anrufen und auch mit mir selbst telefonieren. Jedoch tritt auch jetzt das Problem auf, dass ich die Preisansage nicht hören kann. Der Wählvorgang läuft bis zu dem Zeitpunkt, zu dem das Klingeln bei dem angerufenen Mobiltelefon startet, absolut lautlos ab. Dies darf jedoch nicht so sein, da die Preisansage der 3U Holding AG durch den Benutzer dieser Asterisk-Telefonanlage jedes Mal mitgehört werden muss. Um Ihnen weiterführende Informationen zur Verfügung zu stellen, finden Sie nachfolgend die Ausgabe der Asterisk-Telefonanlage, die ich mithilfe des Konsolen-Befehls "asterisk -rvvvvv" eingeholt habe:
Code:
    -- Executing [015112345678@Endgeraete:1] Dial("SIP/32-00000032", "SIP/39,,tM(DTMFMobilfunkCallthrough^015112345678)") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/39
    -- SIP/39-00000033 answered SIP/32-00000032
    -- Executing [s@macro-DTMFMobilfunkCallthrough:1] NoOp("SIP/39-00000033", "Nun soll eine Mobilfunknummer mithilfe des Callthrough-Dienstes 01801011078 gewählt werden.") in new stack
    -- Executing [s@macro-DTMFMobilfunkCallthrough:2] SendDTMF("SIP/39-00000033", "wwww01801011078") in new stack
       > 0x6b2078012a40 -- Probation passed - setting RTP source address to 192.168.5.3:16446
    -- Executing [s@macro-DTMFMobilfunkCallthrough:3] WaitForSilence("SIP/39-00000033", "2000,11") in new stack
    -- Waiting 11 time(s) for 2000 ms silence with 0 timeout
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Exiting with 2000ms silence >= 2000ms required
    -- Executing [s@macro-DTMFMobilfunkCallthrough:4] NoOp("SIP/39-00000033", "Nun war es still.") in new stack
    -- Executing [s@macro-DTMFMobilfunkCallthrough:5] SendDTMF("SIP/39-00000033", "wwww015112345678#") in new stack
    -- Locally bridging SIP/32-00000032 and SIP/39-00000033
       > 0x4134560 -- Probation passed - setting RTP source address to 192.168.5.7:5062
  == Spawn extension (Endgeraete, 015112345678, 1) exited non-zero on 'SIP/32-00000032'
Firewall2-Jung-Fernmelder*CLI>

In der Tat hoffe ich darauf, dass es mithilfe dieser Informationen möglich sein wird, mir eine Hilfestellung zu geben, mit der mir es gelingen wird, den Dialplan so zu modifizieren, als dass die Preisansage der 3U Holding AG durch den Benutzer dieser Asterisk-Telefonanlage jedes Mal mitgehört werden wird. Weiterhin danke ich Ihnen sehr dafür, dass Sie sich mit meinem Problem beschäftigen und sich bemühen, mir die zur Lösung dieses Problems erforderliche Hilfestellung zukommen zu lassen.


Mit freundlichen Grüßen

Jung-Fernmelder
 
Kann es sein, dass die Ansage zwischen...
-- Called SIP/39
...und...
-- SIP/39-00000033 answered SIP/32-00000032
...anstatt des "tuut---tuut" als "early media" abgespielt wird ?
 
Zuletzt bearbeitet:
Sehr geehrte Damen und Herren,

bezugnehmend auf koyaanisqatsi´s Vermutung habe ich mich ein wenig im Internet umgesehen und habe erfahren, dass Preisansagen für üblich als Early Media eingespielt werden. Bei der Recherche hat mir dieser Artikel geholfen, da nicht nur der erläuterte Lauschangriff interessant ist, sondern es stehen auch Information zu den Preisansagen im zweiten Absatz. Wenn man zu Testzwecken nun unterstellt, dass die Preisansage, die Gegenstand meines Problems ist, auch per Early Media eingespielt wird, so würde es mich sehr interessieren wie ich dieses Early Media für den Benutzer hörbar mache. Sollte Early Media denn nicht per se für den Benutzer hörbar sein? In diesem Sinne möchte ich mich für Ihre Ideen in Bezug auf mein Problem weiterhin sehr bedanken und hoffe, dass ich bald die passenden Informationen erhalten werde und das Problem lösen können werde.


Mit freundlichen Grüßen

Jung-Fernmelder
 
Moin

Wenn es Early Media ist, braucht es eigentlich nur das D() Flag im Dial(), anstatt des M().
Probier mal: D(${EXTEN}#)
 
Sehr geehrte Damen und Herren,

bitte entschuldigen Sie, dass ich mich längere Zeit nicht mehr um die hiesige Telefonanlage gekümmert habe und auch hier in diesem Thema keinen Beitrag mehr verfasst habe. Die beschriebenen Probleme bestehen dennoch fort. Nachdem ich nun einige Wochen aus beruflichen Gründen im Ausland war, habe ich mir noch einmal Gedanken zum Thema gemacht und ein wenig getestet, wobei mir etwas aufgefallen ist, was ich nicht nachvollziehen kann.

Bei Test eins habe ich den unten stehenden Kontext in den Dialplan eingebaut, die Asterisk-Telefonanlage neu gestartet und von der Nebenstelle 32 (Softphone "Phoner", Version 3.7, ausgeführt auf einem Klapprechner mit Windows 10) aus die 44 gewählt.
Code:
[test1]
exten => 44,1,Dial(SIP/39,,G(test1^bsp^1))
exten => 44,n,Hangup()

exten => bsp,1,Playback(carried-away-by-monkeys)
exten => bsp,n,Playback(carried-away-by-monkeys)
Dabei erhielt ich mithilfe des Linux-Befehls "asterisk -rvvvvv" die untenstehende Ausgabe. Dabei hörte ich von meinem Klapprechner zweimal die Ansage, dass niemand verfügbar sei, weil alle von Affen entführt worden seien. Dieses Verhalten hatte ich auch erwartet.
Code:
  == Using SIP RTP CoS mark 5
    -- Executing [44@Endgeraete:1] Dial("SIP/32-00000023", "SIP/39,,G(test1^bsp^1)") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/39
    -- SIP/39-00000024 answered SIP/32-00000023
    -- Executing [bsp@test1:1] Playback("SIP/32-00000023", "carried-away-by-monkeys") in new stack
    -- Executing [bsp@test1:2] Playback("SIP/39-00000024", "carried-away-by-monkeys") in new stack
    -- <SIP/39-00000024> Playing 'carried-away-by-monkeys.slin16' (language 'de')
       > 0x72e818013cd0 -- Probation passed - setting RTP source address to 192.168.5.3:16462
       > 0x17e44f0 -- Probation passed - setting RTP source address to 192.168.5.7:5062
    -- <SIP/32-00000023> Playing 'carried-away-by-monkeys.slin16' (language 'de')
    -- Auto fallthrough, channel 'SIP/39-00000024' status is 'UNKNOWN'
    -- Executing [bsp@test1:2] Playback("SIP/32-00000023", "carried-away-by-monkeys") in new stack
    -- <SIP/32-00000023> Playing 'carried-away-by-monkeys.slin16' (language 'de')
    -- Auto fallthrough, channel 'SIP/32-00000023' status is 'ANSWER'


Danach baute ich einen weiteren Kontext in den Dialplan ein, startete die Asterisk-Telefonanlage neu und wählte von der Nebenstelle 32 (Softphone "Phoner", Version 3.7, ausgeführt auf einem Klapprechner mit Windows 10) aus die 45.
Code:
[test2]
exten => 45,1,Dial(SIP/39,,M(test2Makro))
exten => 45,n,Hangup()

[macro-test2Makro]
exten => s,1,Playback(carried-away-by-monkeys)
exten => s,n,Wait(2)
exten => s,n,Playback(carried-away-by-monkeys)
Ich erhielt mithilfe des Linux-Befehls "asterisk -rvvvvv" die untenstehende Ausgabe, jedoch hörte ich von meinem Klapprechner nichts, obwohl ich das gleiche Verhalten wie in Test eins erwartet hatte.
Code:
  == Using SIP RTP CoS mark 5
    -- Executing [45@Endgeraete:1] Dial("SIP/32-00000025", "SIP/39,,M(test2Makro)") in new stack
  == Using SIP RTP CoS mark 5
    -- Called SIP/39
    -- SIP/39-00000026 answered SIP/32-00000025
    -- Executing [s@macro-test2Makro:1] Playback("SIP/39-00000026", "carried-away-by-monkeys") in new stack
    -- <SIP/39-00000026> Playing 'carried-away-by-monkeys.slin16' (language 'de')
       > 0x72e818013a80 -- Probation passed - setting RTP source address to 192.168.5.3:16464
    -- Executing [s@macro-test2Makro:2] Wait("SIP/39-00000026", "2") in new stack
    -- Executing [s@macro-test2Makro:3] Playback("SIP/39-00000026", "carried-away-by-monkeys") in new stack
    -- <SIP/39-00000026> Playing 'carried-away-by-monkeys.slin16' (language 'de')
    -- Locally bridging SIP/32-00000025 and SIP/39-00000026
       > 0x18fc780 -- Probation passed - setting RTP source address to 192.168.5.7:5062
  == Spawn extension (Endgeraete, 45, 1) exited non-zero on 'SIP/32-00000025'

Nun bin möchte ich Sie fragen, weshalb sich die Asterisk-Telefonanlage unterschiedlich verhält, wenn man die Affenansage mit der G-Option des Befehls "Dial" abspielen lässt, als wenn man diese in einem Makro abspielen lässt. Gibt es hier eine gute Erklärung oder liegt vielleicht ein Fehlverhalten meiner Asterisk-Telefonanlage vor und wie kann ich es beheben? An dieser Stelle möchte ich Ihnen herzlich dafür danken, dass Sie diesen Beitrag bis hier durchgelesen haben und dass Sie sich mit meinem Problem beschäftigen


Mit freundlichen Grüßen

Jung-Fernmelder
 
Da ich die Vorgehensweisen des neuen Forum-Betreibers nicht gut heiße, stehen meine Beiträge hier nicht weiter zur Verfügung.
 
Zuletzt bearbeitet von einem Moderator:
Sehr geehrte Damen und Herren,

durch die letzte Antwort von rentier-s erscheint mir der Fehler nun ein wenig durchschaubarer. Während die Optionen M und U des Befehls "Dial" nur einen Kanal tangieren, verschiebt die Option B gleich beide. Sehe ich es somit richtig, dass für mein Vorhaben beide Kanäle (in diesem Fall SIP/39 und SIP/32) von Relevanz sind und ich dies bei der Programmierung meines Dialplans beachten muss? Ich gehe davon aus, dass ich also mein Makro dahingehend verändern muss, als dass es stets beide Kanäle so beeinflusst, dass Audio (gemeint ist die Preisansage, die durch den Callthrough-Betreiber vorgelesen wird) hörbar ist, beziehungsweise DTMF-Signale übertragen werden. In Bezug auf die diesem Thema zugrundeliegende Aufgabenstellung bedeutet dies, dass auf dem einen Kanal die DTMF-Signale ausgegeben müssen und auf dem anderen die Preisansage, die der Betreiber des Callthrough-Dienstes einspielt, vom Benutzer gehört werden können muss. Wie kann ich also ein Makro so schreiben, dass es mehrere Kanäle (in diesem Fall zwei SIP-Kanäle) beeinflusst? Wie muss ich mein Makro programmieren, dass auf dem einen Kanal DTMF-Signale ausgegeben werden und auf dem anderen Kanal die Preisansage des Callthrough-Dienstes für den Benutzer hörbar ist?
Auch wenn ich mit meinen Fragestellungen recht konkret geworden bin, erwarte ich von Ihnen selbstverständlich nicht, dass Sie ein voll funktionsfähiges Makro für mich veröffentlichen, da sonst der Lerneffekt für mich ein wenig geschmälert würde, sondern ich erhoffe mir eher Programmieransätze, welche zur Lösung der diesem Thema zugrundeliegenden Aufgabenstellung beitragen. Jetzt hoffe ich, dass ich diese auch erhalten werde und möchte Ihnen schon einmal im Voraus herzlich dafür danken, dass Sie mir neue Ansätze liefern werden, die mir hoffentlich dabei helfen werden, einen voll funktionsfähigen Dialplan zu schreiben, der die diesem Thema zugrundeliegende Aufgabenstellung erfüllen wird.


Mit freundlichen Grüßen

Jung-Fernmelder
 
Moin

Um "Early Media" von der Telefonanlage des Callthroughanbieters abfangen zu können bedarf es wohl einen Transfer() des/eines Anrufers über Asterisk mit dem Anbieter.
...da Asterisk sonst mit Dial() sein eigenes "Tuut tuut" als "Early Media" an den Anrufer ausliefert.
Vielleicht kann das in einer Art Konferenz passieren, aber dass müsste ich auch erstmal ausprobieren.
Oder dass eventuell ein Transfer() rechtzeitig abgebrochen wird (Dauer der Early Media Ansage) um daraufhin ein Dial() mit D() Flag und eigenem Early Media (Das m() Flag ) abzusetzen.
Für das m() Flag im Dial() würde eine zusätzliche Music on Hold Klasse (Class) für den Anrufer als Infodurchsage (In der Länge der Early Media Ansage des Anbieters) bis zum Abnehmen und der daraufhin folgenden (Bei Gesprächsannahme) Übermittlung der Nummer mittels des D() Flags, benötigt.
 
Zuletzt bearbeitet:
Da ich die Vorgehensweisen des neuen Forum-Betreibers nicht gut heiße, stehen meine Beiträge hier nicht weiter zur Verfügung.
 
Zuletzt bearbeitet von einem Moderator:
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.