コンテンツにスキップ

検索はプロダクションビルドでのみ利用可能です。 ローカルでテストするには、サイトをビルドしてプレビューしてください。

ドメインモデル

Speakeasy は店舗と顧客をつなぐコミュニケーションプラットフォームです。小売・サービス業の店舗が顧客と 1対1 のチャットを行い、一括配信で情報を届け、複数チャネルで通知を送ることができます。



テナントの最上位単位。ユーザーはいずれかの Organization に所属し、その配下の Shop を操作します。

プロパティ説明
typeindividual(個人事業主)または group(企業グループ)
parentIdグループの場合、親 Organization の ID
metadataJSONB の拡張情報

ビジネスルール:

  • 1つの Organization に複数の Shop を紐付け可能
  • Organization 間で Shop を移管可能(shop_transfer で履歴追跡)
  • group タイプは階層構造を持てる(parentId)

実際の店舗を表すエンティティ。連絡先管理・チャット・一括配信の基本単位です。

プロパティ説明
chatAvailabilityonline(チャット対応可能)/ away(離席中)
availabilityModeauto(自動切替)/ manual(手動切替)
welcomeMessage顧客がチャットを開始した際に表示されるメッセージ

ビジネスルール:

  • 在席状態は WebSocket 経由でリアルタイムに顧客へ通知
  • auto モードではスタッフの接続状況に応じて自動で online/away を切替
  • purelovers と連携する場合は shop_purelovers で外部 ID を紐付け

顧客情報。1つの Shop に紐付きます。

プロパティ説明
userType顧客分類: 優良 / 普通 / 要注意 / NG
tags自由テキストのタグ配列
groupIds所属グループ ID の配列
userIdVault DB のユーザー ID(ログイン連携時)
index読み仮名(カナ)

ビジネスルール:

  • userId が紐付くと、その顧客はチャットにログイン可能
  • NG ユーザーは一括配信の対象から自動除外
  • Chat NG ステータスにより個別にチャットを制限可能
  • purelovers 連携時は contact_purelovers で外部プロフィールを保持

店舗と顧客の 1対1 チャットルーム。

プロパティ説明
roomId{shopId}:{contactId} 形式の複合キー
customerEntered顧客がチャットに参加済みか
lastMessage最新メッセージのプレビューテキスト
lastMessageAt最新メッセージの送信日時
lastUserMessageAt最新の「顧客からの」メッセージ日時

ビジネスルール:

  • 1つの Shop と 1つの Contact の組み合わせに対して最大1つの ChatRoom
  • lastUserMessageAt は店舗側の一覧ソートに使用(システムメッセージを除外)
  • customerEnteredfalse の場合、顧客側にはルームを非表示

チャットルーム内の個別メッセージ。

プロパティ説明
messageTypenormal(通常)/ advertisement(広告)/ broadcast(一括配信)/ system(システム)
contentTypetext / html
displayDays表示期限(日数、デフォルト90日)
metadataJSONB の拡張情報(一括配信 ID 等)

ビジネスルール:

  • displayDays 経過後のメッセージは自動的に非表示
  • 一括配信メッセージは broadcast タイプで metadata に broadcastId を保持
  • 添付ファイルは chat_attachment テーブルで R2 上のファイルを参照

複数の顧客に対して同一メッセージを一括送信するタスク。

ビジネスルール:

  • 配信条件(criteria)はタグ・ユーザー種別・グループ・purelovers 状態の組み合わせ
  • 配信予定が8時間以内の場合は直接 QUEUED に移行
  • 失敗時は最大3回リトライ(300秒間隔)
  • 送信は5,000件単位でバッチ処理

ロール説明主な権限
ownerオーナー全権限、Organization 削除
admin管理者メンバー管理、設定変更
memberメンバーチャット、連絡先操作、一括配信
staffスタッフチャットのみ(限定的)
ロール説明
user一般ユーザー
adminPenthouse 管理者(全テナント横断)

顧客・店舗スタッフへの通知は複数チャネルで配信可能です。

チャネル説明対象
BOXアプリ内通知ボックス店舗スタッフ
PUSHWeb Push 通知(VAPID)店舗スタッフ・顧客
LINELINE メッセージ通知店舗スタッフ
EMAILメール通知(Resend)店舗スタッフ

通知タイプごとにチャネルの有効/無効を設定できます(shop_notification_setting)。


purelovers は外部のロイヤリティプラットフォームです。

  • セッション発行: purelovers の API キーで Tap 経由の Bearer トークンを取得
  • 連絡先同期: purelovers ユーザー → Contact + ContactPurelovers
  • 店舗同期: purelovers 店舗 → ShopPurelovers
  • Webhook: 店舗更新・スケジュール変更・レビュー投稿等のイベントを受信
  • 店舗に LINE アカウントを紐付け(shop_line_account
  • LIFF(LINE Front-end Framework)でチャット UI を LINE 内で提供
  • 通知チャネルとして LINE Messaging API を使用