Files
nc_bot_webhooks/INSTALL.md
T
kyle 28d0187760 feat: add command to toggle debug mode
- Add lib/Command/DebugToggle.php to enable/disable debug endpoint via CLI
- Update lib/Controller/WebhookController.php to check debug status
- Add support for base64 attachments in lib/Service/TalkService.php
- Bump version in appinfo/info.xml to 1.1.0
- Update INSTALL.md and README.md documentation
2026-06-12 17:42:36 -07:00

5.5 KiB

NCdiscordhook — Installation Guide

Prerequisites

  • Nextcloud 28+ with the Talk app enabled
  • PHP 8.1+
  • Access to the Nextcloud server (SSH or direct file access)

Step 1: Enable the talk-bot user

The app posts messages as a dedicated bot user using the Talk Chat API (Basic auth). You must create this user and generate an app password.

Create the bot user (via occ):

cd /path/to/nextcloud
php occ user:add --password-from-env talk-bot
# You'll be prompted to set a password interactively, or:
export OC_PASS="your-bot-password-here"
php occ user:add --password-from-env talk-bot

Make the bot user an admin

The bot must have admin privileges to list all Talk rooms. Grant admin access:

  1. Go to Settings → Users
  2. Find talk-bot and click it
  3. Check Admin under "Settings"
  4. Save

Generate an app password for the bot:

  1. Log in to Nextcloud as admin
  2. Go to Settings → talk-bot → Devices & sessions
  3. Click Add device and give it a name (e.g., "NCdiscordhook")
  4. Copy the generated device password — you'll need this in Step 3

Step 2: Install the app

  1. ZIP only the ncdiscordhook directory (not the parent folder):
cd /path/to/ncdiscordhook
zip -r ../ncdiscdhook.zip .
  1. Upload via web UI:
    • Go to Apps → Apps management (or Administration → Apps)
    • Click Upload app (or Download and enable → upload the ZIP)
    • Select ncdiscdhook.zip
    • The app will install and enable automatically

Option B: From the command line

cd /path/to/nextcloud/apps
git clone https://github.com/Mr-Newlove/nc_bot_webhooks.git
# or copy the directory manually:
# cp -r /path/to/ncdiscordhook /path/to/nextcloud/apps/ncdiscordhook

Enable the app:

cd /path/to/nextcloud
php occ app:enable ncdiscordhook

Step 3: Configure the app

  1. Log in to Nextcloud as admin
  2. Go to Settings → Admin → NCdiscordhook
  3. Bot App Password — Paste the device password you generated in Step 1
  4. Default Sender Name — Set the name that appears as the message sender (default: "Webhook Bot")
  5. Image Retention — Set how many days to keep uploaded images (default: 90)
  6. Room Selection — Click Fetch Rooms to list available Talk rooms
  7. Check the rooms you want to accept webhooks for
  8. For each room, click + Generate Auth Token to create a webhook URL
  9. Click Save Configuration

Step 4: Set up the webhook URL

  1. For Discord: go to Channel Settings → Integrations → Webhooks, create a new webhook, and set the Webhook URL to:
https://your-nextcloud-server/apps/ncdiscordhook/discord-webhook/<room-token>/<auth-token>

Replace <room-token> and <auth-token> with the values shown in the Nextcloud admin settings for the selected room.

  1. Save the webhook in Discord

Step 5: Verify

Send a test message through the Discord webhook. You should see it appear in the corresponding Nextcloud Talk room with the configured sender name.

Test with curl:

curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"content":"Test message from NCdiscordhook","username":"CI Bot"}' \
  https://your-nextcloud-server/apps/ncdiscordhook/discord-webhook/<room-token>/<auth-token>

Apprise webhook

For Apprise integrations, use the /apprise-webhook/ endpoint with the same room-token and auth-token:

https://your-nextcloud-server/apps/ncdiscordhook/apprise-webhook/<room-token>/notify/<auth-token>

Note: the notify segment is required — Apprise's apprises:// URL scheme inserts it in the path.

Apprise sends a different JSON format (title, body, type, attachments) — the app maps these to the same Talk message format.

Troubleshooting

  • "talk-bot user not found" — The talk-bot user doesn't exist. Re-run Step 1.
  • "Bot password not configured" — You haven't entered the bot password in the admin settings, or it was cleared. Re-enter it in Step 3.
  • Messages not appearing — Check the Nextcloud log (data/nextcloud.log or Settings → Admin → Logging) for errors from the ncdiscordhook app.
  • Image upload fails — Verify the bot user has file storage quota and the NCdiscordhook-images folder can be created.

Security Notes

  • Each room has its own auth token — treat them like passwords
  • The webhook endpoint is public (no auth required) but validates the auth token from the URL path
  • Admin settings endpoints (/save-config, /rooms) require admin login
  • Images are stored in the bot user's files and purged after the retention period
  • Debug endpoint disabled by default — see below
  • Known limitations (to be fixed in a future release):
    • Auth tokens generated from the settings UI use client-side generation; for higher security, regenerate them via the server API
    • The webhook endpoint has no rate limiting — consider placing it behind a reverse proxy rate limiter if exposing to untrusted sources

Debug endpoint

The /apps/ncdiscordhook/debug endpoint exposes internal configuration, database schema, and bot credentials. It is disabled by default.

# Check status
php occ ncdiscordhook:debug:status

# Enable (WARNING: exposes sensitive data)
php occ ncdiscordhook:debug:enable

# Disable (default)
php occ ncdiscordhook:debug:disable

# Toggle current state
php occ ncdiscordhook:debug:toggle

After troubleshooting, disable it immediately:

php occ ncdiscordhook:debug:disable