סקירת ארכיטקטורה

# סקירת ארכיטקטורה מסמך זה מספק סקירה טכנית מקיפה של ארכיטקטורת תוסף WordPress WooAI Chatbot Pro למפתחים בכירים. הוא מכסה את מבנה התוסף, תבניות עיצוב, זרימות נתונים ונקודות אינטגרציה. ## 1. ארכיטקטורה ברמה גבוהה WooAI Chatbot Pro עוקב אחר ארכיטקטורה מודולרית מבוססת רכיבים שמשתלבת עמוק עם WordPress ו-WooCommerce תוך שמירה על הפרדת אחריות נקייה.

+------------------------------------------------------------------+
|                        WordPress Environment                       |
+------------------------------------------------------------------+
|                                                                    |
|  +------------------------+    +-----------------------------+     |
|  |    Admin Dashboard     |    |      Frontend Widget        |     |
|  |  (React + Tailwind)    |    |   (React + TypeScript)      |     |
|  +----------+-------------+    +-------------+---------------+     |
|             |                                |                     |
|             v                                v                     |
|  +----------------------------------------------------------+     |
|  |                    REST API Layer                         |     |
|  |     /woo-ai/v1/chat | /woo-ai/v1/playbooks | /cart       |     |
|  +---------------------------+------------------------------+     |
|                              |                                     |
|  +---------------------------v------------------------------+     |
|  |                     Plugin Core                           |     |
|  |  +-------------+  +---------------+  +----------------+   |     |
|  |  |   Plugin    |  |     Core      |  |    Admin       |   |     |
|  |  |  (Singleton)|  |   (Loader)    |  |   (Settings)   |   |     |
|  |  +------+------+  +-------+-------+  +--------+-------+   |     |
|  |         |                 |                   |           |     |
|  +---------|-----------------|-------------------|-----------+     |
|            |                 |                   |                 |
|  +---------v-----------------v-------------------v-----------+     |
|  |                   Business Logic Layer                     |    |
|  |  +---------------+  +--------------+  +----------------+   |    |
|  |  | AIOrchestrator|  |   Playbook   |  |    Analytics   |   |    |
|  |  |  (Singleton)  |  |    Engine    |  |    Manager     |   |    |
|  |  +-------+-------+  +------+-------+  +--------+-------+   |    |
|  |          |                 |                   |           |    |
|  +----------|-----------------|-------------------|-----------+    |
|             |                 |                   |                |
|  +----------v-----------------v-------------------v----------+     |
|  |                    Data Access Layer                       |    |
|  |  +---------------+  +--------------+  +----------------+   |    |
|  |  |   Supabase    |  |  WordPress   |  |  WooCommerce   |   |    |
|  |  |    Client     |  |    DB/CPT    |  |   Integration  |   |    |
|  |  +---------------+  +--------------+  +----------------+   |    |
|  +------------------------------------------------------------+    |
|                                                                    |
+------------------------------------------------------------------+
|                     External Services                              |
|  +---------------+  +--------------+  +----------------+           |
|  |    OpenAI     |  |    Gemini    |  |    Claude      |           |
|  |     API       |  |     API      |  |     API        |           |
|  +---------------+  +--------------+  +----------------+           |
+------------------------------------------------------------------+

### רכיבים עיקריים | רכיב | אחריות | |———–|—————-| | **Plugin** | Bootstrap, רישום hooks, אתחול תלויות | | **AIOrchestrator** | ניהול AI רב-ספקי עם לוגיקת fallback | | **MessageHandler** | עיבוד הודעות צ'אט, הרצת כלים | | **PlaybookEngine** | אוטומציה של זרימות שיחה | | **Widget** | עיבוד ממשק צ'אט frontend | | **RestChat** | נקודות קצה REST API לפעולות צ'אט | ## 2. מבנה תיקיות

