iMessage (लीगेसी: imsg)¶
अनुशंसित: नए iMessage सेटअप के लिए BlueBubbles का उपयोग करें।
imsgचैनल एक लीगेसी बाहरी-CLI एकीकरण है और भविष्य के किसी रिलीज़ में हटाया जा सकता है।
- स्थिति: लेगेसी बाहरी CLI इंटीग्रेशन। 10. Gateway
imsg rpc(stdio पर JSON-RPC) को स्पॉन करता है।
त्वरित सेटअप (शुरुआती)¶
- सुनिश्चित करें कि इस Mac पर Messages में साइन इन है।
imsgइंस्टॉल करें: -brew install steipete/tap/imsg- OpenClaw को
channels.imessage.cliPathऔरchannels.imessage.dbPathके साथ कॉन्फ़िगर करें। - Gateway प्रारंभ करें और किसी भी macOS प्रॉम्प्ट (Automation + Full Disk Access) को स्वीकृत करें।
न्यूनतम विन्यास:
{
channels: {
imessage: {
enabled: true,
cliPath: "/usr/local/bin/imsg",
dbPath: "/Users/<you>/Library/Messages/chat.db",
},
},
}
यह क्या है¶
- macOS पर
imsgद्वारा समर्थित iMessage चैनल। - निर्धारक रूटिंग: उत्तर हमेशा iMessage पर ही वापस जाते हैं।
- DMs एजेंट के मुख्य सत्र को साझा करते हैं; समूह अलग-थलग होते हैं (
agent:<agentId>:imessage:group:<chat_id>)। - यदि किसी बहु-प्रतिभागी थ्रेड का आगमन
is_group=falseके साथ होता है, तो भी आपchannels.imessage.groupsका उपयोग करकेchat_idद्वारा इसे अलग कर सकते हैं (नीचे “Group-ish threads” देखें)।
Config writes¶
डिफ़ॉल्ट रूप से, iMessage को /config set|unset द्वारा ट्रिगर किए गए config अपडेट लिखने की अनुमति है (इसके लिए commands.config: true आवश्यक है)।
इसे अक्षम करने के लिए:
{
channels: { imessage: { configWrites: false } },
}
आवश्यकताएँ¶
- Messages में साइन इन के साथ macOS।
- OpenClaw +
imsgके लिए Full Disk Access (Messages DB एक्सेस)। - भेजते समय Automation अनुमति।
channels.imessage.cliPathकिसी भी ऐसे कमांड की ओर इंगित कर सकता है जो stdin/stdout को प्रॉक्सी करता हो (उदाहरण के लिए, एक रैपर स्क्रिप्ट जो SSH के माध्यम से दूसरे Mac से जुड़करimsg rpcचलाती है)।
macOS Privacy and Security TCC समस्या-निवारण¶
यदि भेजना/प्राप्त करना विफल होता है (उदाहरण के लिए, imsg rpc नॉन-ज़ीरो के साथ एग्ज़िट हो जाए, टाइम आउट हो, या Gateway अटका हुआ दिखे), तो एक सामान्य कारण macOS अनुमति प्रॉम्प्ट का कभी स्वीकृत न होना है।
- macOS प्रति ऐप/प्रोसेस कॉन्टेक्स्ट TCC अनुमतियाँ प्रदान करता है। 12. उसी कॉन्टेक्स्ट में प्रॉम्प्ट्स को अनुमोदित करें जिसमें
imsgचलता है (उदाहरण के लिए, Terminal/iTerm, LaunchAgent सत्र, या SSH से शुरू किया गया प्रोसेस)।
चेकलिस्ट:
-
- Full Disk Access: OpenClaw चलाने वाले प्रोसेस (और किसी भी shell/SSH wrapper जो
imsgको निष्पादित करता है) के लिए एक्सेस की अनुमति दें। 14. यह Messages डेटाबेस (chat.db) पढ़ने के लिए आवश्यक है।
- Full Disk Access: OpenClaw चलाने वाले प्रोसेस (और किसी भी shell/SSH wrapper जो
- Automation → Messages: आउटबाउंड भेजने के लिए OpenClaw (और/या आपका टर्मिनल) चलाने वाली प्रक्रिया को Messages.app नियंत्रित करने की अनुमति दें।
imsgCLI स्वास्थ्य: सत्यापित करें किimsgइंस्टॉल है और RPC (imsg rpc --help) का समर्थन करता है।
- टिप: यदि OpenClaw headless चल रहा है (LaunchAgent/systemd/SSH) तो macOS प्रॉम्प्ट आसानी से छूट सकता है। 16. प्रॉम्प्ट को मजबूर करने के लिए GUI टर्मिनल में एक बार इंटरैक्टिव कमांड चलाएँ, फिर पुनः प्रयास करें:
imsg chats --limit 1
# or
imsg send <handle> "test"
संबंधित macOS फ़ोल्डर अनुमतियाँ (Desktop/Documents/Downloads): /platforms/mac/permissions।
सेटअप (त्वरित मार्ग)¶
- सुनिश्चित करें कि इस Mac पर Messages में साइन इन है।
- iMessage कॉन्फ़िगर करें और Gateway प्रारंभ करें।
समर्पित बॉट macOS उपयोगकर्ता (अलग पहचान के लिए)¶
यदि आप चाहते हैं कि बॉट अलग iMessage पहचान से भेजे (और आपके व्यक्तिगत Messages साफ़ रहें), तो एक समर्पित Apple ID + एक समर्पित macOS उपयोगकर्ता का उपयोग करें।
- एक समर्पित Apple ID बनाएँ (उदाहरण:
my-cool-bot@icloud.com)। - Apple सत्यापन / 2FA के लिए फ़ोन नंबर मांग सकता है। - एक macOS उपयोगकर्ता बनाएँ (उदाहरण:
openclawhome) और उसमें साइन इन करें। - उस macOS उपयोगकर्ता में Messages खोलें और बॉट Apple ID से iMessage में साइन इन करें।
- Remote Login सक्षम करें (System Settings → General → Sharing → Remote Login)।
imsgइंस्टॉल करें: -brew install steipete/tap/imsg- SSH सेटअप करें ताकि
ssh <bot-macos-user>@localhost trueबिना पासवर्ड के काम करे। channels.imessage.accounts.bot.cliPathको ऐसे SSH रैपर की ओर इंगित करें जो बॉट उपयोगकर्ता के रूप मेंimsgचलाए।
17) First-run नोट: भेजने/प्राप्त करने के लिए bot macOS user में GUI अनुमोदन (Automation + Full Disk Access) की आवश्यकता हो सकती है। 18. यदि imsg rpc अटका हुआ लगता है या बाहर निकल जाता है, तो उस user में लॉग इन करें (Screen Sharing मदद करता है), एक बार imsg chats --limit 1 / imsg send ... चलाएँ, प्रॉम्प्ट्स को अनुमोदित करें, फिर पुनः प्रयास करें। 19. देखें Troubleshooting macOS Privacy and Security TCC।
- उदाहरण wrapper (
chmod +x)। 21.<bot-macos-user>को अपने वास्तविक macOS यूज़रनेम से बदलें:
#!/usr/bin/env bash
set -euo pipefail
# Run an interactive SSH once first to accept host keys:
# ssh <bot-macos-user>@localhost true
exec /usr/bin/ssh -o BatchMode=yes -o ConnectTimeout=5 -T <bot-macos-user>@localhost \
"/usr/local/bin/imsg" "$@"
उदाहरण विन्यास:
{
channels: {
imessage: {
enabled: true,
accounts: {
bot: {
name: "Bot",
enabled: true,
cliPath: "/path/to/imsg-bot",
dbPath: "/Users/<bot-macos-user>/Library/Messages/chat.db",
},
},
},
},
}
एकल-खाता सेटअप के लिए, accounts मैप के बजाय फ्लैट विकल्प (channels.imessage.cliPath, channels.imessage.dbPath) का उपयोग करें।
रिमोट/SSH वैरिएंट (वैकल्पिक)¶
- यदि आप किसी अन्य Mac पर iMessage चाहते हैं, तो
channels.imessage.cliPathको ऐसे wrapper पर सेट करें जो SSH के माध्यम से रिमोट macOS होस्ट परimsgचलाता हो। 23. OpenClaw को केवल stdio की आवश्यकता होती है।
उदाहरण रैपर:
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"
- Remote attachments: जब
cliPathSSH के माध्यम से किसी रिमोट होस्ट की ओर इशारा करता है, तो Messages डेटाबेस में attachment paths रिमोट मशीन पर मौजूद फ़ाइलों को संदर्भित करते हैं। 25.channels.imessage.remoteHostसेट करके OpenClaw इन्हें SCP के माध्यम से स्वचालित रूप से फ़ेच कर सकता है:
{
channels: {
imessage: {
cliPath: "~/imsg-ssh", // SSH wrapper to remote Mac
remoteHost: "user@gateway-host", // for SCP file transfer
includeAttachments: true,
},
},
}
- यदि
remoteHostसेट नहीं है, तो OpenClaw आपके wrapper स्क्रिप्ट में SSH कमांड को पार्स करके इसे auto-detect करने का प्रयास करता है। 27. विश्वसनीयता के लिए explicit configuration की सिफ़ारिश की जाती है।
Tailscale के माध्यम से रिमोट Mac (उदाहरण)¶
यदि Gateway किसी Linux होस्ट/VM पर चलता है लेकिन iMessage को Mac पर चलना आवश्यक है, तो Tailscale सबसे सरल ब्रिज है: Gateway tailnet के माध्यम से Mac से बात करता है, SSH के जरिए imsg चलाता है, और SCP के जरिए अटैचमेंट्स वापस लाता है।
आर्किटेक्चर:
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#ffffff',
'primaryTextColor': '#000000',
'primaryBorderColor': '#000000',
'lineColor': '#000000',
'secondaryColor': '#f9f9fb',
'tertiaryColor': '#ffffff',
'clusterBkg': '#f9f9fb',
'clusterBorder': '#000000',
'nodeBorder': '#000000',
'mainBkg': '#ffffff',
'edgeLabelBackground': '#ffffff'
}
}}%%
flowchart TB
subgraph T[" "]
subgraph Tailscale[" "]
direction LR
Gateway["<b>Gateway host (Linux/VM)<br></b><br>openclaw gateway<br>channels.imessage.cliPath"]
Mac["<b>Mac with Messages + imsg<br></b><br>Messages signed in<br>Remote Login enabled"]
end
Gateway -- SSH (imsg rpc) --> Mac
Mac -- SCP (attachments) --> Gateway
direction BT
User["user@gateway-host"] -- "Tailscale tailnet (hostname or 100.x.y.z)" --> Gateway
end
ठोस विन्यास उदाहरण (Tailscale होस्टनेम):
{
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",
},
},
}
उदाहरण रैपर (~/.openclaw/scripts/imsg-ssh):
#!/usr/bin/env bash
exec ssh -T bot@mac-mini.tailnet-1234.ts.net imsg "$@"
नोट्स:
- सुनिश्चित करें कि Mac में Messages में साइन इन है, और Remote Login सक्षम है।
- SSH कुंजियों का उपयोग करें ताकि
ssh bot@mac-mini.tailnet-1234.ts.netबिना प्रॉम्प्ट के काम करे। remoteHostको SSH लक्ष्य से मेल खाना चाहिए ताकि SCP अटैचमेंट्स ला सके।
- मल्टी-अकाउंट सपोर्ट: प्रति-अकाउंट कॉन्फ़िग और वैकल्पिक
nameके साथchannels.imessage.accountsका उपयोग करें। 29. साझा पैटर्न के लिए देखेंgateway/configuration। 30.~/.openclaw/openclaw.jsonको commit न करें (इसमें अक्सर tokens होते हैं)।
प्रवेश नियंत्रण (DMs + समूह)¶
DMs:
- डिफ़ॉल्ट:
channels.imessage.dmPolicy = "pairing"। - अज्ञात प्रेषकों को एक पेयरिंग कोड मिलता है; स्वीकृत होने तक संदेश अनदेखा किए जाते हैं (कोड 1 घंटे बाद समाप्त हो जाते हैं)।
- स्वीकृति:
openclaw pairing list imessageopenclaw pairing approve imessage <CODE>-
- iMessage DMs के लिए Pairing डिफ़ॉल्ट token exchange है। 32. विवरण: Pairing
समूह:
channels.imessage.groupPolicy = open | allowlist | disabled।allowlistसेट होने पर समूहों में कौन ट्रिगर कर सकता है, यहchannels.imessage.groupAllowFromनियंत्रित करता है।- मेंशन गेटिंग
agents.list[].groupChat.mentionPatterns(याmessages.groupChat.mentionPatterns) का उपयोग करती है क्योंकि iMessage में मूल मेंशन मेटाडेटा नहीं है। - मल्टी-एजेंट ओवरराइड:
agents.list[].groupChat.mentionPatternsपर प्रति-एजेंट पैटर्न सेट करें।
यह कैसे काम करता है (व्यवहार)¶
imsgसंदेश इवेंट्स स्ट्रीम करता है; Gateway उन्हें साझा चैनल एनवेलप में सामान्यीकृत करता है।- उत्तर हमेशा उसी चैट आईडी या हैंडल पर रूट होते हैं।
Group-ish थ्रेड्स (is_group=false)¶
कुछ iMessage थ्रेड्स में कई प्रतिभागी हो सकते हैं, लेकिन Messages द्वारा चैट पहचानकर्ता को संग्रहीत करने के तरीके के आधार पर वे फिर भी is_group=false के साथ आ सकते हैं।
यदि आप channels.imessage.groups के अंतर्गत स्पष्ट रूप से एक chat_id कॉन्फ़िगर करते हैं, तो OpenClaw उस थ्रेड को निम्न के लिए “समूह” के रूप में मानता है:
- सत्र पृथक्करण (अलग
agent:<agentId>:imessage:group:<chat_id>सत्र कुंजी) - समूह allowlisting / मेंशन गेटिंग व्यवहार
उदाहरण:
{
channels: {
imessage: {
groupPolicy: "allowlist",
groupAllowFrom: ["+15555550123"],
groups: {
"42": { requireMention: false },
},
},
},
}
- यह तब उपयोगी है जब आप किसी विशिष्ट थ्रेड के लिए एक अलग personality/model चाहते हैं (देखें Multi-agent routing)। 34. फ़ाइलसिस्टम isolation के लिए देखें Sandboxing।
मीडिया + सीमाएँ¶
channels.imessage.includeAttachmentsके माध्यम से वैकल्पिक अटैचमेंट इनजेस्ट।channels.imessage.mediaMaxMbके माध्यम से मीडिया कैप।
सीमाएँ¶
- आउटबाउंड टेक्स्ट
channels.imessage.textChunkLimitतक चंक किया जाता है (डिफ़ॉल्ट 4000)। - वैकल्पिक न्यूलाइन चंकिंग: लंबाई चंकिंग से पहले खाली पंक्तियों (अनुच्छेद सीमाएँ) पर विभाजित करने के लिए
channels.imessage.chunkMode="newline"सेट करें। - मीडिया अपलोड
channels.imessage.mediaMaxMbद्वारा सीमित हैं (डिफ़ॉल्ट 16)।
एड्रेसिंग / डिलीवरी लक्ष्य¶
स्थिर रूटिंग के लिए chat_id को प्राथमिकता दें:
chat_id:123(प्राथमिक)chat_guid:...chat_identifier:...- सीधे हैंडल:
imessage:+1555/sms:+1555/user@example.com
चैट सूचीबद्ध करें:
imsg chats --limit 20
विन्यास संदर्भ (iMessage)¶
पूर्ण विन्यास: Configuration
प्रदाता विकल्प:
channels.imessage.enabled: चैनल स्टार्टअप सक्षम/अक्षम करें।channels.imessage.cliPath:imsgका पाथ।channels.imessage.dbPath: Messages DB पाथ।-
channels.imessage.remoteHost: SSH होस्ट SCP attachment transfer के लिए जबcliPathकिसी रिमोट Mac की ओर इशारा करता है (उदा.,user@gateway-host)। 36. यदि सेट नहीं है तो SSH wrapper से auto-detected।
channels.imessage.service:imessage | sms | auto।channels.imessage.region: SMS क्षेत्र।channels.imessage.dmPolicy:pairing | allowlist | open | disabled(डिफ़ॉल्ट: pairing)।-
channels.imessage.allowFrom: DM allowlist (handles, emails, E.164 नंबर, याchat_id:*)। 38.openके लिए"*"आवश्यक है। 39. iMessage में usernames नहीं होते; handles या chat targets का उपयोग करें।
channels.imessage.groupPolicy:open | allowlist | disabled(डिफ़ॉल्ट: allowlist)।channels.imessage.groupAllowFrom: समूह प्रेषक allowlist।channels.imessage.historyLimit/channels.imessage.accounts.*.historyLimit: संदर्भ में शामिल करने के लिए अधिकतम समूह संदेश (0 अक्षम करता है)।-
channels.imessage.dmHistoryLimit: user turns में DM history limit। 41. प्रति-user overrides:channels.imessage.dms["<handle>"].historyLimit।
channels.imessage.groups: प्रति-समूह डिफ़ॉल्ट + allowlist (वैश्विक डिफ़ॉल्ट के लिए"*"का उपयोग करें)।channels.imessage.includeAttachments: अटैचमेंट्स को संदर्भ में इनजेस्ट करें।channels.imessage.mediaMaxMb: इनबाउंड/आउटबाउंड मीडिया कैप (MB)।channels.imessage.textChunkLimit: आउटबाउंड चंक आकार (अक्षर)।channels.imessage.chunkMode: लंबाई चंकिंग से पहले खाली पंक्तियों (अनुच्छेद सीमाएँ) पर विभाजित करने के लिएlength(डिफ़ॉल्ट) याnewline।
संबंधित वैश्विक विकल्प:
agents.list[].groupChat.mentionPatterns(याmessages.groupChat.mentionPatterns)।messages.responsePrefix।