Signal (signal-cli)
स्थिति: बाहरी CLI इंटीग्रेशन। Gatewaysignal-cli से HTTP JSON-RPC + SSE के माध्यम से बात करता है।
त्वरित सेटअप (शुरुआती)
- बॉट के लिए एक अलग Signal नंबर उपयोग करें (अनुशंसित)।
signal-cliइंस्टॉल करें (Java आवश्यक)।- बॉट डिवाइस लिंक करें और डेमन शुरू करें:
signal-cli link -n "OpenClaw"
- OpenClaw को विन्यस्त करें और Gateway शुरू करें।
यह क्या है
signal-cliके माध्यम से Signal चैनल (एंबेडेड libsignal नहीं)।- निर्धारक रूटिंग: उत्तर हमेशा Signal पर ही वापस जाते हैं।
- DMs एजेंट के मुख्य सत्र को साझा करते हैं; समूह अलग-थलग होते हैं (
agent:<agentId>:signal:group:<groupId>)।
Config writes
डिफ़ॉल्ट रूप से, Signal को/config set|unset द्वारा ट्रिगर किए गए config अपडेट लिखने की अनुमति है (इसके लिए commands.config: true आवश्यक है)।
इसे अक्षम करने के लिए:
नंबर मॉडल (महत्वपूर्ण)
- Gateway एक Signal डिवाइस (
signal-cliखाता) से जुड़ता है। - यदि आप बॉट को अपने व्यक्तिगत Signal खाते पर चलाते हैं, तो यह आपके अपने संदेशों को अनदेखा करेगा (लूप सुरक्षा)।
- “मैं बॉट को टेक्स्ट करता हूँ और वह जवाब देता है” के लिए अलग बॉट नंबर का उपयोग करें।
सेटअप (त्वरित मार्ग)
signal-cliइंस्टॉल करें (Java आवश्यक)।- एक बॉट खाता लिंक करें:
signal-cli link -n "OpenClaw"फिर Signal में QR स्कैन करें।
- Signal को विन्यस्त करें और Gateway शुरू करें।
name के साथ channels.signal.accounts का उपयोग करें। साझा पैटर्न के लिए gateway/configuration देखें।
बाहरी डेमन मोड (httpUrl)
यदि आपsignal-cli को स्वयं प्रबंधित करना चाहते हैं (धीमे JVM कोल्ड स्टार्ट, कंटेनर इनिट, या साझा CPU), तो डेमन को अलग से चलाएँ और OpenClaw को उसकी ओर इंगित करें:
channels.signal.startupTimeoutMs सेट करें।
प्रवेश नियंत्रण (DMs + समूह)
DMs:- डिफ़ॉल्ट:
channels.signal.dmPolicy = "pairing"। - अज्ञात प्रेषकों को एक पेयरिंग कोड मिलता है; स्वीकृति तक संदेश अनदेखे रहते हैं (कोड 1 घंटे बाद समाप्त हो जाते हैं)।
- स्वीकृति के लिए:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- Signal DMs के लिए पेयरिंग डिफ़ॉल्ट टोकन एक्सचेंज है। विवरण: Pairing
- UUID-केवल प्रेषक (
sourceUuidसे) कोchannels.signal.allowFromमेंuuid:<id>के रूप में संग्रहीत किया जाता है।
channels.signal.groupPolicy = open | allowlist | disabled।channels.signal.groupAllowFromयह नियंत्रित करता है कि समूहों में कौन ट्रिगर कर सकता है जबallowlistसेट हो।
यह कैसे काम करता है (व्यवहार)
signal-cliएक डेमन के रूप में चलता है; Gateway SSE के माध्यम से इवेंट पढ़ता है।- इनबाउंड संदेशों को साझा चैनल एनवेलप में सामान्यीकृत किया जाता है।
- उत्तर हमेशा उसी नंबर या समूह पर रूट होते हैं।
मीडिया + सीमाएँ
- आउटबाउंड टेक्स्ट को
channels.signal.textChunkLimitतक चंक्स में विभाजित किया जाता है (डिफ़ॉल्ट 4000)। - वैकल्पिक न्यूलाइन चंकिंग: लंबाई चंकिंग से पहले खाली पंक्तियों (अनुच्छेद सीमाएँ) पर विभाजित करने के लिए
channels.signal.chunkMode="newline"सेट करें। - अटैचमेंट समर्थित (base64
signal-cliसे फ़ेच किया जाता है)। - डिफ़ॉल्ट मीडिया सीमा:
channels.signal.mediaMaxMb(डिफ़ॉल्ट 8)। - मीडिया डाउनलोड छोड़ने के लिए
channels.signal.ignoreAttachmentsका उपयोग करें। - ग्रुप इतिहास संदर्भ
channels.signal.historyLimit(याchannels.signal.accounts.*.historyLimit) का उपयोग करता है, औरmessages.groupChat.historyLimitपर फ़ॉलबैक करता है। अक्षम करने के लिए0सेट करें (डिफ़ॉल्ट 50)।
टाइपिंग + रीड रसीदें
- टाइपिंग संकेतक: OpenClaw
signal-cli sendTypingके माध्यम से टाइपिंग संकेत भेजता है और उत्तर चलते समय उन्हें रिफ़्रेश करता है। - रीड रसीदें: जब
channels.signal.sendReadReceiptstrue हो, OpenClaw अनुमत DMs के लिए रीड रसीदें फ़ॉरवर्ड करता है। - Signal-cli समूहों के लिए रीड रसीदें उपलब्ध नहीं कराता।
रिएक्शन्स (message tool)
message action=reactका उपयोगchannel=signalके साथ करें।- लक्ष्य: प्रेषक E.164 या UUID (पेयरिंग आउटपुट से
uuid:<id>उपयोग करें; साधारण UUID भी काम करता है)। messageIdउस संदेश का Signal टाइमस्टैम्प है जिस पर आप प्रतिक्रिया दे रहे हैं।- समूह रिएक्शन्स के लिए
targetAuthorयाtargetAuthorUuidआवश्यक है।
channels.signal.actions.reactions: रिएक्शन क्रियाएँ सक्षम/अक्षम करें (डिफ़ॉल्ट true)।channels.signal.reactionLevel:off | ack | minimal | extensive।off/ackएजेंट रिएक्शन्स को अक्षम करता है (message toolreactत्रुटि देगा)।minimal/extensiveएजेंट रिएक्शन्स सक्षम करता है और मार्गदर्शन स्तर सेट करता है।
- प्रति-अकाउंट ओवरराइड्स:
channels.signal.accounts.<id>1. .actions.reactions,channels.signal.accounts.<id>2. .reactionLevel`.
डिलीवरी लक्ष्य (CLI/cron)
- DMs:
signal:+15551234567(या साधारण E.164)। - UUID DMs:
uuid:<id>(या साधारण UUID)। - समूह:
signal:group:<groupId>। - उपयोगकर्ता नाम:
username:<name>(यदि आपके Signal खाते द्वारा समर्थित हो)।
समस्या-निवारण
पहले यह सीढ़ी चलाएँ:- डेमन पहुँचे योग्य है लेकिन उत्तर नहीं: खाता/डेमन सेटिंग्स (
httpUrl,account) और receive मोड सत्यापित करें। - DMs अनदेखे: प्रेषक पेयरिंग स्वीकृति की प्रतीक्षा में है।
- समूह संदेश अनदेखे: समूह प्रेषक/मेंशन गेटिंग डिलीवरी को रोक रही है।
विन्यास संदर्भ (Signal)
पूर्ण विन्यास: Configuration प्रदाता विकल्प:channels.signal.enabled: चैनल स्टार्टअप सक्षम/अक्षम करें।channels.signal.account: बॉट खाते के लिए E.164।channels.signal.cliPath:signal-cliका पाथ।channels.signal.httpUrl: पूर्ण डेमन URL (host/port को ओवरराइड करता है)।channels.signal.httpHost,channels.signal.httpPort: डेमन बाइंड (डिफ़ॉल्ट 127.0.0.1:8080)।channels.signal.autoStart: ऑटो-स्पॉन डेमन (डिफ़ॉल्ट true यदिhttpUrlअनसेट हो)।channels.signal.startupTimeoutMs: स्टार्टअप वेट टाइमआउट (ms में, अधिकतम 120000)।channels.signal.receiveMode:on-start | manual।channels.signal.ignoreAttachments: अटैचमेंट डाउनलोड छोड़ें।channels.signal.ignoreStories: डेमन से स्टोरीज़ अनदेखी करें।channels.signal.sendReadReceipts: रीड रसीदें फ़ॉरवर्ड करें।channels.signal.dmPolicy:pairing | allowlist | open | disabled(डिफ़ॉल्ट: पेयरिंग)।-
channels.signal.allowFrom: DM अनुमति सूची (E.164 याuuid:<id>). 4.openके लिए"*"आवश्यक है। 5. Signal में उपयोगकर्ता नाम नहीं होते; फोन/UUID आईडी का उपयोग करें।
channels.signal.groupPolicy:open | allowlist | disabled(डिफ़ॉल्ट: allowlist)।channels.signal.groupAllowFrom: समूह प्रेषक allowlist।channels.signal.historyLimit: संदर्भ के रूप में शामिल करने के लिए अधिकतम समूह संदेश (0 अक्षम करता है)।-
channels.signal.dmHistoryLimit: उपयोगकर्ता टर्न में DM इतिहास सीमा। 7. प्रति-उपयोगकर्ता ओवरराइड्स:channels.signal.dms["<phone_or_uuid>"].historyLimit.
channels.signal.textChunkLimit: आउटबाउंड चंक आकार (अक्षर)।channels.signal.chunkMode:length(डिफ़ॉल्ट) याnewlineताकि लंबाई चंकिंग से पहले खाली पंक्तियों (अनुच्छेद सीमाएँ) पर विभाजन हो।channels.signal.mediaMaxMb: इनबाउंड/आउटबाउंड मीडिया सीमा (MB)।
agents.list[].groupChat.mentionPatterns(Signal मूल मेंशन का समर्थन नहीं करता)।messages.groupChat.mentionPatterns(वैश्विक फ़ॉलबैक)।messages.responsePrefix।