# データベース設計書

## 概要

本ドキュメントは、Chatwootカスタマーサポートプラットフォームのデータベース設計書です。Chatwootは、PostgreSQLをデータベースとして使用し、Rails ActiveRecordによるORM管理を行っています。本システムは、マルチテナントアーキテクチャを採用し、複数のアカウント（組織）が独立して運用できる設計となっています。

データベースは以下のPostgreSQL拡張機能を使用しています:
- pg_stat_statements: クエリパフォーマンス統計
- pg_trgm: トリグラムベースのテキスト検索
- pgcrypto: 暗号化機能
- plpgsql: 手続き型言語
- vector: ベクトル埋め込み（AI機能用）

## テーブル一覧

### コアエンティティ

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| accounts | Account | 組織/テナント情報を管理 |
| users | User | ユーザー（エージェント/管理者）情報 |
| account_users | AccountUser | アカウントとユーザーの関連付け |
| contacts | Contact | 顧客/訪問者情報 |
| companies | Company | 顧客企業情報 |
| conversations | Conversation | 会話/チケット情報 |
| messages | Message | メッセージ内容 |
| attachments | Attachment | 添付ファイル情報 |

### インボックス/チャネル

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| inboxes | Inbox | インボックス（チャネル受信箱）情報 |
| inbox_members | InboxMember | インボックスのメンバー管理 |
| contact_inboxes | ContactInbox | コンタクトとインボックスの関連 |
| channel_web_widgets | Channel::WebWidget | Webウィジェットチャネル |
| channel_facebook_pages | Channel::FacebookPage | Facebookページチャネル |
| channel_twitter_profiles | Channel::TwitterProfile | Twitterプロファイルチャネル |
| channel_email | Channel::Email | メールチャネル |
| channel_telegram | Channel::Telegram | Telegramチャネル |
| channel_twilio_sms | Channel::TwilioSms | Twilio SMSチャネル |
| channel_sms | Channel::Sms | SMSチャネル |
| channel_whatsapp | Channel::Whatsapp | WhatsAppチャネル |
| channel_api | Channel::Api | APIチャネル |
| channel_line | Channel::Line | LINEチャネル |
| channel_instagram | Channel::Instagram | Instagramチャネル |
| channel_tiktok | Channel::Tiktok | TikTokチャネル |
| channel_voice | Channel::Voice | 音声チャネル |

### チーム/ラベル/タグ

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| teams | Team | チーム情報 |
| team_members | TeamMember | チームメンバー関連 |
| labels | Label | ラベル/タグ定義 |
| tags | Tag | タグ（acts_as_taggable） |
| taggings | Tagging | タグ付け関連 |

### 自動化/ワークフロー

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| automation_rules | AutomationRule | 自動化ルール |
| macros | Macro | マクロ定義 |
| campaigns | Campaign | キャンペーン情報 |
| canned_responses | CannedResponse | 定型文応答 |
| assignment_policies | AssignmentPolicy | 割り当てポリシー |
| inbox_assignment_policies | InboxAssignmentPolicy | インボックス割り当てポリシー |
| agent_capacity_policies | AgentCapacityPolicy | エージェント容量ポリシー |
| inbox_capacity_limits | InboxCapacityLimit | インボックス容量制限 |

### SLA/レポート

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| sla_policies | SlaPolicy | SLAポリシー定義 |
| applied_slas | AppliedSla | 適用されたSLA |
| sla_events | SlaEvent | SLAイベント |
| csat_survey_responses | CsatSurveyResponse | 顧客満足度調査回答 |
| reporting_events | ReportingEvent | レポーティングイベント |

### 通知/Webhook

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| notifications | Notification | 通知情報 |
| notification_settings | NotificationSetting | 通知設定 |
| notification_subscriptions | NotificationSubscription | 通知購読 |
| webhooks | Webhook | Webhook設定 |

