コンテンツにスキップ

Outbound Session Mirroring の改善:メッセージ履歴を正しく同期する方法

メッセージを送信したはずなのに、チャットの履歴がバラバラになってしまった経験はありませんか?あるいは、ボットからの返信がユーザーの画面で正しいスレッドに表示されないといった問題です。マルチチャネルのメッセージングアプリを扱っていると、こうしたセッション管理の不整合はよく起こる悩みです。

これまでのシステムでは、送信したメッセージが「送信元」のセッションに記録されてしまい、本来の宛先であるチャットセッションに正しく反映されないことがありました。今回のアップデートでは、このルーティングロジックを刷新し、送信メッセージが常に正しい宛先のセッションにミラーリングされるように改善しました。

この機能を動作させるために必要な要素は以下の通りです。

  • Core および plugin のチャネルルーティング設定
  • Gateway の送信設定
  • 対応する各拡張機能(Slack, Discord, Telegram, Matrix, MS Teams, Mattermost, BlueBubbles, Nextcloud Talk, Zalo, Nostr, Tlon)

アウトバウンドメッセージを正しいセッションに紐付けるための新しい流れを説明します。5分ほどで概要を把握できます。

1. セッションルーティングの解決

Section titled “1. セッションルーティングの解決”

新しいヘルパー関数 resolveOutboundSessionRoute を使用します。これは buildAgentSessionKey を使い、dmScope や identityLinks に基づいてターゲットとなる sessionKey を作成します。

2. セッションエントリの自動作成

Section titled “2. セッションエントリの自動作成”

セッションが存在しない場合でも、ensureOutboundSessionEntry が recordSessionMetaFromInbound を介して最小限の MsgContext を書き込みます。これにより、最初のメッセージ送信時に自動的にセッションが作成されます。

Gateway から送信する場合、sessionKey を省略できるようになりました。省略した場合、システムがターゲットとデフォルトの agent から sessionKey を自動的に導き出し、そこにミラーリングを行います。

4. 各プラットフォームの正規化

Section titled “4. 各プラットフォームの正規化”

各チャネルの特性に合わせて sessionKey が調整されます。

  • Slack: resolveThreadSessionKeys を使用し、スレッド ID をサフィックスとして付与します。
  • Discord: インバウンドと一致させるため、useSuffix=false でスレッド ID を処理します。
  • Telegram: トピック ID を chatId:topic:<id> の形式にマッピングします。
  • Mattermost: DM のセッションキー作成時に @ を除去します。

設定中に発生する可能性のある問題と解決策です。

  • Voice-call plugin で履歴が同期されない 現在、Voice-call plugin は voice:<phone> というカスタム形式の sessionKey を使用しています。アウトバウンドのマッピングが標準化されていないため、message-tool でボットから発信を行う場合は、個別のマッピング追加を検討してください。

  • 外部プラグインでミラーリングが失敗する 同梱されているプラグイン以外の外部プラグインを使用している場合、From や To のフォーマットが標準と異なると正しくルーティングされないことがあります。フォーマットがインバウンドの形式と一致しているか確認してください。

設定が完了したら、実際にメッセージを送信して、ターゲットのチャネルセッションに正しくメッセージが記録されるかテストしてください。

より詳細な設定や個別のケースについては、AI Setup Assistant で質問してみてください。

関連する実装の詳細は以下のファイルを参照してください。

  • src/infra/outbound/outbound-session.ts
  • src/infra/outbound/outbound-send-service.ts
  • src/infra/outbound/message-action-runner.ts
  • src/gateway/server-methods/send.ts
  • src/agents/tools/message-tool.ts
OpenClaw

OpenClaw Expert

まだ解決しませんか?

このページで解決しない場合は、OpenClaw Expertに直接質問してください。