woo-ai-chatbot-pro/
├── woo-ai-chatbot-pro.php      # Plugin entry point, constants, bootstrap
├── composer.json               # PHP dependencies (Guzzle, Monolog, OpenAI)
├── package.json                # JS dependencies (React, Radix, Tailwind)
├── webpack.config.js           # Build configuration
├── tailwind.config.js          # Tailwind CSS configuration
│
├── includes/                   # PHP source code
│   ├── class-plugin.php        # Main Plugin singleton
│   ├── class-autoloader.php    # PSR-4 autoloader for dual namespaces
│   ├── class-activator.php     # Activation hooks
│   ├── class-deactivator.php   # Deactivation hooks
│   │
│   ├── Core/                   # Core infrastructure
│   │   ├── class-loader.php    # WordPress hook management (Observer pattern)
│   │   ├── class-logger.php    # Centralized logging
│   │   ├── class-database.php  # Database operations
│   │   ├── class-i18n.php      # Internationalization
│   │   └── class-frontend-translations.php
│   │
│   ├── AI/                     # AI provider layer
│   │   ├── AIProviderInterface.php       # Provider contract
│   │   ├── class-ai-orchestrator.php     # Provider fallback (Singleton)
│   │   ├── class-prompt-builder.php      # System prompt construction
│   │   ├── class-tool-registry.php       # Tool function registration
│   │   ├── Providers/
│   │   │   ├── class-openai-provider.php
│   │   │   ├── class-claude-provider.php
│   │   │   └── GeminiProvider.php
│   │   └── Tools/                        # AI tool implementations
│   │       ├── class-tool-interface.php
│   │       ├── class-search-products-tool.php
│   │       ├── class-add-to-cart-tool.php
│   │       └── class-create-checkout-tool.php
│   │
│   ├── chat/                   # Chat subsystem
│   │   ├── class-widget.php              # Frontend widget
│   │   ├── class-rest-chat.php           # REST API controller
│   │   ├── class-message-handler.php     # Message processing
│   │   └── class-session-manager.php     # Session persistence
│   │
│   ├── playbook/               # M3 Playbook system (WooAI namespace)
│   │   ├── PlaybookEngine.php            # Execution engine
│   │   ├── PlaybookRepository.php        # CPT data access (Repository pattern)
│   │   ├── PlaybookStateManager.php      # Session state
│   │   ├── PlaybookCPT.php               # Custom Post Type registration
│   │   ├── PlaybookSchema.php            # JSON schema validation
│   │   ├── PlaybookAIBridge.php          # AI-Playbook integration
│   │   ├── RestPlaybook.php              # REST API
│   │   ├── StepExecutors/                # Step type handlers (Factory)
│   │   │   ├── StepExecutorInterface.php
│   │   │   ├── MessageStep.php
│   │   │   ├── QuestionStep.php
│   │   │   ├── OptionsStep.php
│   │   │   ├── ProductListStep.php
│   │   │   ├── CouponStep.php
│   │   │   └── LinkStep.php
│   │   └── ActionExecutors/              # Action handlers
│   │       ├── ActionExecutorInterface.php
│   │       ├── AddToCartAction.php
│   │       ├── ApplyCouponAction.php
│   │       ├── OpenUrlAction.php
│   │       └── SendMessageAction.php
│   │
│   ├── promotion/              # Promotion system
│   │   ├── PromotionManager.php
│   │   └── RestPromotion.php
│   │
│   ├── search/                 # RAG search layer
│   │   ├── class-semantic-search.php     # Vector similarity search
│   │   ├── class-simple-product-search.php
│   │   ├── class-product-indexer.php
│   │   ├── class-embedding-generator.php
│   │   └── class-supabase-client.php
│   │
│   ├── admin/                  # Admin interfaces
│   │   ├── class-admin.php               # Menu, enqueue scripts
│   │   ├── class-settings.php            # Settings registration
│   │   ├── class-rest-analytics.php
│   │   ├── class-rest-playbooks.php
│   │   └── class-rest-topics.php
│   │
│   ├── analytics/              # Analytics subsystem
│   │   ├── class-analytics-manager.php
│   │   ├── class-analytics-query.php
│   │   ├── class-tracker.php
│   │   └── class-kpi-calculator.php
│   │
│   ├── integration/            # WooCommerce integration
│   │   ├── class-woo-commerce.php
│   │   └── class-woocommerce-actions.php
│   │
│   ├── topic/                  # Topic detection
│   │   ├── class-topic-detector.php
│   │   ├── class-topic-router.php
│   │   └── class-rest-topics-public.php
│   │
│   └── License/                # License management
│       ├── class-license-manager.php
│       └── class-hashed-keys.php
│
├── assets/                     # Frontend assets
│   ├── src/                    # TypeScript/React source
│   │   ├── admin/              # Admin dashboard
│   │   └── chat/               # Chat widget
│   ├── admin/js/               # Compiled admin bundle
│   └── chat/                   # Compiled chat bundle
│       ├── js/
│       └── css/
│
├── languages/                  # Translation files
│   ├── woo-ai-chatbot-pro.pot
│   ├── woo-ai-chatbot-pro-he_IL.po
│   └── ...
│
├── tests/                      # PHPUnit tests
│   ├── bootstrap.php
│   ├── AI/
│   ├── Chat/
│   └── Integration/
│
└── docs/                       # Documentation

