Page Index Toggle Pages: 1 Send TopicPrint
Normal Topic CLI Anruf Annehmen und alten Anruf beenden. (Read 100 times)
paule
YaBB Newbies
*
Online


Phoner is great!

Posts: 2
Joined: 04. Mar 2026
CLI Anruf Annehmen und alten Anruf beenden.
04. Mar 2026 at 16:33
Print Post  
Ich versuche verzweifelt es hinzubekommen, dass ich ein aktives Telefonat beende und gleichzeitig das anklopfende annehme. Die Idee war ein python script welches per autohotkey ausgeführt wird. Ich kenne mich da nicht so aus, aber wenn ich es richtig verstehe, akzeptiert HookOn und HookOff keine Parameter. Hat jemand eine Idee wie ich das lösen kann?

Aktueller Stand:

Code
Select All
import asyncio
import telnetlib3
import re

TELNET_HOST = '127.0.0.1'
TELNET_PORT = 50600
STATUS_COMMAND = 'status'  # ohne \n

async def main():
    print("[DEBUG] Starte Script")
    try:
        reader, writer = await telnetlib3.open_connection(
            TELNET_HOST, TELNET_PORT, encoding=None  # Bytes lesen
        )
    except Exception as e:
        print(f"[ERROR] Verbindung fehlgeschlagen: {e}")
        return

    # Willkommensnachricht lesen bis PL>
    try:
        welcome_bytes = await reader.readuntil(b'PL>')
        welcome = welcome_bytes.decode(errors='ignore')
        print("[DEBUG] Willkommen:\n", welcome)
    except Exception as e:
        print(f"[ERROR] Fehler beim Lesen des Willkommens: {e}")
        writer.close()
        await writer.wait_closed()
        return

    # Status-Befehl senden wie ein Mensch (Enter am Ende)
    print("[DEBUG] Sende Befehl:", STATUS_COMMAND)
    writer.write(STATUS_COMMAND.encode('ascii') + b'\r\n')
    await asyncio.sleep(0.1)  # kurze Pause, damit Antwort beginnt

    # Lese alles bis PL> (Prompt) – hier kommt die Tabelle
    try:
        raw_bytes = await reader.readuntil(b'PL>')
        raw_output = raw_bytes.decode(errors='ignore')
        print("[DEBUG] Roh-Output:\n", raw_output)
    except Exception as e:
        print(f"[ERROR] Fehler beim Lesen der Tabelle: {e}")
        writer.close()
        await writer.wait_closed()
        return

    # Tabelle extrahieren
    table_lines = []
    table_started = False
    for line in raw_output.splitlines():
        if re.match(r'\s*id\s*\|\s*dir\s*\|\s*state', line):
            table_started = True
            continue
        if table_started:
            if line.strip() == '' or line.startswith('PL>'):
                break
            table_lines.append(line)

    print("[DEBUG] Gefundene Tabellenzeilen:")
    for l in table_lines:
        print(l)

    # Tabelle parsen
    calls = []
    for line in table_lines:
        parts = [p.strip() for p in line.split('|')]
        if len(parts) >= 6:
            call = {
                'id': parts[0].lstrip('*'),  # Stern entfernen
                'dir': parts[1],
                'state': parts[2],
                'number': parts[3],
                'duration': parts[4],
                'codecs': parts[5],
            }
            calls.append(call)

    print("\n[RESULT] Calls gefunden:")
    active_call = None
    ringing_call = None
    for c in calls:
        print(f"ID: {c['id']}, State: {c['state']}, Number: {c['number']}, Duration: {c['duration']}, Codecs: {c['codecs']}")
        if c['state'] == 'active':
            active_call = c['id']
        elif c['state'] == 'ring':
            ringing_call = c['id']

    # Calls verwalten
    if active_call:
        print(f"\n[ACTION] Beende Active Call: {active_call}")
        writer.write(f"HookOn {active_call}\r\n".encode('ascii'))
        response = await reader.readuntil(b'PL>')
        print("[DEBUG] Antwort HookOn:\n", response.decode(errors='ignore'))

    if ringing_call:
        print(f"[ACTION] Nimm Ringing Call an: {ringing_call}")
        writer.write(f"HookOff {ringing_call}\r\n".encode('ascii'))
        response = await reader.readuntil(b'PL>')
        print("[DEBUG] Antwort HookOff:\n", response.decode(errors='ignore'))

    writer.close()
    await writer.wait_closed()
    print("\n[RESULT] Script beendet.")

if __name__ == "__main__":
    asyncio.run(main()) 

  
Back to top
 
IP Logged
 
Phoner Admin
YaBB Administrator
*****
Offline



Posts: 11757
Location: Germany
Joined: 12. Oct 2003
Gender: Male
Re: CLI Anruf Annehmen und alten Anruf beenden.
Reply #1 - yesterday at 12:12
Print Post  
Diese Script-Steuerung ist für PhonerLite selbst gedacht und nicht über eine externe Scriptsprache (Python) die internen Scripte von PhonerLite zu steuern.
Wie du das Script erstellst, ist egal, das kann auch aus Python heraus erfolgen. Du hast dann im Endeffekt eine Text-Datei, welche PhonerLite dann laden kann.
Alle möglichen Szenarien kann man damit nicht abbilden. Das war aber auch nie das Ziel. Ich habe das eher für eine Testgegenstelle gebaut, damit ich gewisse Abläufe besser testen kann.
  
Back to top
WWW  
IP Logged
 
paule
YaBB Newbies
*
Online


Phoner is great!

Posts: 2
Joined: 04. Mar 2026
Re: CLI Anruf Annehmen und alten Anruf beenden.
Reply #2 - Today at 15:22
Print Post  
Ok, vielen Dank für die Antwort. Ich kenne mich da leider nicht so aus, deswegen meine Frage:
Ich habe öfters den Fall, dass man das aktuelle Gespräch gerade am Beenden ist, während ein neuer Anruf klingelt, oder man sieht eine wichtige Nummer ruft an und dann möchte man das aktuelle Telefonat schnell beenden und das neue gerne annehmen. 
Da es da ja keinen Button/Hotkey gibt, dachte ich, ich bastele mir das selber....
Aktuell ist es ja so, dass wenn den Hotkey auflegen klickt das anklopfende Gespräch weggedrückt wird, statt das aktuelle. Und wenn man einfach nur das neue annimmt, dann hört das alte Telefonat, dass die Verbindung gehalten wird, was in meiner Situation auch blöd wäre...
Wie könnte man so etwas am besten umsetzen? Würde mich riesig über ein Tipp freuen...
  
Back to top
 
IP Logged
 
Page Index Toggle Pages: 1
Send TopicPrint