### ボット/統合

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| agent_bots | AgentBot | エージェントボット |
| agent_bot_inboxes | AgentBotInbox | ボットとインボックスの関連 |
| integrations_hooks | Integrations::Hook | 統合フック |

### ヘルプセンター

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| portals | Portal | ヘルプセンターポータル |
| portals_members | PortalsMember | ポータルメンバー |
| articles | Article | 記事 |
| article_embeddings | ArticleEmbedding | 記事埋め込みベクトル |
| categories | Category | カテゴリ |
| related_categories | RelatedCategory | 関連カテゴリ |
| folders | Folder | フォルダ |

### Captain（AI機能）

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| captain_assistants | Captain::Assistant | AIアシスタント |
| captain_assistant_responses | Captain::AssistantResponse | アシスタント応答 |
| captain_documents | Captain::Document | ドキュメント |
| captain_inboxes | Captain::Inbox | Captainインボックス関連 |
| captain_scenarios | Captain::Scenario | シナリオ |
| captain_custom_tools | Captain::CustomTool | カスタムツール |
| copilot_threads | CopilotThread | Copilotスレッド |
| copilot_messages | CopilotMessage | Copilotメッセージ |

### その他

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| access_tokens | AccessToken | アクセストークン |
| account_saml_settings | AccountSamlSetting | SAML SSO設定 |
| audits | Audit | 監査ログ |
| conversation_participants | ConversationParticipant | 会話参加者 |
| custom_attribute_definitions | CustomAttributeDefinition | カスタム属性定義 |
| custom_filters | CustomFilter | カスタムフィルター |
| custom_roles | CustomRole | カスタムロール |
| dashboard_apps | DashboardApp | ダッシュボードアプリ |
| data_imports | DataImport | データインポート |
| email_templates | EmailTemplate | メールテンプレート |
| installation_configs | InstallationConfig | インストール設定 |
| leaves | Leave | 休暇情報 |
| mentions | Mention | メンション |
| notes | Note | メモ |
| platform_apps | PlatformApp | プラットフォームアプリ |
| platform_app_permissibles | PlatformAppPermissible | アプリ権限 |
| working_hours | WorkingHour | 営業時間 |
| active_storage_blobs | ActiveStorage::Blob | ファイルストレージ |
| active_storage_attachments | ActiveStorage::Attachment | ファイル添付 |
| active_storage_variant_records | ActiveStorage::VariantRecord | ファイルバリアント |
| action_mailbox_inbound_emails | ActionMailbox::InboundEmail | 受信メール |

## 各テーブル定義

### 1. accounts

アカウント（テナント/組織）情報を管理するメインテーブル。マルチテナントアーキテクチャの中心となるエンティティ。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| name | string | NO | アカウント名 |
| locale | integer | YES | ロケール設定 |
| domain | string(100) | YES | ドメイン |
| support_email | string(100) | YES | サポートメールアドレス |
| feature_flags | bigint | NO | 機能フラグ（ビットマスク） |
| auto_resolve_duration | integer | YES | 自動解決期間 |
| limits | jsonb | YES | 制限設定 |
| custom_attributes | jsonb | YES | カスタム属性 |
| status | integer | NO | ステータス（0: active, 1: suspended） |
| internal_attributes | jsonb | NO | 内部属性 |
| settings | jsonb | YES | 設定 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 2. users