## 3. רכיבי ליבה ### תהליך Bootstrap של התוסף אתחול התוסף עוקב אחר רצף מחמיר:

// 1. woo-ai-chatbot-pro.php - Entry point
define('WOO_AI_CHATBOT_VERSION', '0.2.1');
define('WOO_AI_CHATBOT_PLUGIN_DIR', plugin_dir_path(__FILE__));

// 2. Load Composer autoloader (dependencies)
require_once WOO_AI_CHATBOT_PLUGIN_DIR . 'vendor/autoload.php';

// 3. Register PSR-4 autoloader for plugin classes
WooAIChatbotAutoloader::register();

// 4. Manually load core classes (WordPress compatibility)
$core_classes = ['Core/class-logger.php', ...];
foreach ($core_classes as $class_file) {
    require_once WOO_AI_CHATBOT_PLUGIN_DIR . 'includes/' . $class_file;
}

// 5. Initialize Logger singleton
WooAIChatbotCoreLogger::init();

// 6. Hook into plugins_loaded
add_action('plugins_loaded', 'woo_ai_chatbot_init');

function woo_ai_chatbot_init() {
    if (!woo_ai_chatbot_check_woocommerce()) return;

    $plugin = WooAIChatbotPlugin::instance();
    $plugin->run();
}

### יישום תבנית Singleton גם `Plugin` וגם `AIOrchestrator` משתמשים בתבנית Singleton כדי להבטיח מופעים יחידים:

namespace WooAIChatbot;

class Plugin {
    private static $instance = null;

    public static function instance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __construct() {
        $this->load_dependencies();
        $this->set_locale();
        $this->define_admin_hooks();
        $this->define_public_hooks();
        $this->define_rest_api();
        $this->init_ai_providers();
        $this->init_rag_system();
        $this->init_m3_system();
        $this->schedule_cron_jobs();
    }
}

### מבנה PSR-4 Autoloading התוסף תומך ב-namespaces כפולים: | Namespace | מיפוי תיקיות | מוסכמת שמות קבצים | |———–|——————-|————————| | `WooAIChatbot` | `includes/` | סגנון WordPress: `class-foo-bar.php` | | `WooAI` | `includes/` (מערכת M3) | סגנון PSR-4: `FooBar.php` |

// Autoloader supports both conventions
class Autoloader {
    public static function autoload($class) {
        $prefixes = [
            'WooAIChatbot' => 'class-',  // Legacy: class-foo-bar.php
            'WooAI'        => '',         // M3: FooBar.php
        ];
        // ... resolution logic
    }
}

## 4. תבניות עיצוב בשימוש ### תבנית Singleton **שימוש**: `Plugin`, `AIOrchestrator`, `LicenseManager`, `ToolRegistry` מבטיחה מופע יחיד לאורך מחזור חיי היישום. קריטית לניהול מצב משותף כמו ספקי AI, sessions פעילים וסטטוס רישיון. ### תבנית Repository **יישום**: `PlaybookRepository` מפשטת אחסון נתונים באמצעות Custom Post Types של WordPress:

namespace WooAIPlaybook;

class PlaybookRepository {
    private const POST_TYPE = 'waa_playbook';

    public function create(array $data): int { ... }
    public function update(int $id, array $data): bool { ... }
    public function delete(int $id): bool { ... }
    public function get(int $id): ?array { ... }
    public function list(array $args = []): array { ... }
    public function find_by_intent(string $intent): ?array { ... }
}

### תבנית Strategy **יישום**: `AIProviderInterface` מגדירה חוזה משותף לכל ספקי AI, מאפשרת שימוש חליפי:

interface AIProviderInterface {
    public function generate_response($messages, $context = []);
    public function format_messages($messages);
    public function validate_api_key();
    public function get_models();
    public function get_provider_name();
    public function is_available();
}

// Implementations
class OpenAIProvider implements AIProviderInterface { ... }
class ClaudeProvider implements AIProviderInterface { ... }
class GeminiProvider implements AIProviderInterface { ... }

### תבנית Factory **יישום**: מבצעי Steps ו-Actions יוצרת באופן דינמי את המבצע המתאים לפי סוג השלב:

interface StepExecutorInterface {
    public function execute(array $step, array $context): array;
    public function get_type(): string;
}

