Add smart ACK provider for WeChat MP replies
Replace fixed ackText with a rule-based AckProvider that picks response templates by message type and intent (translate, summary, rewrite, poster, ppt, mindmap, code, search, schedule). Pure sync, zero I/O, auto-falls back to config.ackText on any error. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+162
-1
@@ -34,6 +34,13 @@ CREATE TABLE IF NOT EXISTS h5_user_spaces (
|
||||
)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS mindspace_config (
|
||||
`key` VARCHAR(64) PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
description VARCHAR(255) NULL,
|
||||
updated_at BIGINT NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_space_categories (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
@@ -448,11 +455,27 @@ CREATE TABLE IF NOT EXISTS h5_llm_provider_keys (
|
||||
default_model VARCHAR(128) NOT NULL,
|
||||
status ENUM('active', 'disabled') NOT NULL DEFAULT 'active',
|
||||
is_selected TINYINT(1) NOT NULL DEFAULT 0,
|
||||
is_vision_selected TINYINT(1) NOT NULL DEFAULT 0,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uq_h5_llm_key_name (name),
|
||||
KEY idx_h5_llm_key_provider (provider_id),
|
||||
KEY idx_h5_llm_key_selected (is_selected)
|
||||
KEY idx_h5_llm_key_selected (is_selected),
|
||||
KEY idx_h5_llm_key_vision (is_vision_selected)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_llm_executor_bindings (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
executor ENUM('goose', 'aider', 'openhands') NOT NULL,
|
||||
purpose VARCHAR(32) NOT NULL DEFAULT 'default',
|
||||
provider_key_id CHAR(36) NULL,
|
||||
model VARCHAR(128) NOT NULL,
|
||||
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uq_h5_llm_executor_binding (executor, purpose),
|
||||
KEY idx_h5_llm_executor_provider (provider_key_id),
|
||||
CONSTRAINT fk_h5_llm_executor_provider FOREIGN KEY (provider_key_id) REFERENCES h5_llm_provider_keys(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_payment_orders (
|
||||
@@ -618,6 +641,26 @@ CREATE TABLE IF NOT EXISTS plaza_reports (
|
||||
CONSTRAINT fk_plaza_report_processor FOREIGN KEY (processed_by) REFERENCES h5_users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Session snapshot cache: stores userVisible messages for fast history reload.
|
||||
-- Rollback: DROP TABLE h5_session_snapshots (data-only, no dependants).
|
||||
CREATE TABLE IF NOT EXISTS h5_session_snapshots (
|
||||
agent_session_id VARCHAR(128) NOT NULL PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
name VARCHAR(512) NOT NULL DEFAULT '',
|
||||
working_dir VARCHAR(1024) NOT NULL DEFAULT '',
|
||||
created_at_str VARCHAR(64) NOT NULL DEFAULT '',
|
||||
updated_at_str VARCHAR(64) NOT NULL DEFAULT '',
|
||||
user_set_name TINYINT(1) NOT NULL DEFAULT 0,
|
||||
recipe_json TEXT NULL,
|
||||
synced_msg_count INT NOT NULL DEFAULT 0,
|
||||
source_updated_at VARCHAR(64) NOT NULL DEFAULT '',
|
||||
messages_json LONGTEXT NOT NULL,
|
||||
synced_at BIGINT NOT NULL,
|
||||
KEY idx_h5_snapshots_user (user_id),
|
||||
KEY idx_h5_snapshots_synced (synced_at),
|
||||
CONSTRAINT fk_h5_snapshot_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS plaza_featured (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
post_id CHAR(36) NOT NULL,
|
||||
@@ -746,6 +789,33 @@ CREATE TABLE IF NOT EXISTS h5_wechat_mp_messages (
|
||||
KEY idx_wechat_mp_messages_session (agent_session_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_wechat_mp_message_details (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
app_id VARCHAR(32) NOT NULL,
|
||||
openid VARCHAR(64) NOT NULL,
|
||||
user_id CHAR(36) NULL,
|
||||
msg_id VARCHAR(128) NULL,
|
||||
msg_type VARCHAR(32) NOT NULL,
|
||||
display_text TEXT NULL,
|
||||
agent_text TEXT NULL,
|
||||
media_id VARCHAR(256) NULL,
|
||||
media_url TEXT NULL,
|
||||
media_public_url TEXT NULL,
|
||||
media_format VARCHAR(64) NULL,
|
||||
location_lat DECIMAL(10,7) NULL,
|
||||
location_lng DECIMAL(10,7) NULL,
|
||||
location_label VARCHAR(255) NULL,
|
||||
link_url TEXT NULL,
|
||||
link_title VARCHAR(255) NULL,
|
||||
raw_xml_hash CHAR(40) NULL,
|
||||
raw_json JSON NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
KEY idx_wechat_mp_message_details_user (app_id, openid, created_at),
|
||||
KEY idx_wechat_mp_message_details_msg (msg_id),
|
||||
KEY idx_wechat_mp_message_details_type (msg_type, created_at),
|
||||
CONSTRAINT fk_wechat_mp_message_details_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_schedule_items (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
@@ -818,6 +888,30 @@ CREATE TABLE IF NOT EXISTS h5_schedule_digest_subscriptions (
|
||||
CONSTRAINT fk_schedule_digest_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_balance_alert_subscriptions (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
threshold_cents BIGINT NOT NULL,
|
||||
channel ENUM('wechat', 'in_app') NOT NULL DEFAULT 'wechat',
|
||||
status ENUM('active', 'locked', 'failed', 'cancelled') NOT NULL DEFAULT 'active',
|
||||
next_run_at BIGINT NOT NULL,
|
||||
last_run_at BIGINT NULL,
|
||||
last_notified_balance_cents BIGINT NULL,
|
||||
attempts INT NOT NULL DEFAULT 0,
|
||||
locked_until BIGINT NULL,
|
||||
last_error VARCHAR(500) NULL,
|
||||
source_channel ENUM('h5', 'wechat', 'agent', 'api') NOT NULL DEFAULT 'agent',
|
||||
source_session_id VARCHAR(128) NULL,
|
||||
source_message_id VARCHAR(128) NULL,
|
||||
source_text TEXT NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uq_balance_alert_user_channel (user_id, channel),
|
||||
KEY idx_balance_alert_due (status, next_run_at),
|
||||
KEY idx_balance_alert_user (user_id, status, next_run_at),
|
||||
CONSTRAINT fk_balance_alert_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_schedule_delivery_logs (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
reminder_id CHAR(36) NULL,
|
||||
@@ -836,3 +930,70 @@ CREATE TABLE IF NOT EXISTS h5_schedule_delivery_logs (
|
||||
CONSTRAINT fk_schedule_delivery_subscription FOREIGN KEY (subscription_id) REFERENCES h5_schedule_digest_subscriptions(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_schedule_delivery_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_user_notifications (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
channel ENUM('web', 'wechat') NOT NULL DEFAULT 'web',
|
||||
notification_type VARCHAR(64) NOT NULL,
|
||||
title VARCHAR(255) NOT NULL,
|
||||
body TEXT NOT NULL,
|
||||
data_json JSON NULL,
|
||||
status ENUM('unread', 'read') NOT NULL DEFAULT 'unread',
|
||||
read_at BIGINT NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_user_notifications_user_status_created (user_id, status, created_at),
|
||||
KEY idx_user_notifications_user_created (user_id, created_at),
|
||||
CONSTRAINT fk_user_notifications_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_plan_catalog (
|
||||
plan_type VARCHAR(32) PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL,
|
||||
price_cents INT NOT NULL DEFAULT 0,
|
||||
period_days INT NOT NULL DEFAULT 30,
|
||||
period_tokens BIGINT NOT NULL DEFAULT 0,
|
||||
period_images INT NOT NULL DEFAULT 0,
|
||||
model_tier VARCHAR(32) NOT NULL DEFAULT 'basic',
|
||||
overage_rate DECIMAL(4,2) NOT NULL DEFAULT 1.00,
|
||||
sort_order INT NOT NULL DEFAULT 0,
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
description VARCHAR(512) NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_subscriptions (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
plan_type VARCHAR(32) NOT NULL DEFAULT 'free',
|
||||
status ENUM('active', 'expired', 'cancelled') NOT NULL DEFAULT 'active',
|
||||
period_tokens_limit BIGINT NOT NULL DEFAULT 0,
|
||||
period_tokens_used BIGINT NOT NULL DEFAULT 0,
|
||||
period_images_limit INT NOT NULL DEFAULT 0,
|
||||
period_images_used INT NOT NULL DEFAULT 0,
|
||||
period_start BIGINT NOT NULL,
|
||||
period_end BIGINT NOT NULL,
|
||||
expires_at BIGINT NOT NULL,
|
||||
overage_rate DECIMAL(4,2) NOT NULL DEFAULT 1.00,
|
||||
auto_renew TINYINT(1) NOT NULL DEFAULT 0,
|
||||
operator_id CHAR(36) NULL,
|
||||
note VARCHAR(512) NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_h5_sub_user_status (user_id, status),
|
||||
KEY idx_h5_sub_expires (expires_at, status),
|
||||
CONSTRAINT fk_h5_sub_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_blocked_words (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
word VARCHAR(200) NOT NULL,
|
||||
replacement VARCHAR(200) NOT NULL DEFAULT '***',
|
||||
note VARCHAR(500) NULL,
|
||||
status ENUM('active', 'disabled') NOT NULL DEFAULT 'active',
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uk_blocked_word (word)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
Reference in New Issue
Block a user