L-MEMORY — SETUP

buggy事務所 L-memory LINE bot セットアップ手順

2026-06-15 作成 / 2026-06-16 更新 / 作成: gyoza (AI) / 対象: buggy事務所 / client_name=buggy ・ port 8011

稼働状況(2026-06-16時点): LINE Webhook → 200 OK で安定受信、グループ初回検出で同意文の自動投稿を確認、メッセージの記録も動作中。管理画面(ダッシュボード)も公開済み(→ §6)。
前提: L-memory と castboard は別サービスです。本 bot は castboard には書き込みません(supabase_enabled: false)。会話の記録は L-memory 側(SQLite + 管理ダッシュボード)で運用します。運営(受託)は noisiii / aifarm、LINE OA 名義は buggy事務所(管理者)=委託運用です。

■ buggy事務所にご記入・ご用意いただくもの

bot のセットアップにあたり、buggy事務所(クライアント)側で以下を決めて/用意していただきます。難しいものはありません。

区分項目備考
A. bot の見た目・名義アカウント表示名例「buggy サポート」(20文字以内)
アイコン画像正方形 640×640(jpg/png)
あいさつ文/プロフィール友だち追加時の文言
運用主体の正式社名・所在地・連絡先認証済アカウント申請に使用
B. 取り込む対象bot を入れる社外グループの一覧事務所/クライアント/外注(想定10–20グループ/人)。社内はSlack維持
各グループの種別クライアント/代理店/外注(制作・カメラ)等
C. 通知先・運用Slack 通知先(2系統)運営早見用/事務所向け の incoming webhook
社内メンバー(8–9名)と権限誰が承認・閲覧するか
課題別の出力先の希望①動画制作スケジュール=台帳/スプシ ②SNS運用=過去会話の引当
D. 法務・同意同意文の事務所名・担当窓口下記§5の {{事務所名}}/{{担当窓口}} に差し込む実名
プライバシーポリシーの有無・掲載先URL があれば
会話記録への社内周知方法メンバーへの説明・同意の取り方
保存期間・削除ポリシーの希望なければ標準でOK
E. キーワード(任意)追加で拾いたい語/除外したい語既定の事務所向けセット+3課題語は設定済

0. 全体像

記録・ルーティング・同意文の自動投稿のコアは実装済み。残るのは ① LINE OA 作成 → ② secret 投入 → ③ LaunchAgent 配置の3手順(手動)。社内案件は Slack 維持のため、LINE bot は社外グループ(事務所/クライアント/外注)中心に入れます。

項目値 / 状態
client_name / portbuggy / 8011
configclients/buggy/config.yaml 作成済
同意文 consent_message設定済(グループ初回検出時に1回投稿)
LaunchAgent テンプレlaunchd/com.line-memory.buggy.plist 用意済
castboard 連携無効(別サービス)

1. LINE 公式アカウント作成(buggy事務所名義・手動)

公開経路: Mac mini の localhost:8011Cloudflare Tunnelcloudflared)で line-buggy.itochaso.biz として公開。LINE が名前解決できる独自ドメイン経由のため *.ts.net 直当てのような「名前解決ができないドメイン」エラーは起きません。

2. secret を env(LaunchAgent の EnvironmentVariables)に設定

環境変数名に注意: config.py<CLIENT>_LINE_SECRET / <CLIENT>_LINE_TOKEN 形式で読み込みます(client_name=buggy なので下記)。LINE_BUGGY_* ではありません。
# LaunchAgent plist の EnvironmentVariables に設定(chmod 600・repo にコミットしない)
BUGGY_LINE_SECRET   = <channel secret>
BUGGY_LINE_TOKEN    = <channel access token>
# 共通(既存と同じものを利用): CLAUDE_BRIDGE_URL / CLAUDE_BRIDGE_TOKEN
#   ※ claude -p subscription 経路。ANTHROPIC_API_KEY は使わない
#   ※ supabase_enabled:false のため SUPABASE_* は不要
# Slack 通知を使う場合のみ: BUGGY_SLACK_WEBHOOK = <incoming webhook>

3. LaunchAgent 配置・起動

既存 misao / hjax / sonoro / noisiii は停止しない。buggy インスタンスのみ追加 load。
cp ~/Projects/LINE-MEMORY/launchd/com.line-memory.buggy.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.line-memory.buggy.plist

4. 動作確認

tail -f /tmp/line-memory-buggy.log   # 起動・グループ検出・同意文投稿ログ

5. 同意フロー(実装済み仕様)

オプトアウト方式: bot がグループ参加(初回検出)時に同意文を1回投稿。同意できない参加者は退出してもらう運用。push 失敗は致命にせずログ警告(記録は継続)。
【ご連絡】このグループのやり取りは、buggy(タレント事務所)の業務管理
(案件・スケジュール・引き継ぎの記録)のため、記録・整理させていただきます。
記録にご同意いただけない場合は、お手数ですがこのグループからご退出ください。
ご不明点は担当までご連絡ください。

設計: LINE-MEMORY/docs/CONSENT-FLOW-DESIGN.md / 課題マッピング: 動画制作スケジュール把握・SNS運用の過去会話引当・社内はSlack維持。

6. 管理画面(ダッシュボード)

公開済み: 記録されたメッセージ・メモをグループ別/DM別に閲覧できる読み取り専用ダッシュボードです。Basic 認証付き。
項目
URLhttps://buggy-dash.itochaso.biz
認証Basic 認証(ID: buggy / パスワードは別途お渡し)
公開経路Mac mini localhost:8021 → Cloudflare Tunnel
権限読み取り専用(閲覧のみ。bot への送信や設定変更は不可)