// Step type executors
class MessageStep implements StepExecutorInterface { ... }
class QuestionStep implements StepExecutorInterface { ... }
class OptionsStep implements StepExecutorInterface { ... }
class ProductListStep implements StepExecutorInterface { ... }

### תבנית Observer **יישום**: `CoreLoader` מרכזת רישום hooks של WordPress, מפרידה הגדרות hook מביצוע:

class Loader {
    protected $actions = [];
    protected $filters = [];

    public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1) {
        $this->actions[] = [
            'hook' => $hook,
            'component' => $component,
            'callback' => $callback,
            'priority' => $priority,
            'accepted_args' => $accepted_args,
        ];
    }

    public function run() {
        foreach ($this->actions as $hook) {
            add_action(
                $hook['hook'],
                [$hook['component'], $hook['callback']],
                $hook['priority'],
                $hook['accepted_args']
            );
        }
    }
}

## 5. מחזור חיי בקשה ### אתחול Widget Frontend

sequenceDiagram
    participant Browser
    participant WordPress
    participant Widget
    participant React

    Browser->>WordPress: Page Request
    WordPress->>Widget: wp_enqueue_scripts hook
    Widget->>Widget: should_display() check
    Widget->>WordPress: Enqueue chat-widget.bundle.js
    Widget->>WordPress: wp_localize_script (config)
    WordPress->>Browser: HTML + Scripts
    Browser->>React: Initialize widget
    React->>React: Mount to #woo-ai-chatbot-widget-root
    React->>Browser: Render chat interface

### זרימת עיבוד הודעות צ'אט

sequenceDiagram
    participant Widget
    participant RestChat
    participant MessageHandler
    participant AIOrchestrator
    participant Provider
    participant ToolRegistry

    Widget->>RestChat: POST /woo-ai/v1/chat/message
    RestChat->>RestChat: Rate limit check
    RestChat->>RestChat: Session validation
    RestChat->>MessageHandler: process_message()
    MessageHandler->>MessageHandler: Build context
    MessageHandler->>AIOrchestrator: generate_response()
    AIOrchestrator->>Provider: Try primary provider
    Provider-->>AIOrchestrator: Response or error
    alt Provider failed
        AIOrchestrator->>Provider: Try fallback provider
    end
    AIOrchestrator-->>MessageHandler: AI response
    MessageHandler->>ToolRegistry: Execute tool calls
    ToolRegistry-->>MessageHandler: Tool results
    MessageHandler-->>RestChat: Formatted response
    RestChat-->>Widget: JSON response

### טיפול בבקשות לוח Admin

sequenceDiagram
    participant Browser
    participant Admin
    participant RestAPI
    participant Repository

    Browser->>Admin: Load admin page
    Admin->>Browser: Enqueue admin.bundle.js
    Browser->>RestAPI: GET /woo-ai/v1/settings
    RestAPI->>RestAPI: Capability check
    RestAPI->>Repository: Fetch data
    Repository-->>RestAPI: Settings/Playbooks
    RestAPI-->>Browser: JSON response
    Browser->>Browser: React renders UI

### זרימת בקשות REST API כל נקודות הקצה REST עוקבות אחר תבנית זו: 1. **אימות Nonce**: אימות header של `X-WP-Nonce` 2. **בדיקת הרשאות**: בקרת גישה מבוססת capabilities 3. **הגבלת קצב**: חסימת בקשות מבוססת transients 4. **סניטציית קלט**: פונקציות סניטציה של WordPress 5. **לוגיקה עסקית**: הרצת handler 6. **עיצוב תגובה**: `WP_REST_Response` עם קודי סטטוס מתאימים ## 6. תלויות ### תלויות PHP (Composer) | חבילה | גרסה | מטרה | |———|———|———| | `guzzlehttp/guzzle` | ^7.8 | לקוח HTTP לקריאות API | | `openai-php/client` | ^0.8 | OpenAI API SDK | | `vlucas/phpdotenv` | ^5.5 | טעינת משתני סביבה | | `monolog/monolog` | ^2.9 | לוגינג מובנה | ### תלויות JavaScript (NPM) | חבילה | מטרה | |———|———| | `react`, `react-dom` | ^18.3 | מסגרת UI | | `@radix-ui/*` | primitives UI נגישים | | `tailwind-merge`, `clsx` | ניהול מחלקות CSS | | `lucide-react` | ספריית אייקונים | | `recharts` | גרפי analytics | | `motion` | אנימציות | | `react-hook-form` | ניהול טפסים | ### כלי בנייה | כלי | מטרה | |——|———| | `webpack` | איגוד מודולים | | `typescript` | בדיקת טיפוסים | | `tailwindcss` | CSS utility | | `babel` | transpilation של JS | | `postcss-rtlcss` | תמיכה RTL | ### שירותים חיצוניים | שירות | נקודת אינטגרציה | |———|——————-| | **OpenAI API** | `OpenAIProvider` למודלי GPT ו-embeddings | | **Google Gemini** | `GeminiProvider` למודלי Gemini | | **Anthropic Claude** | `ClaudeProvider` למודלי Claude | | **Supabase** | מסד נתונים וקטורי לחיפוש סמנטי RAG | ## 7. הגדרות ### משתני סביבה (.env)

