Nincs leírás

MSemenovv 067bd5e113 Usuń 'ID' 3 hete
flowise-tools 59a6e501b4 Wielojęzykowość poprawna - system gotowy do głębszych testów i edge case 3 hete
public 69906c93f6 All tools working, ready for testing and multicurrency prep 3 hete
src 59a6e501b4 Wielojęzykowość poprawna - system gotowy do głębszych testów i edge case 3 hete
wp-plugins 59a6e501b4 Wielojęzykowość poprawna - system gotowy do głębszych testów i edge case 3 hete
.env.example 59a6e501b4 Wielojęzykowość poprawna - system gotowy do głębszych testów i edge case 3 hete
.gitignore f76eb2b75d Initial commit 4 hete
README.md f76eb2b75d Initial commit 4 hete
composer.json f76eb2b75d Initial commit 4 hete

README.md

EKSRelay

PHP relay pomiędzy Chatwoot, Flowise i WooCommerce. Odbiera webhooki z Chatwoot, przekazuje wiadomości do Flowise (LLM agent) i wystawia narzędzia (/tools/*) wywoływane przez agenta.

Architektura

Klient → CHATWOOT → EKSRELAY /webhooks/chatwoot → FLOWISE (Tool Agent)
                                                        ↓ narzędzia
                                              EKSRELAY /tools/*
                                                        ↓
                                                  WOOCOMMERCE REST API
                                                  WP AJAX (mu-plugin)
                    ← odpowiedź ← EKSRELAY ← FLOWISE

Uruchomienie lokalne

composer install
cp .env.example .env
# uzupełnij .env
php -S 0.0.0.0:8080 -t public

Zmienne środowiskowe (.env)

Zmienna Opis
CHATWOOT_BASE_URL URL instancji Chatwoot (np. https://eksupport.easyklima.com)
CHATWOOT_API_TOKEN Token API Chatwoot (Settings → Account → API)
CHATWOOT_ACCOUNT_ID ID konta Chatwoot (z URL /accounts/X/)
CHATWOOT_BOT_AGENT_ID ID agenta-bota (opcjonalne)
CHATWOOT_TICKET_LABEL Label oznaczający ręczną obsługę (domyślnie: ticket)
FLOWISE_PREDICT_URL URL endpointu /api/v1/prediction/<chatflow-id>
FLOWISE_API_KEY Klucz API Flowise (jeśli włączone)
WP_AJAX_URL URL WordPress AJAX: https://sklep.pl/wp-admin/admin-ajax.php
WOOCOMMERCE_BASE_URL URL sklepu WooCommerce
WOOCOMMERCE_CONSUMER_KEY Klucz WooCommerce REST API (ck_...)
WOOCOMMERCE_CONSUMER_SECRET Secret WooCommerce REST API (cs_...)
RELAY_SHARED_SECRET Losowy token chroniący endpointy /tools/*

Endpointy

Webhook

Endpoint Opis
POST /webhooks/chatwoot Odbiera eventy z Chatwoot. Przetwarza tylko message_created + incoming.

Tools (wywoływane przez Flowise)

Wszystkie wymagają nagłówka Authorization: Bearer <RELAY_SHARED_SECRET>.

Endpoint Źródło danych Opis
POST /tools/get_order_data WooCommerce REST API Zamówienie po numerze lub emailu
POST /tools/get_product_data WooCommerce REST API Produkt po ID, SKU lub frazie
POST /tools/get_shipping_data WooCommerce REST API Strefy i metody wysyłki
POST /tools/get_payment_methods WooCommerce REST API Dostępne metody płatności
POST /tools/get_car_data WP AJAX (mu-plugin) Dane auta z bazy pojazdów WP
POST /tools/get_product_compatibility WP AJAX (mu-plugin) Kompatybilność produktu z autem
POST /tools/new_ticket Chatwoot API Tworzy ticket, dodaje label ticket

Zależność: mu-plugin WordPress (aiac_chat_api.php)

Dwa endpointy — get_car_data i get_product_compatibilitynie korzystają z WooCommerce REST API, lecz bezpośrednio z WordPress AJAX udostępnianego przez mu-plugin aiac_chat_api.php.

Dlaczego

Dane o samochodach (marka/model/rok/silnik → typ gazu, ilość, adapter) i sprawdzanie kompatybilności produktu z autem są przechowywane w WordPressie jako:

  • custom post type: car
  • taxonomie: car_model, car_production_year
  • pola ACF: ac_gas_type, ac_gas_amount, adapters, itp.

Standardowe WooCommerce REST API nie wystawia tych danych — stąd konieczność korzystania z pluginu.

Aktualny stan (tymczasowy)

Plugin aiac_chat_api.php jest starym rozwiązaniem z poprzedniego chatbota. EKSRelay wywołuje jego publiczne AJAX endpointy:

GET https://easyklima.pl/wp-admin/admin-ajax.php?action=chat_get_car_data&car_brand=Toyota&...
GET https://easyklima.pl/wp-admin/admin-ajax.php?action=chat_get_product_compatibility&...

Endpointy są publiczne (nopriv) i nie wymagają uwierzytelnienia.

Docelowe rozwiązanie (TODO)

Plugin powinien zostać przebudowany tak, żeby:

  1. Wystawiał dedykowane REST API zamiast AJAX (register_rest_route/wp-json/aiac/v1/car-data)
  2. Wprowadzał uwierzytelnienie (shared secret lub wp-nonce)
  3. Był niezależny od starego kodu chatbota (usunięcie funkcji ticketów, Baselinker itp.)
  4. Ewentualnie obsługiwał też get_product_data z wariantami i wieloma walutami (WCML), czego obecne rozwiązanie przez WC REST API nie pokrywa w pełni

Do tego czasu EKSRelay korzysta ze starych endpointów AJAX — działa, ale jest kruche (bez auth, zależne od legacy kodu).

Flowise — konfiguracja

Narzędzia Flowise znajdują się w katalogu flowise-tools/. Każdy plik JSON to definicja do zaimportowania w Flowise UI (Tools → Add Tool → Import).

W chatflow Flowise należy ustawić zmienne:

Zmienna Wartość
relay_base URL EKSRelay (np. http://localhost:8080 lub produkcyjny)
relay_shared_secret Wartość RELAY_SHARED_SECRET z .env

Konfiguracja Chatwoot

W Chatwoot → Settings → Integrations → Webhooks → Add:

  • URL: https://<adres-relay>/webhooks/chatwoot
  • Zdarzenia: ✅ message_created

Wdrożenie

  1. Sklonuj repo na serwer (najlepiej ten sam co Flowise)
  2. composer install --no-dev
  3. Skonfiguruj .env z produkcyjnymi danymi
  4. Ustaw PHP-FPM + nginx lub uruchom php -S 0.0.0.0:8080 -t public
  5. Zaktualizuj relay_base w zmiennych Flowise na publiczny URL
  6. Dodaj webhook w Chatwoot