105 lines
2.7 KiB
Markdown
105 lines
2.7 KiB
Markdown
|
|
# Overseerr Webhook Proxy
|
||
|
|
|
||
|
|
A lightweight Spring Boot proxy that receives [Overseerr](https://overseerr.dev/) /
|
||
|
|
[Jellyseerr](https://github.com/Fallenbagel/jellyseerr) webhook notifications and
|
||
|
|
forwards them to **multiple Discord servers**, with per-notification-type routing.
|
||
|
|
|
||
|
|
## How it works
|
||
|
|
|
||
|
|
```
|
||
|
|
Overseerr ──POST /webhook──► Proxy ──► Discord Server A (Admins)
|
||
|
|
──► Discord Server B (General)
|
||
|
|
──► Discord Server C (Film fans)
|
||
|
|
```
|
||
|
|
|
||
|
|
Each Discord embed is colour-coded by notification type and includes the media
|
||
|
|
title, requester name, and media type.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Quick start
|
||
|
|
|
||
|
|
### 1. Clone & configure
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git clone https://github.com/yourname/overseerr-webhook-proxy
|
||
|
|
cd overseerr-webhook-proxy
|
||
|
|
mkdir config
|
||
|
|
cp src/main/resources/application.yml config/application.yml
|
||
|
|
```
|
||
|
|
|
||
|
|
Edit `config/application.yml` and replace the placeholder webhook URLs with your
|
||
|
|
real Discord webhook URLs.
|
||
|
|
|
||
|
|
### 2. Run with Docker Compose
|
||
|
|
|
||
|
|
```bash
|
||
|
|
docker compose up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Configure Overseerr
|
||
|
|
|
||
|
|
In Overseerr → **Settings → Notifications → Webhook**:
|
||
|
|
|
||
|
|
| Field | Value |
|
||
|
|
|-------|-------|
|
||
|
|
| Webhook URL | `http://<your-server-ip>:8080/webhook` |
|
||
|
|
| JSON payload | *(leave as default)* |
|
||
|
|
|
||
|
|
Click **Test** to send a test notification and verify it arrives in Discord.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Configuration reference (`application.yml`)
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
proxy:
|
||
|
|
routes:
|
||
|
|
MEDIA_APPROVED:
|
||
|
|
- https://discord.com/api/webhooks/ID1/TOKEN1 # admins
|
||
|
|
- https://discord.com/api/webhooks/ID2/TOKEN2 # general
|
||
|
|
|
||
|
|
MEDIA_AVAILABLE:
|
||
|
|
- https://discord.com/api/webhooks/ID2/TOKEN2 # general only
|
||
|
|
|
||
|
|
MEDIA_FAILED:
|
||
|
|
- https://discord.com/api/webhooks/ID1/TOKEN1 # admins only
|
||
|
|
|
||
|
|
default: # catch-all
|
||
|
|
- https://discord.com/api/webhooks/ID1/TOKEN1
|
||
|
|
```
|
||
|
|
|
||
|
|
### Supported notification types
|
||
|
|
|
||
|
|
| Type | Description |
|
||
|
|
|------|-------------|
|
||
|
|
| `MEDIA_PENDING` | New request submitted |
|
||
|
|
| `MEDIA_APPROVED` | Request approved |
|
||
|
|
| `MEDIA_DECLINED` | Request declined |
|
||
|
|
| `MEDIA_AVAILABLE` | Media is now available |
|
||
|
|
| `MEDIA_FAILED` | Download/processing failed |
|
||
|
|
| `TEST_NOTIFICATION` | Test from Overseerr settings |
|
||
|
|
| `default` | Catches any type not listed above |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Building without Docker
|
||
|
|
|
||
|
|
Requirements: Java 21, Maven 3.9+
|
||
|
|
|
||
|
|
```bash
|
||
|
|
mvn package -DskipTests
|
||
|
|
java -jar target/overseerr-webhook-proxy-1.0.0.jar \
|
||
|
|
--spring.config.additional-location=file:./config/application.yml
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Endpoints
|
||
|
|
|
||
|
|
| Method | Path | Description |
|
||
|
|
|--------|------|-------------|
|
||
|
|
| `POST` | `/webhook` | Receives Overseerr notifications |
|
||
|
|
| `GET` | `/health` | Simple liveness check |
|
||
|
|
| `GET` | `/actuator/health` | Spring Boot Actuator health |
|