OpenClaw

OpenClaw Nextcloud Talk チャンネル

エンタープライズ
普通

OpenClawをNextcloud Talkに接続します。Nextcloud Talkは、Nextcloudエコシステムに組み込まれたプライバシー重視のエンタープライズコミュニケーションプラットフォームです。この統合はWebhookベースのBotアーキテクチャを使用しており、Nextcloud TalkがWebhook経由でメッセージイベントをGatewayに送信し、BotがTalk REST APIを通じて応答します。これにより、AIアシスタントがセルフホスト型のNextcloud環境内で、ダイレクトメッセージ、ルームでの会話、絵文字によるメッセージへのリアクションに参加できるようになります。

基本情報
難易度普通
カテゴリエンタープライズ
対応機能数4 / 6

Nextcloud Talk 対応機能

テキストメッセージ

対応

メディア・ファイル

対応

リアクション

対応

スレッド

非対応

音声メッセージ

非対応

グループチャット

対応

Nextcloud Talk 前提条件

  • 管理者アクセス権を持ち、TalkアプリがインストールされたNextcloudサーバー(v27.1以降)
  • Webhook署名検証用の共有シークレット(40〜128文字)
  • NextcloudサーバーからアクセスできるGatewayのWebhookエンドポイント(パブリックURLまたは内部ネットワーク)
  • OpenClaw Gatewayがインストールされ、稼働していること
  • 'openclaw plugins install @openclaw/nextcloud-talk' でインストールされたNextcloud Talkプラグイン

Nextcloud Talk クイックセットアップ

1

Nextcloud Talkプラグインをインストールする

'openclaw plugins install @openclaw/nextcloud-talk' を実行して、GatewayにNextcloud Talkサポートを追加します。

2

NextcloudサーバーにBotを登録する

NextcloudサーバーにSSHで接続し、OCCコマンドを実行します: ./occ talk:bot:install "OpenClaw" "<shared-secret>" "<webhook-url>" --feature reaction。<shared-secret> を40文字以上の強力なシークレットに、<webhook-url> をGatewayの外部アクセス可能なWebhookエンドポイント(例: https://gateway.example.com:8788/webhook)に置き換えてください。

3

Botを有効化して設定する

Nextcloud Talkのルーム設定でOpenClaw Botを有効にします。次に、~/.openclaw/openclaw.json にbaseUrlとbotSecretを含むチャネル設定を追加します。'openclaw start' でGatewayを起動し、ルームでメッセージを送信して接続を確認してください。

Nextcloud Talk 設定例

config.json
{
  "channels": {
    "nextcloud-talk": {
      "enabled": true,
      "baseUrl": "https://nextcloud.example.com",
      "botSecret": "your-shared-secret-min-40-chars",
      "dmPolicy": "pairing"
    }
  }
}

Nextcloud Talk 詳細ドキュメント

アーキテクチャ概要

OpenClawはTalk Bot API(Nextcloud 27.1以降で利用可能)を通じてNextcloud Talkと統合します。アーキテクチャはWebhookベースです: 1. Botは、共有シークレットとWebhook URLを指定してOCCコマンドラインツールを使用し、Nextcloudサーバーに登録されます。 2. Botが有効になっているルームにメッセージが投稿されると、Nextcloud Talkは共有シークレットで署名されたメッセージペイロードを含むHTTP POSTを設定済みのWebhook URLに送信します。 3. GatewayはWebhook署名を検証し、AIエージェントを通じてメッセージを処理し、Talk REST APIを使用して会話に応答を投稿します。 この設計により、GatewayはNextcloudサーバーからアクセス可能なWebhookエンドポイントを公開する必要があります。Webhookリスナーはデフォルトでポート8788で動作し、webhookPortおよびwebhookHost設定オプションでカスタマイズできます。
Webhook URLはNextcloudサーバーから到達可能である必要があります。ローカル開発では、ngrokなどのトンネルサービスを使用してください。
各Botインストールにより、メッセージのアクターIDとして使用される一意のURLハッシュ(bot-<hash>)が生成されます。

OCCによるBot登録

Nextcloud Talk Botは、OCC(Nextcloud Command Console)コマンドを使用してサーバーに登録されます。これはSSHまたはコンソールアクセスが必要なサーバーサイドの操作です。 Botをインストールするには: ./occ talk:bot:install "OpenClaw" "<secret>" "<webhook-url>" --feature reaction パラメータ: ・name(必須): メッセージの送信者として表示される表示名(1〜64文字) ・secret(必須): Webhook署名検証用の共有シークレット(40〜128文字) ・url(必須): GatewayのWebhookエンドポイントURL ・--feature: Botの機能 — 絵文字リアクションを有効にするには 'reaction' を使用 ・--no-setup: モデレーターがルームごとにBotを切り替えることを防止 その他の便利なOCCコマンド: ・talk:bot:list — インストール済みの全Botを一覧表示 ・talk:bot:remove <bot-id> — 特定の会話からBotを削除 ・talk:bot:setup <bot-id> <token> — 会話でBotを有効化 ・talk:bot:state <bot-id> <state> — Botの状態を変更(0=無効、1=有効、2=no-setup) ・talk:bot:uninstall <id> — サーバーからBotを完全に削除
Terminal
./occ talk:bot:install "OpenClaw" "a]72@Bz&V!LKMO*xhQib7p^E%yzGMG(8a7Bp*x6o" "https://gateway.example.com:8788/webhook" --feature reaction
強力な共有シークレットを生成するには: openssl rand -base64 48
Botが絵文字でメッセージにリアクションできるようにするため、--feature reaction フラグの使用を推奨します。

DMポリシー

ダイレクトメッセージ(DM)ポリシーは、Botがプライベートな1対1の会話をどのように処理するかを制御します。 **pairing(デフォルト)** — 不明な送信者にはペアリングコードが送信され、Botが応答する前に検証が必要です。これは明示的なユーザー認証を必要とする最もセキュアなモードです。 **open** — Botにメッセージを送信したすべてのユーザーに応答します。allowFromを["*"]に設定する必要があります。 **disabled** — Botはダイレクトメッセージに一切応答しません。 注: Nextcloud Talk BotはDMを開始できません。ユーザーが最初にBotにメッセージを送信する必要があります。allowFromフィールドはNextcloudユーザーID(表示名ではなく)に一致します。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "dmPolicy": "pairing",
      "allowFrom": ["user-id-1", "user-id-2"]
    }
  }
}
Nextcloud Talk ではBotからダイレクトメッセージを開始することはできません。会話を開始するには、ユーザーが先にBotに連絡する必要があります。

