iMessage-Can’的AppleScript中出错;无法获取文本聊天id的服务

iMessage-Can’的AppleScript中出错;无法获取文本聊天id的服务,applescript,imessage,Applescript,Imessage,我得到错误:无法获得文本聊天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 ser

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

Thx.

更新:如下所述,观察到的行为是一个bug。但是,OP自己找到了一个解决办法:接收到的
消息的
事件(
theBuddy
在示例代码中)的
from
参数是
Buddy
类的一个实例,该类还具有一个
服务
属性,该属性可以正确运行:

将recvService设置为buddy的服务名称,而不是chat的buggy``
注意:接收到的
消息
事件的
for
参数(
OP代码中的chat
)是
文本聊天
类的一个实例,该类继承自
聊天
基类。如果脚本编辑器中的字典查看器未配置为显示继承的项,那么通过查看
文本聊天
类,就不会明显看出它确实有一个-当前有缺陷的
服务
属性。要使继承的项目可见,请打开脚本编辑器的“首选项”对话框并选中“显示继承的项目”


在AppleScript对
消息的支持中似乎有一个bug(在OSX 10.11.1上观察到);我建议你把一个bug归档在;下面是一个简单的演示:

告诉应用程序“消息”
将svc设置为第一项服务
将cht设置为的第一项(svc的聊天)
# !! 中断,即使它应该返回与“svc”相同的对象。
#“无法获取文本聊天id服务\”iMessage;-\"."
红隧服务
结束语
似乎试图访问
文本聊天
实例的任何属性当前已被破坏

您可以尝试解决方法:

#给定聊天实例,返回其原始服务。
关于getService(cht)
本地静止轨道交通
告诉应用程序“消息”
对服务中的svc重复此操作
尝试
(svc的第一次聊天,其为cht)
svc的返回内容
结束尝试
结束重复
结束语
返回缺少的值
结束服务
#示例调用
将recvService设置为(my getService(theChat))的名称

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

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

我刚开始在El Capitan编写脚本,所以我不知道这是一个变化还是一个bug。我将把这留给更有经验的人来评论


因为我可以从“好友”那里得到服务,所以我不需要mklement0的回答(但我非常感谢您的回答),所以我将暂时保持现状。

很高兴您找到了解决办法。
text chat
类(代码中的chat
就是其中的一个实例)确实有一个
服务
属性,它从祖先的
chat
类继承。通常,除非在字典查看器的“首选项”对话框中选中“显示继承项”
,否则在字典查看器中不会看到继承项。所以你最初的问题是一个bug。如果没有这样的属性,您将看到不同的错误消息(
无法将…转换为类型说明符
)。我已经用您的发现和我的评论更新了我的答案。顺便说一句,如果你想让我收到回复,你必须对我的回答发表评论。
set recvService to name of service of theChat - fails.
set recvService to name of service of theBuddy - works.