🧭設計思想
差し替え可能・世界標準の3つの抽象化: 判定エンジン非依存 / 課金メータリング / 通知チャネル抽象化。
Aegis の設計は「差し替え可能・世界標準」を軸にしている。判定エンジン・課金・通知のいずれも、特定の実装に縛らず、後から差し替え・追加できる抽象で組んである。出典は各実装ファイル。確定値・経路は SSoT と整合させている。 ※ここでは設計思想を説明する。性能値や実運用の保証は書かない(実機テスト後に確定)。
🔌 判定エンジン非依存(ベンダーに縛られない)
「どの AI エンジンで通話を処理したか」を session_provider という正準列に一本化し、判定エンジンを差し替え可能にする。特定ベンダーへのロックインを避ける設計。
- 正準値は retell(Route A)/ openai_realtime(Route C)/ local_pipeline(Route B・予約)/ none(AI 非経由)。canonical_engine() が alias(openai / default)を吸収する。
- 入口の SIP 経路(telephony_provider: retell / rhodium 等)と AI エンジン(session_provider)は別次元。Rhodium 経由で Retell が処理した通話は telephony=rhodium × engine=retell。
- 判定ロジックの本体は tools_core(classify_call / transfer_to_human)に集約し、Retell / Realtime 両ルートが同じ core を呼ぶ。分岐は 1 箇所。
主実装: backend/core/engine_canon.py / services/tools_core.py(S1)
🧾 課金メータリング(世界標準の usage-based)
確定した通話ごとに usage_events を append-only で記録する。冪等キーで重複を潰し、PII は持たない。client × engine 別の使用量を集約 API で取り出せる、いわゆる usage-based billing 相当の土台。
- append-only: 記録は書き足すだけ。過去を書き換えない(監査・突合に強い)。
- 冪等キー: 同一通話 × 同一 metric は 1 行に潰れる(webhook 重複配送・リトライでも二重計上しない)。
- PII レス: 電話番号や本文は載せず、client_id × engine × metric × quantity と meta の allowlist キーのみ。
- 確定点のみ from 記録: Retell は _finish_call、Realtime は /end。pending 行からは記録しない(二重計上の第1段防止)。
- 集約 API(GET /api/usage): client × engine × 期間で取り出す。ロール境界つき(越境 client_id は 404)。
主実装: backend/services/usage_metering.py / models/usage_event.py / api/usage.py(S2/M1)
📢 通知チャネル抽象化(宛先を後から足せる)
通知を「共通インターフェース + チャネル実装」に分け、宛先(アプリ / Slack / LINE / メール)を後から差し替え・追加できるようにする。全チャネル既定 OFF で、準備できたものから個別に ON。
- 共通 interface: 各チャネルは is_enabled() と send() を実装するだけ。呼ぶ側はチャネルの中身を知らない。
- 既定 OFF: AEGIS_NOTIFY_<CHANNEL>_ENABLED=true で ON。既定は全部 OFF(意図しない送信を出さない)。
- アプリ最優先: 現状はアプリ通知を主に据え、Slack / LINE / メールは口(インターフェース)だけ用意(実送信は準備でき次第)。
- サイレント退行への配慮: 従来 Slack だけで送っていた挙動を変えるため、ON フラグを deploy 手順に明記する運用(設計上の注意点)。
主実装: backend/notifications/channels.py / dispatcher.py(#44)
特定ベンダー(Retell 等)や特定チャネル(Slack だけ)に縛られると、乗り換え・拡張のたびに コアを書き換えることになる。判定エンジン・課金・通知をそれぞれ抽象の後ろに置くことで、 中身を差し替えてもコアは不変にしている。usage-based billing や PII レスの記録は、 SaaS 課金・監査の世界標準に沿った土台。