OpenClaw Nextcloud Talk Channel
Connect OpenClaw to Nextcloud Talk, the privacy-focused enterprise communication platform built into the Nextcloud ecosystem. The integration uses a webhook-based bot architecture — Nextcloud Talk sends message events to your Gateway via webhooks, and the bot responds through the Talk REST API. This enables your AI assistant to participate in direct messages, room conversations, and react to messages with emoji, all within your self-hosted Nextcloud environment.
Nextcloud Talk Supported Features
Text Messages
Supported
Media & Files
Supported
Reactions
Supported
Threads
Not Supported
Voice Messages
Not Supported
Group Chat
Supported
Nextcloud Talk Prerequisites
- A Nextcloud server (v27.1+) with administrator access and the Talk app installed
- A shared secret (40-128 characters) for webhook signature validation
- The Gateway's webhook endpoint accessible from the Nextcloud server (public URL or internal network)
- OpenClaw Gateway installed and running
- The Nextcloud Talk plugin installed via 'openclaw plugins install @openclaw/nextcloud-talk'
Nextcloud Talk Quick Setup
Install the Nextcloud Talk plugin
Run 'openclaw plugins install @openclaw/nextcloud-talk' to add Nextcloud Talk support to your Gateway.
Register the bot on your Nextcloud server
SSH into your Nextcloud server and run the OCC command: ./occ talk:bot:install "OpenClaw" "<shared-secret>" "<webhook-url>" --feature reaction. Replace <shared-secret> with a strong 40+ character secret, and <webhook-url> with the Gateway's publicly accessible webhook endpoint (e.g., https://gateway.example.com:8788/webhook).
Enable the bot and configure
In Nextcloud Talk, go to the room settings and enable the OpenClaw bot. Then add the channel configuration to ~/.openclaw/openclaw.json with your baseUrl and botSecret. Start the Gateway with 'openclaw start' and send a message in the room to verify the connection.
Nextcloud Talk Configuration Example
{
"channels": {
"nextcloud-talk": {
"enabled": true,
"baseUrl": "https://nextcloud.example.com",
"botSecret": "your-shared-secret-min-40-chars",
"dmPolicy": "pairing"
}
}
}
Nextcloud Talk Deep Dive
Architecture Overview
Bot Registration via OCC
./occ talk:bot:install "OpenClaw" "a]72@Bz&V!LKMO*xhQib7p^E%yzGMG(8a7Bp*x6o" "https://gateway.example.com:8788/webhook" --feature reaction
DM Policies
{
"channels": {
"nextcloud-talk": {
"dmPolicy": "pairing",
"allowFrom": ["user-id-1", "user-id-2"]
}
}
}
Room Configuration
{
"channels": {
"nextcloud-talk": {
"groupPolicy": "allowlist",
"rooms": {
"abc123token": {
"requireMention": true
},
"def456token": {
"requireMention": false
}
}
}
}
}
API Credentials for Room Detection
{
"channels": {
"nextcloud-talk": {
"apiUser": "bot-service-account",
"apiPassword": "service-account-password",
"apiPasswordFile": "/run/secrets/nc-api-password"
}
}
}
Webhook Configuration
{
"channels": {
"nextcloud-talk": {
"webhookPort": 8788,
"webhookHost": "0.0.0.0",
"webhookPath": "/webhook",
"webhookPublicUrl": "https://gateway.example.com:8788/webhook"
}
}
}
Message Handling and Streaming
{
"channels": {
"nextcloud-talk": {
"textChunkLimit": 4000,
"chunkMode": "newline",
"blockStreaming": true,
"blockStreamingCoalesce": true,
"mediaMaxMb": 10
}
}
}
Conversation History
{
"channels": {
"nextcloud-talk": {
"historyLimit": 20,
"dmHistoryLimit": 50
}
}
}
Reactions Support
Security and Webhook Signing
Nextcloud Talk Configuration Reference
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | Enable or disable the Nextcloud Talk channel |
| baseUrl | string | "" | Full URL of your Nextcloud server (e.g., https://nextcloud.example.com) |
| botSecret | string | "" | Shared secret used for webhook signature validation (must match the OCC install secret) |
| botSecretFile | string | "" | Path to a file containing the shared secret (alternative to inline botSecret) |
| apiUser | string | "" | Nextcloud username for API calls (used for room-type detection) |
| apiPassword | string | "" | Password for the API user account |
| apiPasswordFile | string | "" | Path to a file containing the API password (alternative to inline apiPassword) |
| dmPolicy | string | "pairing" | DM access policy: 'pairing' (verification code), 'open' (any user), or 'disabled' (no DMs) |
| allowFrom | string[] | [] | Nextcloud user IDs allowed to DM the bot (use ["*"] for open access) |
| groupPolicy | string | "allowlist" | Room access policy: 'allowlist' (moderator-enabled rooms only) |
| webhookPort | number | 8788 | Port for the built-in webhook HTTP server |
| webhookHost | string | "0.0.0.0" | Interface to bind the webhook server to |
| webhookPath | string | "/webhook" | URL path for the webhook endpoint |
| webhookPublicUrl | string | "" | Full public URL for the webhook endpoint (required behind reverse proxy) |
| historyLimit | number | 20 | Maximum previous messages included as context for room conversations |
| dmHistoryLimit | number | 50 | Maximum previous messages included as context for DM conversations |
| textChunkLimit | number | 4000 | Maximum characters per message chunk |
| chunkMode | string | "length" | Text splitting mode: 'length' (character limit) or 'newline' (paragraph boundaries) |
| blockStreaming | boolean | false | Wait for complete AI response before sending (no streaming) |
| blockStreamingCoalesce | boolean | false | Combine streaming chunks into a single final message |
| mediaMaxMb | number | 10 | Maximum file size in MB for media URL references |
Enable or disable the Nextcloud Talk channel
Full URL of your Nextcloud server (e.g., https://nextcloud.example.com)
Shared secret used for webhook signature validation (must match the OCC install secret)
Path to a file containing the shared secret (alternative to inline botSecret)
Nextcloud username for API calls (used for room-type detection)
Password for the API user account
Path to a file containing the API password (alternative to inline apiPassword)
DM access policy: 'pairing' (verification code), 'open' (any user), or 'disabled' (no DMs)
Nextcloud user IDs allowed to DM the bot (use ["*"] for open access)
Room access policy: 'allowlist' (moderator-enabled rooms only)
Port for the built-in webhook HTTP server
Interface to bind the webhook server to
URL path for the webhook endpoint
Full public URL for the webhook endpoint (required behind reverse proxy)
Maximum previous messages included as context for room conversations
Maximum previous messages included as context for DM conversations
Maximum characters per message chunk
Text splitting mode: 'length' (character limit) or 'newline' (paragraph boundaries)
Wait for complete AI response before sending (no streaming)
Combine streaming chunks into a single final message
Maximum file size in MB for media URL references
Nextcloud Talk Frequently Asked Questions
Nextcloud Talk Troubleshooting
The webhook URL is unreachable, the bot is not enabled in the room, or the shared secret does not match.
The shared secret in openclaw.json does not match the one used during bot installation.
The bot has not been enabled by a moderator in the target room, or requireMention is true and the bot was not @mentioned.
API credentials (apiUser, apiPassword) are not configured.
The configured webhook port is already in use or the host binding is invalid.