如何用SkPy在Python中获取Skype外呼通话记录?
如何修改SkPy代码监听Skype外呼通话
原代码通过监听NewMessage事件并解析消息内容识别呼入通话的方式既不严谨,也无法捕获外呼通话事件。SkPy提供的SkypeCallMsg类专门用于处理各类通话事件,不管是呼入还是呼出都能覆盖到,以下是具体修改方案:
修改后的代码
from getpass import getpass from skpy import SkypeEventLoop from skpy import SkypeCallMsg class MySkype(SkypeEventLoop): def onEvent(self, event): # 只处理通话相关事件 if isinstance(event, SkypeCallMsg): call = event.call # 区分通话方向 if call.direction == "incoming": print(f"收到呼入通话,来自: {call.participants[0].name}") elif call.direction == "outgoing": print(f"发起外呼通话,拨打给: {call.participants[0].name}") # 可根据通话状态做更多处理 print(f"当前通话状态: {call.status}") if __name__ == "__main__": # 安全获取账号密码,避免硬编码 email = input("输入Skype邮箱: ") password = getpass("输入Skype密码: ") sk = MySkype(email, password, autoAck=True) sk.loop()
关键修改说明
- 替换原有的
NewMessage判断逻辑,直接检查事件是否为SkypeCallMsg类型,这是SkPy为通话事件设计的专属类,能直接获取完整的通话元数据。 - 通过
call.direction属性可直接区分呼入(incoming)和呼出(outgoing),无需解析消息内容。 call.participants可获取通话参与方信息,call.status能获取当前通话状态(比如ringing响铃、connected接通、ended结束等)。- 移除了不必要的
subscribePresence(),监听通话事件不需要订阅联系人状态。 - 改用
getpass和交互式输入获取账号密码,避免硬编码带来的安全风险。
内容的提问来源于stack exchange,提问作者Heaven Foot
相关产品推荐
相关产品推荐

