메인 콘텐츠로 건너뛰기

iMessage (legacy: imsg)

신규 iMessage 배포에는 BlueBubbles를 사용하세요.imsg 통합은 구식이며, 향후 릴리스에서 제거될 수 있습니다.
상태: 전통적인 외부 CLI 통합. 게이트웨이는 imsg rpc를 스폰하며 stdio 상에서 JSON-RPC 를 통해 통신합니다 (별도의 데몬/포트 없음).

빠른 설정

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

첫 번째 다이렉트 메시지 페어링 승인 (기본 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:*) 일 수 있습니다.

배포 패턴

봇 트래픽을 개인 메시지 프로필과 분리하기 위해 전용 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 키를 사용하여 SSH 및 SCP가 비대화형으로 작동하도록 합니다. 먼저 호스트 키를 신뢰하세요 (예: ssh bot@mac-mini.tailnet-1234.ts.net) so 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 사용 (기본값 16MB)
  • 텍스트 청크 제한: channels.imessage.textChunkLimit (기본값 4,000)
  • 청크 모드: channels.imessage.chunkMode
    • length (기본값)
    • newline (단락 우선 분할)
선호되는 명시적 대상:
  • chat_id:123 (안정적인 라우팅에 권장)
  • chat_guid:...
  • chat_identifier:...
핸들 대상도 지원됨:
  • imessage:+1555...
  • sms:+1555...
  • user@example.com
imsg chats --limit 20

설정 쓰기

iMessage 는 기본적으로 채널에서 시작된 /config set|unset에 의한 설정 업데이트 작성을 허용합니다 (commands.config: true 필요). 비활성화:
{
  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를 실행하는 프로세스 컨텍스트에 전체 디스크 접근 + 자동화가 부여 되었는지 확인하세요.

설정 참조 포인터