COM Server von 'Phoner' ansprechen ?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi,
Habe ein COM Problem.
Ich habe das Programm Phoner http://www.phoner.de, welches ich über 'subprocess.Popen()' aufrufen und zum Aufbau einer Telefonverbindung überreden kann. Sobald abgenommen wird soll ein WAV File abgespielt werden. Das geht aus Phoner heraus nicht, weswegen das in meinem Pythonscript passieren muß. Kein Problem, wenn ich eine Methode hätte zu erkennen, wann die Gegenstelle abgenommen hat ? Phoner hat einen integrierten COM Server, der alle Nötigen Infos nach außen gibt. Leider gibt es (noch) keine Doku dazu. Kann ich trotzdem rauskriegen, wie ich

a) die Applikation selbst anspreche ("Phoner.Applikation" funktioniert nicht) ?
b) auf welche Klassen, Methoden und Attribute von Phoner ich über COM zugreifen kann ?

Bin für jeden Tipp dankbar !
Seven

P.S. Es gibt auch eine ActiveX Schnittstelle zu Phoner, die sogar dokumentiert ist, aber da blicke ich nicht, wie man die anspricht ?? :roll:
Achja, Win32Com ist natürlich installiert
Zuletzt geändert von snakeseven am Donnerstag 29. Dezember 2005, 23:40, insgesamt 1-mal geändert.
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

Hi Snakeseven,

Telefonieren über den PC (VoIP) ist auch so eins meiner Hobbies.
Phoner kannte ich bisher nicht, macht aber einen ganz guten Eindruck :P.
Ich selber hab nen Asterisk Server als PBX, ein Endlosthema...

Um an die COM Befehle von Phoner heranzukommen kannst Du z.B.
über den VBA Editor in Excel den Objektkatalog aufrufen. Dort findest
Du die entpsrechenden COM / OLE Server auf Deinem Rechner mit den
entsprechenden Funktionen.

Viel Glück...
Tabellar
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi Tabellar,
kenne mich zwar mit VB nicht aus aber Excell ist bei mir installiert und da ist ja auch ein VB Editor bei. Asterix läuft leider nur auf Linux (Unix) was ich beides nicht habe. Aber wenn ich an die Schnittstellen-Doku von Phoner komme (z.B. über VB), dann müßte es auch möglich sein, über win32com darauf zuzugreifen ?
Ich melde mich an dieser Stelle wieder, wenn ich was Erfolgreiches dazu sagen kann. Vieleicht haben ja Andere auch sowas vor !?
Gruss, Seven
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

snakeseven hat geschrieben:... Excell ist bei mir installiert und da ist ja auch ein VB Editor bei...
... s.o. ...

snakeseven hat geschrieben:... Asterix läuft leider nur auf Linux (Unix) was ich beides nicht habe
!!! ASTERISK !!!
snakeseven hat geschrieben:Aber wenn ich an die Schnittstellen-Doku von Phoner komme (z.B. über VB), dann müßte es auch möglich sein, über win32com darauf zuzugreifen ?
Korrekt. Hier nochmals ein kleiner Tipp. Im Excel VBA Editor musst Du noch über den Menüpunkt /Extras/Verweise den Phoner COM Server
auswählen, damit er anschliessend im "Objektkatalog" angezeigt wird.

Tabellar
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi,
versuche mich da jetzt ranzupirschen. Phoner ist über den eigenen COM-Server über

Code: Alles auswählen

phon = win32com.client.Dispatch("Phoner.CPhoner")
zu erreichen. Es gibt die Funktion GetState(CallID As Long, StateString). Sie enthält die für mich wichtige Variable 'StateString'. Sie kann die Werte 'Idle', 'Connecting' und 'Connected' haben. Wenn ich mit:

Code: Alles auswählen

