docs/book/src/channels/nextcloud-talk.md
Nextcloud Talk integration via the Talk Bot webhook protocol. Self-hosted, federated, and E2E-capable — another sovereign-communication option alongside Matrix and Mattermost.
POST /nextcloud-talk on the gatewayzeroclaw-bot) and generate a bot webhook URL[channels.nextcloud_talk]
enabled = true
server_url = "https://cloud.example.com"
bot_name = "zeroclaw-bot" # the display name of the bot in Talk
webhook_secret = "..." # shared secret from Talk admin UI
username = "..." # bot's Nextcloud login for outbound API
password = "..." # app password (not the account password)
allowed_rooms = ["ROOM-TOKEN-1"] # tokens from webhook payloads
allowed_users = ["*"] # actor IDs; "*" = allow all (use for first-time test only)
Environment override: ZEROCLAW_NEXTCLOUD_TALK_WEBHOOK_SECRET takes precedence over the config value. Useful for rotating secrets without editing the config.
Full field reference: Config.
zeroclaw daemon
Configure your Talk bot's webhook URL to point at:
https://<your-public-url>/nextcloud-talk
Local development? Configure [tunnel] in your config (ngrok, Cloudflare, or Tailscale) and the gateway exposes itself on startup — see Operations → Network deployment.
When webhook_secret is set, inbound requests must carry:
X-Nextcloud-Talk-Random headerX-Nextcloud-Talk-Signature headerZeroClaw verifies:
expected_sig = hex(hmac_sha256(secret, random + raw_request_body))
if X-Nextcloud-Talk-Signature != expected_sig:
return 401
Without a secret, no verification — don't expose this endpoint publicly in that mode.
actorType = "bots") are ignored — prevents feedback loopstoken in the webhook payloadallowed_users = ["*"] for first-time testingallowed_users to explicit actor IDs (e.g. ["alice", "bob"])404 Nextcloud Talk not configured — [channels.nextcloud_talk] section missing or enabled = false401 Invalid signature — secret mismatch, wrong random header, or body-signing bug. Check the raw body is being signed (not the parsed JSON)200 — event was filtered. Check logs for "actorType = bots" or "user not in allowed_users"Nextcloud Talk does not support message edits via the Bot API, so streaming draft updates are disabled for this channel. Replies are sent on stream completion only.