できること

運用メモ: ダッシュボードは社内・運営向けです。会話記録という機微情報を扱うため、Basic 認証のパスワードは関係者のみに共有してください。閲覧 URL を第三者に転送しないでください。

実装: LINE-MEMORY/buggy_dashboard.py(port 8021・read-only・Basic 認証)/ LaunchAgent com.line-memory.buggy-dash.plist

7. Slack ルーティング(LINEグループ → Slack)

ルーティングは2層で設定します。重要メッセージ(重要度スコア ≥ 閾値)のみが Slack に送られます。
設定箇所用途
① 既定(全グループ共通)clients/buggy/config.yamlslack_destinations(webhook は env SLACK_BUGGY_WEBHOOKすべてのグループの重要メッセージを1つの Slack チャンネルへ。閾値 min_score(既定 0.7)
② グループ別ルーティング管理画面 https://line-buggy.itochaso.biz/admin(Basic 認証 ID: ax)の各グループ「設定」ボタングループごとに Slack webhook / チャンネル / 閾値 / 追加キーワード を個別指定。保存即反映(再起動不要)

設定手順(グループ別)

  1. /admin を開く(または §6 ダッシュボードで対象グループの group_id を確認)
  2. 対象グループの行の「設定」→ Slack Webhook URL・チャンネル名・最低スコア閾値・追加キーワードを入力して保存
  3. 以降、そのグループの該当メッセージは指定 Slack チャンネルへ届く
有効化に必要: Slack 連携をオンにするには Slack Incoming Webhook URL(Slack ワークスペース側で発行)が必要です。
・全グループ共通で良い → その URL を SLACK_BUGGY_WEBHOOK に設定
・グループ別に分けたい → /admin で各グループに URL を設定
※ キーワード事前フィルタ(config.yamlkeywords)に一致 → AI で重要度判定 → 閾値超のみ通知、の順で送信されます。

8. 画像・ファイルの取り込み(メディア)

稼働中(2026-06-16〜): グループ/DM に送られた 画像・動画・音声・ファイルを自動で取り込み、保存します。
項目内容
対象画像 / 動画 / 音声 / ファイル添付(テキストと同じく時系列で記録)
保存先① Mac mini ローカル(表示用キャッシュ)② Cloudflare R2 lmemory-buggy-media(クライアント単位バケット・耐久保存)
閲覧§6 ダッシュボードの会話一覧にサムネイル/再生プレーヤー/ダウンロードリンクで表示(Basic 認証ゲート)
設定config.yamlmedia_capture: true(buggy は有効化済み)

実装: media_store.py(ローカル保存+R2アップロード)/ main.py handle_media_messagedb.media テーブル / ダッシュボード /media/<id> 配信。R2 アップロードは wrangler 経由(既存 Cloudflare アカウントトークン使用、S3 キー発行不要)。2026-06-16: ファイルの最終保管を Google Drive にする方針(R2 は暫定の受け皿)。buggy が §9 でドライブを接続すると自動で Drive にも保存(media_store._drive_upload_sync)。

9. ワンクリック接続(Slack / Google Drive)準備中(運営の初期設定待ち)

buggy 担当者向け接続ページ: https://connect-buggy.itochaso.biz
ボタンを押すだけで、自分の Slack のチャンネルGoogle Drive を接続できます(Slack bot 発行などの作業は不要)。
buggy 側の手順(クリックのみ):
① 上記ページを開く → ②「Slackを接続」を押す → 自分のワークスペースで通知先チャンネルを選んで許可
③「Google Driveを接続」を押す → 自分の Google を許可(フォルダ「buggy LINEメディア」が自動作成され、以降の画像・ファイルがそこに保存)

9-1. 運営側の一度きりの初期設定(伊藤さん)

OAuth の「アプリ登録」だけは運営側で一度行います。完了後 buggy はクリックのみで接続できます。

① Slack アプリ(incoming-webhook

  1. api.slack.com/appsCreate New App → From scratch(任意の自分のワークスペースで作成)
  2. OAuth & Permissions → Redirect URLs に https://connect-buggy.itochaso.biz/slack/callback を追加
  3. 同画面 Scopes に incoming-webhook を追加
  4. Manage Distribution → Activate Public Distribution(外部ワークスペース=buggy にインストール可能にする)
  5. Basic InformationClient ID / Client Secret をコピーして運営(伊藤)へ → 設定すると buggy のボタンが有効化

② Google ウェブ OAuth クライアント(Drive)

  1. Google Cloud Console → プロジェクト選択/作成 → Google Drive API を有効化
  2. OAuth 同意画面: External、アプリ名・サポートメール入力、スコープに .../auth/drive.file を追加、テストユーザーに buggy の Google アカウントを追加(未審査警告の回避)
  3. 認証情報 → OAuth クライアント ID → 種類「ウェブアプリケーション」
  4. 承認済みのリダイレクト URI: https://connect-buggy.itochaso.biz/google/callback
  5. Client ID / Client Secret をコピーして運営(伊藤)へ
受け取り後(運営): connect サービス(と bot)の env に SLACK_CLIENT_ID/SECRETGOOGLE_CLIENT_ID/SECRET を設定して再起動 → 接続ページのボタンが「準備中」から有効に変わります。

実装: connect_app.py(port 8022・connect-buggy.itochaso.biz)/ db.connections テーブル / Slack=OAuth v2 incoming-webhook、Google=drive.file offline。接続情報は bot が参照(Slack 通知先へ併合、メディアは Drive へ保存)。