---
read_when:
    - आप OpenClaw को QQ से कनेक्ट करना चाहते हैं
    - आपको QQ Bot क्रेडेंशियल सेटअप करना होगा
    - आप QQ Bot समूह या निजी चैट समर्थन चाहते हैं
summary: QQ Bot सेटअप, कॉन्फ़िगरेशन और उपयोग
title: QQ बॉट
x-i18n:
    generated_at: "2026-07-27T19:08:29Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: b185a2b1182471bbec3688b40fb72b671bdf3a2e8351aa6e2f7918f4f5936825
    source_path: channels/qqbot.md
    workflow: 16
---

QQ Bot आधिकारिक QQ Bot API (WebSocket gateway) के माध्यम से OpenClaw से जुड़ता है।
C2C निजी चैट और समूह `@`-उल्लेख प्राथमिक चैट प्रकार हैं, जिनमें समृद्ध
मीडिया (इमेज, वॉइस, वीडियो, फ़ाइलें) शामिल है। गिल्ड चैनल संदेश केवल
टेक्स्ट और रिमोट-URL इमेज के लिए समर्थित हैं; वॉइस, वीडियो, फ़ाइल अपलोड और स्थानीय/Base64
इमेज गिल्ड चैनलों में उपलब्ध नहीं हैं। प्रतिक्रियाएँ और थ्रेड
कहीं भी समर्थित नहीं हैं।

स्थिति: आधिकारिक डाउनलोड योग्य Plugin।

## इंस्टॉल करें

```bash
openclaw plugins install @openclaw/qqbot
```

## सेटअप

