Regional platforms

QQ 봇

QQ Bot은 공식 QQ Bot API(WebSocket Gateway)를 통해 OpenClaw에 연결됩니다. C2C 비공개 채팅과 그룹 @ 멘션이 기본 채팅 유형이며 이미지, 음성, 동영상, 파일 등 다양한 미디어를 지원합니다. 길드 채널 메시지는 텍스트와 원격 URL 이미지만 지원하며, 길드 채널에서는 음성, 동영상, 파일 업로드 및 로컬/Base64 이미지를 사용할 수 없습니다. 어디에서도 반응과 스레드는 지원되지 않습니다.

상태: 공식 다운로드 가능 Plugin.

설치

bash
openclaw plugins install @openclaw/qqbot

설정

  1. QQ Open Platform으로 이동한 후 휴대전화의 QQ로 QR 코드를 스캔하여 등록하거나 로그인합니다.
  2. Create Bot을 클릭하여 새 QQ 봇을 만듭니다.
  3. 봇 설정 페이지에서 AppID와 AppSecret을 찾아 복사합니다.
  1. 채널을 추가합니다.
bash
openclaw channels add --channel qqbot --token "AppID:AppSecret"
  1. 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",    },  },}

환경 변수 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 객체를 사용하세요.

접근 정책

  • allowFrom / groupAllowFrom은 C2C / 그룹 환경에서 봇과 채팅할 수 있는 사용자를 제한합니다. dmPolicy / groupPolicy(open | allowlist | disabled)는 적용 모드를 제어합니다. allowFrom에 구체적인(와일드카드가 아닌) 항목이 있으면 dmPolicy의 기본값은 allowlist이고, 그렇지 않으면 open입니다. groupAllowFrom 또는 allowFrom 중 하나에 구체적인 항목이 있으면 groupPolicy의 기본값은 allowlist이고, 그렇지 않으면 open입니다.
  • "인증: 허용 목록" 슬래시 명령에는 dmPolicy / groupPolicy와 관계없이 allowFrom(그룹에서 호출하는 경우 groupAllowFrom)에 명시적인 비와일드카드 항목이 필요합니다. 슬래시 명령을 참조하세요.

다중 계정 설정

단일 OpenClaw 인스턴스에서 여러 QQ 봇을 실행합니다.

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 클라이언트 및 토큰 캐시를 소유합니다. 하나의 Gateway에서 여러 봇을 실행할 때 진단 정보를 구분할 수 있도록 로그 줄에는 해당 계정 ID가 표시됩니다.

CLI를 통해 두 번째 봇 추가:

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

그룹 채팅

그룹 지원에는 표시 이름이 아닌 QQ 그룹 OpenID를 사용합니다. 봇을 그룹에 추가한 후 봇을 멘션하거나 멘션 없이 실행되도록 그룹을 구성합니다.

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 봇이 응답하기 전에 @ 멘션을 요구합니다.
commandLevel all 그룹에서 실행할 수 있는 기본 제공 슬래시 명령을 지정합니다(아래 참조).
ignoreOtherMentions false 봇이 아닌 다른 사람만 멘션한 메시지를 삭제합니다.
historyLimit 50 다음 멘션 차례의 컨텍스트로 유지할 최근 비멘션 메시지 수입니다. 0은 기록을 비활성화합니다.
tools — 전체 그룹에서 도구를 허용하거나 거부합니다.
toolsBySender — 발신자별 도구 재정의입니다. 그룹을 참조하세요.
name openid 접두사 로그와 그룹 컨텍스트에서 사용하는 알아보기 쉬운 레이블입니다.
prompt 기본 제공 기본값 에이전트 컨텍스트에 추가되는 그룹별 동작 프롬프트입니다.

commandLevel에 사용할 수 있는 값:

수준 동작
all 기존 기본 제공 명령을 계속 사용할 수 있습니다. 일부는 메뉴에서 숨겨진 상태로 유지되지만 승인된 사용자는 그룹에서 계속 실행할 수 있습니다.
safety /help, /btw, /stop은 그룹에 계속 표시되며, 민감한 명령(/config, /tools, /bash 등)은 비공개 채팅에서 실행해야 합니다.
strict 엄격한 운영에 필요한 그룹 세션 제어만 허용됩니다. 승인된 발신자가 진행 중인 실행을 중단할 수 있도록 /stop은 계속 작동합니다.

기존 QQBot toolPolicy 항목은 폐기되었습니다. openclaw doctor --fix를 실행하여 tools로 마이그레이션하세요.

활성화 모드는 mention과 always입니다. requireMention: true는 mention에, requireMention: false는 always에 매핑됩니다. 세션 수준의 활성화 재정의가 있으면 구성보다 우선합니다.

수신 큐는 피어별로 구성됩니다. 그룹 피어의 큐 한도는 직접 피어보다 큽니다(50 대 20). 큐가 가득 차면 사람이 작성한 메시지보다 봇이 작성한 메시지를 먼저 제거하며, 연속으로 도착한 일반 그룹 메시지를 발신자가 표시된 하나의 차례로 병합합니다. 슬래시 명령은 병합 배치와 독립적으로 하나씩 실행됩니다.

음성(STT / TTS)

STT와 TTS는 우선순위 폴백이 적용되는 2단계 구성을 지원합니다.

설정 Plugin별 구성 프레임워크 폴백
STT channels.qqbot.stt tools.media.audio.models[0]
TTS channels.qqbot.tts, channels.qqbot.accounts.<id>.tts messages.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 재정의는 messages.tts와 동일한 형태를 사용하며 채널/전역 TTS 구성 위에 심층 병합됩니다.

STT 요청은 기본적으로 60초 후 시간 초과됩니다. Plugin별 STT는 선택한 models.providers.<id>.timeoutSeconds 재정의를 사용합니다. 프레임워크 오디오 STT는 tools.media.audio.models[0].timeoutSeconds, tools.media.audio.timeoutSeconds, 선택한 제공자 재정의 순서로 사용합니다.

수신 QQ 음성 첨부 파일은 원본 음성 파일을 일반 MediaPaths에서 제외한 상태로 에이전트에 오디오 미디어 메타데이터로 제공됩니다. TTS가 구성된 경우 일반 텍스트 응답의 [[audio_as_voice]]는 TTS를 합성하여 기본 QQ 음성 메시지로 전송합니다.

발신 오디오 업로드/트랜스코딩 동작은 channels.qqbot.audioFormatPolicy로도 조정할 수 있습니다.

  • sttDirectFormats
  • uploadDirectFormats
  • transcodeEnabled

대상 형식

형식 설명
qqbot:c2c:OPENID 비공개 채팅(C2C)
qqbot:group:GROUP_OPENID 그룹 채팅
qqbot:channel:CHANNEL_ID 길드 채널

슬래시 명령

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 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가 구성되어 있고 제공자에 연결할 수 있는지 확인하세요.

관련 항목

Was this useful?
On this page

On this page