ユーザー（エージェント、管理者）情報。Deviseによる認証機能を実装。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| provider | string | NO | 認証プロバイダー |
| uid | string | NO | ユニークID |
| encrypted_password | string | NO | 暗号化パスワード |
| reset_password_token | string | YES | パスワードリセットトークン |
| reset_password_sent_at | datetime | YES | リセット送信日時 |
| remember_created_at | datetime | YES | ログイン記憶日時 |
| sign_in_count | integer | NO | サインイン回数 |
| current_sign_in_at | datetime | YES | 現在のサインイン日時 |
| last_sign_in_at | datetime | YES | 最終サインイン日時 |
| current_sign_in_ip | string | YES | 現在のIPアドレス |
| last_sign_in_ip | string | YES | 最終IPアドレス |
| confirmation_token | string | YES | 確認トークン |
| confirmed_at | datetime | YES | 確認日時 |
| confirmation_sent_at | datetime | YES | 確認送信日時 |
| unconfirmed_email | string | YES | 未確認メール |
| name | string | NO | 名前 |
| display_name | string | YES | 表示名 |
| email | string | YES | メールアドレス |
| tokens | json | YES | 認証トークン |
| pubsub_token | string | YES | PubSubトークン |
| availability | integer | YES | 可用性状態 |
| ui_settings | jsonb | YES | UI設定 |
| custom_attributes | jsonb | YES | カスタム属性 |
| type | string | YES | STI型（SuperAdmin等） |
| message_signature | text | YES | メッセージ署名 |
| otp_secret | string | YES | 2FA OTPシークレット |
| consumed_timestep | integer | YES | 消費済みタイムステップ |
| otp_required_for_login | boolean | NO | 2FA必須フラグ |
| otp_backup_codes | text | YES | 2FAバックアップコード |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 3. account_users

アカウントとユーザーの関連付け（中間テーブル）。ロールと可用性を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | bigint | YES | アカウントID（FK） |
| user_id | bigint | YES | ユーザーID（FK） |
| role | integer | NO | ロール（0: agent, 1: administrator） |
| inviter_id | bigint | YES | 招待者ID |
| active_at | datetime | YES | アクティブ日時 |
| availability | integer | NO | 可用性（0: online, 1: offline, 2: busy） |
| auto_offline | boolean | NO | 自動オフライン |
| custom_role_id | bigint | YES | カスタムロールID（FK） |
| agent_capacity_policy_id | bigint | YES | エージェント容量ポリシーID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 4. contacts

顧客/訪問者情報を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| name | string | YES | 名前 |
| email | string | YES | メールアドレス |
| phone_number | string | YES | 電話番号 |
| account_id | integer | NO | アカウントID（FK） |
| additional_attributes | jsonb | YES | 追加属性 |
| identifier | string | YES | 外部識別子 |
| custom_attributes | jsonb | YES | カスタム属性 |
| last_activity_at | datetime | YES | 最終アクティビティ日時 |
| contact_type | integer | NO | タイプ（0: visitor, 1: lead, 2: customer） |
| middle_name | string | YES | ミドルネーム |
| last_name | string | YES | 姓 |
| location | string | YES | 場所 |
| country_code | string | YES | 国コード |
| blocked | boolean | NO | ブロックフラグ |
| company_id | bigint | YES | 企業ID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 5. conversations

会話/チケット情報。顧客とのコミュニケーションスレッドを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| account_id | integer | NO | アカウントID（FK） |
| inbox_id | integer | NO | インボックスID（FK） |
| status | integer | NO | ステータス（0: open, 1: resolved, 2: pending, 3: snoozed） |
| assignee_id | integer | YES | 担当者ID（FK） |
| contact_id | bigint | YES | コンタクトID（FK） |
| display_id | integer | NO | 表示ID（アカウント内連番） |
| contact_last_seen_at | datetime | YES | コンタクト最終閲覧日時 |
| agent_last_seen_at | datetime | YES | エージェント最終閲覧日時 |
| additional_attributes | jsonb | YES | 追加属性 |
| contact_inbox_id | bigint | YES | コンタクトインボックスID（FK） |
| uuid | uuid | NO | UUID |
| identifier | string | YES | 外部識別子 |
| last_activity_at | datetime | NO | 最終アクティビティ日時 |
| team_id | bigint | YES | チームID（FK） |
| campaign_id | bigint | YES | キャンペーンID（FK） |
| snoozed_until | datetime | YES | スヌーズ解除日時 |
| custom_attributes | jsonb | YES | カスタム属性 |
| assignee_last_seen_at | datetime | YES | 担当者最終閲覧日時 |
| first_reply_created_at | datetime | YES | 初回返信日時 |
| priority | integer | YES | 優先度（0: low, 1: medium, 2: high, 3: urgent） |
| sla_policy_id | bigint | YES | SLAポリシーID（FK） |
| waiting_since | datetime | YES | 待機開始日時 |
| cached_label_list | text | YES | キャッシュラベルリスト |
| assignee_agent_bot_id | bigint | YES | ボット担当者ID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 6. messages