1. [QQ Open Platform](https://q.qq.com/) पर जाएँ और पंजीकरण / लॉग इन करने के लिए अपने
   फ़ोन के QQ से QR कोड स्कैन करें।
2. नया QQ bot बनाने के लिए **Create Bot** पर क्लिक करें।
3. bot के सेटिंग पेज पर **AppID** और **AppSecret** ढूँढें और उन्हें कॉपी करें।

<Note>
AppSecret सादे टेक्स्ट में संग्रहीत नहीं होता। यदि आप इसे सहेजे बिना पेज छोड़ देते हैं, तो आपको नया AppSecret फिर से जनरेट करना होगा।
</Note>

4. चैनल जोड़ें:

```bash
openclaw channels add --channel qqbot --token "AppID:AppSecret"
```

5. Gateway को पुनः आरंभ करें।

## इनबाउंड स्थायित्व

QQ gateway टर्न इवेंट के लिए, OpenClaw सहेजे गए gateway रिज़्यूम क्रम को आगे बढ़ाने से पहले रॉ इवेंट को स्थायी रूप से संग्रहीत करता है। लंबित या पुनः प्रयास योग्य टर्न Gateway के पुनः आरंभ होने के बाद भी बने रहते हैं, प्रत्येक वार्तालाप के अनुसार क्रमबद्ध रहते हैं, और सक्रिय या सुरक्षित रखा गया पूर्णता रिकॉर्ड मौजूद रहने तक डुप्लिकेट कतार प्रविष्टियों को रोकने के लिए प्रदाता इवेंट ID का उपयोग करते हैं।

यदि स्थायी प्रवेश विफल होता है, तो OpenClaw क्रम को आगे बढ़ाए बिना वर्तमान gateway सॉकेट समाप्त कर देता है। इसके बाद पुनः कनेक्ट/रिज़्यूम पथ अप्रतिबद्ध इवेंट को फिर से अनुरोध कर सकता है। कतार-से-एजेंट सीमा पर डिलीवरी अब भी कम-से-कम एक बार होती है, इसलिए हैंडऑफ़ के दौरान क्रैश होने पर कोई टर्न फिर से चल सकता है।

इंटरैक्टिव सेटअप:

```bash
openclaw channels add
```

विज़ार्ड AppID/AppSecret को मैन्युअल रूप से टाइप करने के विकल्प के रूप में QR-कोड बाइंडिंग भी प्रदान करता है:
बाइंडिंग पूरी करने के लिए लक्षित QQ Bot से संबद्ध फ़ोन ऐप से कोड स्कैन करें।
OpenClaw लौटाए गए क्रेडेंशियल को खाते के कॉन्फ़िगरेशन
दायरे में स्थायी रूप से संग्रहीत करता है।

## कॉन्फ़िगर करें

न्यूनतम कॉन्फ़िगरेशन:

```json5
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "YOUR_APP_ID",
      clientSecret: "YOUR_APP_SECRET",
    },
  },
}
```

डिफ़ॉल्ट-खाता एनवायरनमेंट वेरिएबल (केवल शीर्ष-स्तरीय खाता):

- `QQBOT_APP_ID`
- `QQBOT_CLIENT_SECRET`

फ़ाइल-समर्थित AppSecret:

```json5
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "YOUR_APP_ID",
      clientSecretFile: "/path/to/qqbot-secret.txt",
    },
  },
}
```

Env SecretRef AppSecret:

```json5
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "YOUR_APP_ID",
      clientSecret: { source: "env", provider: "default", id: "QQBOT_CLIENT_SECRET" },
    },
  },
}
```

नोट्स:

- `openclaw channels add --channel qqbot --token-file ...` केवल AppSecret सेट करता है;
  `appId` पहले से कॉन्फ़िगरेशन या `QQBOT_APP_ID` में सेट होना चाहिए।
- `clientSecret` सादे टेक्स्ट की स्ट्रिंग, फ़ाइल पथ (`clientSecretFile`),
  या संरचित SecretRef ऑब्जेक्ट स्वीकार करता है।
- लेगेसी `secretref:...` / `secretref-env:...` मार्कर स्ट्रिंग
  `clientSecret` के लिए अस्वीकार की जाती हैं; इसके बजाय संरचित SecretRef ऑब्जेक्ट का उपयोग करें।

### स्ट्रीमिंग

```json5
{
  channels: {
    qqbot: {
      streaming: {
        mode: "partial", // ब्लॉक स्ट्रीमिंग: "partial" (डिफ़ॉल्ट) या "off"
        nativeTransport: true, // DM के लिए QQ की आधिकारिक C2C stream_messages API का उपयोग करें
      },
    },
  },
}
```

- `streaming.mode: "off"` खाते के लिए ब्लॉक स्ट्रीमिंग अक्षम करता है।
- `streaming.nativeTransport: true` QQ की आधिकारिक
  `stream_messages` API के माध्यम से C2C (DM) उत्तर स्ट्रीम करता है; समूह/चैनल लक्ष्य अप्रभावित रहते हैं।
- लेगेसी `streaming: true|false` स्केलर और `streaming.c2cStreamApi` कुंजी
  `openclaw doctor --fix` के माध्यम से इस संरचना में माइग्रेट होते हैं।
- `/bot-streaming on|off` DM से इसी कॉन्फ़िगरेशन को टॉगल करता है।

### पहुँच नीति

- `allowFrom` / `groupAllowFrom` नियंत्रित करते हैं कि C2C /
  समूह संदर्भों में bot से कौन चैट कर सकता है। `dmPolicy` / `groupPolicy` (`open` | `allowlist` | `disabled`)
  प्रवर्तन मोड नियंत्रित करते हैं। `allowFrom` में कोई ठोस (गैर-वाइल्डकार्ड) प्रविष्टि होने पर
  `dmPolicy` का डिफ़ॉल्ट `allowlist` होता है, अन्यथा `open`।
  `groupAllowFrom` या `allowFrom` में से किसी में ठोस प्रविष्टि होने पर
  `groupPolicy` का डिफ़ॉल्ट `allowlist` होता है, अन्यथा `open`।
- "Auth: allowlist" स्लैश कमांड के लिए
  `allowFrom` में (या समूह आमंत्रणों के लिए `groupAllowFrom` में) स्पष्ट गैर-वाइल्डकार्ड प्रविष्टि आवश्यक है,
  चाहे `dmPolicy` / `groupPolicy` कुछ भी हो — [स्लैश कमांड](#slash-commands) देखें।

### एकाधिक-खाता सेटअप

एक ही OpenClaw इंस्टेंस के अंतर्गत कई QQ bot चलाएँ:

```json5
{
  channels: {
    qqbot: {
      enabled: true,
      appId: "111111111",
      clientSecret: "secret-of-bot-1",
      accounts: {
        bot2: {
          enabled: true,
          appId: "222222222",
          clientSecret: "secret-of-bot-2",
        },
      },
    },
  },
}
```

प्रत्येक खाता `appId` द्वारा कुंजीबद्ध एक पृथक WebSocket कनेक्शन, API क्लाइंट और टोकन
कैश का स्वामी होता है। लॉग पंक्तियों को स्वामी खाता ID से टैग किया जाता है, ताकि
एक Gateway के अंतर्गत कई bot चलाने पर निदान अलग-अलग रखा जा सके।

CLI के माध्यम से दूसरा bot जोड़ें:

```bash
openclaw channels add --channel qqbot --account bot2 --token "222222222:secret-of-bot-2"
```

### समूह चैट

समूह समर्थन डिस्प्ले नामों के बजाय QQ समूह OpenID का उपयोग करता है। bot को किसी
समूह में जोड़ें, फिर उसका उल्लेख करें या समूह को बिना उल्लेख के चलने के लिए कॉन्फ़िगर करें।

```json5
{
  channels: {
    qqbot: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["member_openid"],
      groups: {
        "*": {
          requireMention: true,
          commandLevel: "all",
          historyLimit: 50,
          tools: { deny: ["exec", "read", "write"] },
        },
        GROUP_OPENID: {
          name: "Release room",
          requireMention: false,
          ignoreOtherMentions: true,
          commandLevel: "safety",
          historyLimit: 20,
          prompt: "Keep replies short and operational.",
        },
      },
    },
  },
}
```

`groups["*"]` प्रत्येक समूह के लिए डिफ़ॉल्ट सेट करता है; कोई ठोस `groups.GROUP_OPENID`
प्रविष्टि एक समूह के लिए उन डिफ़ॉल्ट को ओवरराइड करती है। समूह सेटिंग:

| फ़ील्ड                 | डिफ़ॉल्ट          | विवरण                                                                                        |
| --------------------- | ---------------- | -------------------------------------------------------------------------------------------------- |
| `requireMention`      | `true`           | bot के उत्तर देने से पहले `@`-उल्लेख आवश्यक करें।                                                     |
| `commandLevel`        | `all`            | समूह में कौन-से अंतर्निहित स्लैश कमांड चल सकते हैं (नीचे देखें)।                                    |
| `ignoreOtherMentions` | `false`          | ऐसे संदेश हटा दें जिनमें किसी और का उल्लेख हो, लेकिन bot का नहीं।                                           |
| `historyLimit`        | `50`             | अगले उल्लेखित टर्न के संदर्भ के रूप में रखे गए हालिया गैर-उल्लेख संदेश। `0` इतिहास अक्षम करता है।     |
| `tools`               | —                | पूरे समूह के लिए टूल की अनुमति दें/अस्वीकार करें।                                                              |
| `toolsBySender`       | —                | प्रति-प्रेषक टूल ओवरराइड; [समूह](/hi/channels/groups#groupchannel-tool-restrictions-optional) देखें। |
| `name`                | openid उपसर्ग    | लॉग और समूह संदर्भ में उपयोग किया जाने वाला अनुकूल लेबल।                                                     |
| `prompt`              | अंतर्निहित डिफ़ॉल्ट | एजेंट संदर्भ में जोड़ा गया प्रति-समूह व्यवहार प्रॉम्प्ट।                                           |

`commandLevel` यह स्वीकार करता है:

| स्तर    | व्यवहार                                                                                                                                      |
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `all`    | मौजूदा अंतर्निहित कमांड उपलब्ध रहते हैं। कुछ मेनू से छिपे रहते हैं, लेकिन अधिकृत उपयोगकर्ता उन्हें समूह में अब भी चला सकते हैं।                  |
| `safety` | `/help`, `/btw`, `/stop` समूह में दृश्यमान रहते हैं; संवेदनशील कमांड (`/config`, `/tools`, `/bash`, आदि) निजी चैट में चलाने आवश्यक हैं।      |
| `strict` | केवल सख्त संचालन के लिए आवश्यक समूह-सत्र नियंत्रणों की अनुमति है। `/stop` अब भी काम करता है, ताकि अधिकृत प्रेषक किसी सक्रिय रन को बाधित कर सके। |

पुरानी QQBot `toolPolicy` प्रविष्टियाँ सेवानिवृत्त हो चुकी हैं। उन्हें `tools` में माइग्रेट करने के लिए `openclaw doctor --fix` चलाएँ।

सक्रियण मोड `mention` और `always` हैं। `requireMention: true`,
`mention` से मैप होता है; `requireMention: false`, `always` से मैप होता है। सत्र-स्तरीय सक्रियण
ओवरराइड मौजूद होने पर कॉन्फ़िगरेशन पर प्राथमिकता पाता है।

इनबाउंड कतार प्रति पीयर होती है। समूह पीयर को बड़ी कतार सीमा मिलती है (सीधे
पीयर के लिए 20 की तुलना में 50), कतार भरने पर मानव-लिखित संदेशों से पहले bot-लिखित संदेशों को
हटाया जाता है, और सामान्य समूह संदेशों के बर्स्ट को एक एट्रिब्यूटेड टर्न में मर्ज किया जाता है। स्लैश
कमांड किसी भी मर्ज बैच से स्वतंत्र होकर एक-एक करके चलते हैं।

### वॉइस (STT / TTS)

STT और TTS प्राथमिकता फ़ॉलबैक के साथ दो-स्तरीय कॉन्फ़िगरेशन का समर्थन करते हैं:

| सेटिंग | Plugin-विशिष्ट                                          | फ़्रेमवर्क फ़ॉलबैक                               |
| ------- | -------------------------------------------------------- | ------------------------------------------------ |
| STT     | `channels.qqbot.stt`                                     | पहली ऑडियो-सक्षम `tools.media.models[]` प्रविष्टि |
| TTS     | `channels.qqbot.tts`, `channels.qqbot.accounts.<id>.tts` | `tts`                                            |

```json5
{
  channels: {
    qqbot: {
      stt: {
        provider: "your-provider",
        model: "your-stt-model",
      },
      tts: {
        provider: "your-provider",
        model: "your-tts-model",
        voice: "your-voice",
      },
      accounts: {
        "qq-main": {
          tts: {
            providers: {
              openai: { voice: "shimmer" },
            },
          },
        },
      },
    },
  },
}
```

अक्षम करने के लिए इनमें से किसी पर `enabled: false` सेट करें। खाता-स्तरीय TTS ओवरराइड
`tts` जैसी ही संरचना का उपयोग करते हैं और चैनल/वैश्विक TTS कॉन्फ़िगरेशन पर डीप-मर्ज होते हैं।

STT अनुरोध डिफ़ॉल्ट रूप से 60 सेकंड के बाद टाइम आउट होते हैं। Plugin-विशिष्ट STT चयनित
`models.providers.<id>.timeoutSeconds` ओवरराइड का उपयोग करता है। फ़्रेमवर्क ऑडियो STT
चयनित ऑडियो-सक्षम `tools.media.models[]` प्रविष्टि के `timeoutSeconds` का, और फिर चयनित प्रदाता ओवरराइड का उपयोग करता है।

इनबाउंड QQ वॉइस अटैचमेंट एजेंटों के समक्ष ऑडियो मीडिया मेटाडेटा के रूप में प्रस्तुत किए जाते हैं,
जबकि रॉ वॉइस फ़ाइलों को सामान्य `MediaPaths` से बाहर रखा जाता है। सादे-टेक्स्ट उत्तर में
`[[audio_as_voice]]` TTS संश्लेषित करता है और TTS कॉन्फ़िगर होने पर मूल QQ वॉइस संदेश भेजता है।

आउटबाउंड ऑडियो अपलोड/ट्रांसकोड व्यवहार को
`channels.qqbot.audioFormatPolicy` के साथ भी समायोजित किया जा सकता है:

- `sttDirectFormats`
- `uploadDirectFormats`
- `transcodeEnabled`

## लक्ष्य प्रारूप

| प्रारूप                     | विवरण        |
| -------------------------- | ------------------ |
| `qqbot:c2c:OPENID`         | निजी चैट (C2C) |
| `qqbot:group:GROUP_OPENID` | समूह चैट         |
| `qqbot:channel:CHANNEL_ID` | गिल्ड चैनल      |

<Note>
प्रत्येक bot के पास उपयोगकर्ता OpenID का अपना समूह होता है। Bot A द्वारा प्राप्त OpenID का उपयोग Bot B के माध्यम से संदेश भेजने के लिए **नहीं** किया जा सकता।
</Note>

## स्लैश कमांड

AI कतार से पहले इंटरसेप्ट किए जाने वाले अंतर्निहित कमांड:

| कमांड              | प्रमाणीकरण      | दायरा        | विवरण                                                                    |
| -------------------- | --------- | ------------ | ------------------------------------------------------------------------------ |
| `/bot-ping`          | —         | कोई भी          | विलंबता परीक्षण                                                                   |
| `/bot-help`          | —         | कोई भी          | सभी कमांड सूचीबद्ध करें                                                              |
| `/bot-me`            | —         | केवल निजी | `allowFrom` / `groupAllowFrom` सेटअप के लिए प्रेषक की QQ उपयोगकर्ता ID (openid) दिखाएँ |
| `/bot-version`       | —         | केवल निजी | OpenClaw फ़्रेमवर्क संस्करण और Plugin संस्करण दिखाएँ                         |
| `/bot-upgrade`       | —         | केवल निजी | QQBot अपग्रेड मार्गदर्शिका की लिंक दिखाएँ                                              |
| `/bot-approve`       | अनुमति-सूची | केवल निजी | कमांड-निष्पादन अनुमोदन कॉन्फ़िगरेशन प्रबंधित करें (चालू / बंद / हमेशा / रीसेट / स्थिति)  |
| `/bot-logs`          | अनुमति-सूची | केवल निजी | हाल के Gateway लॉग को फ़ाइल के रूप में निर्यात करें                                           |
| `/bot-clear-storage` | अनुमति-सूची | केवल निजी | QQBot मीडिया डायरेक्टरी के अंतर्गत कैश किए गए डाउनलोड हटाएँ                        |
| `/bot-streaming`     | अनुमति-सूची | केवल निजी | C2C स्ट्रीमिंग उत्तर टॉगल करें                                                   |
| `/bot-group-allways` | अनुमति-सूची | केवल निजी | डिफ़ॉल्ट समूह सक्रियण मोड टॉगल करें (उल्लेख-आवश्यक बनाम हमेशा-चालू)      |

उपयोग सहायता के लिए किसी भी कमांड के अंत में `?` जोड़ें (उदाहरण के लिए `/bot-upgrade ?`)।

"प्रमाणीकरण: अनुमति-सूची" वाले कमांड के लिए अतिरिक्त रूप से प्रेषक का openid
स्पष्ट गैर-वाइल्डकार्ड `allowFrom` सूची में होना आवश्यक है (समूह से जारी
कमांड के लिए `groupAllowFrom` को प्राथमिकता मिलती है और अनुपलब्ध होने पर
`allowFrom` का उपयोग होता है)। वाइल्डकार्ड `allowFrom: ["*"]` चैट की अनुमति
देता है, लेकिन इन कमांड की नहीं। इनमें से किसी कमांड को निजी चैट के बाहर या
प्राधिकरण के बिना चलाने पर संदेश चुपचाप हटाने के बजाय एक संकेत लौटाया जाता है।

`/bot-me`, `/bot-version`, और `/bot-upgrade` केवल निजी चैट के लिए हैं, लेकिन इनके
लिए अनुमति-सूची आवश्यक नहीं है — कोई भी C2C प्रेषक इन्हें चला सकता है।

जब QQ Bot निष्पादन अनुमोदन डिफ़ॉल्ट समान-चैट फ़ॉलबैक का उपयोग करते हैं, तो मूल
अनुमोदन बटन के क्लिक भी उसी स्पष्ट गैर-वाइल्डकार्ड कमांड अनुमति-सूची का पालन
करते हैं। व्यापक कमांड एक्सेस दिए बिना केवल अनुमोदन एक्सेस देने के लिए
`channels.qqbot.execApprovals.approvers` कॉन्फ़िगर करें। मूल निष्पादन अनुमोदन डिफ़ॉल्ट रूप से
सक्षम होते हैं।

## मीडिया और स्टोरेज

- इनबाउंड, आउटबाउंड और Gateway-ब्रिज मीडिया
  `~/.openclaw/media/qqbot` के अंतर्गत एक ही पेलोड रूट साझा करते हैं (सेट होने पर `OPENCLAW_HOME` का पालन करते हुए), ताकि अपलोड,
  डाउनलोड और ट्रांसकोड कैश एक ही सुरक्षित डायरेक्टरी के अंतर्गत रहें।
- C2C और समूह लक्ष्यों के लिए रिच मीडिया डिलीवरी एक ही `sendMedia`
  पथ से होती है। 5&nbsp;MiB या उससे बड़ी स्थानीय फ़ाइलें और इन-मेमोरी बफ़र QQ के
  खंडित अपलोड एंडपॉइंट का उपयोग करते हैं; छोटे पेलोड और रिमोट-URL/Base64 स्रोत
  एकल-प्रयास अपलोड API का उपयोग करते हैं।
- यदि कोई हॉट अपग्रेड `openclaw.json` का लेखन पूरा होने से पहले Gateway को बाधित
  करता है, तो Plugin अगली शुरुआत पर आंतरिक स्नैपशॉट से उस खाते के अंतिम ज्ञात
  `appId` / `clientSecret` को पुनर्स्थापित करता है (किसी जानबूझकर किए गए
  कॉन्फ़िगरेशन परिवर्तन को कभी अधिलेखित नहीं करता), इसलिए QR कोड को फिर से स्कैन
  करना आवश्यक नहीं है।

## समस्या निवारण

- **Gateway शुरू नहीं होता / कोई इनबाउंड संदेश नहीं:** सत्यापित करें कि `appId` और
  `clientSecret` सही हैं और QQ Open Platform पर बॉट सक्षम है।
  क्रेडेंशियल अनुपलब्ध होने पर "QQBot कॉन्फ़िगर नहीं है (appId या
  clientSecret अनुपलब्ध है)" दिखाई देता है।
- **`--token-file` के साथ सेटअप अब भी कॉन्फ़िगर नहीं दिखाता:** `--token-file` केवल
  AppSecret सेट करता है। `appId` को अभी भी कॉन्फ़िगरेशन या `QQBOT_APP_ID` में सेट करना आवश्यक है।
- **अचानक बड़ी संख्या में आए समूह उत्तर टकराते हैं:** किसी पीयर की कतार भरने पर
  इनबाउंड कतार मनुष्यों द्वारा लिखे संदेशों से पहले बॉट द्वारा लिखे संदेशों को
  हटाती है और सामान्य (गैर-कमांड) समूह संदेशों के समूह को एक श्रेयांकित टर्न
  में मिला देती है, ताकि बॉट संदेशों की बाढ़ से मानव संदेशों को संसाधन मिलना
  बंद न हो।
- **सक्रिय रूप से भेजे गए संदेश नहीं पहुँच रहे:** यदि उपयोगकर्ता ने हाल में इंटरैक्ट
  नहीं किया है, तो QQ बॉट द्वारा आरंभ किए गए संदेशों को अवरुद्ध कर सकता है।
- **आवाज़ का लिप्यंतरण नहीं हुआ:** सुनिश्चित करें कि STT कॉन्फ़िगर किया गया है और
  प्रदाता तक पहुँचा जा सकता है।

## संबंधित

- [पेयरिंग](/hi/channels/pairing)
- [समूह](/hi/channels/groups)
- [चैनल समस्या निवारण](/hi/channels/troubleshooting)
