메인 콘텐츠로 건너뛰기

iMessage (레거시: imsg)

새로운 iMessage 배포에는 BlueBubbles를 사용하세요.imsg 통합은 레거시이며 향후 릴리스에서 제거될 수 있습니다.
상태: 레거시 외부 CLI 통합. 게이트웨이는 imsg rpc를 실행하고 stdio의 JSON-RPC를 통해 통신합니다(별도의 데몬/포트 없음).

BlueBubbles (권장)

새로운 설정을 위한 선호되는 iMessage 경로입니다.

페어링

iMessage DM은 기본적으로 페어링 모드를 사용합니다.

구성 참조

전체 iMessage 필드 참조입니다.

빠른 설정

1

imsg 설치 및 확인

brew install steipete/tap/imsg
imsg rpc --help
2

OpenClaw 구성

{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "/usr/local/bin/imsg",
      dbPath: "/Users/<you>/Library/Messages/chat.db",
    },
  },
}
3

게이트웨이 시작

openclaw gateway
4

첫 번째 DM 페어링 승인(기본 dmPolicy)

openclaw pairing list imessage
openclaw pairing approve imessage <CODE>
페어링 요청은 1시간 후 만료됩니다.

요구 사항 및 권한(macOS)

  • imsg를 실행하는 Mac에서 Messages에 로그인되어 있어야 합니다.
  • OpenClaw/imsg를 실행하는 프로세스 컨텍스트에는 전체 디스크 접근 권한이 필요합니다(Messages DB 접근).
  • Messages.app을 통해 메시지를 보내려면 자동화 권한이 필요합니다.
권한은 프로세스 컨텍스트별로 부여됩니다. 게이트웨이가 헤드리스(LaunchAgent/SSH)로 실행되는 경우, 프롬프트를 트리거하기 위해 같은 컨텍스트에서 한 번 상호작용 명령을 실행하세요:
imsg chats --limit 1
# 또는
imsg send <handle> "test"

액세스 제어 및 라우팅

channels.imessage.dmPolicy는 다이렉트 메시지를 제어합니다:
  • pairing (기본값)
  • allowlist
  • open (allowFrom"*"가 포함되어야 함)
  • disabled
허용 목록 필드: channels.imessage.allowFrom.허용 목록 항목은 핸들이나 채팅 대상(chat_id:*, chat_guid:*, chat_identifier:*)일 수 있습니다.

ACP 대화 바인딩

레거시 iMessage 채팅은 ACP 세션에 바인딩할 수도 있습니다. 빠른 운영자 흐름:
  • DM 또는 허용된 그룹 채팅 안에서 /acp spawn codex --bind here를 실행합니다.
  • 이후 같은 iMessage 대화의 메시지는 생성된 ACP 세션으로 라우팅됩니다.
  • /new/reset은 같은 바인딩된 ACP 세션을 제자리에서 재설정합니다.
  • /acp close는 ACP 세션을 닫고 바인딩을 제거합니다.
구성된 영구 바인딩은 type: "acp"match.channel: "imessage"가 있는 최상위 bindings[] 항목을 통해 지원됩니다. match.peer.id에는 다음을 사용할 수 있습니다:
  • +15555550123 또는 user@example.com 같은 정규화된 DM 핸들
  • chat_id:<id> (안정적인 그룹 바인딩에 권장)
  • chat_guid:<guid>
  • chat_identifier:<identifier>
예:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: { agent: "codex", backend: "acpx", mode: "persistent" },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "imessage",
        accountId: "default",
        peer: { kind: "group", id: "chat_id:123" },
      },
      acp: { label: "codex-group" },
    },
  ],
}
공유 ACP 바인딩 동작은 ACP 에이전트를 참조하세요.

배포 패턴

봇 트래픽이 개인 Messages 프로필과 분리되도록 전용 Apple ID와 macOS 사용자를 사용하세요.일반적인 흐름:
  1. 전용 macOS 사용자를 만들고 로그인합니다.
  2. 해당 사용자에서 봇 Apple ID로 Messages에 로그인합니다.
  3. 해당 사용자에 imsg를 설치합니다.
  4. OpenClaw가 해당 사용자 컨텍스트에서 imsg를 실행할 수 있도록 SSH 래퍼를 만듭니다.
  5. channels.imessage.accounts.<id>.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.chunkMode
    • length (기본값)
    • newline (문단 우선 분할)
선호되는 명시적 대상:
  • chat_id:123 (안정적인 라우팅에 권장)
  • chat_guid:...
  • chat_identifier:...
핸들 대상도 지원됩니다:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

구성 쓰기

iMessage는 기본적으로 채널 시작 구성 쓰기를 허용합니다(commands.config: true일 때 /config set|unset용). 비활성화:
{
  channels: {
    imessage: {
      configWrites: false,
    },
  },
}

문제 해결

바이너리와 RPC 지원을 확인하세요:
imsg rpc --help
openclaw channels status --probe
프로브에서 RPC 미지원으로 보고되면 imsg를 업데이트하세요.
다음을 확인하세요:
  • channels.imessage.dmPolicy
  • channels.imessage.allowFrom
  • 페어링 승인(openclaw pairing list imessage)
다음을 확인하세요:
  • channels.imessage.groupPolicy
  • channels.imessage.groupAllowFrom
  • channels.imessage.groups 허용 목록 동작
  • 멘션 패턴 구성(agents.list[].groupChat.mentionPatterns)
다음을 확인하세요:
  • channels.imessage.remoteHost
  • channels.imessage.remoteAttachmentRoots
  • 게이트웨이 호스트에서의 SSH/SCP 키 인증
  • 게이트웨이 호스트의 ~/.ssh/known_hosts에 호스트 키가 존재하는지
  • Messages를 실행하는 Mac에서 원격 경로를 읽을 수 있는지
같은 사용자/세션 컨텍스트의 상호작용 GUI 터미널에서 다시 실행하고 프롬프트를 승인하세요:
imsg chats --limit 1
imsg send <handle> "test"
OpenClaw/imsg를 실행하는 프로세스 컨텍스트에 전체 디스크 접근 권한과 자동화 권한이 부여되었는지 확인하세요.

구성 참조 포인터

관련 항목