メッセージングプラットフォーム
iMessage
⚠️ 新しいiMessageデプロイメントには、BlueBubblesを使用してください。
imsg統合はレガシーであり、将来のリリースで削除される可能性があります。
ステータス: レガシー外部CLI統合。ゲートウェイはimsg rpcを生成し、stdio上のJSON-RPCを介して通信します(別個のデーモン/ポートは不要)。
クイックセットアップ
要件と権限 (macOS)
imsgを実行するMac上で、メッセージアプリにサインインしている必要があります。- OpenClaw/
imsgを実行するプロセスコンテキストに対して、フルディスクアクセスが必要です(メッセージDBへのアクセス)。 - Messages.app経由でメッセージを送信するには、自動化の権限が必要です。
💡 権限はプロセスコンテキストごとに付与されます。ゲートウェイがヘッドレス(LaunchAgent/SSH)で実行される場合、同じコンテキストで一度だけ対話型コマンドを実行してプロンプトをトリガーします:
コピー
imsg chats --limit 1# またはimsg send <handle> "test"
アクセス制御とルーティング
channels.imessage.dmPolicyはダイレクトメッセージを制御します:
pairing(デフォルト)allowlistopen(allowFromに"*"を含む必要があります)disabled
許可リストフィ ールド:channels.imessage.allowFrom。許可リストエントリは、ハンドルまたはチャットターゲット(chat_id:*, chat_guid:*, chat_identifier:*)にすることができます。
channels.imessage.groupPolicyはグループの扱いを制御します:
allowlist(構成時にデフォルト)opendisabled
グループ送信者許可リスト:channels.imessage.groupAllowFrom。実行時フォールバック:groupAllowFromが設定されていない場合、iMessageグループ送信者チェックは、利用可能な場合allowFromにフォールバックします。実行時注意:channels.imessageが完全に欠落している場合、実行時はgroupPolicy="allowlist"にフォールバックし、警告をログに記録します(channels.defaults.groupPolicyが設定されていても)。グループのメンションゲーティング:
- iMessageにはネイティブのメンションメタデータがありません
- メンション検出は正規表現パターンを使用します(
agents.list[].groupChat.mentionPatterns、フォールバックmessages.groupChat.mentionPatterns) - 構成されたパターンがない場合、メンションゲーティングは適用できません
許可された送信者からの制御コマンドは、グループ内のメンションゲーティングをバイパスできます。
- DMはダイレクトルーティングを使用します;グループはグループルーティングを使用します。
- デフォルトの
session.dmScope=mainでは、iMessage DMはエージェントのメインセッションに統合されます。 - グループセッションは分離されます(
agent::imessage:group:<chat_id>)。 - 返信は、発信元チャネル/ターゲットメタデータを使用してiMessageにルーティングされます。
グループ風スレッド動作:一部の複数参加者のiMessageスレッドは、is_group=falseで到着することがあります。そのchat_idがchannels.imessage.groupsの下で明示的に構成されている場合、OpenClawはそれをグループトラフィックとして扱います(グループゲーティング + グループセッション分離)。
デプロイメントパターン
専用のApple IDとmacOSユーザーを使用して、ボットのトラフィックを個人のメッセージプロファイルから分離します。典型的なフロー:
- 専用のmacOSユーザーを作成/サインインします。
- そのユーザーでボット用Apple IDを使用してメッセージアプリにサインインします。
- そのユーザーに
imsgをインストールします。 - OpenClawがそのユーザーコンテキストで
imsgを実行できるようにSSHラッパーを作成します。 channels.imessage.accounts..cliPathと.dbPathをそのユーザープロファイルにポイントします。
初回実行では、そのボットユーザーセッションでGUI承認(自動化 + フルディスクアクセス)が必要になる場合があります。
一般的なトポロジ:
- ゲートウェイはLinux/VM上で実行
- iMessage +
imsgはあなたのtailnet内のMac上で実行 cliPathラッパーはSSHを使用してimsgを実行remoteHostはSCP添付ファイル取得を有効化
例:
{
channels: {
imessage: {
enabled: true,
cliPath: "~/.openclaw/scripts/imsg-ssh",
remoteHost: "bot@mac-mini.tailnet-1234.ts.net",
includeAttachments: true,
dbPath: "/Users/bot/Library/Messages/chat.db",
},
},
}
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
SSHとSCPが非対話型になるようにSSHキーを使用します。まずホストキーが信頼されていることを確認します(例:ssh bot@mac-mini.tailnet-1234.ts.net)known_hostsが設定されるように。
iMessageはchannels.imessage.accountsの下でアカウントごとの設定をサポートします。各アカウントは、cliPath、dbPath、allowFrom、groupPolicy、mediaMaxMb、履歴設定、添付ファイルルート許可リストなどのフィールドをオーバーライドできます。
メディア、チャンキング、配信ターゲット
-
インバウンド添付ファイルの取り込みはオプション:
channels.imessage.includeAttachments -
リモート添付ファイルパスは、
remoteHostが設定されている場合、SCP経由で取得できます -
添付ファイルパスは許可されたルートと一致する必要があります:
channels.imessage.attachmentRoots(ローカル)channels.imessage.remoteAttachmentRoots(リモートSCPモード)- デフォルトルートパターン:
/Users/*/Library/Messages/Attachments
-
SCPは厳格なホストキーチェックを使用します(
StrictHostKeyChecking=yes) -
アウトバウンドメディアサイズは
channels.imessage.mediaMaxMbを使用します(デフォルト16 MB) -
テキストチャンク制限:
channels.imessage.textChunkLimit(デフォルト4000) -
チャンクモード:
channels.imessage.chunkModelength(デフォルト)newline(段落優先分割)
推奨される明示的ターゲット:
chat_id:123(安定したルーティングに推奨)chat_guid:...chat_identifier:...
ハンドルターゲットもサポートされています:
imessage:+1555...sms:+1555...user@example.com
imsg chats --limit 20