خلاصهای از ساختار پایگاه داده Postgres. هر جدولی که دادههای فضای کاری را نگهداری میکند دارای یک ستون workspace_id است (بهصورت مستقیم یا غیرمستقیم از طریق agent_id) و مدل مربوطه از BelongsToWorkspace یا BelongsToAgent استفاده میکند.
هویت
| جدول | توضیحات |
users | ایمیل + رمز عبور (bcrypt). فیلدهای احراز هویت دو مرحلهای. role: customer یا super_admin (enum PlatformRole). default_workspace_id برای قفل کردن انتخابگر. |
workspaces | نام + شناسههای مشتری/اشتراک Stripe + plan_id. لغوهای سبک app_settings در ستون JSON settings ذخیره میشوند. |
workspace_users | جدول اتصال. (user_id, workspace_id, role) که نقش میتواند owner/admin/member باشد. |
invitations | ایمیل + نقش + توکن + انقضای ۷ روزه. به یک فضای کاری تعلق دارد. |
دستیاران فروش و تنظیمات آنها
| جدول | توضیحات |
agents | شخصیت، ظاهر، system_prompt، محافظها، پیامهای شروع، دامنههای مجاز، آستانه اطمینان، language_default، auto_index_visited_pages، is_published، published_version_id. |
agent_versions | تصاویر غیرقابل تغییری که در هر انتشار ایجاد میشوند. زمان اجرا از اینها میخواند، نه از ردیف دستیار فروش. |
behavior_rules | (agent_id, kind, conditions JSON, action JSON, enabled, priority). |
cta_rules | قوانین رفتار تخصصی برای فراخوانهای قابل کلیک. |
curated_answers | (agent_id, triggers[], answer_md, citation_url). |
experiments | پیکربندیهای A/B روی قوانین رفتار. |
دانش
| جدول | توضیحات |
sources | (agent_id, type, status, config JSON, credentials_encrypted TEXT AES-256-GCM, last_synced_at, error). type: url / sitemap / feed / text / notion / google_doc / google_sheet / sql / file / woocommerce_products / auto. credentials_encrypted اطلاعات میزبان/پورت/پایگاهداده/کاربر/رمز عبور را برای منابع SQL از طریق تبدیل encrypted:array لاراول ذخیره میکند — سایر نوعها آن را تهی میگذارند. |
documents | (source_id, url, title, content, lang). یک ردیف به ازای هر صفحه خزششده یا متن چسباندهشده. |
chunks | (document_id, idx, content, token_count). واحدی که به بردار تبدیل میشود. |
integration_connections | (workspace_id, provider, encrypted_token, scope). نوتین، گوگل درایو، اسلک. |
دادههای عددی حاصل از تکهها فقط در ذخیرهساز جستجوی هوشمند (Vectorize / Qdrant) ذخیره میشوند — جدول chunks در Postgres متن + فراداده را نگهداری میکند، نه دادههای عددی را. فراداده بهعنوان برچسب روی دادههای عددی ذخیره میشود تا بازیابی بتواند با agent_id فیلتر کند.
مکالمات و پیامها
| جدول | توضیحات |
visitors | (agent_id, anonymous_id, ip_hash, ua, first_seen_at, last_seen_at, visit_count). anon_id بارگذاریهای مجدد ویجت را به همان ردیف متصل میکند. |
conversations | (agent_id, visitor_id, page_url, started_at, lang, claimed_by_user_id, claimed_at, cleared_at, is_playground). |
messages | (conversation_id, role, content, citations JSON, latency_ms, created_at). نقشها: user / assistant / human-agent. |
leads | (agent_id, conversation_id, name, email, phone, fields JSON). منحصر بهفرد روی (agent_id, email) برای حذف تکراری. |
content_gaps | (agent_id, sample_question, occurrence_count, sample_conversations[]). توسط DetectGapJob زمانی که اطمینان پایین علامتگذاری میشود، ایجاد میشود. |
صورتحساب
| جدول | توضیحات |
plans | (name, slug, monthly_conversations, price_cents, features JSON, is_active, stripe_product_id, stripe_price_id). |
plan_subscriptions | آینه اشتراک کشیر. (workspace_id, stripe_subscription_id, stripe_status, ends_at). |
usage_events | (workspace_id, kind, quantity, occurred_at). برای درگاه سهمیه، بهصورت ماهانه تجمیع میشود. |
app_settings | ردیف تکی. لغوهای Stripe / ایمیل / برند + پیکربندی هوش مصنوعی / جستجوی هوشمند / خزنده که در env نیستند. تبدیلهای رمزگذاریشده روی هر کلید مخفی. |
عملیات
| جدول | توضیحات |
audit_logs | (actor_id, workspace_id, action, target_type, target_id, metadata, created_at). هر اقدام با مجوز. |
jobs / failed_jobs | جدولهای استاندارد صف لاراول. failed_jobs صفحه /admin/jobs/failed را تغذیه میکند. |
notifications | اعلانهای استاندارد لاراول. |
شاخصهای مهم
conversations(agent_id, visitor_id, started_at desc) — جستجوی ادامه مکالمه بازدیدکننده در هر راهاندازی اجرا میشود.
messages(conversation_id, created_at) — دریافت تاریخچه چت.
chunks(document_id) — حذف سریع در زمان حذف منبع.
usage_events(workspace_id, occurred_at) — درگاه سهمیه.
leads(agent_id, email) — محدودیت حذف تکراری، منحصر بهفرد.
workspace_users(user_id, workspace_id) — اتصال منحصر بهفرد.
رمزگذاری در حالت استراحت
ستونهای حساس از تبدیل encrypted لاراول استفاده میکنند: توکنهای OAuth یکپارچهسازی، اسرار Stripe در app_settings، رمزهای عبور ایمیل، کلیدهای API سفارشی هوش مصنوعی. کلید رمزگذاری، APP_KEY استاندارد است — همانطور که از پایگاه داده پشتیبانگیری میکنید، از آن نیز پشتیبانگیری کنید.
حذف نرم
بیشتر جدولها بهصورت سخت و آبشاری حذف میشوند. استثناها:
plans — هرگز بهصورت مخرب حذف نمیشوند (کلید خارجی از فضاهای کاری، کلید خارجی از فاکتورها). بهصورت نرم از طریق is_active.
invitations — توسط یک وظیفه پاکسازی روزانه پس از انقضا حذف میشوند.