Implement email alert system with WhatsApp notifications

- Added alerts processing logic in src/alerts.py to analyze threads and send WhatsApp alerts based on configured time frames.
- Created FastAPI application in src/app.py to manage threads, display configurations, and trigger alert processing.
- Developed database models and utility functions in src/database.py for managing threads and messages.
- Integrated Twilio API for sending WhatsApp messages in src/whatsapp_sender.py.
- Implemented Zoho email client in src/zoho_client.py to fetch emails and check for replies.
- Added configuration management for email settings and alert parameters.
- Established auto-processing loop for periodic email syncing and alert generation.
This commit is contained in:
bolade
2025-08-11 17:34:35 +01:00
parent ca7df9d598
commit d553d6f31e
13 changed files with 879 additions and 150 deletions
+25
View File
@@ -4,6 +4,29 @@
<div class="col">
<h2>Threads{% if account %} for {{ account }}{% endif %}</h2>
<p class="muted">Latest updated threads. Click an ID to view details and AI analysis.</p>
{% if status %}
<div class="muted" style="margin-top:6px;">
{% if status.sync_in_progress %}
<span class="badge brand">Syncing…</span>
{% else %}
{% if status.last_sync_status == 'ok' %}
<span class="badge success">Last sync OK</span>
{% elif status.last_sync_status == 'error' %}
<span class="badge warn">Last sync error</span>
{% else %}
<span class="badge">Idle</span>
{% endif %}
{% endif %}
<span style="margin-left:8px;">Last Sync: {{ status.last_sync_at or 'never' }}</span>
<span style="margin-left:8px;">Items: {{ status.last_sync_count }}</span>
{% if status.last_sync_error %}
<div class="muted">Error: {{ status.last_sync_error }}</div>
{% endif %}
{% if status.auto_process %}
<div class="muted">Auto process enabled (every {{ status.interval }}m)</div>
{% endif %}
</div>
{% endif %}
</div>
</div>
@@ -13,6 +36,7 @@
<tr>
<th>ID</th>
<th>Subject</th>
<th>AI Summary</th>
<th>Account</th>
<th>Msgs</th>
<th>Requires Reply</th>
@@ -24,6 +48,7 @@
<tr>
<td><a href="/thread/{{ t.id }}">{{ t.id }}</a></td>
<td>{{ t.subject }}</td>
<td class="muted">{{ t.ai_summary or '' }}</td>
<td><span class="badge">{{ t.account_email }}</span></td>
<td><span class="badge brand">{{ t.messages|length }}</span></td>
<td>