# πŸ”§ РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π·Π°Π²ΠΈΡΡˆΠΈΡ… n8n workflow ## πŸ› ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Workflow Π² n8n зависаСт ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π΄Π°ΠΆΠ΅ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс. Redis Trigger node тСряСт соСдинСниС ΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ автоматичСски. ## βœ… Π§Ρ‚ΠΎ сдСлано ### 1. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° пСрСзапуска workflow **Π€Π°ΠΉΠ»:** `backend/app/services/n8n_service.py` **ИзмСнСния:** - βœ… Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½Ρ‹ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρ‹ с 10 Π΄ΠΎ 30 сСкунд (ΠΎΠ±Ρ‰ΠΈΠΉ) ΠΈ 15 сСкунд (для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ) - βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ΠΎΠ² ΠΏΡ€ΠΈ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ (ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄Π°ΠΆΠ΅ Ссли дСактивация зависла) - βœ… Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½Π° Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ (3 сСкунды вмСсто 2) - βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° послС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ trigger node - βœ… Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ошибок с ΠΏΠΎΠ»Π½Ρ‹ΠΌ traceback ### 2. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ пСрСзапуск Π² Ρ„ΠΎΠ½Π΅ **Π€Π°ΠΉΠ»:** `backend/app/api/claims.py` **ИзмСнСния:** - βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ пСрСзапуска (Π΄ΠΎ 2 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ) - βœ… Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписчиков послС пСрСзапуска - βœ… Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ процСсса пСрСзапуска ## πŸš€ Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 1. **ΠŸΡ€ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСния Π² Redis:** - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ количСство подписчиков - Если подписчиков Π½Π΅Ρ‚ β†’ сообщСниС сохраняСтся Π² Π±ΡƒΡ„Π΅Ρ€ - ЗапускаСтся фоновая Π·Π°Π΄Π°Ρ‡Π° пСрСзапуска workflow 2. **ΠŸΡ€ΠΎΡ†Π΅ΡΡ пСрСзапуска:** - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ Redis lock (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ частых пСрСзапусков) - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ΡΡ статус workflow Ρ‡Π΅Ρ€Π΅Π· API - ДСактивируСтся workflow (Π΄Π°ΠΆΠ΅ Ссли завис) - Π–Π΄Ρ‘Ρ‚ 3 сСкунды - АктивируСт workflow - Π–Π΄Ρ‘Ρ‚ 2 сСкунды для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ подписчиков - ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅Ρ‚ сообщСния ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€Π° 3. **ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ:** - Если пСрвая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π½Π΅ ΡƒΠ΄Π°Π»Π°ΡΡŒ β†’ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ Ρ‡Π΅Ρ€Π΅Π· 5 сСкунд - ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ 2 ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ## πŸ“Š ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписчиков Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ: ```bash redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" PUBSUB NUMSUB "ticket_form:description" ``` ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° статуса workflow: ```bash curl -H "X-N8N-API-KEY: ..." "https://n8n.clientright.pro/api/v1/workflows/b4K4u851b4JFivyD" | jq '.active' ``` ### Π›ΠΎΠ³ΠΈ backend: ```bash tail -f /var/www/fastuser/data/www/crm.clientright.ru/ticket_form/backend.log | grep -i "workflow\|redis\|subscriber" ``` ## πŸ› οΈ Если ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° повторится ### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 1: ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ Ρ‡Π΅Ρ€Π΅Π· API (автоматичСски) Код Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ автоматичСски пытаСтся ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ workflow ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 2: Π ΡƒΡ‡Π½ΠΎΠΉ пСрСзапуск Ρ‡Π΅Ρ€Π΅Π· API ```bash # Π”Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ curl -X POST -H "X-N8N-API-KEY: ..." \ "https://n8n.clientright.pro/api/v1/workflows/b4K4u851b4JFivyD/deactivate" # ΠŸΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ 5 сСкунд sleep 5 # ΠΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ curl -X POST -H "X-N8N-API-KEY: ..." \ "https://n8n.clientright.pro/api/v1/workflows/b4K4u851b4JFivyD/activate" ``` ### Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ 3: ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ n8n (ΠΊΡ€Π°ΠΉΠ½ΠΈΠΉ случай) Если workflow всё Π΅Ρ‰Ρ‘ завис, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ пСрСзапуск самого n8n: ```bash # Если n8n Π² Docker docker restart # Если n8n ΠΊΠ°ΠΊ систСмный сСрвис systemctl restart n8n ``` ## πŸ” Диагностика ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‡Ρ‚ΠΎ workflow Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ Π½ΠΎ Π½Π΅ ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚: ```bash # 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ статус workflow curl -H "X-N8N-API-KEY: ..." \ "https://n8n.clientright.pro/api/v1/workflows/b4K4u851b4JFivyD" | jq '{active: .active, updatedAt: .updatedAt}' # 2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подписчиков redis-cli -h crm.clientright.ru -p 6379 -a "..." PUBSUB NUMSUB "ticket_form:description" # 3. Если active=true Π½ΠΎ подписчиков 0 β†’ workflow завис ``` ### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Redis соСдинСний: ```bash redis-cli -h crm.clientright.ru -p 6379 -a "..." CLIENT LIST | grep "sub=1" ``` ## πŸ“ Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ 1. **ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³:** - ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ автоматичСский ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ подписчиков (cron ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 5 ΠΌΠΈΠ½ΡƒΡ‚) - АлСрты ΠΏΡ€ΠΈ отсутствии подписчиков Π±ΠΎΠ»Π΅Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚ 2. **АвтоматичСский пСрСзапуск n8n:** - ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ health check для n8n - АвтоматичСский пСрСзапуск ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ 3. **Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅:** - Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² n8n - ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π»ΠΎΠ³ΠΎΠ² Π½Π° ошибки Redis соСдинСний 4. **Настройка Redis:** - Π£Π²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ `tcp-keepalive` для ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ соСдинСний - ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ `timeout` для Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… соСдинСний ## πŸ”— БвязанныС Ρ„Π°ΠΉΠ»Ρ‹ - `backend/app/services/n8n_service.py` - Π»ΠΎΠ³ΠΈΠΊΠ° пСрСзапуска workflow - `backend/app/api/claims.py` - ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписчиков ΠΈ запуск пСрСзапуска - `docs/N8N_REDIS_TRIGGER_TROUBLESHOOTING.md` - общая диагностика Redis Trigger - `docs/N8N_MEMORY_ISSUES.md` - ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π² n8n