📢 Powiadomienia Slack
Co bot Czarek wysyła w którym trybie + jakie guziki dostaniesz w kanale #bioshi-products.
Typy eventów
🚀 Run start
Nowy wątek otwarty — pierwsze powiadomienie.
✅ Step done
Reply w wątku z podsumowaniem kroku.
🛂 Manual gate
Card z guzikami: ✅ Akceptuj / ❌ Odrzuć / 🛠 Popraw w Sheets.
🎉 Run done
Reply finałowy z linkami do archiwum + ZIP.
🦉 Stróż finding
Card od Czarka — nowe findings + guzik 'Odpal pipeline'.
👍 Approval ack
Reaction na klik — pipeline kontynuuje albo zatrzymuje.
🌱 Nowe produkty → tryb
krok 1
🚀
start
zawsze
Run start — Bot otwiera wątek dla nowego runa z liczbą EAN-ów i estymacją czasu.
slack_bot_client.run_start()
krok 2
✅
step0_konsolidacja
zawsze
Step done — Konsolidacja XML-i Merkury/BioPlanet/EkoWital zakończona — N produktów do dalej.
slack_bot_client.step_done()
krok 3
✅
step1_klasyfikacja
zawsze
Step done — Klasyfikacja Gemini gotowa — breakdown NORMALNY/SUPLEMENTY/WARZYWA/KREATOR.
slack_bot_client.step_done()
krok 4
✅
step2_zbierz_klasyfikacje
opcjonalne
Step done — Konsolidacja klasyfikacji do CSV per klasa.
slack_bot_client.step_done()
krok 5
✅
step3_opisy
zawsze
Step done — Generowanie opisów pol zakończone — N opisów × 4 prompty.
slack_bot_client.step_done()
krok 6
🛂
step5_filtrowanie
zawsze
Manual gate — Card z guzikami: ✅ Akceptuj filtr / 🛠 Popraw w Sheets / ❌ Anuluj.
slack_bot_client.manual_gate()
krok 7
✅
step6_score
zawsze
Step done — Bioshi Score liczy — N produktów × gemini-2.5-pro multimodal.
slack_bot_client.step_done()
krok 8
✅
step7_translate
zawsze
Step done — Tłumaczenia 23 langs gotowe + auto-widget per produkt z grade.
slack_bot_client.step_done()
krok 9
🛂
step9_weryfikacja
zawsze
Manual gate — Card z guzikami: ✅ Akceptuj weryfikację / 🛠 Popraw w Sheets / Skip (low quality only).
slack_bot_client.manual_gate()
krok 10
🛂
step10_upload
zawsze
Manual gate — Card finałowa: ✅ Wgraj do IdoSell / 🚫 Tylko archiwum.
slack_bot_client.manual_gate()
krok 11
🎉
done
zawsze
Run done — Reply finałowy: stats + Drive folder URL + ZIP URL.
slack_bot_client.run_done()
🌍 Tłumaczenia → tryb
krok 1
🚀
start
zawsze
Run start — Bot otwiera wątek: N EAN-ów × M langów = ~K cells.
slack_bot_client.run_start()
krok 2
✅
fetch_descriptions
zawsze
Step done — Pobranie polskich opisów z IdoSell (descriptions API) — N produktów.
slack_bot_client.step_done()
krok 3
✅
submit_batch
zawsze
Step done — Vertex AI Batch Prediction submitted — job ID + ETA.
slack_bot_client.step_done()
krok 4
✅
batch_done
zawsze
Step done — Batch SUCCEEDED — wyniki pobrane, K tłumaczeń × 23 langs.
slack_bot_client.step_done()
krok 5
✅
widget_assembly
opcjonalne
Step done — Auto-widget injection dla produktów z grade A-E.
slack_bot_client.step_done()
krok 6
🛂
weryfikacja
opcjonalne
Manual gate — (opcjonalnie) Card z low-score translations do review.
slack_bot_client.manual_gate()
krok 7
🛂
upload_idosell
zawsze
Manual gate — Card: ✅ Wgraj na IdoSell (automatycznie kończy run).
slack_bot_client.manual_gate()
krok 8
🎉
done
zawsze
Run done — Finał: uploaded/failed stats + CSV link.
slack_bot_client.run_done()
🏷️ Bioshi Score → tryb
krok 1
🚀
start
zawsze
Run start — Bot otwiera wątek: N produktów × multimodal Gemini Pro.
slack_bot_client.run_start()
krok 2
✅
batch_progress
opcjonalne
Step done — Progress per batch=5 (15s delay) — N/M produktów.
slack_bot_client.step_done()
krok 3
✅
extraction_done
zawsze
Step done — 14 pól wyciągnięte per produkt → analyzer JSON gotowy.
slack_bot_client.step_done()
krok 4
✅
scoring
zawsze
Step done — calculate_bioshi_score() — grade A/B/C/D/E breakdown.
slack_bot_client.step_done()
krok 5
✅
export
zawsze
Step done — products.json + products-data.js wygenerowane.
slack_bot_client.step_done()
krok 6
🛂
upload_idosell
opcjonalne
Manual gate — (opcjonalnie) Card: wgrać grade jako parameter_id=36890.
slack_bot_client.manual_gate()
krok 7
🎉
done
zawsze
Run done — Finał: histogram A-E + Drive + JS embed URL.
slack_bot_client.run_done()
🦉 Stróż Czarek → tryb
krok 1
🦉
scan_done
opcjonalne
Stróż finding — Po skanie z N>threshold findings — passive card w kanale (NIE w wątku).
slack_bot_client.stroz_finding()
krok 2
🦉
alert_threshold
opcjonalne
Stróż finding — Critical findings ≥ alert_threshold — DM do Michała (poza quiet hours).
slack_bot_client.stroz_finding()
Status bota
VM
bioshi-bot @ 35.253.102.203
us-central1-a · e2-micro · systemd
Połączenie
Slack Socket Mode
WebSocket outbound (no public ingress)
Mapping run → thread
Firestore slack_runs/
1 wątek per run_id, replies w tej samej karcie
Quiet hours
22:00 – 07:00
Bez DM-ów Michał poza godzinami pracy (chyba że threshold ×3)