メッセージ情報。会話内の個々のメッセージを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| content | text | YES | メッセージ内容 |
| account_id | integer | NO | アカウントID（FK） |
| inbox_id | integer | NO | インボックスID（FK） |
| conversation_id | integer | NO | 会話ID（FK） |
| message_type | integer | NO | タイプ（0: incoming, 1: outgoing, 2: activity, 3: template） |
| private | boolean | NO | プライベートフラグ |
| status | integer | YES | ステータス（0: sent, 1: delivered, 2: read, 3: failed） |
| source_id | text | YES | ソースID |
| content_type | integer | NO | コンテンツタイプ |
| content_attributes | json | YES | コンテンツ属性 |
| sender_type | string | YES | 送信者タイプ（ポリモーフィック） |
| sender_id | bigint | YES | 送信者ID（ポリモーフィック） |
| external_source_ids | jsonb | YES | 外部ソースID |
| additional_attributes | jsonb | YES | 追加属性 |
| processed_message_content | text | YES | 処理済みメッセージ |
| sentiment | jsonb | YES | 感情分析結果 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 7. inboxes

インボックス（チャネル受信箱）情報。様々なチャネルからのメッセージを受信する設定を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| channel_id | integer | NO | チャネルID（ポリモーフィック） |
| account_id | integer | NO | アカウントID（FK） |
| name | string | NO | インボックス名 |
| channel_type | string | YES | チャネルタイプ |
| enable_auto_assignment | boolean | YES | 自動割り当て有効 |
| greeting_enabled | boolean | YES | 挨拶有効 |
| greeting_message | string | YES | 挨拶メッセージ |
| email_address | string | YES | メールアドレス |
| working_hours_enabled | boolean | YES | 営業時間有効 |
| out_of_office_message | string | YES | 営業時間外メッセージ |
| timezone | string | YES | タイムゾーン |
| enable_email_collect | boolean | YES | メール収集有効 |
| csat_survey_enabled | boolean | YES | CSAT調査有効 |
| allow_messages_after_resolved | boolean | YES | 解決後メッセージ許可 |
| auto_assignment_config | jsonb | YES | 自動割り当て設定 |
| lock_to_single_conversation | boolean | NO | 単一会話ロック |
| portal_id | bigint | YES | ポータルID（FK） |
| sender_name_type | integer | NO | 送信者名タイプ |
| business_name | string | YES | ビジネス名 |
| csat_config | jsonb | NO | CSAT設定 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 8. teams

チーム情報。エージェントをグループ化して管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | NO | チーム名 |
| description | text | YES | 説明 |
| allow_auto_assign | boolean | YES | 自動割り当て許可 |
| account_id | bigint | NO | アカウントID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 9. labels

ラベル定義。会話やコンタクトにタグ付けするためのラベルを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| title | string | YES | タイトル |
| description | text | YES | 説明 |
| color | string | NO | 色コード |
| show_on_sidebar | boolean | YES | サイドバー表示 |
| account_id | bigint | YES | アカウントID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 10. campaigns

