某天看到蔥大說可以透過iMessage轉發訊息到Line上
於是用了ChatGPT亂搞了幾天目前測試已經沒問題
現在將我的方法分享給需要的人
1. 準備工作
1-1. 用 Mac 當 iMessage 中繼(Script)
Step 1:Mac 建立發送 iMessage 腳本
我們需要在Mac 建立2個檔案 1個傳純文字用 1個傳含照片的

我是用send_imessage_b64.sh 跟 send_imessage_photo.sh
當然你也可以依照你自己的喜好設定檔案名稱
send_imessage_b64.sh 內容
#!/bin/bash
PHONE="$1"
MESSAGE_B64="$2"
if [ -z "$PHONE" ] || [ -z "$MESSAGE_B64" ]; then
echo "用法: $0 <phone> <message_b64>"
exit 1
fi
MESSAGE=$(printf "%s" "$MESSAGE_B64" | base64 -d)
osascript <<EOF
tell application "Messages"
activate
set targetService to 1st service whose service type = iMessage
send "$MESSAGE" to buddy "$PHONE" of targetService
end tell
EOF
send_imessage_photo.sh
#!/bin/bash
PHONE="$1"
MESSAGE_B64="$2"
IMAGE_URL="$3"
if [ -z "$PHONE" ] || [ -z "$MESSAGE_B64" ] || [ -z "$IMAGE_URL" ]; then
echo "用法: $0 <phone> <message_b64> <image_url>"
exit 1
fi
MESSAGE=$(printf "%s" "$MESSAGE_B64" | base64 -d)
IMG_DIR="$HOME/Pictures/iMessageTemp"
mkdir -p "$IMG_DIR"
IMAGE_PATH="$IMG_DIR/imessage_$(date +%Y%m%d_%H%M%S).jpg"
curl -sS -L "$IMAGE_URL" -o "$IMAGE_PATH"
if [ ! -s "$IMAGE_PATH" ]; then
echo "圖片下載失敗: $IMAGE_PATH"
exit 1
fi
osascript <<EOF
-- 先在 tell 外面建立 file 物件,避免 sandbox 問題
set imageAttachment to POSIX file "$IMAGE_PATH"
tell application "Messages"
activate
set targetService to 1st service whose service type = iMessage
set targetBuddy to buddy "$PHONE" of targetService
send imageAttachment to targetBuddy
delay 2
send "$MESSAGE" to targetBuddy
end tell
EOF
rm -f "$IMAGE_PATH"
給檔案可以執行的權限
注意你放檔案的路徑 因我是放在使用者底下 所以是用 ~
sudo chmod +x ~/send_imessage_b64.sh
sudo chmod +x ~/send_imessage_photo.sh
Step 2:Mac 上測試 iMessage 腳本
因為透過 SSH 傳送訊息時,括號、換行、emoji 等特殊字元可能會導致錯誤,
所以這邊統一先轉成 Base64 再傳送,確保內容不會被解析錯誤。
所以我們需要先把一些測試的訊息轉成 Base64 才能進行測試
下面是測試的方法
/你放檔案的路徑/send_imessage_b64.sh +8869XXXXXXXX SGVsbG8=
+8869XXXXXXXX 請改成你要接收訊息的電話號碼(iPhone才能收到)
SGVsbG8= 這個是Hello轉成 Base64 後的碼
如果要查 Base64 怎麼轉換可以用下列方法
printf 'Hello' | base64