ルーム設定

ルーム(グループチャット)ポリシーは、Botがどの会話に参加し、どのようにトリガーされるかを制御します。 **allowlist(デフォルト)** — Botは、モデレーターがルーム設定で明示的に有効にしたルームでのみ応答します。 ルームごとの設定はroomsオブジェクトを使用してカスタマイズできます。各ルームは会話トークンで識別され、個別の設定を持つことができます: ・requireMention — trueの場合、Botは@メンションされた場合のみ応答します(ルームでのデフォルト動作) ・設定に記載されていないルームはデフォルトのルーム設定を使用します ルームのトークンを確認するには、Nextcloud TalkでルームのURLを参照してください(例: https://nextcloud.example.com/call/<token>)。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "groupPolicy": "allowlist",
      "rooms": {
        "abc123token": {
          "requireMention": true
        },
        "def456token": {
          "requireMention": false
        }
      }
    }
  }
}
Botがメッセージを受信するには、ルームのモデレーターがルーム設定でBotを有効にする必要があります。
頻繁にメッセージが投稿されるルームでは、Botがすべてのメッセージに応答しないよう requireMention: true を使用してください。

ルーム検出用のAPI認証情報

デフォルトでは、Nextcloud TalkからのWebhookペイロードはダイレクトメッセージとルームメッセージを区別しません。正確なルームタイプの検出を有効にするために、API認証情報を提供できます。 apiUserとapiPasswordが設定されている場合、Gatewayは受信メッセージがDMかルーム会話かを判定するための追加APIコールを行います。これにより、Botは異なるポリシー(dmPolicyとgroupPolicy)を正しく適用できます。 API認証情報がない場合、Botはすべてのメッセージを統一されたポリシーに従って処理します。シンプルなデプロイメントではこれで十分な場合があります。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "apiUser": "bot-service-account",
      "apiPassword": "service-account-password",
      "apiPasswordFile": "/run/secrets/nc-api-password"
    }
  }
}
API認証情報には、管理者アカウントではなく専用のNextcloudユーザーアカウントを作成してください。
設定ファイルにパスワードを直接保存する代わりに、apiPasswordFileを使用してファイル(例: Dockerシークレット)からパスワードを読み込んでください。
API認証情報がないと、BotはDMとルームメッセージを区別できません。DMのみのポリシーが正しく機能しない場合があります。

Webhook設定

