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

Error in AppleScript for iMessage - Can’t get service of text chat id

我收到错误消息:无法获得文本聊天 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

谢谢。

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

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

注:message received事件的for参数(OP代码中的theChat)是text chat[=56=的实例],它继承自 chat 基础 class。如果脚本编辑器中的词典查看器未配置为显示 inherited 项目,则通过查看 text chat class 它确实有a - 当前有问题 - 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))

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

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

查字典messages.app,好像没有"service"聊天,但是有好友。

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

因为我可以从 "buddy" 获得服务,所以我不需要 mklement0 的回答(但我非常感谢您的回答)所以我暂时保持原样。