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 ??
Achja, Win32Com ist natürlich installiert
COM Server von 'Phoner' ansprechen ?
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
Zuletzt geändert von snakeseven am Donnerstag 29. Dezember 2005, 23:40, insgesamt 1-mal geändert.
Hi Snakeseven,
Telefonieren über den PC (VoIP) ist auch so eins meiner Hobbies.
Phoner kannte ich bisher nicht, macht aber einen ganz guten Eindruck .
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
Telefonieren über den PC (VoIP) ist auch so eins meiner Hobbies.
Phoner kannte ich bisher nicht, macht aber einen ganz guten Eindruck .
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
-
- 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
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
... s.o. ...snakeseven hat geschrieben:... Excell ist bei mir installiert und da ist ja auch ein VB Editor bei...
!!! ASTERISK !!!snakeseven hat geschrieben:... Asterix läuft leider nur auf Linux (Unix) was ich beides nicht habe
Korrekt. Hier nochmals ein kleiner Tipp. Im Excel VBA Editor musst Du noch über den Menüpunkt /Extras/Verweise den Phoner COM Serversnakeseven 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 ?
auswählen, damit er anschliessend im "Objektkatalog" angezeigt wird.
Tabellar
-
- 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 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:
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
versuche mich da jetzt ranzupirschen. Phoner ist über den eigenen COM-Server über
Code: Alles auswählen
phon = win32com.client.Dispatch("Phoner.CPhoner")
Code: Alles auswählen
a=0
b=""
status = phon.GetState(a,b)
Was mache ich falsch ??
Gruss, Seven
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...
Du musst die Eventfunktion OnChangeState() auswerten. Da kommen die CallIDs mit...
-
- User
- Beiträge: 408
- Registriert: Freitag 7. Oktober 2005, 14:37
- Wohnort: Berlin
- Kontaktdaten:
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:Phoner hat geschrieben:Du musst die Eventfunktion OnChangeState() auswerten. Da kommen die CallIDs mit...
Code: Alles auswählen
Event OnChangeState(CallID As Long)
Element von Phoner.CPhoner
Statusänderung
Code: Alles auswählen
raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: Phoner.CPhoner.OnChangeState
-
- 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
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Brauchst du nicht mehr, hab ich gemachtblackbird hat geschrieben:Ich lösch es erst, wenn sich das jemand auser mir auch noch angesehen hat
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- 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 Seven
-
- 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:
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()