无法向群聊发送消息

时间:2017-06-29 20:37:51

标签: bash imessage osascript

我找到了一个从命令行发送消息的脚本,但它不能使用名称中间距和大小写的群组聊天工作。

#!/bin/sh
recipient="${1}"
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)

1 个答案:

答案 0 :(得分:0)

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

  1. 从位于~/Library/Messages/chat.db磁盘上的messages.app内部数据库中提取它。它是聊天表下的guid列。如果您将群组聊天命名,则可以通过display_name轻松找到。

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

  3. 一旦你有了guid(应采用类似于iMessage;+;chat831551415676550949的格式),你的脚本可以修改为发送到ID:

    #!/bin/sh
    recipient="${1}"
    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