キャンペーン情報。プロアクティブメッセージングキャンペーンを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| display_id | integer | NO | 表示ID（アカウント内連番） |
| title | string | NO | タイトル |
| description | text | YES | 説明 |
| message | text | NO | メッセージ |
| sender_id | integer | YES | 送信者ID（FK） |
| enabled | boolean | YES | 有効フラグ |
| account_id | bigint | NO | アカウントID（FK） |
| inbox_id | bigint | NO | インボックスID（FK） |
| trigger_rules | jsonb | YES | トリガールール |
| campaign_type | integer | NO | タイプ（0: ongoing, 1: one_off） |
| campaign_status | integer | NO | ステータス（0: active, 1: completed） |
| audience | jsonb | YES | オーディエンス |
| scheduled_at | datetime | YES | スケジュール日時 |
| trigger_only_during_business_hours | boolean | YES | 営業時間のみトリガー |
| template_params | jsonb | YES | テンプレートパラメータ |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 11. notifications

通知情報。ユーザーへの通知を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | bigint | NO | アカウントID（FK） |
| user_id | bigint | NO | ユーザーID（FK） |
| notification_type | integer | NO | 通知タイプ |
| primary_actor_type | string | NO | 主アクタータイプ（ポリモーフィック） |
| primary_actor_id | bigint | NO | 主アクターID（ポリモーフィック） |
| secondary_actor_type | string | YES | 副アクタータイプ（ポリモーフィック） |
| secondary_actor_id | bigint | YES | 副アクターID（ポリモーフィック） |
| read_at | datetime | YES | 既読日時 |
| snoozed_until | datetime | YES | スヌーズ解除日時 |
| last_activity_at | datetime | YES | 最終アクティビティ日時 |
| meta | jsonb | YES | メタデータ |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 12. webhooks

Webhook設定。外部システムへの通知連携を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | integer | YES | アカウントID（FK） |
| inbox_id | integer | YES | インボックスID（FK） |
| url | text | YES | Webhook URL |
| webhook_type | integer | YES | タイプ（0: account_type, 1: inbox_type） |
| subscriptions | jsonb | YES | 購読イベント |
| name | string | YES | 名前 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 13. sla_policies

SLAポリシー定義。サービスレベル合意の設定を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | NO | ポリシー名 |
| first_response_time_threshold | float | YES | 初回応答時間閾値 |
| next_response_time_threshold | float | YES | 次回応答時間閾値 |
| resolution_time_threshold | float | YES | 解決時間閾値 |
| only_during_business_hours | boolean | YES | 営業時間のみ |
| account_id | bigint | NO | アカウントID（FK） |
| description | string | YES | 説明 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 14. automation_rules

自動化ルール。条件に基づいたアクションの自動実行を定義。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | bigint | NO | アカウントID（FK） |
| name | string | NO | ルール名 |
| description | text | YES | 説明 |
| event_name | string | NO | イベント名 |
| conditions | jsonb | NO | 条件 |
| actions | jsonb | NO | アクション |
| active | boolean | NO | 有効フラグ |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 15. portals

ヘルプセンターポータル。セルフサービスサポートポータルを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | integer | NO | アカウントID（FK） |
| name | string | NO | ポータル名 |
| slug | string | NO | スラッグ |
| custom_domain | string | YES | カスタムドメイン |
| color | string | YES | テーマカラー |
| homepage_link | string | YES | ホームページリンク |
| page_title | string | YES | ページタイトル |
| header_text | text | YES | ヘッダーテキスト |
| config | jsonb | YES | 設定 |
| archived | boolean | YES | アーカイブフラグ |
| channel_web_widget_id | bigint | YES | Webウィジェット関連ID（FK） |
| ssl_settings | jsonb | NO | SSL設定 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 16. articles

ヘルプセンター記事。ナレッジベースの記事コンテンツを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | integer | NO | アカウントID（FK） |
| portal_id | integer | NO | ポータルID（FK） |
| category_id | integer | YES | カテゴリID（FK） |
| folder_id | integer | YES | フォルダID（FK） |
| title | string | YES | タイトル |
| description | text | YES | 説明 |
| content | text | YES | コンテンツ |
| status | integer | YES | ステータス |
| views | integer | YES | 閲覧数 |
| author_id | bigint | YES | 著者ID（FK） |
| associated_article_id | bigint | YES | 関連記事ID（FK） |
| meta | jsonb | YES | メタデータ |
| slug | string | NO | スラッグ |
| position | integer | YES | 表示順 |
| locale | string | NO | ロケール |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 17. attachments

