서문
iMessage는 Apple 생태계의 네이티브 메시지 서비스로, 종단 간 암호화와 풍부한 메시지 형식을 제공합니다. OpenClaw는 macOS의 AppleScript 브리지를 통해 iMessage에 연결하는 것을 지원하여 iMessage에서 직접 AI와 대화할 수 있습니다. 이 글에서는 설정 방법과 주의사항을 상세히 소개합니다.
중요한 전제 조건
시작하기 전에 다음 핵심 제한 사항을 확인해 주십시오:
| 조건 | 요구사항 |
|---|---|
| 운영체제 | macOS 전용 (iMessage 브리지는 Messages.app에 의존) |
| macOS 버전 | macOS 13 Ventura 이상 |
| Apple ID | iMessage에 로그인된 Apple ID 필요 |
| 실행 방식 | OpenClaw는 macOS 본체에서 실행되어야 함 (Docker 아님) |
| 손쉬운 사용 권한 | 터미널/Node.js에 손쉬운 사용 권한 부여 필요 |
주의: iMessage 브리지는 macOS 플랫폼만 지원합니다. Linux 또는 Windows를 사용하는 경우
WhatsApp, Telegram 등 다른 메시지 채널을 고려해 주십시오.
동작 원리
OpenClaw의 iMessage 통합은 다음과 같은 아키텍처를 사용합니다:
사용자가 iMessage 전송
↓
macOS Messages.app이 메시지 수신
↓
OpenClaw가 AppleScript를 통해 새 메시지 읽기
↓
AI 모델로 메시지 전송 및 처리
↓
AI가 응답 생성
↓
OpenClaw가 AppleScript를 통해 iMessage 응답 전송
↓
사용자가 응답 수신
핵심 메커니즘은 macOS의 AppleScript 인터페이스를 활용하여 Messages.app과 상호작용하는 것입니다. OpenClaw는 Messages.app의 데이터베이스를 주기적으로 폴링하여 새 메시지를 감지한 후 AppleScript 명령을 통해 응답을 전송합니다.
1단계: 시스템 권한 설정
1.1 손쉬운 사용 권한 활성화
OpenClaw가 Messages.app을 제어하려면 손쉬운 사용 권한이 필요합니다:
- 시스템 설정 → 개인정보 보호 및 보안 → 손쉬운 사용을 엽니다
- 자물쇠 아이콘을 클릭하고 관리자 비밀번호를 입력합니다
- + 버튼을 클릭하여 터미널 앱(Terminal.app 또는 iTerm)을 추가합니다
- 전역 설치된 Node.js로 OpenClaw를 실행하는 경우 Node.js도 추가해야 합니다:
# Node.js 경로 확인
which node
# 일반적으로 /usr/local/bin/node 또는 /opt/homebrew/bin/node
1.2 자동화 권한 부여
최초 실행 시 macOS가 터미널이 Messages.app을 제어하는 것을 허용할지 묻는 대화 상자를 표시합니다. 허용을 클릭해 주십시오.
팝업을 놓친 경우 다음 위치에서 수동으로 설정할 수 있습니다:
시스템 설정 → 개인정보 보호 및 보안 → 자동화 → 터미널 앱 찾기 → Messages 체크
1.3 Messages.app 로그인 확인
- Messages.app을 엽니다
- Apple ID로 로그인되어 있는지 확인합니다
- iMessage를 정상적으로 주고받을 수 있는지 확인합니다
# Messages.app이 AppleScript를 통해 접근 가능한지 확인
osascript -e 'tell application "Messages" to get name'
"Messages"가 반환되면 권한 설정이 올바른 것입니다.
2단계: OpenClaw 설정
2.1 설정 파일
~/.config/openclaw/openclaw.json5를 편집합니다:
{
channels: {
imessage: {
enabled: true,
// 폴링 간격 (초), 새 메시지를 확인하는 빈도
pollInterval: 3,
// Messages.app 데이터베이스 경로 (일반적으로 수정 불필요)
dbPath: "~/Library/Messages/chat.db",
// 보안 설정
security: {
// 메시지 수신을 허용하는 연락처 목록 (빈 배열은 모든 연락처 허용)
allowedContacts: [],
// 또는 전화번호/이메일로 필터링
allowedIdentifiers: [
"+8613800138000",
"[email protected]"
],
// 그룹 메시지 허용 여부
groupChatEnabled: false,
// 알 수 없는 연락처 허용 여부
allowUnknown: false
},
// 트리거 설정
trigger: {
// 개인 채팅에서 모든 메시지에 자동 응답할지 여부
autoReply: true,
// 트리거 키워드 (모든 메시지에 자동 응답하지 않을 경우)
keywords: [],
// 그룹 채팅 트리거 방식
groupTrigger: "keyword",
groupKeywords: ["@AI", "/ask"]
},
// 응답 설정
reply: {
// 메시지 최대 길이
maxLength: 10000,
// 긴 코드 블록을 첨부 파일로 전송할지 여부
codeAsAttachment: false,
// 전송 지연 (밀리초), 타이핑 효과 시뮬레이션
sendDelay: 500
}
}
}
}
2.2 최소 설정
빠르게 테스트하고 싶다면 최소 설정은 다음과 같습니다:
{
channels: {
imessage: {
enabled: true,
security: {
// 특정 연락처만 허용 (강력히 설정 권장)
allowedIdentifiers: ["+8613800138000"]
}
}
}
}
2.3 서비스 재시작
openclaw restart
# iMessage 채널 로그 확인
openclaw logs -f --component channel:imessage
성공적으로 시작된 후의 로그:
[INFO] [channel:imessage] iMessage 브리지가 시작되었습니다
[INFO] [channel:imessage] Messages.app 연결 정상
[INFO] [channel:imessage] 폴링 간격: 3초
[INFO] [channel:imessage] 허용된 연락처: 1명
[INFO] [channel:imessage] 새 메시지 대기 중...
3단계: 연결 테스트
3.1 테스트 메시지 전송
다른 기기(iPhone 또는 다른 Mac)에서 OpenClaw가 실행 중인 Apple ID로 iMessage를 보냅니다:
안녕하세요, 이것은 테스트 메시지입니다
3.2 로그 확인
openclaw logs -f --component channel:imessage
다음과 유사한 로그를 확인할 수 있어야 합니다:
[INFO] [channel:imessage] 새 메시지 수신: from="+8613800138000", text="안녕하세요, 이것은 테스트 메시지입니다"
[INFO] [channel:imessage] 모델 처리로 전송: claude
[INFO] [channel:imessage] 모델 응답 완료 (1.2s)
[INFO] [channel:imessage] 응답 전송 완료: +8613800138000
보안 주의사항
iMessage 통합은 개인 메시지에 관련되므로 보안 조치가 매우 중요합니다:
연락처 화이트리스트 반드시 설정
{
channels: {
imessage: {
security: {
// 화이트리스트 설정을 강력히 권장합니다. 그렇지 않으면 누구든 메시지를 보내면 응답이 트리거됩니다
allowedIdentifiers: [
"+8613800138000",
"[email protected]"
],
allowUnknown: false
}
}
}
}
데이터베이스 접근 보안
OpenClaw는 ~/Library/Messages/chat.db를 읽어야 하며, 이것은 Messages.app의 로컬 데이터베이스입니다. 다음에 주의해 주십시오:
- OpenClaw를 실행하는 macOS 사용자 계정의 보안을 확보합니다
- FileVault 전체 디스크 암호화를 활성화합니다
- 강력한 비밀번호와 자동 잠금 화면을 설정합니다
개인정보 고려사항
iMessage 대화 내용은 처리를 위해 AI 모델 API로 전송됩니다.
사용 중인 모델의 데이터 개인정보 보호 정책을 반드시 확인해 주십시오.
민감한 정보가 포함된 경우 Ollama와 같은 로컬 모델 사용을 고려하십시오.
메시지 유형 지원
| 메시지 유형 | 수신 처리 | 응답 전송 | 설명 |
|---|---|---|---|
| 순수 텍스트 | 지원 | 지원 | 완전 지원 |
| 이미지 | 지원 | 미지원 | 멀티모달 모델로 인식 필요 |
| 링크 | 지원 | 지원 | URL 미리보기 자동 추출 |
| 첨부 파일 | 부분 | 미지원 | 텍스트 유형 첨부 파일만 지원 |
| Tapback 반응 | 미지원 | 미지원 | 무시 처리 |
| Memoji | 미지원 | 미지원 | 무시 처리 |
상주 실행 설정
iMessage 브리지가 지속적으로 실행되도록 macOS의 launchd를 사용하여 OpenClaw 프로세스를 관리하는 것을 권장합니다:
launchd 설정 생성
cat > ~/Library/LaunchAgents/com.openclaw.agent.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.openclaw.agent</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/openclaw</string>
<string>up</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/openclaw.stdout.log</string>
<key>StandardErrorPath</key>
<string>/tmp/openclaw.stderr.log</string>
</dict>
</plist>
EOF
설정 로드
launchctl load ~/Library/LaunchAgents/com.openclaw.agent.plist
서비스 관리
# 서비스 중지
launchctl stop com.openclaw.agent
# 서비스 시작
launchctl start com.openclaw.agent
# 서비스 언로드
launchctl unload ~/Library/LaunchAgents/com.openclaw.agent.plist
알려진 제한 사항
- macOS 전용 - 가장 큰 제한이며, 다른 운영체제에서는 사용할 수 없습니다
- 그래픽 인터페이스 필요 - Messages.app이 그래픽 환경에서 실행되어야 하며, 순수 SSH 환경은 지원하지 않습니다
- 폴링 모드 - 데이터베이스 폴링으로 새 메시지를 감지하므로 수초의 지연이 있습니다
- 리치 미디어 전송 불가 - 응답은 순수 텍스트만 지원하며, 이미지나 파일은 전송할 수 없습니다
- 단일 인스턴스 제한 - 한 대의 Mac에서 하나의 iMessage 브리지 인스턴스만 실행 가능합니다
- macOS 업데이트 위험 - macOS 시스템 업데이트가 AppleScript 인터페이스의 호환성에 영향을 줄 수 있습니다
문제 해결
Messages.app에 접근 불가
# 손쉬운 사용 권한 확인
tccutil reset AppleEvents
# OpenClaw를 다시 실행하고 권한 팝업 대기
openclaw restart
데이터베이스 잠금 오류
# "database is locked" 오류가 발생하는 경우
# chat.db에 접근할 수 있는 다른 앱을 닫습니다
# 또는 폴링 간격을 늘립니다
openclaw config set channels.imessage.pollInterval 5
메시지 전송 실패
# AppleScript로 메시지를 보낼 수 있는지 테스트
osascript -e 'tell application "Messages"
set targetService to 1st account whose service type = iMessage
set targetBuddy to participant "+8613800138000" of targetService
send "테스트 메시지" to targetBuddy
end tell'
요약
iMessage 통합을 통해 Apple 생태계에서 AI 어시스턴트를 원활하게 사용할 수 있습니다. 핵심 요점:
- macOS 전용 플랫폼이며, Messages.app과 손쉬운 사용 권한이 필요합니다
- 개인정보 보호를 위해 연락처 화이트리스트 설정을 강력히 권장합니다
- launchd를 사용하여 부팅 시 자동 시작 및 프로세스 감시를 구현합니다
- 알려진 제한 사항, 특히 폴링 지연 및 리치 미디어 미지원 문제를 이해합니다
- 민감한 대화가 관련된 경우 Ollama와 같은 로컬 모델 사용을 고려하십시오