imsg को उसी साइन-इन किए हुए macOS Messages होस्ट पर चलाएँ। यदि आपका Gateway कहीं और चलता है, तो channels.imessage.cliPath को ऐसे पारदर्शी SSH रैपर की ओर इंगित करें जो Mac पर imsg चलाता हो।इनबाउंड रिकवरी स्वचालित है। ब्रिज या Gateway के पुनः आरंभ होने के बाद, iMessage उसके बंद रहने के दौरान छूटे संदेशों को फिर से चलाता है और Push रिकवरी के बाद Apple द्वारा भेजे जा सकने वाले पुराने “बैकलॉग बम” को दबाता है तथा डुप्लिकेट हटाता है, ताकि कुछ भी दो बार डिस्पैच न हो। इसे सक्षम करने के लिए कोई कॉन्फ़िगरेशन नहीं है — ब्रिज या Gateway के पुनः आरंभ के बाद इनबाउंड रिकवरी देखें।imsg rpc को शुरू करता है और stdio पर JSON-RPC के माध्यम से संचार करता है — कोई अलग डेमन या पोर्ट नहीं। पूर्ण iMessage चैनल के लिए निजी API मोड का पुरज़ोर सुझाव दिया जाता है; उत्तरों, टैपबैक, प्रभावों, पोल, अटैचमेंट उत्तरों और समूह क्रियाओं के लिए imsg launch और सफल निजी API जाँच आवश्यक हैं।
सामान्य स्थानीय सेटअप के लिए, OpenClaw सेटअप साइन-इन किए हुए Messages Mac पर imsg को उपयोगकर्ता की पुष्टि के बाद Homebrew के माध्यम से इंस्टॉल या अपडेट करने का विकल्प दे सकता है। मैन्युअल सेटअप और SSH-रैपर टोपोलॉजी का प्रबंधन ऑपरेटर के पास रहता है: imsg को उसी उपयोगकर्ता संदर्भ में इंस्टॉल या अपडेट करें जिसमें Gateway या रैपर चलेगा।
निजी API क्रियाएँ
पेयरिंग
रिमोट Mac
कॉन्फ़िगरेशन संदर्भ
त्वरित सेटअप
- स्थानीय Mac (त्वरित पथ)
- SSH के माध्यम से रिमोट Mac
imsg इंस्टॉल और सत्यापित करें
imsg कमांड का पता लगाता है, तो वह Homebrew के माध्यम से steipete/tap/imsg इंस्टॉल करने के लिए संकेत दे सकता है। यदि उसे Homebrew द्वारा प्रबंधित imsg मिलता है, तो वह उसे फिर से इंस्टॉल या अपडेट करने के लिए संकेत दे सकता है। कस्टम cliPath रैपर संशोधित नहीं किए जाते।OpenClaw कॉन्फ़िगर करें
Gateway शुरू करें
पहली DM पेयरिंग स्वीकृत करें (डिफ़ॉल्ट dmPolicy)
आवश्यकताएँ और अनुमतियाँ (macOS)
imsgचलाने वाले Mac पर Messages में साइन-इन होना चाहिए।- OpenClaw/
imsgचलाने वाले प्रक्रिया संदर्भ के लिए पूर्ण डिस्क एक्सेस आवश्यक है (Messages DB एक्सेस)। - Messages.app के माध्यम से संदेश भेजने के लिए ऑटोमेशन अनुमति आवश्यक है।
- उन्नत क्रियाओं (प्रतिक्रिया / संपादन / भेजना रद्द करना / थ्रेडेड उत्तर / प्रभाव / पोल / समूह संचालन) के लिए System Integrity Protection अक्षम होना चाहिए — imsg निजी API सक्षम करना देखें। इसके बिना सामान्य टेक्स्ट और मीडिया भेजना/प्राप्त करना काम करता है।
SSH रैपर से भेजना AppleEvents -1743 के कारण विफल होता है
SSH रैपर से भेजना AppleEvents -1743 के कारण विफल होता है
channels status --probe पास कर सकता है और इनबाउंड संदेश संसाधित कर सकता है, जबकि आउटबाउंड संदेश भेजना AppleEvents प्राधिकरण त्रुटि के कारण फिर भी विफल हो सकता है:imsg या स्थानीय शेल प्रक्रिया के बजाय /usr/libexec/sshd-keygen-wrapper के लिए दर्ज है, तो macOS उस SSH सर्वर-साइड क्लाइंट के लिए उपयोग योग्य Messages टॉगल उपलब्ध नहीं करा सकता:tccutil reset AppleEvents को दोहराना या उसी SSH रैपर के माध्यम से imsg send को फिर से चलाना लगातार विफल हो सकता है, क्योंकि Messages ऑटोमेशन की आवश्यकता वाला प्रक्रिया संदर्भ SSH रैपर है, न कि ऐसा ऐप जिसे UI अनुमति दे सके।इसके बजाय समर्थित imsg प्रक्रिया संदर्भों में से किसी एक का उपयोग करें:- Gateway या कम-से-कम
imsgब्रिज को लॉग-इन किए हुए Messages उपयोगकर्ता के स्थानीय सत्र में चलाएँ। - उसी सत्र से पूर्ण डिस्क एक्सेस और ऑटोमेशन देने के बाद उस उपयोगकर्ता के लिए LaunchAgent के साथ Gateway शुरू करें।
- यदि आप दो-उपयोगकर्ता SSH टोपोलॉजी रखते हैं, तो चैनल सक्षम करने से पहले सत्यापित करें कि वास्तविक आउटबाउंड
imsg sendठीक उसी रैपर के माध्यम से सफल होता है। यदि उसे ऑटोमेशन नहीं दिया जा सकता, तो संदेश भेजने के लिए SSH रैपर पर निर्भर रहने के बजाय एकल-उपयोगकर्ताimsgसेटअप में पुनः कॉन्फ़िगर करें।
imsg निजी API सक्षम करना
imsg दो परिचालन मोड में उपलब्ध होता है। OpenClaw के लिए निजी API मोड सुझाया गया सेटअप है, क्योंकि यह चैनल को वे नेटिव iMessage क्रियाएँ देता है जिनकी उपयोगकर्ता अपेक्षा करते हैं। सामान्य मोड कम जोखिम वाले इंस्टॉल, प्रारंभिक सत्यापन या ऐसे होस्ट के लिए उपयोगी बना रहता है जहाँ SIP अक्षम नहीं किया जा सकता।
- सामान्य मोड (डिफ़ॉल्ट, SIP में बदलाव आवश्यक नहीं):
sendके माध्यम से आउटबाउंड टेक्स्ट और मीडिया, इनबाउंड निगरानी/इतिहास और चैट सूची। नयाbrew install steipete/tap/imsgऔर ऊपर दी गई मानक macOS अनुमतियाँ उपयोग करने पर यह सुविधा तुरंत उपलब्ध होती है। - निजी API मोड:
imsg, आंतरिकIMCoreफ़ंक्शन कॉल करने के लिएMessages.appमें एक सहायक dylib इंजेक्ट करता है। इससेreact,edit,unsend,reply(थ्रेडेड),sendWithEffect,pollऔरpoll-vote(नेटिव Messages पोल),renameGroup,setGroupIcon,addParticipant,removeParticipant,leaveGroup, साथ ही टाइपिंग संकेतक और पढ़ने की रसीदें उपलब्ध होती हैं।
imsg README आवश्यकता को स्पष्ट रूप से बताता है:
सहायक-इंजेक्शन तकनीक Messages के निजी API तक पहुँचने के लिएread,typing,launch, ब्रिज-समर्थित रिच सेंड, संदेश परिवर्तन और चैट प्रबंधन जैसी उन्नत सुविधाएँ वैकल्पिक हैं। इनके लिए SIP को अक्षम करना औरMessages.appमें सहायक dylib इंजेक्ट करना आवश्यक है। SIP सक्षम होने परimsg launchइंजेक्ट करने से इनकार करता है।
imsg के अपने dylib का उपयोग करती है। OpenClaw iMessage पथ में कोई तृतीय-पक्ष सर्वर या BlueBubbles रनटाइम नहीं है।
सेटअप
-
Messages.app चलाने वाले Mac पर
imsgइंस्टॉल (या अपग्रेड) करें:imsg status --jsonआउटपुटbridge_version,rpc_methodsऔर प्रत्येक विधि केselectorsकी रिपोर्ट देता है, ताकि शुरू करने से पहले आप देख सकें कि मौजूदा बिल्ड किन सुविधाओं का समर्थन करता है। -
सिस्टम इंटेग्रिटी प्रोटेक्शन और (आधुनिक macOS पर) लाइब्रेरी वैलिडेशन अक्षम करें। Apple द्वारा हस्ताक्षरित
Messages.appमें किसी गैर-Apple सहायक dylib को इंजेक्ट करने के लिए SIP बंद होना और लाइब्रेरी वैलिडेशन शिथिल होना आवश्यक है। रिकवरी-मोड SIP चरण macOS संस्करण के अनुसार अलग है:- macOS 10.13-10.15 (Sierra-Catalina): Terminal के माध्यम से लाइब्रेरी वैलिडेशन अक्षम करें, रिकवरी मोड में रीबूट करें,
csrutil disableचलाएँ, फिर पुनः आरंभ करें। - macOS 11+ (Big Sur और बाद के संस्करण), Intel: रिकवरी मोड (या इंटरनेट रिकवरी),
csrutil disable, फिर पुनः आरंभ करें। - macOS 11+, Apple Silicon: रिकवरी में प्रवेश करने के लिए पावर-बटन स्टार्टअप क्रम का उपयोग करें; हाल के macOS संस्करणों पर Continue क्लिक करते समय Left Shift कुंजी दबाए रखें, फिर
csrutil disable। वर्चुअल-मशीन सेटअप के लिए अलग प्रवाह होता है, इसलिए पहले VM स्नैपशॉट लें।
csrutil disableआम तौर पर पर्याप्त नहीं होता। Apple अब भी प्लेटफ़ॉर्म बाइनरी के रूप मेंMessages.appपर लाइब्रेरी वैलिडेशन लागू करता है, इसलिए SIP बंद होने पर भी adhoc-हस्ताक्षरित सहायक अस्वीकार कर दिया जाता है (Library Validation failed: ... platform binary, but mapped file is not)। SIP अक्षम करने के बाद लाइब्रेरी वैलिडेशन भी अक्षम करें और रीबूट करें:macOS 26 (Tahoe), 26.5.1 पर सत्यापित: SIP बंद होने के साथ ऊपर दिया गयाDisableLibraryValidationकमांड 26.0 से 26.5.x तक सहायक को इंजेक्ट करने के लिए पर्याप्त है। किसी boot-args की आवश्यकता नहीं है। plist निर्णायक कारक है और Tahoe पर इंजेक्शन विफल होने का सबसे सामान्य छूटा हुआ चरण है:- plist के साथ:
imsg launchइंजेक्ट करता है औरimsg status,advanced_features: trueकी रिपोर्ट करता है। - plist के बिना (SIP बंद होने पर भी):
imsg launch,Failed to launch: Timeout waiting for Messages.app to initializeके साथ विफल होता है। AMFI लोड के समय adhoc सहायक को अस्वीकार कर देता है, इसलिए ब्रिज कभी तैयार नहीं होता और लॉन्च का समय समाप्त हो जाता है। Tahoe पर अधिकतर लोगों को यही टाइमआउट दिखाई देता है; इसका समाधान ऊपर दिया गया plist है, कोई अधिक कठोर उपाय नहीं।
imsg launchइंजेक्शन या विशिष्टselectorsfalse लौटाने लगें, तो इसका सामान्य कारण यही गेट होता है। यह मानने से पहले कि SIP चरण स्वयं विफल हुआ है, अपनी SIP और लाइब्रेरी-वैलिडेशन स्थिति जाँचें। यदि वे सेटिंग सही हैं और ब्रिज फिर भी इंजेक्ट नहीं कर सकता, तो अतिरिक्त सिस्टम-व्यापी सुरक्षा नियंत्रणों को कमजोर करने के बजायimsg status --jsonतथाimsg launchआउटपुट एकत्र करें और इसकी रिपोर्टimsgप्रोजेक्ट को दें। - macOS 10.13-10.15 (Sierra-Catalina): Terminal के माध्यम से लाइब्रेरी वैलिडेशन अक्षम करें, रिकवरी मोड में रीबूट करें,
-
सहायक इंजेक्ट करें। SIP अक्षम और Messages.app में साइन इन होने पर:
SIP अब भी सक्षम होने पर
imsg launchइंजेक्ट करने से इनकार करता है, इसलिए इससे यह भी पुष्टि हो जाती है कि चरण 2 प्रभावी हुआ। -
OpenClaw से ब्रिज सत्यापित करें:
iMessage प्रविष्टि को
worksकी रिपोर्ट करनी चाहिए औरimsg status --json | jq '{rpc_methods, selectors}'को आपके macOS बिल्ड द्वारा उपलब्ध कराई गई क्षमताएँ दिखानी चाहिए। पोल बनाने के लिएselectors.pollPayloadMessageआवश्यक है; मतदान के लिएselectors.pollVoteMessageऔरpoll.voteRPC विधि, दोनों आवश्यक हैं। OpenClaw Plugin केवल कैश की गई जाँच द्वारा समर्थित कार्रवाइयों का विज्ञापन करता है, जबकि खाली कैश आशावादी बना रहता है और पहली डिस्पैच पर जाँच करता है।
openclaw channels status --probe चैनल को works के रूप में रिपोर्ट करता है, लेकिन विशिष्ट कार्रवाइयाँ डिस्पैच के समय “iMessage <action> requires the imsg private API bridge” त्रुटि देती हैं, तो imsg launch फिर से चलाएँ — सहायक हट सकता है (Messages.app का पुनः आरंभ, OS अपडेट आदि) और कैश की गई available: true स्थिति अगली जाँच द्वारा रीफ़्रेश होने तक कार्रवाइयों का विज्ञापन करती रहेगी।
जब SIP सक्षम रहता है
यदि आपके खतरा मॉडल के लिए SIP अक्षम करना स्वीकार्य नहीं है:imsgमूल मोड पर वापस आ जाता है — केवल टेक्स्ट + मीडिया + प्राप्ति।- OpenClaw Plugin अब भी टेक्स्ट/मीडिया भेजने और इनबाउंड निगरानी का विज्ञापन करता है; यह कार्रवाई सतह से
react,edit,unsend,reply,sendWithEffectऔर समूह संचालन छिपाता है (प्रति-विधि क्षमता गेट के अनुसार)। - आप iMessage कार्यभार के लिए SIP बंद रखकर एक अलग गैर-Apple-Silicon Mac (या समर्पित बॉट Mac) चला सकते हैं और अपने प्राथमिक डिवाइस पर SIP सक्षम रख सकते हैं। नीचे समर्पित बॉट macOS उपयोगकर्ता (अलग iMessage पहचान) देखें।
अभिगम नियंत्रण और रूटिंग
- DM नीति
- समूह नीति + उल्लेख
- सत्र और नियतात्मक उत्तर
channels.imessage.dmPolicy सीधे संदेशों को नियंत्रित करता है:pairing(डिफ़ॉल्ट)allowlist(कम-से-कम एकallowFromप्रविष्टि आवश्यक है)open(allowFromमें"*"शामिल होना आवश्यक है)disabled
channels.imessage.allowFrom।अनुमत-सूची प्रविष्टियों को प्रेषकों की पहचान करनी चाहिए: हैंडल या स्थिर प्रेषक अभिगम समूह (accessGroup:<name>)। chat_id:*, chat_guid:* या chat_identifier:* जैसे चैट लक्ष्यों के लिए channels.imessage.groupAllowFrom का उपयोग करें; संख्यात्मक chat_id रजिस्ट्री कुंजियों के लिए channels.imessage.groups का उपयोग करें।ACP वार्तालाप बाइंडिंग
iMessage चैट को ACP सत्रों से बाँधा जा सकता है। त्वरित ऑपरेटर प्रवाह:- DM या अनुमत समूह चैट के भीतर
/acp spawn codex --bind hereचलाएँ। - उसी iMessage वार्तालाप के भविष्य के संदेश उत्पन्न ACP सत्र पर रूट होते हैं।
/newऔर/resetउसी बँधे हुए ACP सत्र को उसी स्थान पर रीसेट करते हैं।/acp closeACP सत्र बंद करता है और बाइंडिंग हटा देता है।
type: "acp" और match.channel: "imessage" वाली शीर्ष-स्तरीय bindings[] प्रविष्टियों का उपयोग करती हैं।
match.peer.id इनमें से किसी का उपयोग कर सकता है:
- सामान्यीकृत DM हैंडल, जैसे
+15555550123याuser@example.com chat_id:<id>(स्थिर समूह बाइंडिंग के लिए अनुशंसित)chat_guid:<guid>chat_identifier:<identifier>
परिनियोजन पैटर्न
समर्पित बॉट macOS उपयोगकर्ता (अलग iMessage पहचान)
समर्पित बॉट macOS उपयोगकर्ता (अलग iMessage पहचान)
- एक समर्पित macOS उपयोगकर्ता बनाएँ/उसमें साइन इन करें।
- उस उपयोगकर्ता में बॉट Apple ID से Messages में साइन इन करें।
- उस उपयोगकर्ता में
imsgइंस्टॉल करें। - एक SSH रैपर बनाएँ, ताकि OpenClaw उस उपयोगकर्ता संदर्भ में
imsgचला सके। channels.imessage.accounts.<id>.cliPathऔर.dbPathको उस उपयोगकर्ता प्रोफ़ाइल पर इंगित करें।
Tailscale के माध्यम से रिमोट Mac (उदाहरण)
Tailscale के माध्यम से रिमोट Mac (उदाहरण)
- Gateway Linux/VM पर चलता है
- iMessage +
imsgआपके tailnet में मौजूद Mac पर चलता है cliPathरैपरimsgचलाने के लिए SSH का उपयोग करता हैremoteHostSCP के माध्यम से अटैचमेंट प्राप्त करना सक्षम करता है
ssh bot@mac-mini.tailnet-1234.ts.net), ताकि known_hosts भर जाए।बहु-अकाउंट पैटर्न
बहु-अकाउंट पैटर्न
channels.imessage.accounts के अंतर्गत प्रति-अकाउंट कॉन्फ़िगरेशन का समर्थन करता है।प्रत्येक अकाउंट cliPath, dbPath, allowFrom, groupPolicy, mediaMaxMb, इतिहास सेटिंग और अटैचमेंट रूट अनुमति-सूचियों जैसे फ़ील्ड को ओवरराइड कर सकता है।डायरेक्ट-मैसेज इतिहास
डायरेक्ट-मैसेज इतिहास
imsg इतिहास से आरंभ करने के लिए channels.imessage.dmHistoryLimit सेट करें। प्रति-प्रेषक ओवरराइड के लिए channels.imessage.dms["<sender>"].historyLimit का उपयोग करें, जिसमें किसी प्रेषक के लिए इतिहास अक्षम करने हेतु 0 भी शामिल है।iMessage DM इतिहास माँग पर imsg से प्राप्त किया जाता है। dmHistoryLimit को सेट न करने से वैश्विक DM इतिहास सीडिंग अक्षम हो जाती है, लेकिन सकारात्मक प्रति-प्रेषक channels.imessage.dms["<sender>"].historyLimit अब भी उस प्रेषक के लिए सीडिंग सक्षम करता है।मीडिया, खंडन और डिलीवरी लक्ष्य
अटैचमेंट और मीडिया
अटैचमेंट और मीडिया
- इनबाउंड अटैचमेंट अंतर्ग्रहण डिफ़ॉल्ट रूप से बंद है — फ़ोटो, वॉइस मेमो, वीडियो और अन्य अटैचमेंट एजेंट को अग्रेषित करने के लिए
channels.imessage.includeAttachments: trueसेट करें। इसके अक्षम होने पर, केवल अटैचमेंट वाले iMessage एजेंट तक पहुँचने से पहले हटा दिए जाते हैं और संभव है कि कोईInbound messageलॉग पंक्ति भी उत्पन्न न हो। 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.streaming.chunkModelength(डिफ़ॉल्ट)newline(पहले अनुच्छेद के आधार पर विभाजन)
- आउटबाउंड markdown का बोल्ड/इटैलिक/अंडरलाइन/स्ट्राइकथ्रू मूल शैलीयुक्त टेक्स्ट में बदला जाता है (macOS 15+ प्राप्तकर्ताओं को शैली दिखाई देती है; पुराने प्राप्तकर्ताओं को मार्कर के बिना सादा टेक्स्ट दिखाई देता है); markdown तालिकाएँ चैनल के markdown तालिका मोड के अनुसार बदली जाती हैं
channels.imessage.sendTransport(autoडिफ़ॉल्ट,bridge,applescript) यह चुनता है किimsgसंदेश कैसे डिलीवर करता है
एड्रेसिंग प्रारूप
एड्रेसिंग प्रारूप
chat_id:123(स्थिर रूटिंग के लिए अनुशंसित)chat_guid:...chat_identifier:...
imessage:+1555...sms:+1555...user@example.com
निजी API क्रियाएँ
जबimsg launch चल रहा हो और openclaw channels status --probe, privateApi.available: true रिपोर्ट करे, तब संदेश टूल सामान्य टेक्स्ट भेजने के अतिरिक्त iMessage की मूल क्रियाओं का उपयोग कर सकता है।
सभी क्रियाएँ डिफ़ॉल्ट रूप से सक्षम हैं; अलग-अलग क्रियाएँ बंद करने के लिए channels.imessage.actions का उपयोग करें:
उपलब्ध क्रियाएँ
उपलब्ध क्रियाएँ
- प्रतिक्रिया दें: iMessage टैपबैक जोड़ें/हटाएँ (
messageId,emoji,remove)। समर्थित टैपबैक प्रेम, पसंद, नापसंद, हँसी, ज़ोर और प्रश्न से मैप होते हैं। इमोजी के बिना हटाने पर सेट किया गया कोई भी टैपबैक साफ़ हो जाता है। - जवाब दें: किसी मौजूदा संदेश का थ्रेडेड जवाब भेजें (
messageId,textयाmessage, साथ मेंchatGuid,chatId,chatIdentifier, याto)। अटैचमेंट के साथ जवाब देने के लिए इसके अतिरिक्त ऐसाimsgबिल्ड आवश्यक है, जिसकाsend-rich,--fileका समर्थन करता हो। - प्रभाव के साथ भेजें: iMessage प्रभाव के साथ टेक्स्ट भेजें (
textयाmessage,effectयाeffectId)। संक्षिप्त नाम: slam, loud, gentle, invisibleink, confetti, lasers, fireworks, balloon, heart, echo, happybirthday, shootingstar, sparkles, spotlight। - संपादित करें: समर्थित macOS/निजी API संस्करणों पर भेजा गया संदेश संपादित करें (
messageId,textयाnewText)। केवल Gateway द्वारा स्वयं भेजे गए संदेश संपादित किए जा सकते हैं। - भेजना रद्द करें: समर्थित macOS/निजी API संस्करणों पर भेजा गया संदेश वापस लें (
messageId)। केवल Gateway द्वारा स्वयं भेजे गए संदेशों का भेजना रद्द किया जा सकता है। - फ़ाइल अपलोड करें: मीडिया/फ़ाइलें भेजें (
bufferको base64 के रूप में या हाइड्रेट किया गयाmedia/path/filePath,filename, वैकल्पिकasVoice)। लेगेसी उपनाम:sendAttachment। - समूह का नाम बदलें, समूह आइकन सेट करें, प्रतिभागी जोड़ें, प्रतिभागी हटाएँ, समूह छोड़ें: जब वर्तमान लक्ष्य कोई समूह वार्तालाप हो, तब समूह चैट प्रबंधित करें। ये होस्ट की Messages पहचान को बदलते हैं, इसलिए इनके लिए स्वामी प्रेषक या
operator.adminGateway क्लाइंट आवश्यक है। - मतदान: मूल Apple Messages मतदान बनाएँ (
pollQuestion,pollOptionको 2 से 12 बार दोहराया गया, साथ मेंchatGuid,chatId,chatIdentifier, याto)। iOS/iPadOS/macOS 26+ पर प्राप्तकर्ता इसे मूल रूप से देखते हैं और इसमें मतदान करते हैं; पुराने OS संस्करणों को “मतदान भेजा गया” टेक्स्ट फ़ॉलबैक मिलता है।selectors.pollPayloadMessageआवश्यक है। - मतदान-वोट: किसी मौजूदा मतदान पर वोट दें (
pollIdयाmessageId, साथ मेंpollOptionIndex,pollOptionId, याpollOptionTextमें से ठीक एक)।selectors.pollVoteMessageऔरpoll.voteRPC विधि आवश्यक हैं।
poll-vote के लिए आवश्यक मतदान संदेश ID सहित रेंडर किए जाते हैं।संदेश ID
संदेश ID
MessageSid मान और पूर्ण संदेश GUID (MessageSidFull) दोनों शामिल होते हैं। छोटे ID हालिया SQLite-समर्थित जवाब कैश के दायरे में होते हैं और उपयोग से पहले वर्तमान चैट के विरुद्ध जाँचे जाते हैं। यदि कोई छोटा ID समाप्त हो जाए, तो उसे प्रदान करने वाले वार्तालाप को लक्ष्य बनाते हुए उसके MessageSidFull के साथ फिर से प्रयास करें। पूर्ण ID वार्तालाप या अकाउंट बाइंडिंग को बायपास नहीं करते, इसलिए किसी अन्य चैट के ID को वर्तमान लक्ष्य के ID से बदलें। वर्तमान वार्तालाप का प्रमाण उपलब्ध न होने पर रिमोट प्रत्यायोजित कॉल पुराने पूर्ण ID अस्वीकार कर सकते हैं।क्षमता पहचान
क्षमता पहचान
imsg launch के बाद पहली क्रिया अलग से मैन्युअल स्थिति रीफ़्रेश किए बिना सफल हो सके।पठन रसीदें और टाइपिंग
पठन रसीदें और टाइपिंग
imsg बिल्ड टाइपिंग/पठन को चुपचाप बंद कर देते हैं; OpenClaw प्रत्येक रीस्टार्ट पर एक बार चेतावनी लॉग करता है, ताकि अनुपस्थित रसीद का कारण पता लगाया जा सके।इनबाउंड टैपबैक
इनबाउंड टैपबैक
channels.imessage.reactionNotifications द्वारा नियंत्रित होता है:"own"(डिफ़ॉल्ट): केवल तभी सूचित करें, जब उपयोगकर्ता बॉट द्वारा लिखे संदेशों पर प्रतिक्रिया दें।"all": अधिकृत प्रेषकों से आने वाले सभी इनबाउंड टैपबैक की सूचना दें।"off": इनबाउंड टैपबैक अनदेखा करें।
channels.imessage.accounts.<id>.reactionNotifications का उपयोग करते हैं।अनुमोदन प्रतिक्रियाएँ (👍 / 👎)
अनुमोदन प्रतिक्रियाएँ (👍 / 👎)
approvals.exec.enabled या approvals.plugin.enabled सत्य हो और अनुरोध iMessage पर रूट हो, तब Gateway मूल रूप से अनुमोदन प्रॉम्प्ट डिलीवर करता है और उसे हल करने के लिए टैपबैक स्वीकार करता है:👍(पसंद टैपबैक) →allow-once👎(नापसंद टैपबैक) →denyallow-alwaysमैन्युअल फ़ॉलबैक बना रहता है:/approve <id> allow-alwaysको सामान्य जवाब के रूप में भेजें।
channels.imessage.allowFrom (या channels.imessage.accounts.<id>.allowFrom) से पढ़ी जाती है; उपयोगकर्ता का फ़ोन नंबर E.164 प्रारूप में या उसका Apple ID ईमेल जोड़ें (chat_id:* जैसे चैट लक्ष्य मान्य अनुमोदक प्रविष्टियाँ नहीं हैं)। वाइल्डकार्ड प्रविष्टि "*" मान्य है, लेकिन यह किसी भी प्रेषक को अनुमोदन की अनुमति देती है; खाली अनुमोदक सूची प्रतिक्रिया शॉर्टकट को पूरी तरह अक्षम कर देती है। प्रतिक्रिया शॉर्टकट जानबूझकर reactionNotifications, dmPolicy, और groupAllowFrom को बायपास करता है, क्योंकि स्पष्ट अनुमोदक अनुमति-सूची ही अनुमोदन समाधान के लिए मायने रखने वाला एकमात्र गेट है।/approve टेक्स्ट कमांड का प्राधिकरण उसी सूची का पालन करता है: जब channels.imessage.allowFrom खाली न हो, तब /approve <id> <decision> को उस अनुमोदक सूची के विरुद्ध अधिकृत किया जाता है (व्यापक DM अनुमति-सूची के विरुद्ध नहीं), और DM अनुमति-सूची में अनुमत लेकिन allowFrom में शामिल न होने वाले प्रेषकों को स्पष्ट अस्वीकृति मिलती है। जब allowFrom खाली हो, तब उसी चैट वाला फ़ॉलबैक प्रभावी रहता है और /approve DM अनुमति-सूची द्वारा अनुमत किसी भी व्यक्ति को अधिकृत करता है। अनुमोदन करने वाले प्रत्येक ऑपरेटर को — /approve के माध्यम से या प्रतिक्रियाओं के माध्यम से — allowFrom में जोड़ें।ऑपरेटर नोट्स:- प्रतिक्रिया बाइंडिंग मेमोरी और Gateway के स्थायी कुंजीबद्ध स्टोर (अनुमोदन की समाप्ति से मेल खाता TTL) दोनों में संग्रहीत होती है, और Gateway टैपबैक के लिए लंबित प्रॉम्प्ट की पोलिंग भी करता है, इसलिए Gateway के पुनः आरंभ होने के कुछ ही समय बाद आने वाला टैपबैक भी अनुमोदन को पूरा कर देता है।
- ऑपरेटर का अपना
is_from_me=trueटैपबैक (उदाहरण के लिए, किसी युग्मित Apple डिवाइस से) अनुमोदन को पूरा करता है, जब वह हैंडल स्पष्ट अनुमोदक हो। - अनुमोदन प्रॉम्प्ट केवल तभी समूह वार्तालाप में भेजे जाते हैं, जब स्पष्ट अनुमोदक कॉन्फ़िगर किए गए हों; अन्यथा समूह का कोई भी सदस्य अनुमोदन कर सकता है।
- पुरानी टेक्स्ट-शैली के टैपबैक (बहुत पुराने Apple क्लाइंट से
Liked "…"सादा टेक्स्ट) अनुमोदनों को पूरा नहीं कर सकते, क्योंकि उनमें कोई संदेश GUID नहीं होता; प्रतिक्रिया समाधान के लिए वर्तमान macOS / iOS क्लाइंट द्वारा उत्सर्जित संरचित टैपबैक मेटाडेटा आवश्यक है।
प्रश्न प्रतिक्रियाएँ (1️⃣ / 2️⃣ / 3️⃣ / 4️⃣)
प्रश्न प्रतिक्रियाएँ (1️⃣ / 2️⃣ / 3️⃣ / 4️⃣)
ask_user प्रॉम्प्ट के लिए, OpenClaw क्रमांकित इमोजी विकल्प जोड़ता है। उत्तर देने के लिए डिलीवर किए गए प्रॉम्प्ट पर मेल खाने वाली संख्या से प्रतिक्रिया दें। प्रतिक्रिया में बॉट द्वारा लिखे गए संदेश का स्थिर GUID होना आवश्यक है; इसके बाद OpenClaw Gateway के माध्यम से संख्या को मानक विकल्प से मैप करता है। पुराने या डुप्लिकेट टैप अनदेखे किए जाते हैं।बहु-प्रश्न, बहु-चयन और मुक्त-टेक्स्ट प्रॉम्प्ट केवल टेक्स्ट उत्तर तक सीमित रहते हैं। प्रश्न प्रतिक्रियाएँ सामान्य iMessage DM/समूह प्रवेश नियमों का पालन करती हैं। सामान्य reactionNotifications के "off" होने पर भी उन्हें पहचाना जाता है, और इससे असंबंधित प्रतिक्रियाएँ एजेंट इवेंट में नहीं बदलतीं।कॉन्फ़िगरेशन लेखन
iMessage डिफ़ॉल्ट रूप से चैनल द्वारा आरंभ किए गए कॉन्फ़िगरेशन लेखन की अनुमति देता है (commands.config: true होने पर /config set|unset के लिए)।
अक्षम करें:
विभाजित-प्रेषण DM का संयोजन (एक ही रचना में कमांड + URL)
Apple किसी कमांड और उसके URL पूर्वावलोकन को अलग-अलग भौतिकchat.db पंक्तियों के रूप में संग्रहीत कर सकता है। imsg 0.13.1 और उसके बाद के संस्करण, वॉच, इतिहास या खोज द्वारा संदेश लौटाने से पहले उन पंक्तियों को संयोजित करते हैं, जिससे OpenClaw को चैनल-विशिष्ट DM विलंब जोड़े बिना एक तार्किक इनबाउंड संदेश मिलता है।
iMessage संयोजन की किसी सेटिंग की आवश्यकता नहीं है। सेवानिवृत्त channels.imessage.coalesceSameSenderDms कुंजी को openclaw doctor --fix द्वारा हटा दिया जाता है। जब आप किसी चैनल पर तेजी से आने वाले टेक्स्ट संदेशों को जानबूझकर बैच करना चाहते हैं, तब सामान्य messages.inbound डिबाउंस उपलब्ध रहता है।
यदि कमांड-प्लस-URL प्रेषण अलग-अलग एजेंट टर्न के रूप में आते हैं, तो Messages Mac पर imsg अपडेट करें:
ब्रिज या Gateway पुनः आरंभ होने के बाद इनबाउंड पुनर्प्राप्ति
iMessage उन संदेशों को पुनर्प्राप्त करता है जो Gateway बंद रहने के दौरान छूट गए थे, और साथ ही उस पुराने “बैकलॉग बम” को दबाता है जिसे Apple Push पुनर्प्राप्ति के बाद एक साथ भेज सकता है। टिकाऊ इनग्रेस और आयु सीमा पर आधारित डिफ़ॉल्ट व्यवहार हमेशा चालू रहता है।- टिकाऊ रीप्ले सुरक्षा। पुनर्प्राप्ति कर्सर को आगे बढ़ाने से पहले, OpenClaw प्रत्येक कच्ची पंक्ति को साझा SQLite इनग्रेस कतार में जर्नल करता है और उसके Apple GUID को इवेंट ID के रूप में उपयोग करता है। पूर्ण हुई पंक्ति लगभग 4 घंटे तक, अधिकतम 10,000 प्रविष्टियों की सीमा के साथ, एक टूम्बस्टोन छोड़ती है, इसलिए समान GUID वाला रीप्ले पुनः आरंभ होने के बाद भी हटा दिया जाता है। लंबित पंक्ति तब तक पुनर्प्राप्ति योग्य रहती है, जब तक डिस्पैच उसे अपना नहीं लेता।
- डाउनटाइम पुनर्प्राप्ति। स्टार्टअप पर मॉनिटर अंतिम टिकाऊ रूप से स्वीकार की गई
chat.dbrowid (प्रति-अकाउंट स्थायी कर्सर) को याद रखता है और उसेimsg watch.subscribeकोsince_rowidके रूप में देता है, ताकि imsg उन पंक्तियों को रीप्ले करे जिन्हें अभी तक जर्नल नहीं किया गया था और फिर लाइव पंक्तियों को टेल करे। क्रैश से पहले जर्नल की गई पंक्तियाँ SQLite से फिर शुरू होती हैं। रीप्ले सबसे हाल की 500 पंक्तियों और अधिकतम ~2 घंटे पुराने संदेशों तक सीमित है, और GUID टूम्बस्टोन पहले से संभाली गई किसी भी चीज़ को हटा देते हैं। - पुराने बैकलॉग की आयु सीमा। स्टार्टअप सीमा से ऊपर की पंक्तियाँ वास्तव में लाइव होती हैं; जिस पंक्ति की प्रेषण तिथि उसके आगमन से ~15 मिनट से अधिक पुरानी हो, वह Push-फ्लश बैकलॉग होती है और उसे दबा दिया जाता है। रीप्ले की गई पंक्तियाँ (सीमा पर या उसके नीचे) इसके बजाय व्यापक पुनर्प्राप्ति विंडो का उपयोग करती हैं, जिससे हाल में छूटा संदेश डिलीवर होता है, जबकि बहुत पुराना इतिहास नहीं होता।
cliPath सेटअप पर काम करती है, क्योंकि since_rowid रीप्ले उसी imsg RPC कनेक्शन पर चलता है। अंतर विंडो का है: जब Gateway chat.db (स्थानीय) पढ़ सकता है, तो वह स्टार्टअप rowid सीमा को आधार बनाता है, रीप्ले अवधि को सीमित करता है और कुछ घंटे तक पुराने छूटे संदेशों को डिलीवर करता है। रिमोट SSH cliPath पर वह डेटाबेस नहीं पढ़ सकता, इसलिए रीप्ले असीमित होता है और प्रत्येक पंक्ति लाइव आयु सीमा का उपयोग करती है — यह फिर भी हाल में छूटे संदेशों को पुनर्प्राप्त करता है और पुराने बैकलॉग को दबाता है, केवल इसकी लाइव विंडो संकरी होती है। व्यापक पुनर्प्राप्ति विंडो के लिए Gateway को Messages Mac पर चलाएँ।
ऑपरेटर को दिखाई देने वाला संकेत
दबाया गया बैकलॉग डिफ़ॉल्ट स्तर पर लॉग किया जाता है, उसे कभी भी चुपचाप नहीं हटाया जाता (recovery फ़्लैग बताता है कि कौन-सी विंडो लागू हुई):
माइग्रेशन
channels.imessage.catchup.* अप्रचलित है — डाउनटाइम पुनर्प्राप्ति स्वचालित है और नए सेटअप के लिए किसी कॉन्फ़िगरेशन की आवश्यकता नहीं होती। catchup.enabled: true वाले मौजूदा कॉन्फ़िगरेशन को पुनर्प्राप्ति रीप्ले विंडो की संगतता प्रोफ़ाइल के रूप में मान्यता मिलती रहती है। अक्षम कैचअप ब्लॉक (enabled: false या बिना enabled: true के) सेवानिवृत्त हो चुके हैं; openclaw doctor --fix उन्हें हटाता है।
समस्या निवारण
imsg नहीं मिला या RPC असमर्थित है
imsg नहीं मिला या RPC असमर्थित है
imsg अपडेट करें। यदि निजी API क्रियाएँ उपलब्ध नहीं हैं, तो लॉग-इन macOS उपयोगकर्ता सत्र में imsg launch चलाएँ और फिर से प्रोब करें। यदि Gateway macOS पर नहीं चल रहा है, तो डिफ़ॉल्ट स्थानीय imsg पथ के बजाय ऊपर दिया गया SSH के माध्यम से रिमोट Mac सेटअप उपयोग करें।संदेश भेजे जाते हैं, लेकिन इनबाउंड iMessage नहीं आते
संदेश भेजे जाते हैं, लेकिन इनबाउंड iMessage नहीं आते
chat.db नहीं बदलता, तो imsg status --json द्वारा ब्रिज को स्वस्थ बताए जाने पर भी OpenClaw संदेश प्राप्त नहीं कर सकता।chat.db पंक्ति या imsg watch इवेंट की पुष्टि करें। इसे आवधिक ब्रिज-पुनःप्रारंभ लूप के रूप में न चलाएँ; सक्रिय कार्य के दौरान बार-बार imsg launch और Gateway पुनः आरंभ करने से डिलीवरी बाधित हो सकती है और प्रगति पर चल रहे चैनल रन अटक सकते हैं।Gateway macOS पर नहीं चल रहा है
Gateway macOS पर नहीं चल रहा है
cliPath: "imsg" को Messages में साइन इन किए हुए Mac पर चलना आवश्यक है। Linux या Windows पर, channels.imessage.cliPath को ऐसे रैपर स्क्रिप्ट पर सेट करें जो उस Mac से SSH करे और imsg "$@" चलाए।DM अनदेखे किए जाते हैं
DM अनदेखे किए जाते हैं
channels.imessage.dmPolicychannels.imessage.allowFrom- युग्मन अनुमोदन (
openclaw pairing list imessage)
समूह संदेश अनदेखे किए जाते हैं
समूह संदेश अनदेखे किए जाते हैं
channels.imessage.groupPolicychannels.imessage.groupAllowFromchannels.imessage.groupsअनुमति-सूची व्यवहार- उल्लेख पैटर्न कॉन्फ़िगरेशन (
agents.entries.*.groupChat.mentionPatterns)
रिमोट अटैचमेंट विफल होते हैं
रिमोट अटैचमेंट विफल होते हैं
channels.imessage.remoteHostchannels.imessage.remoteAttachmentRoots- Gateway होस्ट से SSH/SCP कुंजी प्रमाणीकरण
- Gateway होस्ट पर
~/.ssh/known_hostsमें होस्ट कुंजी मौजूद है - Messages चलाने वाले Mac पर रिमोट पथ की पठनीयता
macOS अनुमति प्रॉम्प्ट छूट गए
macOS अनुमति प्रॉम्प्ट छूट गए
imsg चलाने वाले प्रक्रिया संदर्भ को Full Disk Access + Automation प्रदान किए गए हैं।कॉन्फ़िगरेशन संदर्भ संकेतक
संबंधित
- चैनलों का अवलोकन — सभी समर्थित चैनल
- BlueBubbles को हटाना और imsg iMessage पथ — घोषणा और माइग्रेशन सारांश
- BlueBubbles से आना — कॉन्फ़िगरेशन अनुवाद तालिका और चरण-दर-चरण कटओवर
- युग्मन — DM प्रमाणीकरण और युग्मन प्रवाह
- समूह — समूह चैट व्यवहार और उल्लेख गेटिंग
- चैनल रूटिंग — संदेशों के लिए सत्र रूटिंग
- सुरक्षा — पहुँच मॉडल और सुदृढ़ीकरण