GatewayはNextcloud TalkからのWebhookイベントを受信するために、組み込みのHTTPサーバーを起動します。Webhookリスナーの設定は、サーバーがどのように、どこでリッスンするかを制御します。 **webhookPort**(デフォルト: 8788)— Webhook HTTPサーバーのポート。 **webhookHost**(デフォルト: 0.0.0.0)— バインドするインターフェース。すべてのインターフェースでリッスンするには0.0.0.0を、localhostのみの場合は127.0.0.1を使用します。 **webhookPath** — WebhookエンドポイントのカスタムURLパス。 **webhookPublicUrl** — NextcloudがWebhookに到達するために使用する完全なパブリックURL。リバースプロキシやNATの背後にある場合に必要です。 Botインストール時(OCCコマンド)に指定するWebhook URLは、このリスナーに解決されるパブリックURLと一致する必要があります。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "webhookPort": 8788,
      "webhookHost": "0.0.0.0",
      "webhookPath": "/webhook",
      "webhookPublicUrl": "https://gateway.example.com:8788/webhook"
    }
  }
}
リバースプロキシの背後で実行している場合は、webhookPublicUrlを外部アクセス可能なURLに設定してください。
ファイアウォールがNextcloudサーバーからのWebhookポートへのインバウンド接続を許可していることを確認してください。

メッセージ処理とストリーミング

OpenClawは、メッセージのチャンク分割とNextcloud Talkへの配信を細かく制御できます。 **textChunkLimit** — メッセージチャンクあたりの最大文字数。Nextcloud Talkは長いメッセージをサポートしていますが、AIの長い応答の可読性を向上させるためにチャンク分割が役立ちます。 **chunkMode** — テキストの分割方法を制御します: 'length' は文字数制限で分割し、'newline' はより自然な区切りのために段落境界で分割します。 **blockStreaming** — 有効にすると、Botは部分的な応答をストリーミングする代わりに、AIの完全な応答を待ってから送信します。 **blockStreamingCoalesce** — ブロックストリーミングが有効な場合、最終的な応答を複数のチャンクではなく単一のメッセージにまとめます。 **mediaMaxMb** — メディア添付ファイルの最大ファイルサイズ(MB単位)。Nextcloud Talkはファイルの直接アップロードではなくURLとしてメディアを送信する点に注意してください。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "textChunkLimit": 4000,
      "chunkMode": "newline",
      "blockStreaming": true,
      "blockStreamingCoalesce": true,
      "mediaMaxMb": 10
    }
  }
}
複数のユーザーがアクティブなルームでは、クリーンな応答のために blockStreaming: true を使用してください。
Nextcloud TalkではメディアはURLとして共有されます。Botはファイルを直接アップロードすることはできません。

会話履歴

AIエージェントが新しいメッセージを処理する際に、コンテキストとして含める過去のメッセージ数を制御します。 **historyLimit** — ルーム会話に含める過去のメッセージの最大数。 **dmHistoryLimit** — ダイレクトメッセージ会話に含める過去のメッセージの最大数。ルームの履歴制限とは独立して設定できます。 DMごとのオーバーライドもサポートされており、特定のユーザーに対して異なる履歴制限を設定できます。 履歴制限を高く設定するとAIにより多くのコンテキストが提供されますが、トークン使用量と処理時間が増加します。
openclaw.json
{
  "channels": {
    "nextcloud-talk": {
      "historyLimit": 20,
      "dmHistoryLimit": 50
    }
  }
}

リアクション対応

Nextcloud Talkはメッセージへの絵文字リアクションをサポートしており、OpenClaw Botはリアクションの読み取りと追加の両方が可能です。 リアクション対応を有効にするには、OCCインストール時に --feature reaction フラグを指定してBotを登録する必要があります。有効にすると、AIエージェントはユーザーのメッセージに絵文字でリアクションして、確認やフィードバックを提供できます。 リアクションは、完全なテキスト応答を投稿せずにBotが対話するための軽量な方法です。例えば、完了したタスクを確認するためにチェックマーク絵文字でリアクションできます。 Nextcloud Talk Reaction API(bots-v1ケーパビリティ以降で利用可能)がリアクションの追加と削除の内部メカニズムを処理します。
リアクションを機能させるには、Botインストール時に --feature reaction フラグを設定する必要があります。
リアクションは、頻繁に使用されるルームでの控えめな確認メカニズムとして使用できます。

セキュリティとWebhook署名

Nextcloud Talkからのすべてのwebhookペイロードは、Botインストール時に設定された共有シークレットを使用して署名されます。Gatewayは各署名を検証して、真正性と完全性を確認します。 署名メカニズムはHMAC-SHA256を使用します: 1. Nextcloudが共有シークレットを使用してWebhookペイロードボディのHMAC-SHA256ハッシュを計算します。 2. 署名はWebhookリクエストのHTTPヘッダーに含まれます。 3. Gatewayが独立してハッシュを計算し、受信した署名と比較します。 4. 署名が一致しない場合、リクエストは拒否されます。 これにより、Nextcloudサーバーからの正当なリクエストのみが処理されます。共有シークレットを機密に保ち、新しいシークレットでBotを再インストールして定期的にローテーションしてください。
暗号学的に強力なシークレットを使用してください: openssl rand -base64 48 で適切な値を生成できます。
バージョン管理にシークレットをコミットしないよう、botSecretFileを使用してシークレットを保存してください。
共有シークレットをパブリックリポジトリやログに公開しないでください。本番デプロイメントでは環境変数またはシークレットファイルを使用してください。