確認傳送沒問題後就可以到HA這邊進行後續設定
2. Home Assistant 設定
2-1. 設定 SSH 連線
因為 HA 需要透過 SSH 呼叫 Mac 上的腳本
所以需要先建立 SSH 金鑰
進入 HA Terminal 執行:
ssh-keygen
一直Enter下去就會建好金鑰
記好圈起來的紅匡部分等等建 shell command 可能會用到
接著把金鑰複製到 Mac:
ssh-copy-id 使用者名稱@Mac_IP
輸入yes 還有mac 密碼 就可以不用輸入密碼 ssh 登入mac
輸入 ssh MAC使用者id@MAC IP 就可以測試看看是否不需要輸入密碼直接登入
沒問題就可以輸入exit 離開
2-2. 設定 shell_command
接下來我們需要設定要跑的 shell_command
但是 HA 內 shell_command 能跑的只能在 /homeassistant 底下
所以我們需要把剛剛產出的金鑰複製到 /homeassisant 下才能使用
先執行下面指令找到產出的金鑰位置
find / -name known_hosts
進入找到的資料夾
並列出裡面的檔案有哪些
cd /data/.ssh
ls
確認有看到剛剛產出的3個必要檔案 注意id 可能會不同
將這3個檔案複製到 /homeassistant/.ssh 底下
mkdir /homeassistant/.ssh
cp id_ed25519 /homeassistant/.ssh
cp id_ed25519.pub /homeassistant/.ssh
cp known_hosts /homeassistant/.ssh
確認必要檔案都有複製過來
3個檔案都有後就可以建立 shell_command 了
shell_command:
send_imessage: >-
ssh -i /config/.ssh/id_ed25519
-o IdentitiesOnly=yes
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/config/.ssh/known_hosts
MAC使用者id@MAC IP
/Users/MAC使用者id/send_imessage_b64.sh {{ phone }} {{ message_b64 }}
send_imessage_photo: >-
ssh -i /config/.ssh/id_ed25519
-o IdentitiesOnly=yes
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/config/.ssh/known_hosts
MAC使用者id@MAC IP
'/Users/MAC使用者id/send_imessage_photo.sh "{{ phone }}" "{{ message_b64 }}" "{{ image_url }}"'
注意 檔案名稱 如果你跟我的不同要同步更改免得出錯
建好後重開HA讓設定生效
重開完後到開發工具==>操作測試是否能正常發送訊息
action: shell_command.send_imessage
data:
phone: "+8869XXXXXXXX"
message_b64: "SGVsbG8="
記得將電話號碼改成你要收發訊息的 iPhone 號碼
執行操作如果沒有問題就會像紅匡這樣回覆
到這邊我們從HA透過SSH傳送訊息到Mac 發送iMessage已經完成
3. 透過 iPhone 捷徑自動化轉發訊息到 Line
首先到 Line 創建你要接收轉發訊息的群組
然後隨便發送個訊息
然後 捷徑 ==> 自動化
新增一個自動化選擇 訊息
進來後選擇 將確認後執行改成立即執行 以及 訊息包含裡面去設定關鍵詞
至於寄件人如果是由自己的MAC轉發就不用選擇 保持任何寄件人就好
如果是透過別人的MAC發送 iMessage就改成那個幫你轉發的號碼
設定好後下一步 新增捷徑
往下拉找到 Line 然後在其他找到你剛剛創建的群組
如果你剛剛有隨便發個訊息應該能看到
選擇後會跳出來選擇 訊息
選擇 選取變數
這時候 將訊息作為輸入接收 下面會多出一個 捷徑輸入 點他
這樣就可以完成轉發設定 就可以打勾儲存了
到這邊基本設定都完成了就可以回到HA進行測試
4.最終測試
因我們都是透過HA這邊轉成Base64 再傳到MAC
所以我們需要先把剛剛在捷徑設定的通知包含內設定的文字轉成Base64才能測試
回到開發工具 操作 將 message_b64 改成剛剛轉成 Base64的碼測試
確認可以後就沒問題了
目前只能 iMessage 文字轉發到 Line 而已
還沒有發現 iMessage 圖片轉發到 Line 的方式
不過將圖片傳到 iMessage 這部分是沒有問題的
如果有人有這方面資訊再麻煩告知
至於怎麼應用 就看個人要怎麼改
透過NR傳送通知的設定我會分享到這篇文章裡面





