添付ファイル情報。メッセージに添付されたファイルを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| file_type | integer | YES | ファイルタイプ |
| external_url | string | YES | 外部URL |
| coordinates_lat | float | YES | 緯度 |
| coordinates_long | float | YES | 経度 |
| message_id | integer | NO | メッセージID（FK） |
| account_id | integer | NO | アカウントID（FK） |
| fallback_title | string | YES | フォールバックタイトル |
| extension | string | YES | ファイル拡張子 |
| meta | jsonb | YES | メタデータ |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 18. channel_web_widgets

Webウィジェットチャネル設定。Webサイト埋め込みチャットウィジェットを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | serial | NO | 主キー |
| website_url | string | YES | WebサイトURL |
| account_id | integer | YES | アカウントID（FK） |
| website_token | string | YES | Webサイトトークン |
| widget_color | string | YES | ウィジェット色 |
| welcome_title | string | YES | ウェルカムタイトル |
| welcome_tagline | string | YES | ウェルカムタグライン |
| feature_flags | integer | NO | 機能フラグ |
| reply_time | integer | YES | 返信時間 |
| hmac_token | string | YES | HMACトークン |
| pre_chat_form_enabled | boolean | YES | 事前チャットフォーム有効 |
| pre_chat_form_options | jsonb | YES | 事前チャットフォームオプション |
| hmac_mandatory | boolean | YES | HMAC必須 |
| continuity_via_email | boolean | NO | メール継続有効 |
| allowed_domains | text | YES | 許可ドメイン |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 19. channel_email

メールチャネル設定。メール受信用チャネルの設定を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | integer | NO | アカウントID（FK） |
| email | string | NO | メールアドレス |
| forward_to_email | string | NO | 転送先メールアドレス |
| imap_enabled | boolean | YES | IMAP有効 |
| imap_address | string | YES | IMAPアドレス |
| imap_port | integer | YES | IMAPポート |
| imap_login | string | YES | IMAPログイン |
| imap_password | string | YES | IMAPパスワード |
| imap_enable_ssl | boolean | YES | IMAP SSL有効 |
| smtp_enabled | boolean | YES | SMTP有効 |
| smtp_address | string | YES | SMTPアドレス |
| smtp_port | integer | YES | SMTPポート |
| smtp_login | string | YES | SMTPログイン |
| smtp_password | string | YES | SMTPパスワード |
| smtp_domain | string | YES | SMTPドメイン |
| smtp_enable_starttls_auto | boolean | YES | STARTTLS自動有効 |
| smtp_authentication | string | YES | SMTP認証方式 |
| smtp_openssl_verify_mode | string | YES | OpenSSL検証モード |
| smtp_enable_ssl_tls | boolean | YES | SSL/TLS有効 |
| provider_config | jsonb | YES | プロバイダー設定 |
| provider | string | YES | プロバイダー |
| verified_for_sending | boolean | NO | 送信検証済み |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 20. channel_whatsapp

WhatsAppチャネル設定。WhatsApp Business APIとの連携を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | integer | NO | アカウントID（FK） |
| phone_number | string | NO | 電話番号 |
| provider | string | YES | プロバイダー |
| provider_config | jsonb | YES | プロバイダー設定 |
| message_templates | jsonb | YES | メッセージテンプレート |
| message_templates_last_updated | datetime | YES | テンプレート最終更新日時 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 21. agent_bots

エージェントボット設定。自動応答ボットを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | YES | ボット名 |
| description | string | YES | 説明 |
| outgoing_url | string | YES | 送信URL |
| account_id | bigint | YES | アカウントID（FK） |
| bot_type | integer | YES | ボットタイプ |
| bot_config | jsonb | YES | ボット設定 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 22. captain_assistants

