Welcher Telefoncode beendet einen von extern eingehenden Anruf?

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
358
Punkte für Reaktionen
54
Punkte
28
Abgetrennt von https://www.ip-phone-forum.de/threads/telefoncodes-der-fritzbox-neue-version.77281/page-22 by stoney

Welcher Telefoncode beendet einen von extern eingehenden Anruf?


Moin,

wie hier schon an einigen Stellen und bei AVM selbst beklagt gibt es ja leider kein SOAP-Action, um einen eingehenden Anruf zu beenden.
Nun kam mir heute die spontane Idee, ob es nicht einfach mit einem "Gegenfeuer" realisierbar wäre. Sprich: per Telefoncode den Anruf zu terminieren.
Ich habe folgende Codes mit X_AVM-DE_DialNumber - erfolglos - ausprobiert:
Interessant war, dass ich, nachdem ich 'ATH' probiert habe, anschließend beim Versuch mit 'ATH0' einen SOAP-Error 600 (Argument Value Invalid) zurückgeliefert bekomme. Bei der Wiederholung mit 'ATH0' dann nicht mehr. Das lässt sich zumindest mit der Sequenzwiederholung reproduzieren - aber dafür verstehe ich auch zu wenig gar nichts?) von den AT Kommados.
Zumindest belegt es, dass man mit dem SOAP-Action AT Kommandos senden kann - auch wenn Sie nicht das gewünschte bewirken :(

Vermutlich bin ich total auf dem Holzweg mit meinem Ansatz - wäre aber ein spannender Workaround, um das Dilemma des fehlenden "X_AVM-DE_Disconnect" zu lösen

Hat jemand einen Tipp?

Grüße

Black Senator
 
Zuletzt bearbeitet:

PeterPawn

IPPF-Urgestein
Mitglied seit
10 Mai 2006
Beiträge
14,270
Punkte für Reaktionen
1,400
Punkte
113
Trotzdem rate ich hier mal mit (notfalls bitte einfach mit verschieben) und behaupte, daß da vermutlich die beim Dial übergebene Nummer unsaniert an ein AT-Kommando zum Wählen angehangen wird. Denn daß im FRITZ!OS der telefon-Daemon auch AT-Kommandos versteht, ist ja kein Geheimnis - das kann jeder mittels Telnet-Zugriff auf dem Port 1011 (aber nur innerhalb der FRITZ!Box, will man ihn nach außen legen, braucht man irgendeinen Proxy oder meinetwegen einen SSH-Tunnel) ausprobieren.

Wenn also die angestoßene SOAP-Aktion X_AVM-DE_DialNumber (oben ist ein Bindestrich anstelle eines Unterstrich zu sehen, der ist aber falsch an dieser Stelle) die Nummer tatsächlich ungeprüft übernimmt, dann wäre das auch eine - für mich zumindest - plausible Erklärung, warum hier überhaupt AT-Kommandos IRGENDETWAS bewirken sollten.

Denn tatsächlich funktioniert auch die "Verkettung" mehrerer AT-Kommandos, indem man zwischen sie ein Semikolon setzt. Wenn dann ein ATH tatsächlich ALLE Leitungen auflegt (bei VoIP-Clients bin ich mir da nicht so sicher - der ganze AT-Kommandokram stammt ja noch aus der Vorzeit des voipd), dann würde ich als Nummer eher so etwas wie **3;ATH versuchen - bei einem ATD**50;ATH (direkte Eingabe am Port 1011) klingelt mein ISDN-Telefon jedenfalls (auch heute noch mit einer 07.24-irgendwas an der 7490 - genauso wie schon vor Jahren mit einer 06.2x) sehr kurz, bevor der Ruf wieder beendet wird (wer will, kann sich auch die ISDN-Messages im D-Kanal ansehen mittels dtrace). Ob davon auch parallel laufende andere Telefonate betroffen wären (unabhängig von der Technologie, wobei DECT ja auf ISDN "gemappt" wird bei AVM), habe ich nicht getestet.

Voraussetzung wäre es eben, daß die Nummer tatsächlich unsaniert weitergegeben wird (was mich nicht wirklich verblüffen würde, denn auch das stammt partiell ja noch aus der Zeit, wo Sicherheit noch kein Thema war) ... ich habe aber gerade keinen Bock, das auf TR-064 im X_VOIP-Interface selbst zu testen. Aber bei anderer Implementierung würde sich mir nicht erschließen, wieso da überhaupt irgendwelche AT-Kommandos interpretiert werden sollten.

Wenn das wirklich so klappt, müßte man sogar wieder nachsehen, ob nicht durch geschickte Wahl der Rufnummer und ein anschließend noch angehangenes ATD wieder der Zugriff auf eigentlich gesperrte Rufnummerngassen möglich wird - wenn so eine Nummer nur am Beginn geprüft wird und da eine erlaubte Gasse steht, könnte auf diesem Weg ja auch wieder ein kostenpflichtiges und -intensives Gespräch "durchrutschen".

Wenn das hier also als OT angesehen werden sollte, dann bitte ich darum, das in einen neuen Thread zu packen und nicht nur zu entsorgen ... das Thema an sich ist durchaus "spannend" und sollte nicht einfach unter den Tisch fallen.

EDIT: BTW ... daß ein richtig platziertes ATH tatsächlich eingehende Gespräche auflegen kann, ist m.W. tatsächlich bekannt und war hier (aus der Erinnerung) auch schon Thema - irgendwie habe ich da eine Diskussion zum Datenschutz i.V.m. der automatischen Abfrage eingehender Rufnummern bei Tellows im Kopf, wo aber bei entsprechendem Ergebnis der eingehende Anruf auch "aufgelegt" wurde.

Nur weiß ich nicht mehr, ob das tatsächlich für alle Technologien funktioniert(e). Wobei die Wählhilfe ja (zumindest bei der Konfiguration im GUI) auch auf "keine SIP-Clients" beschränkt ist - oder kann man über X_AVM-DE_DialSetConfig mittlerweile doch auch SIP-Clients auswählen?
 
Zuletzt bearbeitet:

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
358
Punkte für Reaktionen
54
Punkte
28
@PeterPawn

Danke für´s mitraten und Zuspruch.
Ich hatte das Umfeld (SOAP) und meine "Beobachtungen" nur geschildert, um nicht in gewohnter Weise gleich abgebürstet oder mit inhaltslosen Wortmeldungen bedacht zu werden.

'**3;ATH', bewirkt leider ebensowenig ein DISCONNECT wie '**1;ATH' oder '**2;ATH'
 
Zuletzt bearbeitet:

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
358
Punkte für Reaktionen
54
Punkte
28
Hallo,

das Thema musste nun leider ein halbes Jahr ruhen - nun wollte ich mich dem wieder widmen. In dem Zusammenhang muss ich aber noch einen kleinen Exkurs machen der mich in dem Zusammenhang seit zwei Wochen umtreibt:
Ich verstehe nicht was mir einige Actions aus x_voip zurückliefern!
Das liegt sicher daran, dass ich von Telefonie in der FRITZ!Box keine Ahnung habe - sicher aber jemand hier im Forum (@PeterPawn zum Beispiel?).

Ausgangssituation:
  • zugewiesen sind 10 MSN
  • aktuell verwendet werden davon 4
  • die Telefoniegeräte sind drei FRITZ!Fon, ein paar Anrufbeantworter, internes FAX und virtuell die "Haustür":
    Telefoniegeräte.jpg
So nun zu meinen
Ergebnissen und Fragen:
  • GetExistingVoIPNumbers liefert "10" zurück - passt also
  • GetMaxVoIPNumbers liefert "20" zurück - wird wohl stimmen, wenn ich die AVM Angaben addiere:
    • 1 S0-Bus
    • 3 analoge Anschlüsse
    • 6 DECT Geräte
    • 10 IP Telefone
  • GetVoIPEnableCountryCode(ui2) mit ui2 (int) von 0 bis 9 liefert jeweils "0" - das bezieht sich also vermutlich auf die 10 IP Telefone von denen ich ja wohl keines installiert habe(?)
  • X_AVM-DE_GetNumberOfClients liefert auch "0" - was mich stutzig macht, da nicht dokumentiert ist, dass Clients = IP Telefoniegeräte sei
  • nicht überraschend liefert X_AVM-DE_GetClient()ui2 mit ui2 (int) von 0 bis 9 jeweils der Error "713"
  • und ebenso X_AVM-DE_GetClients lediglich den XML-Rumpf "<List />"
  • X_AVM-DE_GetNumberOfNumbers liefert "10" zurück - aber das wissen wir doch schon mit GetExistingVoIPNumbers?
  • zumal mit X_AVM-DE_GetNumbers die Liste mit den zehn MSN als XML ausgegeben werden:
    Code:
    <?xml version="1.0"?>    <List>
            <Item>
                <Number>9xxxxx</Number>
                <Type>eVoIP</Type>
                <Index>0</Index>
                <Name>Privatnummer</Name>
            </Item>
            <Item>
            ...
  • ebenso wie mit X_AVM-DE_GetVoIPAccount die Zugangsdaten der 10 MSN zurückgeliefert werden
  • X_AVM-DE_GetPhonePort(ui2) mit ui2 (int) von 1 bis 5 liefert:
    Code:
    FON1: Haustür
    ISDN: ISDN/DECT Rundruf
    DECT: Lxxxx
    DECT: Erdgeschoss
    DECT: Obergeschoss
    wobei ich nicht verstehe, warum
    • der Index mit "1" statt "0" beginnt und
    • ich es auch leider kein Action wie z.B. GetMaxPhonePorts gibt, damit man gezielt mit den Indizes abfragen kann, ohne umständlich falsche Indizes über Errorcodes abzufangen...
Kann mir jemand ein wenig die Zusammenhänge zwischen dem, was in der FRITZ!Box eingestellt ist, und dem, was in diesem Fall der SOAP-Service x_voip so zurückliefert, erklären?

Danke

Black Senator
 
Zuletzt bearbeitet:

B612

Aktives Mitglied
Mitglied seit
30 Jan 2021
Beiträge
1,806
Punkte für Reaktionen
302
Punkte
83

Kruemelino

Aktives Mitglied
Mitglied seit
21 Jan 2006
Beiträge
1,217
Punkte für Reaktionen
67
Punkte
48
Hallo,
ich klinke mich hier mal ein. Für mein Outlook-Addin habe ich eigene TR-064 Routinen erstellt und kann die seltsamen Ergebnisse nachvollziehen. Insbesondere bei X_AVM-DE_GetPhonePort habe ich mich auch gefragt was der Künstler mir damit sagen wollte. An der Stelle habe ich mir damit beholfen, dass ich vorher alle in Frage kommenden Telefone ausgelesen habe. (Es gibt aber keine TR-064 Funktion, die alle Telefon liefert. Es sind mehrere Abfragen teils mit http-Queries notwendig.)

Ich werde bei mir mal Testen, was die anderen Abfragen liefern. Auch das initiale Thema mit dem Telefoncode für den Abbruch gehe ich gerne mal nach.

Irgendwie läuft dein Link auf die Dokumentation der X_VoiP auf die alte Version von 2012. Hier die aktuelle:
2012: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voipSCPD.pdf
2019: https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/x_voip-avm.pdf

Meine Konfiguration:
Fritz!Box 7490 mit 3 registrierten Telefonnummern (alles VOIP, kein Festnetz etc), 2 IP-Telefone als Softwaretelefon (Phoner620 und MicroSIP)

Meine Testergebnisse:
  • GetExistingVoIPNumbers liefert 3. Das passt also zu den registrierten Telefonnummern
  • GetMaxVoIPNumbers liefert 20
  • X_AVM-DE_GetNumberOfClients liefert 2. Das passt zu den beiden IP-Telefonen
  • X_AVM-DE_GetNumberOfNumbers liefert 2 Ich habe noch keinen Plan, was dahinter steht.
  • GetVoIPEnableAreaCode mit NewVoIPAccountIndex = 0 liefert True. Das gibt vielleicht an, dass die Ortsnetzkennzahl immer mit gewählt wird? Die Dokumentation ist eine wahre Freude.
  • GetVoIPEnableCountryCode mit NewVoIPAccountIndex = 0 liefert False. Das gibt vielleicht an, dass die Landeskennzahl immer mit gewählt wird? Die Dokumentation ist eine wahre Freude.
  • NewX_AVM-DE_ClientList liefert eine Liste der angeschlossenen IP-Telefone.
    XML:
    <List>
        <Item>
            <X_AVM-DE_ClientUsername>Phoner620</X_AVM-DE_ClientUsername>
            <X_AVM-DE_ClientIndex>0</X_AVM-DE_ClientIndex>
            <X_AVM-DE_ClientRegistrar>192.168.180.1</X_AVM-DE_ClientRegistrar>
            <X_AVM-DE_ClientRegistrarPort>5060</X_AVM-DE_ClientRegistrarPort>
            <X_AVM-DE_ClientId/>
            <X_AVM-DE_ExternalRegistration>0</X_AVM-DE_ExternalRegistration>
            <X_AVM-DE_OutGoingNumber>111111</X_AVM-DE_OutGoingNumber>
            <X_AVM-DE_InComingNumbers>
                <Item>
                    <Number>111111</Number>
                    <Type>eVoIP</Type>
                    <Index>4</Index>
                    <Name/>
                </Item>
            </X_AVM-DE_InComingNumbers>
            <X_AVM-DE_PhoneName>Phoner</X_AVM-DE_PhoneName>
            <X_AVM-DE_InternalNumber>620</X_AVM-DE_InternalNumber>
            <X_AVM-DE_DelayedCallNotification>0</X_AVM-DE_DelayedCallNotification>
        </Item>
        <Item>
            <X_AVM-DE_ClientUsername>MicroSIP</X_AVM-DE_ClientUsername>
            <X_AVM-DE_ClientIndex>1</X_AVM-DE_ClientIndex>
            <X_AVM-DE_ClientRegistrar>192.168.180.1</X_AVM-DE_ClientRegistrar>
            <X_AVM-DE_ClientRegistrarPort>5060</X_AVM-DE_ClientRegistrarPort>
            <X_AVM-DE_ClientId/>
            <X_AVM-DE_ExternalRegistration>0</X_AVM-DE_ExternalRegistration>
            <X_AVM-DE_OutGoingNumber>999999</X_AVM-DE_OutGoingNumber>
            <X_AVM-DE_InComingNumbers>
                <Item>
                    <Number>999999</Number>
                    <Type>eVoIP</Type>
                    <Index>4</Index>
                    <Name/>
                </Item>
            </X_AVM-DE_InComingNumbers>
            <X_AVM-DE_PhoneName>MicroSIP</X_AVM-DE_PhoneName>
            <X_AVM-DE_InternalNumber>621</X_AVM-DE_InternalNumber>
            <X_AVM-DE_DelayedCallNotification>0</X_AVM-DE_DelayedCallNotification>
        </Item>
    </List>
  • X_AVM-DE_GetVoIPAccount mit NewVoIPAccountIndex = 0 liefert die Daten zu der registrierten VoIP-Nummer:
    Code:
    <NewVoIPRegistrar>registrar.*******.de</NewVoIPRegistrar>
    <NewVoIPNumber>999999</NewVoIPNumber>
    <NewVoIPUsername>111111999999</NewVoIPUsername>
    <NewVoIPPassword>****</NewVoIPPassword>
    <NewVoIPOutboundProxy>proxy.*******.de</NewVoIPOutboundProxy>
    <NewVoIPSTUNServer></NewVoIPSTUNServer>
Zusammenfassend würde ich jetzt sagen, dass hier zum einen die IP-Telefoniegeräte (Clients) abgefrühstückt werden, als auch die registrierten Telefonnummern (VoIPNumbers).
 
Zuletzt bearbeitet:

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
358
Punkte für Reaktionen
54
Punkte
28
Hallo,

wie angedeutet habe ich diesen zur Überschrift abweichenden "Nebenkriegsschauplatz" eröffnet mit folgender Intention:
Einigen anderen Beiträgen hier im Forum von u.a. @creon zufolge
  • wäre ein Disconnect möglich,
  • wenn alle Telefone nacheinander per AT Kommando ATP[x] x=phone
  • das Gespräch an sich ziehen (catch all) ATD*09
  • und dann beenden ATH0
  • das also n-mal für die Art und Anzahl der angeschlossenen Telefone als Dial-String
Meine Idee darauf basierend war/ist: per SOAP-Request die Phones ermitteln (daher die Ergebnisse aus x_voip) und darauf aufbauend den passenden String von AT-Kommandos zur Terminierung aufzubauen (also für jede Konstellation individuell) und dann mit X_AVM-DE_DialNumber([AT-string]) das Disconnect auszulösen.

Leider bin ich kein Kenner von AT-Kommandos und bin mir daher auch nicht sicher wie das auf z.B. mit meine Konstellation:
  • FON1: Haustür -> **1
  • ISDN: ISDN/DECT Rundruf ->
  • DECT: Lxxxx -> **611
  • DECT: Erdgeschoss -> **613
  • DECT: Obergeschoss -> **614
zu übertragen wäre: "ATP1;ATD*09;ATH0;ATP611;ATD*09;ATH0;ATP613;ATD*09;ATH0;ATP614;ATD*09;ATH0" ?

Irgendwo anders hab ich auch etwas von notwendigen Pausen zwischen den AT-Kommandos gelesen.
Ist das Trennzeichen ";" oder " " oder ","?

Mit diesen Wissenslücken bzw. Variablen per trial & error AT-Kommando-Strings aufzubauen, dann im Versuch sich selbst anzurufen und dann versuchen per Dial mit dem String den eingehenden Anruf abzuschießen erscheint mir nicht effizient.

Wenn hier jemand mit Sicherheit weiß, wie so ein Dial-String mit AT-Kommandos richtig lauten muss - das wäre hilfreich!

Nun hat @creon aber auch noch zwischenzeitlich per PM geschrieben:
...für mich herausgefunden: Es gibt keine Möglichkeit, ein Gespräch mit einem Befehl zu beenden.
Schieße ich aber mit 10 Befehlen hintereinander, bricht das Gespräch – vermutlich aufgrund eines Fehlers – ab.
Wenn jemand etwas beizutragen hat was Hoffnung auf eine Lösung bietet - bitte gern!

Grüße

Black Senator
 

Black Senator

Mitglied
Mitglied seit
13 Jul 2007
Beiträge
358
Punkte für Reaktionen
54
Punkte
28
@Kruemelino

Ich habe heute noch etwas rumexperimentiert:
Die Wählhilfe kann ich mit X_AVM-DE_DialSetConfig() nur mit den Strings verändern, die X_AVM-DE_GetPhonePort() zurückgibt.

Hier mal als Beispiel:
telefonigerät.jpg
Basierend auf meinen Erfahrungen mit dem Image-Upload auf ein FRITZ!Fon hätte ich angenommen, dass auch hier mit der Nummer des Gerätes z.B. '613' das gewünschte Gerät gewählt bzw. gewechselt wird.
Versuche mit der Nummern in verschiedener Kombination (z.B. '**613', '63', 'DECT3', 'DECT: 613' etc.) funktionieren nicht und werden entsprechend mit dem Fehler 402 (Invalid Args) quitiert.

Einzige positive Überraschung war, dass ein leerer String die Wählhilfe deaktiviert - unerwartet, aber im Nachhinein auch logisch.
X_AVM-DE_DialGetConfig liefert dann 'unconfigured'.

Grüße

Black Senator
 

Kruemelino

Aktives Mitglied
Mitglied seit
21 Jan 2006
Beiträge
1,217
Punkte für Reaktionen
67
Punkte
48
Hallo @Black Senator,

Asche auf mein Haupt. Das hätte ich dir vorab sagen können. Sorry.

Leider ist die TR-064 Wählhilfe nicht besonders gut beschrieben. Über die vier Abfrage X_AVM-DE_DialGetConfig, X_AVM-DE_DialSetConfig, X_AVM-DE_DialNumber und X_AVM-DE_DialHangup kannst du die Wählhilfe steuern. Für die Wählhilfe muss immer ein Telefon voreingestellt sein. Die ganze Konfiguration kann auch über die Benutzeroberfläche erfolgen.
  • X_AVM-DE_DialGetConfig: Ausgabe des eingestellten Telefones. Es kommt die Zeichenfolge des eingestellten Telefons nach der Formatierung X_AVM-DE_PhoneName zurück. (ich nenn das Ding immer "DialPort")
  • X_AVM-DE_DialSetConfig: Setzen des "DialPort". Auch hier muss eine Zeichenfolge analog zu X_AVM-DE_PhoneName gesendet werden. Dies gibt die Dokumentation auch so vor. Unter Related state variable steht der Verweis auf die zugehörige Variable in der Service States Table (Seite 16 - 19). Hinweis: Für das setzen des DialpPortes ist eine 2FA erforderlich, sofern die nicht deaktiviert wurde.
  • X_AVM-DE_DialNumber: Anruf auf dem eingestellten Telefon zur Nummer starten.
  • X_AVM-DE_DialHangup: Anruf auf dem eingestellten Telefon beenden. Naja AVM schreibt hier Disconnect the dialling process. was ja frei übersetzt eher einem Beende den Wählvorgang entspricht.

Es gäbe da noch die Möglichkeit das Wählen über http GET und POST zu realisieren. Das hab ich aber schon lange nicht mehr so gemacht. (Oh je. was hab ich damals zusammengeschrieben. Grauenvoll!)

Setzen des DialPort per http POST auf https://fritz.box/data.lua:
Code:
&xhr=1&clicktodial=on&port={SessionID}&sid={DialPort}&back_to_page=%2Ffon_num%2Fdial_fonbook.lua&btn_apply=&lang=de&page=telDial
wobei:
Code:
    '  Die ID des Telefones addieren werden (nullbasiert). (Das erste DECT ist 60, das zweite 61 usw. Dein "Erdgeschoß" wäre die 63!)  
    Private Enum DialPortBase As Integer
        FON = 1
        Fax = 5 ' keine Ahnung, ob das je funktioniert hat. Das ist der integrierte Faxempfang.
        S0 = 50
        DECT = 60
    End Enum

Abfrage des Dialportes via Query:
Code:
https://fritz.box/query.lua?sid={SessionID}&DialPort=telcfg:settings/DialPort

Wählvorgang:
Code:
' Die Rückgabe ist der JSON - Wert "dialing"
' Bei der Wahl von Telefonnummern ist es ein {"dialing": "0123456789#"}
' Bei der Wahl von Telefoncodes ist es ein {"dialing": "#96*0*"}
' Bei der Wahl Des Hangup ist es ein {"dialing": false}
' NEU {"dialing":true,"err":0}
' NEU {"dialing":false,"err":0}

https://fritz.box/fon_num/fonbook_list.lua?sid={SessionID}&dial={TelNr}
https://fritz.box/fon_num/fonbook_list.lua?sid={SessionID}&hangup=

Ich hoffe ich konnte helfen.
 

Anhänge

  • 1635312188843.png
    1635312188843.png
    17.7 KB · Aufrufe: 8
Erhalten Sie 3CX für 1 Jahr kostenlos!

Gehostet, in Ihrer privaten Cloud oder on-Premise! Ganz ohne Haken. Geben Sie Ihren Namen und Ihre E-Mail an und los geht´s:

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.
oder via