41 lines
1.7 KiB
Markdown
41 lines
1.7 KiB
Markdown
# whatsapp — WhatsApp Reminder System
|
|
|
|
Sends personalized WhatsApp reminders to users who haven't submitted their bets before the deadline. Uses OpenAI GPT-3.5 to generate natural-language reminder messages.
|
|
|
|
## Classes
|
|
|
|
### WhatsAppNotifier
|
|
Orchestrates the reminder workflow:
|
|
|
|
1. Queries DB for upcoming reminders at 2 checkpoints: **24 hours** and **2 hours** before deadline
|
|
2. For each reminder, generates a message via `OpenAIConnector`
|
|
3. Sends via WhatsApp API (HTTP POST to configurable host:port)
|
|
4. Marks sent reminders in DB to avoid duplicates
|
|
|
|
Requires env vars: `TLW_WHATSAPP_HOST`, `TLW_WHATSAPP_PORT`, `TLW_WHATSAPP_API_KEY`.
|
|
|
|
### OpenAIConnector
|
|
Caches and generates reminder text via OpenAI Chat Completions API (model `gpt-3.5-turbo-0125`).
|
|
|
|
Prompt structure:
|
|
- **System prompt** (German): "Generate a message reminding someone to submit missing tips. Must sound like a friend. Use correct singular/plural."
|
|
- **User input**: JSON with league name, matchday name, delivery day, time
|
|
- **Output template** has 2 variants — 24h deadline uses a friendly intro, 2h deadline emphasizes urgency
|
|
|
|
Message format:
|
|
```
|
|
Hey <username>,
|
|
<AI-generated intro>
|
|
Bitte gib die fehlenden Tipps bis <today/morgen> um <HH:MM> ab.
|
|
Du kannst deine Tipps wie immer unter https://tippliga-wuerzburg.de/app.php/football/bet abgeben.
|
|
Viele Grüße
|
|
Die Tippliga Admins
|
|
```
|
|
|
|
Messages are cached per (league + matchday + delivery) key to avoid repeated API calls.
|
|
|
|
### WhatsAppReminder
|
|
Java `record` with fields: season, league, leagueName, matchday, matchdayName, deliveryDate, todayTomorrow, time, remainingHours, userId, username, phoneNumber, missingBets.
|
|
|
|
Maps directly to the SQL query result from `TippligaSQLConnector.getNextWhatsAppReminders()`.
|