Nextcloud Talk 設定リファレンス

enabled
Type: booleanDefault: true

Nextcloud Talkチャネルの有効化または無効化

baseUrl
Type: stringDefault: ""

NextcloudサーバーのフルURL(例: https://nextcloud.example.com)

botSecret
Type: stringDefault: ""

Webhook署名検証に使用する共有シークレット(OCCインストール時のシークレットと一致する必要あり)

botSecretFile
Type: stringDefault: ""

共有シークレットを含むファイルのパス(インラインのbotSecretの代替)

apiUser
Type: stringDefault: ""

APIコール用のNextcloudユーザー名(ルームタイプの検出に使用)

apiPassword
Type: stringDefault: ""

APIユーザーアカウントのパスワード

apiPasswordFile
Type: stringDefault: ""

APIパスワードを含むファイルのパス(インラインのapiPasswordの代替)

dmPolicy
Type: stringDefault: "pairing"

DMアクセスポリシー: 'pairing'(検証コード)、'open'(全ユーザー)、または 'disabled'(DM無効)

allowFrom
Type: string[]Default: []

BotへのDMが許可されるNextcloudユーザーID(オープンアクセスには["*"]を使用)

groupPolicy
Type: stringDefault: "allowlist"

ルームアクセスポリシー: 'allowlist'(モデレーターが有効にしたルームのみ)

webhookPort
Type: numberDefault: 8788

組み込みWebhook HTTPサーバーのポート

webhookHost
Type: stringDefault: "0.0.0.0"

Webhookサーバーをバインドするインターフェース

webhookPath
Type: stringDefault: "/webhook"

WebhookエンドポイントのURLパス

webhookPublicUrl
Type: stringDefault: ""

WebhookエンドポイントのフルパブリックURL(リバースプロキシの背後で必要)

historyLimit
Type: numberDefault: 20

ルーム会話のコンテキストとして含める過去のメッセージの最大数

dmHistoryLimit
Type: numberDefault: 50

DM会話のコンテキストとして含める過去のメッセージの最大数

textChunkLimit
Type: numberDefault: 4000

メッセージチャンクあたりの最大文字数

chunkMode
Type: stringDefault: "length"

テキスト分割モード: 'length'(文字数制限)または 'newline'(段落境界)

blockStreaming
Type: booleanDefault: false

AIの完全な応答を待ってから送信(ストリーミングなし)

blockStreamingCoalesce
Type: booleanDefault: false

ストリーミングチャンクを単一の最終メッセージにまとめる

mediaMaxMb
Type: numberDefault: 10

メディアURL参照の最大ファイルサイズ(MB単位)

Nextcloud Talk よくある質問

Nextcloud Talk トラブルシューティング

Botがメッセージに応答しない

Webhook URLに到達できない、ルームでBotが有効になっていない、または共有シークレットが一致しない。

Webhook URLがNextcloudサーバーからアクセス可能であることを確認してください(curlでテスト)。ルーム設定でBotが有効になっていることを確認してください。openclaw.jsonのbotSecretがOCCインストールコマンドで使用したシークレットと一致していることを確認してください。
Webhook署名の検証に失敗する

openclaw.jsonの共有シークレットがBotインストール時に使用されたものと一致しない。

両方のシークレットが正確に一致していることを確認してください。不明な場合は、既知のシークレットでBotをアンインストールして再インストールしてください。署名不一致エラーについてGatewayログを確認してください。
BotがDMでは応答するがルームでは応答しない

対象ルームでモデレーターによりBotが有効になっていない、またはrequireMentionがtrueでBotが@メンションされていない。

ルームのモデレーターにルーム設定でBotを有効にするよう依頼してください。requireMentionが設定されている場合、ユーザーがBot名を@メンションしていることを確認してください。openclaw.jsonのrooms設定を確認してください。
DMとルームメッセージを区別できない

API認証情報(apiUser、apiPassword)が設定されていない。

nextcloud-talkチャネル設定にapiUserとapiPasswordを追加してください。この目的のために専用のNextcloudサービスアカウントを作成してください。Gatewayはこれらの認証情報を使用してTalk APIに会話タイプの検出を問い合わせます。
GatewayがWebhookリスナーの起動に失敗する

設定されたWebhookポートが既に使用されているか、ホストバインディングが無効。

webhookPortを利用可能なポートに変更してください(デフォルト: 8788)。特定のインターフェースにバインドする場合は、webhookHostのIPアドレスが正しいことを確認してください。'lsof -i :8788' または 'netstat -tlnp' でポートの競合を確認してください。