Обновлен .sw после внедрения WebSocket reply bridge

Этот коммит содержится в:
Виктор
2026-05-08 20:19:10 +09:00
родитель 49f502f84c
Коммит be371d8e70
+33 -48
Просмотреть файл
@@ -12,7 +12,7 @@ Never store secrets in this file: no Telegram tokens, proxy passwords, API keys,
## Product ## Product
Self-hosted live chat similar to Jivo. Website widget sends visitor messages to Telegram operators. Operators reply in Telegram, and replies will later return to the website widget. Self-hosted live chat similar to Jivo. Website widget sends visitor messages to Telegram operators. Operators reply in Telegram, and replies return back into the website widget through WebSocket.
## Deployment ## Deployment
@@ -60,16 +60,6 @@ telegram.proxy.username
telegram.proxy.password telegram.proxy.password
``` ```
Diagnostics:
```bash
sqlite3 /opt/ws-chat/data/chat.sqlite "select key, value from settings where key like 'telegram.proxy.%';"
sqlite3 /opt/ws-chat/data/chat.sqlite "select key, length(value) as len from settings where key='telegram.bot_token';"
find /opt/ws-chat/source -name "chat.sqlite"
```
If a DB exists inside `/opt/ws-chat/source/backend/data/`, that was a wrong fallback DB from older code.
## Current endpoints ## Current endpoints
```text ```text
@@ -85,31 +75,39 @@ POST /api/widget/message
GET /ws GET /ws
``` ```
Expected `/health` includes: ## WebSocket architecture
Widget now opens:
```text ```text
ok=true /ws?siteId=<siteId>&visitorId=<visitorId>
service=wschat-backend
env=production
dbPath=/opt/ws-chat/data/chat.sqlite
telegram.enabled=true
telegram.running=true
telegram.error=
telegram.proxyEnabled=true
telegram.hasBot=true
``` ```
## Admin panel Backend stores WebSocket clients by:
Implemented: ```text
siteId:visitorId
```
- dashboard stats/messages; Telegram replies are delivered from:
- Telegram/SOCKS5 settings form;
- dirty-state protection so refresh does not wipe settings while typing;
- token/password masks;
- save/test/reset actions.
Important: admin loads Telegram settings from `GET /api/admin/telegram/settings`, which reads SQLite. ```text
telegram.js -> operatorMessageNotifier -> server.js broadcastToVisitor()
```
Payload format:
```json
{
"type": "operator_message",
"conversationId": "conv_xxx",
"message": {
"id": "msg_xxx",
"direction": "operator",
"body": "text"
}
}
```
## Telegram bridge ## Telegram bridge
@@ -134,11 +132,8 @@ Implemented:
- `/start` registers operator; - `/start` registers operator;
- `/status` replies with bridge state; - `/status` replies with bridge state;
- visitor messages go to active Telegram operators; - visitor messages go to active Telegram operators;
- Telegram reply can be saved as operator message when replying to WSChat notification. - Telegram replies are saved as operator messages;
- Telegram replies are delivered back to widget through WebSocket.
Not finished yet:
- delivery of Telegram replies back to widget via WebSocket.
Important proxy fix: Important proxy fix:
@@ -185,6 +180,8 @@ Only one polling instance may run per Telegram bot token.
4b46aabc8210158f97c3c6e9274b8f703f7a8aa2 - Telegram proxy changed to socks5h 4b46aabc8210158f97c3c6e9274b8f703f7a8aa2 - Telegram proxy changed to socks5h
6f14353cd403f351c89e4274d189808951dcf940 - production DB fallback fixed 6f14353cd403f351c89e4274d189808951dcf940 - production DB fallback fixed
be004fd14ab16e3b1262980fe044356d2efbe806 - health endpoint includes dbPath be004fd14ab16e3b1262980fe044356d2efbe806 - health endpoint includes dbPath
ec2eeeea66047dcd982a4c0258d1338314e25c29 - WebSocket delivery from Telegram replies implemented
49f502f84c8e2d2979481d71010908457fb0ce84 - widget connected to WebSocket backend
``` ```
## Deployment commands ## Deployment commands
@@ -199,18 +196,6 @@ npm install
pm2 restart wschat-backend --update-env pm2 restart wschat-backend --update-env
``` ```
Hard restart as single PM2 process:
```bash
pkill -f "/opt/ws-chat/source/backend/src/server.js" || true
pkill -f "node src/server.js" || true
pm2 delete wschat-backend || true
cd /opt/ws-chat/source/backend
npm install
pm2 start src/server.js --name wschat-backend --update-env
pm2 save
```
Frontend build/publish: Frontend build/publish:
```bash ```bash
@@ -236,10 +221,10 @@ Never edit global FastPanel/nginx configs from project scripts. Never bind proje
1. Kill duplicate Telegram polling process. 1. Kill duplicate Telegram polling process.
2. Start exactly one PM2 process `wschat-backend`. 2. Start exactly one PM2 process `wschat-backend`.
3. Confirm `/health`: correct `dbPath` and `telegram.running=true`. 3. Confirm `/health`: correct `dbPath`, `telegram.running=true`, and `wsClients` counter.
4. Send `/start` to the Telegram bot. 4. Send `/start` to the Telegram bot.
5. Send widget message and confirm it reaches Telegram. 5. Send widget message and confirm it reaches Telegram.
6. Implement Telegram reply delivery back to widget via WebSocket. 6. Reply in Telegram and confirm it instantly appears in widget.
7. Add admin bridge status/restart button. 7. Add admin bridge status/restart button.
8. Add admin operator list. 8. Add admin operator list.
9. Add admin auth. 9. Add admin auth.