a=0
b=""
status = phon.GetState(a,b)
versuche StateString auszulesen gibts ein 'None' zurück, statt des zu erwartenden 'Idle'. Die Variable NumberOfCalls kann ich hingegen korrekt auslesen. MakeCall(Number As String) funktioniert auch.

Was mache ich falsch ??
Gruss, Seven
Phoner

Der erste Parameter eines GetState() erwartet die ID des entsprechenden Calls, Du kannst da nicht einfach eine Null übergeben!
Du musst die Eventfunktion OnChangeState() auswerten. Da kommen die CallIDs mit...
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Phoner hat geschrieben:Du musst die Eventfunktion OnChangeState() auswerten. Da kommen die CallIDs mit...
Da verstehe ich was jetzt nicht. OnChangeState() verlangt ebenfalls als Parameter die CallID. Aber genau die weiss ich ja nicht ? Erklärtext in VB->Phoner.CPhoner:

Code: Alles auswählen

Event OnChangeState(CallID As Long)
    Element von Phoner.CPhoner
    Statusänderung
Wenn ich OnChangeState() mit einem Long-Dummy aufrufe, bekomme ich eine Fehlermeldung:

Code: Alles auswählen

raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: Phoner.CPhoner.OnChangeState
Seven (ratlos dreinblick :roll: )
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Juhuuuuu. Spam Alarm. Noch immer nichts gegen die Deaktivierung der Gast Funktion? Und nein. Ich lösch es erst, wenn sich das jemand auser mir auch noch angesehen hat :)
TUFKAB – the user formerly known as blackbird
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

blackbird hat geschrieben:Ich lösch es erst, wenn sich das jemand auser mir auch noch angesehen hat :)
Brauchst du nicht mehr, hab ich gemacht :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

??? was geht hier vor ??? Ich hoffte schon, jemand weiss wie man Phoner fernsteuert. Leider nicht :cry: Seven
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi,
Ich brauche nochmal eure Hilfe in Sachen Phoner:
Nachfolgendes Script ruft Phoner über win32com auf, wählt, spielt eine WAV-Datei ab und legt wieder auf. Alles schick, nur daß ich
die CallID manuell eintragen muß, weil ich an die immer noch nicht rankomme. Ich habe sie mir über diese HTML Applikation
auslesen lassen und sie ist immer dieselbe. Dennoch ist es "unelegant" und geschummelt. Wie komme ich über den COM-Server von
Phoner an die CallID ? Das Phoner Forum antwortet dazu das hier. Das verstehe ich aber nicht, denn woher soll der Phoner-Server, über den Phoner alle Informationen rausgibt, meine Funktion kennen ??? Hat einer von euch eine Idee ?

Mein Script:

Code: Alles auswählen

import win32com.client,time,threading

cid = "257"   #CallID
stat = ""
wavlen = 21  #Länge des Wavfiles
tme = 0
Z = ''

def zaehler():
    global Z,tme
    Z = threading.Timer(1, zaehler)     #Thread: Sekundenzähler
    Z.start()
    tme += 1
    
def make_call(): 
    phon = win32com.client.Dispatch("Phoner.CPhoner") #Phoner öffnen
    phon.MakeCall("021158007207")          #Echotestloop
    call_start = tme

    call = True
    ply = False
    while call:      
        zustand = phon.GetState(cid,stat)

        if zustand == "Connected":
            if not ply:
                ply = True
                connect_start = tme     #Play-Zähler setzen
                phon.SendWAVE(cid,"G:/AutomergeMobile/MP3_out/temp1.wav")
            else:
                if tme - connect_start > wavlen: #Nach Abspielen Ruf beenden
                    call = False
        elif zustand == "Disconnecting" or zustand == "None":
            call = False
        else:
            if tme - call_start > 30:    #wenn nach 30 Sekunden Ruf nicht angenommen
                call = False
                
    phon.DisconnectCall(cid)
    Z.cancel()
    del(phon)  #Phoner schließen
    
zaehler()
make_call()
Antworten