iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务

Posted

技术标签:

【中文标题】iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务【英文标题】:Error in AppleScript for iMessage - Can’t get service of text chat id 【发布时间】:2016-03-14 06:13:48 【问题描述】:

我收到错误消息:无法获得文本聊天 ID“iMessage;-;”的服务。 (-1728) - 尝试将文本发送到 mac 上的另一个 imessage 客户端(不同的用户)时。这是失败的代码片段:

using terms from application "Messages"
    on message received theText from theBuddy for theChat
        # get what we need
        set recvService to name of service of theChat

谢谢。

【问题讨论】:

【参考方案1】:

更新:如下所述,观察到的行为是一个错误。但是,OP 自己找到了一种解决方法:message received 事件的from 参数(示例代码中的theBuddy)是Buddy 类的一个实例, service 属性,正常运行:

set recvService to name of service of theBuddy # instead of the buggy `of theChat`

注意:message received 事件的for 参数(OP 代码中的theChat)是text chat 类的一个实例,它继承自chat 基类。如果脚本编辑器中的字典查看器未配置为显示 inherited 项,则通过查看 text chat 类,它确实有一个 - 当前有问题 - service 属性不会很明显.要使继承的项目可见,请打开脚本编辑器的首选项对话框并选中 Show inherited items


AppleScript 对Messages.app 的支持似乎存在一个错误(在 OSX 10.11.1 上观察到);我建议你在http://bugreport.apple.com 提交一个错误;这是一个简单的演示:

tell application "Messages"

    set svc to first item of services

    set cht to first item of (chats of svc)

    # !! Breaks, even though it should return the same object as `svc`.
    # "Can’t get service of text chat id \"iMessage;-;<recipient>\"."
    service of cht 

end tell

目前尝试访问 text chat 实例的 any 属性似乎已损坏。

您可以尝试解决方法:

# Given a chat instance, returns its originating service.
on getService(cht)
    local svc, cht
    tell application "Messages"
        repeat with svc in services
            try
                (first chat of svc whose it is cht)
                return contents of svc
            end try
        end repeat
    end tell
    return missing value
end getService

# Sample invocation
set recvService to name of (my getService(theChat))

【讨论】:

【参考方案2】:

好的,只是一个更新,也许是一个解释(?):

set recvService to name of service of theChat - fails.
set recvService to name of service of theBuddy - works.

在查找messages.app的字典中,似乎没有聊天的“服务”,但有好友的。

我才刚刚开始在 El Capitan 中编写脚本,所以我不知道这是更改还是错误。我会把它留给更有经验的人来评论。

由于我可以从“好友”那里获得服务,我不需要 mklement0 的回答(但我非常感谢您的回答)所以我暂时保持原样。

【讨论】:

很高兴您找到了解决方法。 text chat 类 - 其中代码中的 theChat 是一个实例 - 确实 有一个 service 属性,它从祖先的 chat继承 .通常,除非您在其首选项对话框中选中Show inherited items,否则您不会在字典查看器中看到继承的项目。所以你原来的问题一个错误。如果没有此类属性,您会看到 不同 错误消息 (can't make ... into type specifier)。 我已经用你的发现和我的 cmets 更新了我的答案。顺便说一句,如果您希望我收到回复通知,您必须对 my 答案发表评论。

以上是关于iMessage 的 AppleScript 错误 - 无法获取文本聊天 ID 的服务的主要内容,如果未能解决你的问题,请参考以下文章

通过 AppleScript 从 iMessage 发送 GIF

如何使用 AppleScript 在 iMessage 中开始新对话?

如何使用 AppleScript 在 iMessage 中开始新对话?

AppleScript 实现短信自动转发

使用 AppleScript 发送消息

Spotify 给出当前曲目的错误值(AppleScript)