# AI Providers
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
ANTHROPIC_API_KEY=...
AI_PROVIDER_PRIORITY=gemini,openai,claude

# Supabase (RAG)
SUPABASE_URL=https://xxx.supabase.co
SUPABASE_SERVICE_KEY=eyJ...

# Logging
LOG_LEVEL=info  # debug, info, warning, error

### אפשרויות WordPress | מפתח אפשרות | תיאור | |————|————-| | `woo_ai_chatbot_settings` | מערך הגדרות ראשי | | `woo_ai_chat_enabled` | toggle נראות widget | | `woo_ai_chat_position` | מיקום widget (bottom-right, bottom-left) | | `woo_ai_chat_welcome_message` | ברכה ראשונית | | `woo_ai_chatbot_analytics_config` | הגדרות GA4, Meta Pixel, Mixpanel | ### מבנה הגדרות התוסף

$settings = [
    // AI Configuration
    'gemini_api_key' => '',
    'openai_api_key' => '',
    'claude_api_key' => '',

    // Appearance
    'widget_color' => '#6366F1',
    'secondary_color' => '#4F46E5',
    'accent_color' => '#10B981',
    'font_family' => 'Inter (Default)',
    'widget_width' => 380,
    'max_height' => 600,

    // Behavior
    'welcome_message' => 'Hello! How can I help you today?',
    'welcome_messages' => [  // Per-language
        'en' => 'Hello!',
        'he' => '!שלום',
    ],
    'bot_name' => 'AI Assistant',
    'bot_avatar' => 'robot',

    // Features
    'show_greeting' => true,
    'show_rating' => true,
];

### טבלאות מסד נתונים מותאמות אישית | טבלה | מטרה | |——-|———| | `{prefix}_waa_sessions` | שמירת sessions של צ'אט | | `{prefix}_waa_events` | מעקב אירועי analytics | | `{prefix}_waa_playbook_states` | מצב ביצוע playbook | ## 8. נקודות אינטגרציה מרכזיות ### Hooks של WooCommerce

// Product indexing on save
add_action('woocommerce_update_product', [$this, 'index_product_on_save']);
add_action('woocommerce_new_product', [$this, 'index_product_on_save']);

// Cart operations via WooCommerceActions class
$woo_actions->add_to_cart($product_id, $quantity);
$woo_actions->apply_coupon($coupon_code);
$woo_actions->get_checkout_url();

### תמיכה רב-לשונית סדר זיהוי אוטומטי: WPML > Polylang > TranslatePress > WordPress locale

private function get_current_language() {
    if (defined('ICL_LANGUAGE_CODE')) return ICL_LANGUAGE_CODE;
    if (function_exists('pll_current_language')) return pll_current_language();
    return substr(get_locale(), 0, 2);
}

### משימות מתוזמנות (WP-Cron) | אירוע | לוח זמנים | מטרה | |——-|———-|———| | `woo_ai_chatbot_daily_index` | יומי | אינדוקס מחדש מלא של מוצרים | | `woo_ai_chatbot_cleanup` | שבועי | ניקוי sessions/events | | `waa_cleanup_playbook_sessions` | שעתי | פקיעת sessions ישנים של playbook | | `woo_ai_supabase_keepalive` | יומי | מניעת השהיית free tier של Supabase | — ## השלבים הבאים – [02-rest-api-reference.md](./02-rest-api-reference.md) – תיעוד מלא של REST API – [03-ai-integration.md](./03-ai-integration.md) – הגדרות והתאמה אישית של ספק AI – [04-playbook-system.md](./04-playbook-system.md) – כתיבה והרצה של playbooks – [05-extending-the-plugin.md](./05-extending-the-plugin.md) – Hooks, filters ופיתוח מותאם אישית