Mainstream messaging
Signal
स्थिति: बाहरी CLI एकीकरण। Gateway signal-cli से HTTP पर बात करता है — या तो नेटिव डेमन (JSON-RPC + SSE) या bbernhard/signal-cli-rest-api कंटेनर (REST + WebSocket)।
पूर्वापेक्षाएँ
- आपके सर्वर पर OpenClaw इंस्टॉल हो (नीचे दिया गया Linux फ्लो Ubuntu 24 पर परीक्षण किया गया है)।
- इनमें से एक:
- होस्ट पर
signal-cliउपलब्ध हो (नेटिव मोड), या bbernhard/signal-cli-rest-apiDocker कंटेनर (कंटेनर मोड)।
- होस्ट पर
- ऐसा फ़ोन नंबर जो एक सत्यापन SMS प्राप्त कर सके (SMS पंजीकरण पथ के लिए)।
- पंजीकरण के दौरान Signal captcha (
signalcaptchas.org) के लिए ब्राउज़र एक्सेस।
त्वरित सेटअप (शुरुआती)
- बॉट के लिए अलग Signal नंबर इस्तेमाल करें (अनुशंसित)।
- OpenClaw Plugin इंस्टॉल करें:
openclaw plugins install @openclaw/signalsignal-cliइंस्टॉल करें (यदि आप JVM बिल्ड इस्तेमाल करते हैं तो Java आवश्यक है)।- एक सेटअप पथ चुनें:
- पथ A (QR लिंक):
signal-cli link -n "OpenClaw"और Signal से स्कैन करें। - पथ B (SMS पंजीकरण): captcha + SMS सत्यापन के साथ एक समर्पित नंबर पंजीकृत करें।
- पथ A (QR लिंक):
- OpenClaw कॉन्फ़िगर करें और gateway रीस्टार्ट करें।
- पहला DM भेजें और पेयरिंग स्वीकृत करें (
openclaw pairing approve signal <CODE>)।
न्यूनतम कॉन्फ़िग:
{ channels: { signal: { enabled: true, account: "+15551234567", cliPath: "signal-cli", dmPolicy: "pairing", allowFrom: ["+15557654321"], }, },}फ़ील्ड संदर्भ:
| फ़ील्ड | विवरण |
|---|---|
account |
E.164 फ़ॉर्मैट में बॉट फ़ोन नंबर (+15551234567) |
cliPath |
signal-cli का पथ (PATH पर हो तो signal-cli) |
configPath |
--config के रूप में पास की गई signal-cli कॉन्फ़िग dir |
dmPolicy |
DM एक्सेस नीति (pairing अनुशंसित) |
allowFrom |
DM की अनुमति वाले फ़ोन नंबर या uuid:<id> मान |
यह क्या है
signal-cliके माध्यम से Signal चैनल (एम्बेडेड libsignal नहीं)।- निर्धारक रूटिंग: जवाब हमेशा Signal पर ही वापस जाते हैं।
- DMs एजेंट का मुख्य सेशन साझा करते हैं; समूह अलग-थलग होते हैं (
agent:<agentId>:signal:group:<groupId>)।
कॉन्फ़िग लेखन
डिफ़ॉल्ट रूप से, Signal को /config set|unset से ट्रिगर हुए कॉन्फ़िग अपडेट लिखने की अनुमति होती है (commands.config: true आवश्यक है)।
इससे अक्षम करें:
{ channels: { signal: { configWrites: false } },}नंबर मॉडल (महत्वपूर्ण)
- Gateway एक Signal डिवाइस (
signal-cliअकाउंट) से कनेक्ट करता है। - यदि आप बॉट को अपने व्यक्तिगत Signal अकाउंट पर चलाते हैं, तो यह आपके अपने संदेशों को अनदेखा करेगा (लूप सुरक्षा)।
- "मैं बॉट को टेक्स्ट करूँ और वह जवाब दे" के लिए, अलग बॉट नंबर इस्तेमाल करें।
सेटअप पथ A: मौजूदा Signal अकाउंट लिंक करें (QR)
signal-cliइंस्टॉल करें (JVM या नेटिव बिल्ड)।- बॉट अकाउंट लिंक करें:
signal-cli link -n "OpenClaw"फिर Signal में QR स्कैन करें।
- Signal कॉन्फ़िगर करें और gateway शुरू करें।
उदाहरण:
{ channels: { signal: { enabled: true, account: "+15551234567", cliPath: "signal-cli", dmPolicy: "pairing", allowFrom: ["+15557654321"], }, },}मल्टी-अकाउंट समर्थन: प्रति-अकाउंट कॉन्फ़िग और वैकल्पिक name के साथ channels.signal.accounts इस्तेमाल करें। साझा पैटर्न के लिए gateway/configuration देखें।
सेटअप पथ B: समर्पित बॉट नंबर पंजीकृत करें (SMS, Linux)
जब आप किसी मौजूदा Signal ऐप अकाउंट को लिंक करने के बजाय समर्पित बॉट नंबर चाहते हों, तब इसका इस्तेमाल करें।
- ऐसा नंबर लें जो SMS प्राप्त कर सके (या लैंडलाइन के लिए वॉइस सत्यापन)।
- अकाउंट/सेशन टकराव से बचने के लिए समर्पित बॉट नंबर इस्तेमाल करें।
- Gateway होस्ट पर
signal-cliइंस्टॉल करें:
VERSION=$(curl -Ls -o /dev/null -w %{url_effective} https://github.com/AsamK/signal-cli/releases/latest | sed -e 's/^.*\/v//')curl -L -O "https://github.com/AsamK/signal-cli/releases/download/v${VERSION}/signal-cli-${VERSION}-Linux-native.tar.gz"sudo tar xf "signal-cli-${VERSION}-Linux-native.tar.gz" -C /optsudo ln -sf /opt/signal-cli /usr/local/bin/signal-cli --versionयदि आप JVM बिल्ड (signal-cli-${VERSION}.tar.gz) इस्तेमाल करते हैं, तो पहले JRE 25+ इंस्टॉल करें।
signal-cli को अपडेट रखें; upstream नोट करता है कि पुराने रिलीज़ Signal सर्वर APIs बदलने पर टूट सकते हैं।
- नंबर पंजीकृत और सत्यापित करें:
signal-cli -a +<BOT_PHONE_NUMBER> registerयदि captcha आवश्यक हो:
https://signalcaptchas.org/registration/generate.htmlखोलें।- captcha पूरा करें, "Open Signal" से
signalcaptcha://...लिंक लक्ष्य कॉपी करें। - संभव हो तो ब्राउज़र सेशन जैसे बाहरी IP से ही चलाएँ।
- तुरंत फिर से पंजीकरण चलाएँ (captcha टोकन जल्दी समाप्त हो जाते हैं):
signal-cli -a +<BOT_PHONE_NUMBER> register --captcha '<SIGNALCAPTCHA_URL>'signal-cli -a +<BOT_PHONE_NUMBER> verify <VERIFICATION_CODE>- OpenClaw कॉन्फ़िगर करें, gateway रीस्टार्ट करें, चैनल सत्यापित करें:
# If you run the gateway as a user systemd service:systemctl --user restart openclaw-gateway.service # Then verify:openclaw doctoropenclaw channels status --probe- अपने DM प्रेषक को पेयर करें:
- बॉट नंबर पर कोई भी संदेश भेजें।
- सर्वर पर कोड स्वीकृत करें:
openclaw pairing approve signal <PAIRING_CODE>। - "Unknown contact" से बचने के लिए बॉट नंबर को अपने फ़ोन में संपर्क के रूप में सेव करें।
Upstream संदर्भ:
signal-cliREADME:https://github.com/AsamK/signal-cli- Captcha फ्लो:
https://github.com/AsamK/signal-cli/wiki/Registration-with-captcha - लिंकिंग फ्लो:
https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning)
बाहरी डेमन मोड (httpUrl)
यदि आप signal-cli स्वयं प्रबंधित करना चाहते हैं (धीमे JVM कोल्ड स्टार्ट, कंटेनर init, या साझा CPUs), तो डेमन अलग से चलाएँ और OpenClaw को उसकी ओर इंगित करें:
{ channels: { signal: { httpUrl: "http://127.0.0.1:8080", autoStart: false, }, },}यह auto-spawn और OpenClaw के अंदर startup wait को छोड़ देता है। auto-spawn करते समय धीमे स्टार्ट के लिए channels.signal.startupTimeoutMs सेट करें।
कंटेनर मोड (bbernhard/signal-cli-rest-api)
signal-cli को नेटिव रूप से चलाने के बजाय, आप bbernhard/signal-cli-rest-api Docker कंटेनर इस्तेमाल कर सकते हैं। यह signal-cli को REST API और WebSocket इंटरफ़ेस के पीछे रैप करता है।
आवश्यकताएँ:
- रियल-टाइम संदेश प्राप्ति के लिए कंटेनर
MODE=json-rpcके साथ ही चलना चाहिए। - OpenClaw कनेक्ट करने से पहले कंटेनर के अंदर अपना Signal अकाउंट पंजीकृत या लिंक करें।
उदाहरण docker-compose.yml सेवा:
signal-cli: image: bbernhard/signal-cli-rest-api:latest environment: MODE: json-rpc ports: - "8080:8080" volumes: - signal-cli-data:/home/.local/share/signal-cliOpenClaw कॉन्फ़िग:
{ channels: { signal: { enabled: true, account: "+15551234567", httpUrl: "http://signal-cli:8080", autoStart: false, apiMode: "container", // or "auto" to detect automatically }, },}apiMode फ़ील्ड नियंत्रित करता है कि OpenClaw कौन-सा प्रोटोकॉल इस्तेमाल करता है:
| मान | व्यवहार |
|---|---|
"auto" |
(डिफ़ॉल्ट) दोनों transports को probe करता है; streaming कंटेनर WebSocket receive को सत्यापित करती है |
"native" |
नेटिव signal-cli को बाध्य करें (/api/v1/rpc पर JSON-RPC, /api/v1/events पर SSE) |
"container" |
bbernhard कंटेनर को बाध्य करें (/v2/send पर REST, /v1/receive/{account} पर WebSocket) |
जब apiMode "auto" होता है, OpenClaw दोहराए गए probes से बचने के लिए पहचाने गए मोड को 30 सेकंड के लिए कैश करता है। कंटेनर receive केवल streaming के लिए तब चुना जाता है जब /v1/receive/{account} WebSocket में upgrade हो जाए, जिसके लिए MODE=json-rpc आवश्यक है।
कंटेनर मोड वही Signal चैनल ऑपरेशन समर्थित करता है जो नेटिव मोड करता है, जहाँ कंटेनर मिलते-जुलते APIs expose करता है: भेजना, प्राप्त करना, attachments, typing indicators, read/viewed receipts, reactions, groups, और styled text। OpenClaw अपने नेटिव Signal RPC कॉल को कंटेनर के REST payloads में अनुवाद करता है, जिसमें group.{base64(internal_id)} group IDs और formatted text के लिए text_mode: "styled" शामिल हैं।
संचालन नोट्स:
- कंटेनर मोड के साथ
autoStart: falseइस्तेमाल करें।apiMode: "container"चुने जाने पर OpenClaw को नेटिव डेमन spawn नहीं करना चाहिए। - प्राप्ति के लिए
MODE=json-rpcइस्तेमाल करें।MODE=normal/v1/aboutको healthy दिखा सकता है, लेकिन/v1/receive/{account}WebSocket-upgrade नहीं करता, इसलिए OpenClawautoमोड में कंटेनर receive streaming नहीं चुनेगा। - जब आपको पता हो कि
httpUrlbbernhard के REST API की ओर इशारा करता है, तबapiMode: "container"सेट करें। जब आपको पता हो कि यह नेटिवsignal-cliJSON-RPC/SSE की ओर इशारा करता है, तबapiMode: "native"सेट करें। जब deployment बदल सकता हो, तब"auto"इस्तेमाल करें। - कंटेनर attachment downloads नेटिव मोड जैसी ही media byte limits का सम्मान करते हैं। जब सर्वर
Content-Lengthभेजता है तो oversized responses पूरी तरह buffer होने से पहले reject हो जाते हैं, और अन्यथा streaming के दौरान।
एक्सेस नियंत्रण (DMs + groups)
DMs:
- डिफ़ॉल्ट:
channels.signal.dmPolicy = "pairing"। - अज्ञात प्रेषकों को pairing code मिलता है; संदेश स्वीकृत होने तक अनदेखा किए जाते हैं (codes 1 घंटे बाद समाप्त हो जाते हैं)।
- इसके माध्यम से स्वीकृत करें:
openclaw pairing list signalopenclaw pairing approve signal <CODE>
- Pairing Signal DMs के लिए डिफ़ॉल्ट token exchange है। विवरण: Pairing
- UUID-only प्रेषक (
sourceUuidसे)channels.signal.allowFromमेंuuid:<id>के रूप में stored होते हैं।
समूह:
channels.signal.groupPolicy = open | allowlist | disabled।allowlistसेट होने परchannels.signal.groupAllowFromनियंत्रित करता है कि कौन-से groups या senders group replies ट्रिगर कर सकते हैं; entries Signal group IDs (raw,group:<id>, याsignal:group:<id>), sender phone numbers,uuid:<id>values, या*हो सकती हैं।channels.signal.groups["<group-id>" | "*"]requireMention,tools, औरtoolsBySenderके साथ group behavior override कर सकता है।- multi-account setups में per-account overrides के लिए
channels.signal.accounts.<id>.groupsइस्तेमाल करें। groupAllowFromके माध्यम से Signal group को allowlist करने से mention gating अपने-आप disable नहीं होती। विशेष रूप से configuredchannels.signal.groups["<group-id>"]entry हर group message process करती है, जब तकrequireMention=trueसेट न हो।- Runtime नोट: यदि
channels.signalपूरी तरह missing है, तो runtime group checks के लिएgroupPolicy="allowlist"पर fallback करता है (भले हीchannels.defaults.groupPolicyसेट हो)।
यह कैसे काम करता है (व्यवहार)
- नेटिव मोड:
signal-cliडेमन के रूप में चलता है; gateway SSE के माध्यम से events पढ़ता है। - कंटेनर मोड: gateway REST API के माध्यम से भेजता है और WebSocket के माध्यम से प्राप्त करता है।
- आने वाले संदेश साझा channel envelope में normalize किए जाते हैं।
- जवाब हमेशा उसी नंबर या group पर वापस route होते हैं।
मीडिया + सीमाएँ
- Outbound text को
channels.signal.textChunkLimitतक chunk किया जाता है (डिफ़ॉल्ट 4000)। - वैकल्पिक newline chunking: length chunking से पहले blank lines (paragraph boundaries) पर split करने के लिए
channels.signal.chunkMode="newline"सेट करें। - Attachments समर्थित हैं (
signal-cliसे base64 fetched)। - जब
contentTypemissing हो, तो voice-note attachments MIME fallback के रूप मेंsignal-clifilename इस्तेमाल करते हैं, ताकि audio transcription अब भी AAC voice memos classify कर सके। - डिफ़ॉल्ट media cap:
channels.signal.mediaMaxMb(डिफ़ॉल्ट 8)। - media download करना skip करने के लिए
channels.signal.ignoreAttachmentsइस्तेमाल करें। - Group history context
channels.signal.historyLimit(याchannels.signal.accounts.*.historyLimit) इस्तेमाल करता है, और fallback करकेmessages.groupChat.historyLimitपर जाता है। disable करने के लिए0सेट करें (डिफ़ॉल्ट 50)।
Typing + read receipts
- टाइपिंग संकेतक: OpenClaw
signal-cli sendTypingके माध्यम से टाइपिंग संकेत भेजता है और जवाब चलने के दौरान उन्हें ताज़ा करता है। - रीड रसीदें: जब
channels.signal.sendReadReceiptstrue हो, OpenClaw अनुमत DMs के लिए रीड रसीदें आगे भेजता है। - Signal-cli समूहों के लिए रीड रसीदें उपलब्ध नहीं कराता।
जीवनचक्र स्थिति प्रतिक्रियाएं
Signal को इनबाउंड टर्न पर साझा
queued/thinking/tool/compaction/done/error प्रतिक्रिया जीवनचक्र दिखाने देने के लिए
messages.statusReactions.enabled: true सेट करें।
Signal इनबाउंड संदेश timestamp को प्रतिक्रिया लक्ष्य के रूप में उपयोग करता है; समूह
प्रतिक्रियाएं Signal समूह id और मूल प्रेषक को लक्ष्य लेखक के रूप में साथ भेजी जाती हैं।
स्थिति प्रतिक्रियाओं के लिए एक ack प्रतिक्रिया और मेल खाता
messages.ackReactionScope (direct, group-all, group-mentions, या all) भी चाहिए।
Signal स्थिति प्रतिक्रियाएं अक्षम करने के लिए channels.signal.reactionLevel: "off" सेट करें।
message-tool react कार्रवाई अधिक सख्त रहती है: इसके लिए
reactionLevel: "minimal" या "extensive" चाहिए।
messages.removeAckAfterReply: true कॉन्फ़िगर किए गए होल्ड समय के बाद अंतिम स्थिति प्रतिक्रिया साफ़ करता है।
अन्यथा Signal अंतिम done/error स्थिति के बाद प्रारंभिक ack प्रतिक्रिया बहाल करता है।
प्रतिक्रियाएं (message tool)
channel=signalके साथmessage action=reactउपयोग करें।- लक्ष्य: प्रेषक E.164 या UUID (pairing आउटपुट से
uuid:<id>उपयोग करें; bare UUID भी काम करता है)। messageIdउस संदेश का Signal timestamp है जिस पर आप प्रतिक्रिया दे रहे हैं।- समूह प्रतिक्रियाओं के लिए
targetAuthorयाtargetAuthorUuidचाहिए।
उदाहरण:
message action=react channel=signal target=uuid:123e4567-e89b-12d3-a456-426614174000 messageId=1737630212345 emoji=🔥message action=react channel=signal target=+15551234567 messageId=1737630212345 emoji=🔥 remove=truemessage action=react channel=signal target=signal:group:<groupId> targetAuthor=uuid:<sender-uuid> messageId=1737630212345 emoji=✅कॉन्फ़िग:
channels.signal.actions.reactions: प्रतिक्रिया कार्रवाइयां सक्षम/अक्षम करें (डिफ़ॉल्ट true)।channels.signal.reactionLevel:off | ack | minimal | extensive।off/ackएजेंट प्रतिक्रियाएं अक्षम करता है (message toolreactत्रुटि देगा)।minimal/extensiveएजेंट प्रतिक्रियाएं सक्षम करता है और मार्गदर्शन स्तर सेट करता है।
- प्रति-खाता ओवरराइड:
channels.signal.accounts.<id>.actions.reactions,channels.signal.accounts.<id>.reactionLevel।
स्वीकृति प्रतिक्रियाएं
Signal exec और Plugin स्वीकृति prompts शीर्ष-स्तरीय approvals.exec और
approvals.plugin routing blocks उपयोग करते हैं। Signal में
channels.signal.execApprovals block नहीं है।
👍एक बार स्वीकृत करता है।👎अस्वीकार करता है।- जब कोई अनुरोध स्थायी स्वीकृति प्रदान करे, तो
/approve <id> allow-alwaysउपयोग करें।
स्वीकृति प्रतिक्रिया समाधान के लिए channels.signal.allowFrom, channels.signal.defaultTo,
या मेल खाते account-level fields से स्पष्ट Signal approvers चाहिए।
Direct same-chat exec approval prompts स्पष्ट approvers के बिना भी duplicate local /approve fallback
को दबा सकते हैं; no-approver group approvals local fallback को दृश्यमान रखते हैं।
डिलीवरी लक्ष्य (CLI/cron)
- DMs:
signal:+15551234567(या plain E.164)। - UUID DMs:
uuid:<id>(या bare UUID)। - समूह:
signal:group:<groupId>। - Usernames:
username:<name>(यदि आपके Signal खाते द्वारा समर्थित हो)।
उपनाम
जब आप बार-बार उपयोग होने वाले Signal लक्ष्यों के लिए स्थिर नाम चाहते हों, तो aliases कॉन्फ़िगर करें। Aliases केवल OpenClaw-side config हैं; वे Signal contacts बनाते या संपादित नहीं करते।
{ channels: { signal: { aliases: { me: "+15557654321", jane: "uuid:123e4567-e89b-12d3-a456-426614174000", ops: "group:<groupId>", }, defaultTo: "signal:me", }, },}जहां भी Signal delivery targets स्वीकार किए जाते हैं, aliases उपयोग करें:
openclaw message send --channel signal --target signal:ops --message "Deployment is complete"Per-account aliases शीर्ष-स्तरीय aliases विरासत में लेते हैं और नाम जोड़ या override कर सकते हैं:
{ channels: { signal: { aliases: { me: "+15557654321", }, accounts: { work: { aliases: { ops: "group:<workGroupId>", }, }, }, }, },}openclaw directory peers list --channel signal और
openclaw directory groups list --channel signal कॉन्फ़िगर किए गए aliases सूचीबद्ध करते हैं। Signal
directory config-backed है; यह Signal contacts को live-query नहीं करती या
Signal खाते को बदलती नहीं है।
समस्या निवारण
पहले यह ladder चलाएं:
openclaw statusopenclaw gateway statusopenclaw logs --followopenclaw doctoropenclaw channels status --probeफिर जरूरत हो तो DM pairing स्थिति की पुष्टि करें:
openclaw pairing list signalसामान्य विफलताएं:
- Daemon पहुंच योग्य है लेकिन जवाब नहीं: account/daemon settings (
httpUrl,account) और receive mode सत्यापित करें। - DMs अनदेखे: प्रेषक pairing approval लंबित है।
- समूह संदेश अनदेखे: group sender/mention gating delivery रोकती है।
- संपादन के बाद config validation errors:
openclaw doctor --fixचलाएं। - diagnostics से Signal गायब:
channels.signal.enabled: trueकी पुष्टि करें।
अतिरिक्त जांचें:
openclaw pairing list signalpgrep -af signal-cligrep -i "signal" "/tmp/openclaw/openclaw-$(date +%Y-%m-%d).log" | tail -20triage flow के लिए: /channels/troubleshooting।
सुरक्षा नोट्स
signal-cliaccount keys स्थानीय रूप से संग्रहीत करता है (आमतौर पर~/.local/share/signal-cli/data/)।- server migration या rebuild से पहले Signal account state का backup लें।
- जब तक आप स्पष्ट रूप से व्यापक DM access नहीं चाहते,
channels.signal.dmPolicy: "pairing"रखें। - SMS verification केवल registration या recovery flows के लिए आवश्यक है, लेकिन number/account पर नियंत्रण खोना re-registration को जटिल बना सकता है।
कॉन्फ़िगरेशन संदर्भ (Signal)
पूर्ण कॉन्फ़िगरेशन: कॉन्फ़िगरेशन
Provider विकल्प:
channels.signal.enabled: channel startup सक्षम/अक्षम करें।channels.signal.apiMode:auto | native | container(डिफ़ॉल्ट: auto)। Container mode देखें।channels.signal.account: bot account के लिए E.164।channels.signal.cliPath:signal-cliका path।channels.signal.configPath: वैकल्पिकsignal-cli --configdirectory।channels.signal.httpUrl: पूरा daemon URL (host/port override करता है)।channels.signal.httpHost,channels.signal.httpPort: daemon bind (डिफ़ॉल्ट 127.0.0.1:8080)।channels.signal.autoStart: daemon auto-spawn करें (यदिhttpUrlunset हो तो डिफ़ॉल्ट true)।channels.signal.startupTimeoutMs: startup wait timeout ms में (cap 120000)।channels.signal.receiveMode:on-start | manual।channels.signal.ignoreAttachments: attachment downloads छोड़ें।channels.signal.ignoreStories: daemon से stories अनदेखी करें।channels.signal.sendReadReceipts: read receipts आगे भेजें।channels.signal.dmPolicy:pairing | allowlist | open | disabled(डिफ़ॉल्ट: pairing)।channels.signal.allowFrom: DM allowlist (E.164 याuuid:<id>)।openके लिए"*"चाहिए। Signal में usernames नहीं हैं; phone/UUID ids उपयोग करें।channels.signal.aliases: DM या group delivery targets के लिए OpenClaw-side aliases।channels.signal.groupPolicy:open | allowlist | disabled(डिफ़ॉल्ट: allowlist)।channels.signal.groupAllowFrom: group allowlist; Signal group IDs (raw,group:<id>, याsignal:group:<id>), sender E.164 numbers, याuuid:<id>values स्वीकार करता है।channels.signal.groups: Signal group id (या"*") से keyed per-group overrides। समर्थित fields:requireMention,tools,toolsBySender।channels.signal.accounts.<id>.groups: multi-account setups के लिएchannels.signal.groupsका per-account version।channels.signal.accounts.<id>.aliases: per-account aliases, top-level aliases के साथ merged।channels.signal.historyLimit: context के रूप में शामिल करने के लिए max group messages (0 अक्षम करता है)।channels.signal.dmHistoryLimit: user turns में DM history limit। Per-user overrides:channels.signal.dms["<phone_or_uuid>"].historyLimit।channels.signal.textChunkLimit: outbound chunk size (chars)।channels.signal.chunkMode: length chunking से पहले blank lines (paragraph boundaries) पर split करने के लिएlength(डिफ़ॉल्ट) याnewline।channels.signal.mediaMaxMb: inbound/outbound media cap (MB)।
संबंधित global विकल्प:
agents.list[].groupChat.mentionPatterns(Signal native mentions का समर्थन नहीं करता)।messages.groupChat.mentionPatterns(global fallback)।messages.responsePrefix।
संबंधित
- Channels Overview — सभी समर्थित channels
- Pairing — DM authentication और pairing flow
- Groups — group chat behavior और mention gating
- Channel Routing — messages के लिए session routing
- Security — access model और hardening