无法向群聊发送消息

Can't send message to group chat

我找到了一个从命令行发送消息的脚本,但它不能用于名称中包含空格和大写的群聊。

#!/bin/sh
recipient=""
message="${*:2}"
echo "$recipient"
cat<<EOF | osascript - "${recipient}" "${message}"
on run {targetBuddyPhone, targetMessage}
   tell application "Messages"
       set targetService to 1st service whose service type = iMessage
       set targetBuddy to buddy targetBuddyPhone of targetService        
       send targetMessage to targetBuddy
   end tell
end run
EOF

当我 运行 ./sendmessage "GROUP CHAT" "test" 它给了我 228:261: execution error: Messages got an error: Can’t get buddy id "7087805D-ED73-4DB9-81AB-7C964B98AB34:group chat". (-1728)

不幸的是,无法使用聊天名称向使用 applescript 的群聊发送消息。要发送到现有群聊,您需要获取聊天的内部 GUID。有两种方法可以做到这一点。

  1. 从位于磁盘 ~/Library/Messages/chat.db 的 messages.app 内部数据库中提取它。它是聊天 table 下的 guid 列。如果你有群聊命名,那么很容易找到 display_name.

  2. 您可以将消息的 AppleScript 处理程序与 on chat room message received 处理程序一起使用,以在有人在该聊天中发帖时捕获 ID。

获得 guid 后(格式应类似于 iMessage;+;chat831551415676550949),您的脚本可以修改为发送到 ID:

#!/bin/sh
recipient=""
message="${*:2}"
echo "$recipient"
cat<<EOF | osascript - "${recipient}" "${message}"
on run {targetChatID, targetMessage}
   tell application "Messages"
    set targetChat to a reference to text chat id targetChatID
    send targetMessage to targetChat
   end tell
end run
EOF

要发送图像而不是文本,请将 targetMessage 替换为:

set ImageAttachment to POSIX file "File path here" as alias