Quick Reference Cheatsheet
Fast lookup for WooAI Chatbot Pro developers. Keep this open while coding.
Why this exists: After the 3rd time someone asked "where's that hook again?", I made this. Update it when you add new stuff. - Roman
REST API Endpoints
# Base URL
/wp-json/woo-ai/v1/
# Chat
POST /chat/session # Create session
POST /chat/message # Send message
GET /chat/history/{session_id} # Get history
# Playbooks
GET /playbooks # List all
GET /playbooks/{id} # Get one
POST /playbooks # Create
PUT /playbooks/{id} # Update
DELETE /playbooks/{id} # Delete
# Settings
GET /settings # Get all
POST /settings # Update
# Analytics
GET /analytics/dashboard # Dashboard data
GET /analytics/conversations # Conversation stats
# Topics
GET /public/topics # Public (no auth)
GET /topics # Admin list
POST /topics # Create/update
Key Hooks
Actions
// AI Processing
do_action( 'wooai_before_ai_request', $provider, $messages );
do_action( 'wooai_after_ai_response', $response, $provider );
do_action( 'wooai_provider_fallback', $failed, $next, $error );
// Chat
do_action( 'wooai_session_started', $session_id, $user_id );
do_action( 'wooai_message_received', $message, $session_id );
do_action( 'wooai_message_sent', $response, $session_id );
// Playbook
do_action( 'wooai_playbook_started', $playbook_id, $session_id );
do_action( 'wooai_playbook_step_execute', $step, $state );
do_action( 'wooai_playbook_completed', $playbook_id, $session_id );
// Widget
do_action( 'wooai_before_widget_render' );
do_action( 'wooai_after_widget_render' );
Filters
// AI
add_filter( 'wooai_ai_response', fn($r) => $r );
add_filter( 'wooai_system_prompt', fn($p) => $p );
add_filter( 'wooai_provider_priority', fn($p) => $p );
add_filter( 'wooai_max_tokens', fn() => 2000 );
// Chat
add_filter( 'wooai_message_before_save', fn($m) => $m );
add_filter( 'wooai_suggestions', fn($s, $ctx) => $s, 10, 2 );
// Widget
add_filter( 'wooai_widget_should_display', fn($show) => $show );
add_filter( 'wooai_widget_position', fn() => 'bottom-right' );
add_filter( 'wooai_widget_config', fn($c) => $c );
// Rate Limiting
add_filter( 'wooai_rate_limit', fn() => 30 ); // requests
add_filter( 'wooai_rate_window', fn() => 60 ); // seconds
PHP Classes
// Singletons - use ::instance()
\WooAIChatbot\Plugin::instance()
\WooAIChatbot\AI\AIOrchestrator::instance()
\WooAIChatbot\AI\ToolRegistry::instance()
// AI Providers
\WooAIChatbot\AI\Providers\OpenAIProvider
\WooAIChatbot\AI\Providers\ClaudeProvider
\WooAIChatbot\AI\Providers\GeminiProvider
// Chat
\WooAIChatbot\Chat\MessageHandler
\WooAIChatbot\Chat\SessionManager
\WooAIChatbot\Chat\Widget
// Playbook (WooAI namespace)
\WooAI\Playbook\PlaybookEngine
\WooAI\Playbook\PlaybookRepository
\WooAI\Playbook\PlaybookStateManager
// Search
\WooAIChatbot\Search\SemanticSearch
\WooAIChatbot\Search\ProductIndexer
TypeScript Types
// Message
interface Message {
id: string;
role: 'user' | 'assistant' | 'system';
content: string;
metadata?: MessageMetadata;
timestamp: string;
}
// Session
interface ChatSession {
session_id: string;
user_id?: number;
started_at: string;
messages: Message[];
}
// Playbook Step
interface PlaybookStep {
id: string;
type: 'message' | 'question' | 'options' | 'product_list' | 'coupon' | 'link';
content: string;
options?: StepOption[];
next?: string | null;
}
// Settings
interface PluginSettings {
enabled: boolean;
ai_provider: 'openai' | 'claude' | 'gemini';
model: string;
temperature: number;
appearance: AppearanceSettings;
}
NPM Scripts
npm run dev # Dev build + watch
npm run build # Production build
npm run typecheck # TS check
npm run lint # ESLint fix
npm run test # Jest
npm run test:coverage
Composer Scripts
composer test # PHPUnit
composer phpcs # Code sniffer
composer phpcbf # Auto-fix
Database Tables
-- Conversations
{prefix}wooai_conversations (
id, session_id, user_id, started_at, updated_at, metadata
)
-- Messages
{prefix}wooai_messages (
id, conversation_id, role, content, tokens, created_at
)
-- Analytics
{prefix}wooai_analytics (
id, event_type, session_id, user_id, data, created_at
)
Common Patterns
Add Custom Tool
add_action( 'wooai_register_tools', function( $registry ) {
$registry->register( new class implements ToolInterface {
public function get_name(): string { return 'my_tool'; }
public function get_description(): string { return 'Does something'; }
public function get_parameters(): array { return []; }
public function execute( array $args ): array {
return [ 'result' => 'done' ];
}
});
});
Modify AI Response
add_filter( 'wooai_ai_response', function( $response, $messages, $context ) {
$response['content'] .= "\n\n---\nPowered by AI";
return $response;
}, 10, 3 );
Custom Widget Position
add_filter( 'wooai_widget_config', function( $config ) {
$config['position'] = 'bottom-left';
$config['offset'] = [ 'x' => 20, 'y' => 20 ];
return $config;
});
Exclude Pages
add_filter( 'wooai_widget_should_display', function( $show ) {
if ( is_cart() || is_checkout() ) return false;
if ( is_page( 'contact' ) ) return false;
return $show;
});
Custom Analytics Event
do_action( 'wooai_track_event', 'custom_event', [
'session_id' => $session_id,
'data' => [ 'key' => 'value' ]
]);
Debug Mode
// wp-config.php
define( 'WOOAI_DEBUG', true );
define( 'WOOAI_LOG_AI_REQUESTS', true );
// Browser console
localStorage.setItem('wooai_debug', 'true');
Error Codes
| Code | HTTP | Meaning |
|---|---|---|
invalid_session |
404 | Session expired/not found |
rate_limit_exceeded |
429 | Too many requests |
ai_provider_error |
500 | API call failed |
validation_error |
400 | Bad request data |
permission_denied |
403 | Missing capability |
Known Gotchas
// GOTCHA #1: Session ID format changed in 0.2.0
// Old: "abc123" (short)
// New: "usr42-1703980123-x7f2" (user-timestamp-random)
// Some old sessions may still exist in DB - we don't migrate them
// GOTCHA #2: Widget won't appear if theme missing wp_footer()
// Spent 2 hours debugging flavflavor theme - this was the issue
// GOTCHA #3: Gemini sometimes returns empty content
// We retry 3x automatically, see class-gemini-provider.php:147
File Locations
/includes/class-plugin.php # Main entry
/includes/AI/ # AI providers
/includes/chat/ # Chat engine
/includes/playbook/ # Playbook system
/assets/src/admin/ # Admin React
/assets/src/chat/ # Widget React
/assets/dist/ # Built assets
Useful WP-CLI
# Clear plugin transients
wp transient delete --all
# Check option
wp option get woo_ai_chatbot_settings --format=json
# Reset settings
wp option delete woo_ai_chatbot_settings
# Test API
wp eval "var_dump(\WooAIChatbot\AI\AIOrchestrator::instance()->validate_current_provider());"