Captain AIアシスタント設定。AI支援機能を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | NO | アシスタント名 |
| account_id | bigint | NO | アカウントID（FK） |
| description | string | YES | 説明 |
| config | jsonb | NO | 設定 |
| response_guidelines | jsonb | YES | 応答ガイドライン |
| guardrails | jsonb | YES | ガードレール |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 23. csat_survey_responses

顧客満足度調査回答。CSAT調査の結果を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| account_id | bigint | NO | アカウントID（FK） |
| conversation_id | bigint | NO | 会話ID（FK） |
| message_id | bigint | NO | メッセージID（FK） |
| rating | integer | NO | 評価 |
| feedback_message | text | YES | フィードバックメッセージ |
| contact_id | bigint | NO | コンタクトID（FK） |
| assigned_agent_id | bigint | YES | 担当エージェントID（FK） |
| csat_review_notes | text | YES | レビューノート |
| review_notes_updated_at | datetime | YES | レビュー更新日時 |
| review_notes_updated_by_id | bigint | YES | レビュー更新者ID（FK） |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 24. companies

企業情報。B2Bコンタクトの所属企業を管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | NO | 企業名 |
| domain | string | YES | ドメイン |
| description | text | YES | 説明 |
| account_id | bigint | NO | アカウントID（FK） |
| contacts_count | integer | YES | コンタクト数 |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

### 25. custom_roles

カスタムロール定義。細かい権限管理のためのカスタムロールを管理。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | bigint | NO | 主キー |
| name | string | YES | ロール名 |
| description | string | YES | 説明 |
| account_id | bigint | NO | アカウントID（FK） |
| permissions | text[] | YES | 権限リスト |
| created_at | datetime | NO | 作成日時 |
| updated_at | datetime | NO | 更新日時 |

## 備考

### データベーストリガー

本システムでは、以下のデータベーストリガーを使用しています:

1. **accounts_after_insert_row_tr**: アカウント作成時に会話用シーケンス（conv_dpid_seq_{account_id}）を作成
2. **conversations_before_insert_row_tr**: 会話作成時にdisplay_idを自動採番
3. **camp_dpid_before_insert**: アカウント作成時にキャンペーン用シーケンス（camp_dpid_seq_{account_id}）を作成
4. **campaigns_before_insert_row_tr**: キャンペーン作成時にdisplay_idを自動採番

### ポリモーフィック関連

以下のテーブルでポリモーフィック関連が使用されています:

- **inboxes.channel**: channel_id + channel_type で各種チャネルテーブルを参照
- **messages.sender**: sender_id + sender_type でUser/Contact/AgentBotを参照
- **notifications.primary_actor / secondary_actor**: ポリモーフィックで各種アクターを参照
- **access_tokens.owner**: owner_id + owner_type でUser/AgentBotを参照
- **taggings**: taggable_id + taggable_type でConversation/Contactを参照

### 外部キー制約

明示的な外部キー制約は以下のみ定義されています:

- active_storage_attachments.blob_id -> active_storage_blobs.id
- active_storage_variant_records.blob_id -> active_storage_blobs.id
- inboxes.portal_id -> portals.id

その他の関連はRails（ActiveRecord）のアプリケーションレベルで管理されています。

### JSONB使用カラム

本システムでは、柔軟なデータ構造のためにJSONB型を多用しています。主な用途:

- **settings/config**: 各種設定データ
- **custom_attributes/additional_attributes**: カスタム属性データ
- **conditions/actions**: 自動化ルールの条件とアクション
- **trigger_rules/audience**: キャンペーン設定
- **content_attributes**: メッセージコンテンツ属性

### ベクトル検索（pgvector）

AI機能のために、以下のテーブルでベクトル埋め込みを使用:

- **article_embeddings.embedding**: 記事の埋め込みベクトル（1536次元）
- **captain_assistant_responses.embedding**: アシスタント応答の埋め込みベクトル（1536次元）
