ServicesChat Service
Integrate Downcity with QQ Bot
QQ Integration
The QQ channel is currently in dev. It is recommended for testing, integration checks, and validation before production use.
Required config
{
"services": {
"chat": {
"channels": {
"qq": {
"enabled": true,
"channelAccountId": "qq-main"
}
}
}
}
}Credential source:
- Create
qq-mainin Console UIGlobal / Channel Accounts. - Fill
appId,appSecret, and optionalsandboxin that channel account.
Start runtime
city agent startVerify channel status
city service status chatGroup behavior
- Group messages are accepted directly (no
@mentionrequired). - If your bot only receives
@messages, verify QQ platform event permissions (especiallyGROUP_MESSAGE_CREATE).
Voice messages (voice/audio)
When the asr plugin is enabled and its transcription config under plugins.asr is ready, QQ inbound voice/audio attachments are transcribed in best-effort mode and the transcript is appended to the user instruction.
Recommended setup:
city asr on SenseVoiceSmall
city asr statusNotes:
- Transcription failures do not break the main chat flow.
- QQ voice attachment delivery depends on gateway
AUDIO_ACTIONcapability. If your bot app does not have that permission, audio payload fields may be missing.
Troubleshooting
- Looks connected but replies are missing: runtime now checks heartbeat ACK liveness. When status becomes
heartbeat_timeout, QQ channel will auto-reconnect. You can also runcity chat reconnect --channel qq. - Inbound works but outbound reply fails: reply sending now does one automatic retry on transient auth/network errors and triggers self-healing reconnect. If it still fails, inspect logs for
QQ send faileddetails (HTTP status + response body).