---
read_when:
    - راه‌اندازی Matrix در OpenClaw
    - پیکربندی رمزنگاری سرتاسری و تأیید Matrix
summary: وضعیت پشتیبانی Matrix، راه‌اندازی و نمونه‌های پیکربندی
title: ماتریس
x-i18n:
    generated_at: "2026-07-12T09:34:40Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    provider: openai
    source_hash: 42f1775d1f92198d1eafdd8f3e07fcb6921bdc4a5c095ce3e793c260e037e06f
    source_path: channels/matrix.md
    workflow: 16
---

Matrix یک Plugin کانال قابل دانلود (`@openclaw/matrix`) است که بر پایهٔ `matrix-js-sdk` رسمی ساخته شده است. این Plugin از پیام‌های خصوصی، اتاق‌ها، رشته‌ها، رسانه، واکنش‌ها، نظرسنجی‌ها، موقعیت مکانی و رمزنگاری سرتاسری پشتیبانی می‌کند.

## نصب

```bash
openclaw plugins install @openclaw/matrix
```

مشخصات سادهٔ Plugin ابتدا ClawHub و سپس npm را به‌عنوان مسیر جایگزین امتحان می‌کنند. برای اجبار به استفاده از یک منبع، از `openclaw plugins install clawhub:@openclaw/matrix` یا `npm:@openclaw/matrix` استفاده کنید. از یک نسخهٔ محلی: `openclaw plugins install ./path/to/local/matrix-plugin`.

دستور `plugins install`، Plugin را ثبت و فعال می‌کند؛ نیازی به مرحلهٔ جداگانهٔ `enable` نیست. بااین‌حال، کانال تا زمانی که مطابق بخش زیر پیکربندی نشود، کاری انجام نمی‌دهد. برای قواعد عمومی نصب، به [Pluginها](/fa/tools/plugin) مراجعه کنید.

## راه‌اندازی

1. در سرور خانگی Matrix خود یک حساب ایجاد کنید.
2. `channels.matrix` را با `homeserver` و `accessToken`، یا با `homeserver` و `userId` و `password` پیکربندی کنید.
3. Gateway را راه‌اندازی مجدد کنید.
4. یک پیام خصوصی با ربات آغاز کنید یا آن را به اتاقی دعوت کنید. دعوت‌های جدید فقط زمانی پذیرفته می‌شوند که [`autoJoin`](#auto-join) اجازه دهد.

### راه‌اندازی تعاملی

```bash
openclaw channels add
openclaw configure --section channels
```

راهنمای گام‌به‌گام، نشانی اینترنتی سرور خانگی، روش احراز هویت (توکن یا گذرواژه)، شناسهٔ کاربر (فقط برای احراز هویت با گذرواژه)، نام اختیاری دستگاه، فعال‌سازی رمزنگاری سرتاسری و دسترسی به اتاق/پیوستن خودکار را درخواست می‌کند. اگر متغیرهای محیطی منطبق `MATRIX_*` از قبل وجود داشته باشند و حساب اطلاعات احراز هویت ذخیره‌شده‌ای نداشته باشد، راهنما میان‌بری برای استفاده از متغیرهای محیطی ارائه می‌دهد. پیش از ذخیرهٔ فهرست مجاز، نام اتاق‌ها را با `openclaw channels resolve --channel matrix "Project Room"` تفکیک کنید. فعال‌سازی رمزنگاری سرتاسری در راهنما همان فرایند آماده‌سازی [`openclaw matrix encryption setup`](#encryption-and-verification) را اجرا می‌کند.

### پیکربندی حداقلی

مبتنی بر توکن:

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_xxx",
      dm: { policy: "pairing" },
    },
  },
}
```

مبتنی بر گذرواژه (توکن پس از نخستین ورود در حافظهٔ نهان ذخیره می‌شود):

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      userId: "@bot:example.org",
      password: "replace-me", // pragma: allowlist secret
      deviceName: "OpenClaw Gateway",
    },
  },
}
```

### پیوستن خودکار

مقدار پیش‌فرض `channels.matrix.autoJoin` برابر با `"off"` است: تا زمانی که به‌صورت دستی نپیوندید، ربات بر اثر دعوت‌های جدید در اتاق‌ها یا پیام‌های خصوصی تازه ظاهر نمی‌شود. OpenClaw هنگام دعوت نمی‌تواند تشخیص دهد که دعوت مربوط به پیام خصوصی است یا گروه؛ بنابراین هر دعوت ابتدا از `autoJoin` عبور می‌کند و `dm.policy` فقط بعداً، پس از پیوستن ربات و دسته‌بندی اتاق، اعمال می‌شود.

<Warning>
برای محدودکردن دعوت‌های پذیرفته‌شده، `autoJoin: "allowlist"` را همراه با `autoJoinAllowlist` تنظیم کنید، یا برای پذیرش همهٔ دعوت‌ها از `autoJoin: "always"` استفاده کنید.

`autoJoinAllowlist` فقط `!roomId:server`، `#alias:server` یا `*` را می‌پذیرد. نام سادهٔ اتاق رد می‌شود؛ نام‌های مستعار با سرور خانگی تفکیک می‌شوند، نه با وضعیتی که اتاق دعوت‌کننده ادعا می‌کند.
</Warning>

```json5
{
  channels: {
    matrix: {
      autoJoin: "allowlist",
      autoJoinAllowlist: ["!ops:example.org", "#support:example.org"],
      groups: {
        "!ops:example.org": { requireMention: true },
      },
    },
  },
}
```

### قالب‌های مقصد فهرست مجاز

- پیام‌های خصوصی (`dm.allowFrom`، `groupAllowFrom`، `groups.<room>.users`): از `@user:server` استفاده کنید. نام‌های نمایشی به‌طور پیش‌فرض نادیده گرفته می‌شوند، زیرا قابل تغییر هستند؛ `dangerouslyAllowNameMatching: true` را فقط برای سازگاری صریح با نام نمایشی تنظیم کنید.
- کلیدهای فهرست مجاز اتاق (`groups`، نام مستعار قدیمی `rooms`): از `!room:server` یا `#alias:server` استفاده کنید. نام‌های ساده نادیده گرفته می‌شوند، مگر اینکه `dangerouslyAllowNameMatching: true` باشد.
- فهرست‌های مجاز دعوت (`autoJoinAllowlist`): از `!room:server`، `#alias:server` یا `*` استفاده کنید. نام‌های ساده همیشه رد می‌شوند.

### نرمال‌سازی شناسهٔ حساب

راهنما یک نام خوانا را به شناسهٔ نرمال‌شدهٔ حساب تبدیل می‌کند (`Ops Bot` -> `ops-bot`). در نام متغیرهای محیطی محدود به حساب، علائم نگارشی با کد هگز فرار داده می‌شوند تا حساب‌ها با هم تداخل نکنند: `-` (0x2D) به `_X2D_` تبدیل می‌شود؛ بنابراین `ops-prod` به پیشوند محیطی `MATRIX_OPS_X2D_PROD_` نگاشت می‌شود.

### اطلاعات احراز هویت ذخیره‌شده در حافظهٔ نهان

Matrix اطلاعات احراز هویت را در `~/.openclaw/credentials/matrix/` ذخیره می‌کند: `credentials.json` برای حساب پیش‌فرض و `credentials-<account>.json` برای حساب‌های نام‌گذاری‌شده. وقتی اطلاعات احراز هویت ذخیره‌شده وجود داشته باشد، OpenClaw حتی بدون وجود `accessToken` در فایل پیکربندی، Matrix را پیکربندی‌شده در نظر می‌گیرد؛ این وضعیت راه‌اندازی، `openclaw doctor` و بررسی‌های وضعیت کانال را پوشش می‌دهد.

### متغیرهای محیطی

متغیرهای محیطی متناظر با کلیدهای پیکربندی، زمانی استفاده می‌شوند که کلید پیکربندی معادل تنظیم نشده باشد. حساب پیش‌فرض از نام‌های بدون پیشوند استفاده می‌کند؛ حساب‌های نام‌گذاری‌شده، توکن حساب را پیش از پسوند درج می‌کنند (به [نرمال‌سازی](#account-id-normalization) مراجعه کنید).

| حساب پیش‌فرض          | حساب نام‌گذاری‌شده (`<ID>` = توکن حساب) |
| --------------------- | -------------------------------------- |
| `MATRIX_HOMESERVER`   | `MATRIX_<ID>_HOMESERVER`               |
| `MATRIX_ACCESS_TOKEN` | `MATRIX_<ID>_ACCESS_TOKEN`             |
| `MATRIX_USER_ID`      | `MATRIX_<ID>_USER_ID`                  |
| `MATRIX_PASSWORD`     | `MATRIX_<ID>_PASSWORD`                 |
| `MATRIX_DEVICE_ID`    | `MATRIX_<ID>_DEVICE_ID`                |
| `MATRIX_DEVICE_NAME`  | `MATRIX_<ID>_DEVICE_NAME`              |

برای حساب `ops`، نام‌ها به `MATRIX_OPS_HOMESERVER`، `MATRIX_OPS_ACCESS_TOKEN` و مانند آن تبدیل می‌شوند. `MATRIX_HOMESERVER` و هر گونهٔ محدودشدهٔ `*_HOMESERVER` را نمی‌توان از فایل `.env` فضای کاری تنظیم کرد؛ به [فایل‌های `.env` فضای کاری](/fa/gateway/security) مراجعه کنید.

<Note>
کلید بازیابی یک متغیر محیطی متناظر با پیکربندی نیست: OpenClaw هرگز آن را مستقیماً از محیط نمی‌خواند. متن راهنمای CLI پیشنهاد می‌کند برای حساب پیش‌فرض، آن را از طریق متغیر پوسته‌ای با نام `MATRIX_RECOVERY_KEY` و برای حساب نام‌گذاری‌شده از طریق `MATRIX_RECOVERY_KEY_<ID>` (شناسهٔ سادهٔ حساب با حروف بزرگ، بدون فرار هگز) وارد کنید؛ به [تأیید این دستگاه با کلید بازیابی](#verify-this-device-with-a-recovery-key) مراجعه کنید.
</Note>

## نمونهٔ پیکربندی

یک خط مبنای کاربردی با جفت‌سازی پیام خصوصی، فهرست مجاز اتاق و رمزنگاری سرتاسری:

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_xxx",
      encryption: true,

      dm: {
        policy: "pairing",
        sessionScope: "per-room",
        threadReplies: "off",
      },

      groupPolicy: "allowlist",
      groupAllowFrom: ["@admin:example.org"],
      groups: {
        "!roomid:example.org": { requireMention: true },
      },

      autoJoin: "allowlist",
      autoJoinAllowlist: ["!roomid:example.org"],
      threadReplies: "inbound",
      replyToMode: "off",
      streaming: "partial",
    },
  },
}
```

## پیش‌نمایش‌های جریانی

جریان پاسخ Matrix به‌صورت انتخابی فعال می‌شود. `streaming` نحوهٔ ارسال پاسخ در حال تولید دستیار توسط OpenClaw را کنترل می‌کند؛ `blockStreaming` تعیین می‌کند که آیا هر بلوک تکمیل‌شده به‌عنوان پیام مستقل Matrix نگه داشته شود یا خیر.

```json5
{
  channels: {
    matrix: {
      streaming: "partial",
    },
  },
}
```

برای حفظ پیش‌نمایش زندهٔ پاسخ و پنهان‌کردن خطوط موقت ابزار/پیشرفت، از قالب شیء استفاده کنید:

```json5
{
  channels: {
    matrix: {
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: false,
        },
      },
    },
  },
}
```

قالب کامل شیء، `{ mode, preview, progress }` را می‌پذیرد:

```json5
{
  channels: {
    matrix: {
      streaming: {
        mode: "progress",
        progress: {
          label: "auto", // pick from configured or built-in labels (false to hide)
          labels: ["Thinking", "Writing", "Searching"], // candidates for label: "auto"
          maxLines: 8, // max rolling progress lines (default: 8)
          maxLineChars: 120, // max chars per line before truncation (default: 120)
          toolProgress: true, // show tool/progress activity (default: true)
        },
      },
    },
  },
}
```

- `progress.label`: برچسب سفارشی، `"auto"` یا مقدار تنظیم‌نشده برای انتخاب یک برچسب پیکربندی‌شده یا داخلی، یا `false` برای پنهان‌کردن آن.
- `progress.labels`: گزینه‌هایی که فقط وقتی `label` برابر با `"auto"` یا تنظیم‌نشده باشد استفاده می‌شوند.
- `progress.maxLines`: بیشترین تعداد خطوط پیشرفت چرخشی که در پیش‌نویس نگه داشته می‌شوند؛ خطوط قدیمی‌تر پس از عبور از این حد حذف می‌شوند.
- `progress.maxLineChars`: بیشترین تعداد نویسه در هر خط فشردهٔ پیشرفت پیش از کوتاه‌سازی.
- `progress.toolProgress`: وقتی `true` باشد (پیش‌فرض)، فعالیت زندهٔ ابزار/پیشرفت در پیش‌نویس ظاهر می‌شود.

| `streaming`       | رفتار                                                                                                                                                     |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `"off"` (پیش‌فرض) | برای پاسخ کامل منتظر می‌ماند و آن را یک‌بار ارسال می‌کند. `true` <-> `"partial"`، `false` <-> `"off"`.                                                     |
| `"partial"`       | هنگام نوشتن بلوک جاری توسط مدل، یک پیام متنی عادی را درجا ویرایش می‌کند. ممکن است کلاینت‌های استاندارد برای پیش‌نمایش نخست اعلان دهند، نه برای ویرایش نهایی. |
| `"quiet"`         | مانند `"partial"` است، اما پیام یک اعلان بی‌صداست. هنگامی که یک قاعدهٔ ارسال اعلان برای هر کاربر با ویرایش نهایی منطبق شود، گیرندگان یک‌بار مطلع می‌شوند (پایین را ببینید). |
| `"progress"`      | خطوط فشردهٔ پیشرفت را با استفاده از پیش‌نویس پیشرفت، به‌صورت جداگانه ارسال می‌کند.                                                                        |

`blockStreaming` (با مقدار پیش‌فرض `false`) مستقل از `streaming` است:

| `streaming`             | `blockStreaming: true`                                                   | `blockStreaming: false` (پیش‌فرض)                    |
| ----------------------- | ------------------------------------------------------------------------ | ---------------------------------------------------- |
| `"partial"` / `"quiet"` | پیش‌نویس زنده برای بلوک جاری؛ بلوک‌های تکمیل‌شده به‌عنوان پیام نگه داشته می‌شوند | پیش‌نویس زنده برای بلوک جاری که درجا نهایی می‌شود |
| `"off"`                 | یک پیام اعلان‌دار Matrix برای هر بلوک تکمیل‌شده                          | یک پیام اعلان‌دار Matrix برای کل پاسخ               |

نکات:

- اگر اندازهٔ پیش‌نمایش از محدودیت اندازهٔ هر رویداد Matrix عبور کند، OpenClaw جریان پیش‌نمایش را متوقف می‌کند و به ارسال صرفاً نهایی بازمی‌گردد.
- پاسخ‌های رسانه‌ای همیشه پیوست‌ها را به‌شکل عادی ارسال می‌کنند؛ اگر نتوان از پیش‌نمایش قدیمی با اطمینان دوباره استفاده کرد، OpenClaw پیش از ارسال پاسخ رسانه‌ای نهایی آن را حذف می‌کند.
- به‌روزرسانی‌های پیش‌نمایش پیشرفت ابزار، هنگام فعال‌بودن جریان پیش‌نمایش به‌طور پیش‌فرض روشن هستند. برای حفظ ویرایش‌های پیش‌نمایش متن پاسخ و نگه‌داشتن پیشرفت ابزار در مسیر ارسال عادی، `streaming.preview.toolProgress: false` را تنظیم کنید.
- ویرایش‌های پیش‌نمایش، فراخوانی‌های اضافی Matrix API مصرف می‌کنند. برای محافظه‌کارانه‌ترین الگوی محدودیت نرخ، `streaming: "off"` را حفظ کنید.

## پیام‌های صوتی

یادداشت‌های صوتی ورودی Matrix پیش از دروازهٔ اشاره به نام در اتاق رونویسی می‌شوند؛ بنابراین یک یادداشت صوتی که نام ربات را بیان کند، می‌تواند عامل را در اتاقی با `requireMention: true` فعال کند و عامل به‌جای صرفاً یک جای‌نگهدار پیوست صوتی، متن رونویسی‌شده را دریافت می‌کند.

Matrix از ارائه‌دهندهٔ مشترک رسانهٔ صوتی در `tools.media.audio`، مانند `gpt-4o-mini-transcribe` از OpenAI، استفاده می‌کند. برای راه‌اندازی ارائه‌دهنده و محدودیت‌ها، به [نمای کلی ابزارهای رسانه](/fa/tools/media-overview) مراجعه کنید.

- رویدادهای `m.audio` و رویدادهای `m.file` با نوع MIME از نوع `audio/*` واجد شرایط هستند.
- در اتاق‌های رمزنگاری‌شده، OpenClaw پیش از رونویسی، پیوست را از مسیر رسانه‌ای موجود Matrix رمزگشایی می‌کند.
- متن رونویسی‌شده در درخواست عامل به‌عنوان محتوای تولیدشده توسط ماشین و غیرقابل‌اعتماد علامت‌گذاری می‌شود.
- پیوست به‌عنوان ازپیش‌رونویسی‌شده علامت‌گذاری می‌شود تا ابزارهای رسانه‌ای پایین‌دستی دوباره آن را رونویسی نکنند.
- برای غیرفعال‌کردن سراسری رونویسی صدا، `tools.media.audio.enabled: false` را تنظیم کنید.

## فرادادهٔ تأیید

درخواست‌های بومی تأیید Matrix، رویدادهای عادی `m.room.message` هستند که محتوای ویژهٔ OpenClaw را زیر کلید `com.openclaw.approval` دارند. کلاینت‌های استاندارد همچنان بدنهٔ متنی را نمایش می‌دهند؛ کلاینت‌های سازگار با OpenClaw می‌توانند شناسه، نوع، وضعیت، تصمیم‌ها و جزئیات اجرا/Plugin را به‌صورت ساختاریافته بخوانند.

وقتی یک درخواست برای یک رویداد Matrix بیش از حد طولانی باشد، OpenClaw متن قابل‌مشاهده را به چند بخش تقسیم می‌کند و `com.openclaw.approval` را فقط به بخش نخست می‌افزاید. واکنش‌های اجازه/رد به همان رویداد نخست متصل می‌شوند؛ بنابراین درخواست‌های طولانی همان مقصد تأیید درخواست‌های تک‌رویدادی را حفظ می‌کنند.

### قواعد پوش خودمیزبان برای پیش‌نمایش‌های نهایی‌شده و بی‌صدا

`streaming: "quiet"` تنها زمانی به گیرندگان اعلان می‌دهد که یک بلوک یا نوبت نهایی شده باشد؛ یک قاعدهٔ پوش برای هر کاربر باید با نشانگر پیش‌نمایش نهایی‌شده مطابقت داشته باشد. برای دستورالعمل کامل، به [قواعد پوش Matrix برای پیش‌نمایش‌های بی‌صدا](/fa/channels/matrix-push-rules) مراجعه کنید.

## اتاق‌های بات‌به‌بات

به‌طور پیش‌فرض، پیام‌های Matrix از دیگر حساب‌های پیکربندی‌شدهٔ Matrix در OpenClaw نادیده گرفته می‌شوند. برای اجازه‌دادن آگاهانه به ترافیک میان عامل‌ها، از `allowBots` استفاده کنید:

```json5
{
  channels: {
    matrix: {
      allowBots: "mentions", // true | "mentions"
      groups: {
        "!roomid:example.org": {
          requireMention: true,
        },
      },
    },
  },
}
```

- `allowBots: true` پیام‌های دیگر حساب‌های بات پیکربندی‌شدهٔ Matrix را در اتاق‌ها و پیام‌های مستقیم مجاز می‌پذیرد.
- `allowBots: "mentions"` این پیام‌ها را در اتاق‌ها تنها زمانی می‌پذیرد که به‌صورت آشکار به این بات اشاره کنند؛ پیام‌های مستقیم بدون توجه به این شرط همچنان مجازند.
- `groups.<room>.allowBots` تنظیم سطح حساب را برای یک اتاق بازنویسی می‌کند.
- پیام‌های پذیرفته‌شده از بات‌های پیکربندی‌شده از [محافظت مشترک در برابر حلقهٔ بات](/fa/channels/bot-loop-protection) استفاده می‌کنند. `channels.defaults.botLoopProtection` را پیکربندی کنید، سپس آن را برای هر حساب با `channels.matrix.botLoopProtection` یا برای هر اتاق با `channels.matrix.groups.<room>.botLoopProtection` بازنویسی کنید.
- OpenClaw همچنان پیام‌های دارای همان شناسهٔ کاربر Matrix را نادیده می‌گیرد تا از حلقه‌های پاسخ به خود جلوگیری کند.
- Matrix پرچم بومی برای بات ندارد؛ OpenClaw پیام «نوشته‌شده توسط بات» را پیامی در نظر می‌گیرد که «توسط حساب پیکربندی‌شدهٔ دیگری از Matrix در این Gateway متعلق به OpenClaw ارسال شده است».

هنگام فعال‌کردن ترافیک بات‌به‌بات در اتاق‌های مشترک، از فهرست‌های مجاز سخت‌گیرانه برای اتاق‌ها و الزام اشاره استفاده کنید.

## رمزنگاری و تأیید

در اتاق‌های رمزنگاری‌شده (E2EE)، رویدادهای تصویر خروجی از `thumbnail_file` استفاده می‌کنند تا پیش‌نمایش‌های تصویر همراه با پیوست کامل رمزنگاری شوند؛ اتاق‌های رمزنگاری‌نشده از `thumbnail_url` ساده استفاده می‌کنند. نیازی به پیکربندی نیست؛ Plugin وضعیت E2EE را به‌طور خودکار تشخیص می‌دهد.

همهٔ فرمان‌های `openclaw matrix` گزینه‌های `--verbose` (عیب‌یابی کامل)، `--json` (خروجی قابل‌خواندن برای ماشین) و `--account <id>` (برای پیکربندی‌های چندحسابی) را می‌پذیرند. خروجی به‌طور پیش‌فرض مختصر است.

### فعال‌کردن رمزنگاری

```bash
openclaw matrix encryption setup
```

ذخیره‌سازی محرمانه و امضای متقابل را راه‌اندازی اولیه می‌کند، در صورت نیاز یک پشتیبان از کلیدهای اتاق می‌سازد و سپس وضعیت و گام‌های بعدی را نمایش می‌دهد. پرچم‌های مفید:

- `--recovery-key <key>` پیش از راه‌اندازی اولیه یک کلید بازیابی را اعمال می‌کند (روش ورودی استاندارد زیر ترجیح داده می‌شود)
- `--force-reset-cross-signing` هویت فعلی امضای متقابل را کنار می‌گذارد و هویت جدیدی ایجاد می‌کند (فقط برای استفادهٔ آگاهانه)

برای یک حساب جدید، E2EE را هنگام ایجاد حساب فعال کنید:

```bash
openclaw matrix account add \
  --homeserver https://matrix.example.org \
  --access-token syt_xxx \
  --enable-e2ee
```

`--encryption` نام مستعار `--enable-e2ee` است. پیکربندی دستی معادل:

```json5
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_xxx",
      encryption: true,
      dm: { policy: "pairing" },
    },
  },
}
```

### وضعیت و نشانه‌های اعتماد

```bash
openclaw matrix verify status
openclaw matrix verify status --include-recovery-key --json
```

`verify status` سه نشانهٔ مستقل اعتماد را گزارش می‌کند (`--verbose` همهٔ آن‌ها را نشان می‌دهد):

- `Locally trusted`: فقط مورد اعتماد این کارخواه است
- `Cross-signing verified`: SDK تأیید از طریق امضای متقابل را گزارش می‌کند
- `Signed by owner`: با کلید خودامضای خودتان امضا شده است (فقط برای عیب‌یابی)

`Verified by owner` تنها زمانی `yes` است که `Cross-signing verified` برابر با `yes` باشد؛ اعتماد محلی یا صرفاً امضای مالک کافی نیست.

`--allow-degraded-local-state` بدون آماده‌سازی قبلی حساب Matrix، عیب‌یابی را به‌شکل بهترین تلاش ممکن برمی‌گرداند؛ برای بررسی‌های آفلاین یا پیکربندی‌شدهٔ ناقص مفید است.

### تأیید این دستگاه با کلید بازیابی

کلید بازیابی را به‌جای قراردادن در خط فرمان، از طریق ورودی استاندارد ارسال کنید:

```bash
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify device --recovery-key-stdin
```

این فرمان سه وضعیت را گزارش می‌کند:

- `Recovery key accepted`: Matrix کلید را برای ذخیره‌سازی محرمانه یا اعتماد به دستگاه پذیرفته است.
- `Backup usable`: پشتیبان کلیدهای اتاق را می‌توان با داده‌های بازیابی مورد اعتماد بارگذاری کرد.
- `Device verified by owner`: این دستگاه از اعتماد کامل هویت امضای متقابل Matrix برخوردار است.

اگر اعتماد کامل هویت ناقص باشد، فرمان با کد خروج غیرصفر پایان می‌یابد، حتی اگر کلید بازیابی داده‌های پشتیبان را باز کرده باشد. در این حالت، تأیید خود را از یک کارخواه دیگر Matrix تکمیل کنید:

```bash
openclaw matrix verify self
```

`verify self` پیش از خروج موفقیت‌آمیز منتظر می‌ماند تا `Cross-signing verified: yes` شود. برای تنظیم مدت انتظار از `--timeout-ms <ms>` استفاده کنید.

شکل دارای کلید صریح، یعنی `openclaw matrix verify device "<recovery-key>"`، نیز کار می‌کند، اما کلید در تاریخچهٔ پوسته باقی می‌ماند.

### راه‌اندازی اولیه یا تعمیر امضای متقابل

```bash
openclaw matrix verify bootstrap
```

این فرمان برای تعمیر یا راه‌اندازی حساب‌های رمزنگاری‌شده است. به‌ترتیب:

- ذخیره‌سازی محرمانه را راه‌اندازی اولیه می‌کند و در صورت امکان کلید بازیابی موجود را دوباره به‌کار می‌گیرد
- امضای متقابل را راه‌اندازی اولیه می‌کند و کلیدهای عمومی موجودنبودن را بارگذاری می‌کند
- دستگاه فعلی را علامت‌گذاری و با امضای متقابل امضا می‌کند
- اگر هنوز پشتیبان کلیدهای اتاق در سمت سرور وجود نداشته باشد، یکی ایجاد می‌کند

اگر homeserver برای بارگذاری کلیدهای امضای متقابل به UIA نیاز داشته باشد، OpenClaw ابتدا بدون احراز هویت، سپس `m.login.dummy` و بعد `m.login.password` را امتحان می‌کند (`channels.matrix.password` لازم است).

پرچم‌های مفید:

- `--recovery-key-stdin` (همراه با `printf '%s\n' "$MATRIX_RECOVERY_KEY" | ...`) یا `--recovery-key <key>`
- `--force-reset-cross-signing` برای کنارگذاشتن هویت فعلی امضای متقابل (فقط به‌صورت آگاهانه؛ لازم است کلید بازیابی فعال ذخیره شده باشد یا با `--recovery-key-stdin` ارائه شود)

### پشتیبان کلیدهای اتاق

```bash
openclaw matrix verify backup status
printf '%s\n' "$MATRIX_RECOVERY_KEY" | openclaw matrix verify backup restore --recovery-key-stdin
```

`backup status` نشان می‌دهد آیا پشتیبانی در سمت سرور وجود دارد و آیا این دستگاه می‌تواند آن را رمزگشایی کند. `backup restore` کلیدهای پشتیبان‌گیری‌شدهٔ اتاق را به مخزن رمزنگاری محلی وارد می‌کند؛ اگر کلید بازیابی از قبل روی دیسک قرار دارد، `--recovery-key-stdin` را حذف کنید.

برای جایگزینی یک پشتیبان خراب با خط مبنای تازه (با پذیرش ازدست‌رفتن تاریخچهٔ قدیمی بازیابی‌ناپذیر؛ همچنین می‌تواند ذخیره‌سازی محرمانه را در صورت بارگذاری‌نشدن راز پشتیبان فعلی دوباره ایجاد کند):

```bash
openclaw matrix verify backup reset --yes
```

تنها زمانی `--rotate-recovery-key` را اضافه کنید که کلید بازیابی قبلی باید عمداً دیگر نتواند خط مبنای تازهٔ پشتیبان را باز کند.

### فهرست‌کردن، درخواست‌کردن و پاسخ‌دادن به تأییدها

```bash
openclaw matrix verify list
```

درخواست‌های تأیید در انتظار را برای حساب انتخاب‌شده فهرست می‌کند.

```bash
openclaw matrix verify request --own-user
openclaw matrix verify request --user-id @ops:example.org --device-id ABCDEF
```

از این حساب یک درخواست تأیید ارسال می‌کند. `--own-user` تأیید خود را درخواست می‌کند (درخواست را در کارخواه دیگری از Matrix برای همان کاربر بپذیرید)؛ `--user-id`/`--device-id`/`--room-id` شخص دیگری را هدف قرار می‌دهند. `--own-user` را نمی‌توان با دیگر پرچم‌های هدف‌گیری ترکیب کرد.

برای مدیریت چرخهٔ حیات در سطح پایین‌تر ــ معمولاً هنگام دنبال‌کردن درخواست‌های ورودی از کارخواهی دیگر ــ این فرمان‌ها روی درخواست مشخص `<id>` عمل می‌کنند (`verify list` و `verify request` آن را نمایش می‌دهند):

| فرمان                                      | هدف                                                                 |
| ------------------------------------------ | ------------------------------------------------------------------- |
| `openclaw matrix verify accept <id>`       | پذیرفتن یک درخواست ورودی                                            |
| `openclaw matrix verify start <id>`        | آغاز جریان SAS                                                      |
| `openclaw matrix verify sas <id>`          | نمایش ایموجی‌ها یا اعداد ده‌دهی SAS                                 |
| `openclaw matrix verify confirm-sas <id>`  | تأیید مطابقت SAS با چیزی که کارخواه دیگر نشان می‌دهد                |
| `openclaw matrix verify mismatch-sas <id>` | رد SAS هنگامی که ایموجی‌ها یا اعداد ده‌دهی مطابقت ندارند            |
| `openclaw matrix verify cancel <id>`       | لغو؛ گزینه‌های اختیاری `--reason <text>` و `--code <matrix-code>` را می‌پذیرد |

همهٔ `accept`، `start`، `sas`، `confirm-sas`، `mismatch-sas` و `cancel` گزینه‌های `--user-id` و `--room-id` را به‌عنوان راهنمای پیگیری پیام مستقیم می‌پذیرند، هنگامی که تأیید به یک اتاق مشخص پیام مستقیم متصل باشد.

### نکات چندحسابی

بدون `--account <id>`، فرمان‌های CLI مربوط به Matrix از حساب پیش‌فرض ضمنی استفاده می‌کنند. اگر چند حساب نام‌گذاری‌شده وجود داشته باشد و `channels.matrix.defaultAccount` تنظیم نشده باشد، فرمان‌ها از حدس‌زدن خودداری می‌کنند و از شما می‌خواهند یک حساب را انتخاب کنید. هنگامی که E2EE برای حسابی نام‌گذاری‌شده غیرفعال یا دردسترس نباشد، خطاها به کلید پیکربندی همان حساب اشاره می‌کنند؛ برای مثال `channels.matrix.accounts.assistant.encryption`.

<AccordionGroup>
  <Accordion title="رفتار هنگام راه‌اندازی">
    با `encryption: true`، مقدار پیش‌فرض `startupVerification` برابر با `"if-unverified"` است. هنگام راه‌اندازی، دستگاهی که تأیید نشده است در کارخواه دیگری از Matrix درخواست تأیید خود می‌کند، درخواست‌های تکراری را نادیده می‌گیرد و یک دورهٔ انتظار اعمال می‌کند (به‌طور پیش‌فرض ۲۴ ساعت). آن را با `startupVerificationCooldownHours` تنظیم کنید یا با `startupVerification: "off"` غیرفعال کنید.

    راه‌اندازی همچنین یک مرحلهٔ محافظه‌کارانه برای راه‌اندازی اولیهٔ رمزنگاری اجرا می‌کند که ذخیره‌سازی محرمانه و هویت فعلی امضای متقابل را دوباره به‌کار می‌گیرد. اگر وضعیت راه‌اندازی اولیه خراب باشد، OpenClaw حتی بدون `channels.matrix.password` نیز تعمیر محافظت‌شده‌ای را امتحان می‌کند؛ اگر homeserver به UIA مبتنی بر گذرواژه نیاز داشته باشد، هنگام راه‌اندازی هشداری ثبت می‌شود و خطا همچنان غیرکشنده باقی می‌ماند. دستگاه‌هایی که از قبل توسط مالک امضا شده‌اند حفظ می‌شوند.

    برای جریان کامل ارتقا، به [مهاجرت Matrix](/fa/channels/matrix-migration) مراجعه کنید.

  </Accordion>

  <Accordion title="اعلان‌های تأیید">
    Matrix اعلان‌های چرخهٔ حیات تأیید را به‌صورت پیام‌های `m.notice` در اتاق سخت‌گیرانهٔ تأیید پیام مستقیم ارسال می‌کند: درخواست، آمادگی (همراه با راهنمای "Verify by emoji")، شروع/تکمیل، و در صورت موجودبودن جزئیات SAS (ایموجی/اعداد ده‌دهی).

    درخواست‌های ورودی از کارخواه دیگر Matrix ردیابی و به‌طور خودکار پذیرفته می‌شوند. برای تأیید خود، OpenClaw جریان SAS را به‌طور خودکار آغاز می‌کند و پس از دردسترس‌شدن تأیید با ایموجی، سمت خود را تأیید می‌کند؛ شما همچنان باید ایموجی‌ها را مقایسه کرده و "They match" را در کارخواه Matrix خود تأیید کنید.

    اعلان‌های سامانه‌ای تأیید به خط لولهٔ گفت‌وگوی عامل ارسال نمی‌شوند.

  </Accordion>

  <Accordion title="دستگاه حذف‌شده یا نامعتبر Matrix">
    اگر `verify status` اعلام کند که دستگاه فعلی دیگر در homeserver فهرست نشده است، یک دستگاه جدید Matrix برای OpenClaw ایجاد کنید. برای ورود با گذرواژه:

```bash
openclaw matrix account add \
  --account assistant \
  --homeserver https://matrix.example.org \
  --user-id '@assistant:example.org' \
  --password '<password>' \
  --device-name OpenClaw-Gateway
```

    برای احراز هویت با توکن، یک توکن دسترسی تازه در کارخواه Matrix یا رابط مدیریت خود ایجاد کنید، سپس OpenClaw را به‌روزرسانی کنید:

```bash
openclaw matrix account add \
  --account assistant \
  --homeserver https://matrix.example.org \
  --access-token '<token>'
```

    `assistant` را با شناسهٔ حساب موجود در فرمان ناموفق جایگزین کنید، یا برای حساب پیش‌فرض `--account` را حذف کنید.

  </Accordion>

  <Accordion title="بهداشت دستگاه‌ها">
    دستگاه‌های قدیمی مدیریت‌شده توسط OpenClaw ممکن است انباشته شوند. آن‌ها را فهرست و پاک‌سازی کنید:

```bash
openclaw matrix devices list
openclaw matrix devices prune-stale
```

  </Accordion>

  <Accordion title="مخزن رمزنگاری">
    E2EE در Matrix از مسیر رسمی رمزنگاری Rust در `matrix-js-sdk` همراه با `fake-indexeddb` به‌عنوان لایهٔ سازگاری IndexedDB استفاده می‌کند. وضعیت رمزنگاری در `crypto-idb-snapshot.json` ماندگار می‌شود (با مجوزهای دسترسی محدودکنندهٔ فایل).

    وضعیت رمزنگاری‌شدهٔ زمان اجرا در `~/.openclaw/matrix/accounts/<account>/<homeserver>__<user>/<token-hash>/` قرار دارد و شامل مخزن همگام‌سازی، مخزن رمزنگاری، کلید بازیابی، تصویر لحظه‌ای IDB، پیوندهای رشتهٔ گفتگو و وضعیت تأیید هنگام راه‌اندازی است. هنگامی که توکن تغییر می‌کند اما هویت حساب ثابت می‌ماند، OpenClaw بهترین ریشهٔ موجود را دوباره به‌کار می‌گیرد تا وضعیت قبلی همچنان قابل مشاهده باشد.

    یک ریشهٔ قدیمی منفرد برای هش توکن می‌تواند مسیر عادی تداوم در چرخش توکن باشد. اگر OpenClaw پیام `matrix: multiple populated token-hash storage roots detected` را ثبت کرد، دایرکتوری حساب را بررسی کنید و تنها پس از اطمینان از سالم‌بودن ریشهٔ فعال انتخاب‌شده، ریشه‌های هم‌سطح منسوخ را بایگانی کنید. به‌جای حذف فوری ریشه‌های منسوخ، انتقال آن‌ها به دایرکتوری `_archive/` را ترجیح دهید.

  </Accordion>
</AccordionGroup>

## مدیریت پروفایل

```bash
openclaw matrix profile set --name "OpenClaw Assistant"
openclaw matrix profile set --avatar-url https://cdn.example.org/avatar.png
```

هر دو گزینه را در یک فراخوانی ارسال کنید. Matrix نشانی‌های آواتار `mxc://` را مستقیماً می‌پذیرد؛ ارسال `http://`/`https://` ابتدا فایل را بارگذاری می‌کند و نشانی نهایی `mxc://` را در `channels.matrix.avatarUrl` (یا مقدار جایگزین مختص هر حساب) ذخیره می‌کند.

## رشته‌ها

Matrix از رشته‌های بومی هم برای پاسخ‌های خودکار و هم برای ارسال‌های ابزار پیام پشتیبانی می‌کند. دو تنظیم مستقل رفتار را کنترل می‌کنند:

### مسیریابی نشست (`sessionScope`)

`dm.sessionScope` تعیین می‌کند اتاق‌های پیام مستقیم Matrix چگونه به نشست‌های OpenClaw نگاشت شوند:

- `"per-user"` (پیش‌فرض): همهٔ اتاق‌های پیام مستقیم با همتای مسیریابی‌شدهٔ یکسان، یک نشست را به‌اشتراک می‌گذارند.
- `"per-room"`: هر اتاق پیام مستقیم Matrix، حتی برای یک همتای یکسان، کلید نشست مخصوص خود را دریافت می‌کند.

اتصال‌های صریح مکالمه همیشه بر `sessionScope` اولویت دارند؛ اتاق‌ها و رشته‌های متصل، نشست مقصد انتخاب‌شدهٔ خود را حفظ می‌کنند.

### رشته‌بندی پاسخ (`threadReplies`)

`threadReplies` تعیین می‌کند ربات پاسخ خود را کجا ارسال کند:

- `"off"`: پاسخ‌ها در سطح اصلی هستند. پیام‌های ورودی رشته‌بندی‌شده در نشست والد باقی می‌مانند.
- `"inbound"`: فقط زمانی داخل یک رشته پاسخ می‌دهد که پیام ورودی از قبل در همان رشته بوده باشد.
- `"always"`: داخل رشته‌ای که ریشهٔ آن پیام آغازگر است پاسخ می‌دهد؛ آن مکالمه از نخستین آغازگر به بعد از طریق نشست متناظرِ محدود به همان رشته مسیریابی می‌شود.

`dm.threadReplies` این رفتار را فقط برای پیام‌های مستقیم بازنویسی می‌کند؛ برای نمونه، رشته‌های اتاق را جدا نگه دارید و در عین حال پیام‌های مستقیم را بدون رشته حفظ کنید.

### وراثت رشته و فرمان‌های اسلش

- پیام‌های ورودی رشته‌بندی‌شده، پیام ریشهٔ رشته را به‌عنوان زمینهٔ اضافی عامل در بر می‌گیرند.
- ارسال‌های ابزار پیام هنگام هدف‌گیری همان اتاق (یا همان مقصد کاربر پیام مستقیم)، به‌طور خودکار رشتهٔ فعلی Matrix را به ارث می‌برند؛ مگر اینکه `threadId` صریحی ارائه شود.
- استفادهٔ مجدد از مقصد کاربر پیام مستقیم فقط زمانی فعال می‌شود که فرادادهٔ نشست فعلی، همان همتای پیام مستقیم را در همان حساب Matrix اثبات کند؛ در غیر این صورت OpenClaw به مسیریابی عادی محدود به کاربر بازمی‌گردد.
- `/focus`، `/unfocus`، `/agents`، `/session idle`، `/session max-age` و `/acp spawn` متصل به رشته، همگی در اتاق‌ها و پیام‌های مستقیم Matrix کار می‌کنند.
- وقتی `threadBindings.spawnSessions` فعال باشد، اجرای `/focus` در سطح اصلی یک رشتهٔ جدید Matrix ایجاد و آن را به نشست مقصد متصل می‌کند.
- اجرای `/focus` یا `/acp spawn --thread here` داخل یک رشتهٔ موجود Matrix، همان رشته را در جای خود متصل می‌کند.

وقتی OpenClaw تشخیص دهد یک اتاق پیام مستقیم Matrix با اتاق پیام مستقیم دیگری در همان نشست مشترک تداخل دارد، یک پیام یک‌بارهٔ `m.notice` ارسال می‌کند که به راه گریز `/focus` اشاره دارد و تغییر `dm.sessionScope` را پیشنهاد می‌دهد. این اعلان فقط زمانی نمایش داده می‌شود که اتصال‌های رشته فعال باشند.

## اتصال‌های مکالمهٔ ACP

اتاق‌ها، پیام‌های مستقیم و رشته‌های موجود Matrix می‌توانند بدون تغییر سطح گفت‌وگو به فضای کاری پایدار ACP تبدیل شوند.

روند سریع برای گرداننده:

- در پیام مستقیم، اتاق یا رشتهٔ موجود Matrix که می‌خواهید همچنان استفاده کنید، `/acp spawn codex --bind here` را اجرا کنید.
- در یک پیام مستقیم یا اتاق سطح اصلی، همان پیام مستقیم/اتاق فعلی به‌عنوان سطح گفت‌وگو باقی می‌ماند و پیام‌های آینده به نشست ACP ایجادشده مسیریابی می‌شوند.
- داخل یک رشتهٔ موجود، `--bind here` همان رشتهٔ فعلی را در جای خود متصل می‌کند.
- `/new` و `/reset` همان نشست ACP متصل را در جای خود بازنشانی می‌کنند.
- `/acp close` نشست ACP را می‌بندد و اتصال را حذف می‌کند.

`--bind here` رشتهٔ فرزند Matrix ایجاد نمی‌کند. `threadBindings.spawnSessions` اجرای `/acp spawn --thread auto|here` را کنترل می‌کند؛ حالتی که OpenClaw باید یک رشتهٔ فرزند ایجاد یا متصل کند.

### پیکربندی اتصال رشته

Matrix پیش‌فرض‌های سراسری را از `session.threadBindings` به ارث می‌برد و از بازنویسی‌های مختص کانال پشتیبانی می‌کند:

- `threadBindings.enabled`
- `threadBindings.idleHours`
- `threadBindings.maxAgeHours`
- `threadBindings.spawnSessions`: ایجاد رشته برای هم زیرعامل و هم ACP را کنترل می‌کند.
- `threadBindings.spawnSubagentSessions` / `threadBindings.spawnAcpSessions`: بازنویسی‌های محدودتر برای ایجادهای مختص زیرعامل یا مختص ACP.
- `threadBindings.defaultSpawnContext`

ایجاد نشست‌های متصل به رشتهٔ Matrix به‌طور پیش‌فرض فعال است. برای جلوگیری از ایجاد/اتصال رشته‌های Matrix توسط `/focus` سطح اصلی و `/acp spawn --thread auto|here`، مقدار `threadBindings.spawnSessions: false` را تنظیم کنید. وقتی ایجاد بومی رشته برای زیرعامل نباید رونوشت والد را منشعب کند، مقدار `threadBindings.defaultSpawnContext: "isolated"` را تنظیم کنید.

## واکنش‌ها

Matrix از واکنش‌های خروجی، اعلان‌های واکنش ورودی و واکنش‌های تأیید دریافت پشتیبانی می‌کند.

ابزار واکنش خروجی توسط `channels.matrix.actions.reactions` کنترل می‌شود:

- `react` واکنشی به یک رویداد Matrix اضافه می‌کند.
- `reactions` خلاصهٔ واکنش‌های فعلی یک رویداد Matrix را فهرست می‌کند.
- `emoji=""` واکنش‌های خود ربات را از آن رویداد حذف می‌کند.
- `remove: true` فقط واکنش ایموجی مشخص‌شده را از ربات حذف می‌کند.

**ترتیب تفکیک** (نخستین مقدار تعریف‌شده برنده است):

| تنظیم                    | ترتیب                                                                                              |
| ------------------------ | -------------------------------------------------------------------------------------------------- |
| `ackReaction`            | مختص حساب -> کانال -> `messages.ackReaction` -> ایموجی جایگزین هویت عامل                          |
| `ackReactionScope`       | مختص حساب -> کانال -> `messages.ackReactionScope` -> پیش‌فرض `"group-mentions"`                    |
| `reactionNotifications`  | مختص حساب -> کانال -> پیش‌فرض `"own"`                                                              |

`reactionNotifications: "own"` رویدادهای افزوده‌شدهٔ `m.reaction` را زمانی منتقل می‌کند که مقصد آن‌ها پیام‌های Matrix نوشته‌شده توسط ربات باشد؛ `"off"` رویدادهای سامانهٔ واکنش را غیرفعال می‌کند. حذف واکنش‌ها به رویدادهای سامانه‌ای تبدیل نمی‌شود؛ Matrix آن‌ها را به‌صورت حذف محتوا نمایش می‌دهد، نه حذف‌های مستقل `m.reaction`.

## زمینهٔ تاریخچه

- `channels.matrix.historyLimit` کنترل می‌کند وقتی یک پیام اتاق عامل را فعال می‌کند، چند پیام اخیر اتاق به‌عنوان `InboundHistory` گنجانده شوند. اگر تنظیم نشده باشد، به `messages.groupChat.historyLimit` بازمی‌گردد؛ اگر هیچ‌کدام تنظیم نشده باشند، پیش‌فرض مؤثر `0` است (غیرفعال).
- تاریخچهٔ اتاق Matrix فقط مختص اتاق است؛ پیام‌های مستقیم همچنان از تاریخچهٔ عادی نشست استفاده می‌کنند.
- تاریخچهٔ اتاق فقط شامل موارد در انتظار است: OpenClaw پیام‌های اتاقی را که هنوز پاسخی فعال نکرده‌اند در میانگیر نگه می‌دارد، سپس هنگام رسیدن اشاره یا آغازگر دیگری، از آن بازه تصویر لحظه‌ای می‌گیرد.
- پیام آغازگر فعلی در `InboundHistory` گنجانده نمی‌شود؛ برای آن نوبت در بدنهٔ اصلی ورودی باقی می‌ماند.
- تلاش‌های مجدد برای همان رویداد Matrix به‌جای پیشروی به‌سوی پیام‌های جدیدتر اتاق، از تصویر لحظه‌ای اصلی تاریخچه دوباره استفاده می‌کنند.

## نمایانی زمینه

Matrix از کنترل مشترک `contextVisibility` برای زمینهٔ تکمیلی اتاق، مانند متن واکشی‌شدهٔ پاسخ، ریشه‌های رشته و تاریخچهٔ در انتظار پشتیبانی می‌کند.

- `contextVisibility: "all"` پیش‌فرض است. زمینهٔ تکمیلی همان‌گونه که دریافت شده حفظ می‌شود.
- `contextVisibility: "allowlist"` زمینهٔ تکمیلی را به فرستندگانی محدود می‌کند که بررسی‌های فهرست مجاز فعال اتاق/کاربر آن‌ها را مجاز می‌دانند.
- `contextVisibility: "allowlist_quote"` مانند `allowlist` عمل می‌کند، اما همچنان یک پاسخ صریح نقل‌شده را نگه می‌دارد.

این تنظیم فقط بر نمایانی زمینهٔ تکمیلی اثر می‌گذارد، نه بر اینکه خود پیام ورودی بتواند پاسخی را فعال کند. مجوز فعال‌سازی همچنان از `groupPolicy`، `groups`، `groupAllowFrom` و تنظیمات سیاست پیام مستقیم می‌آید.

## سیاست پیام مستقیم و اتاق

```json5
{
  channels: {
    matrix: {
      dm: {
        policy: "allowlist",
        allowFrom: ["@admin:example.org"],
        threadReplies: "off",
      },
      groupPolicy: "allowlist",
      groupAllowFrom: ["@admin:example.org"],
      groups: {
        "!roomid:example.org": { requireMention: true },
      },
    },
  },
}
```

برای خاموش‌کردن کامل پیام‌های مستقیم و در عین حال فعال نگه‌داشتن اتاق‌ها، `dm.enabled: false` را تنظیم کنید:

```json5
{
  channels: {
    matrix: {
      dm: { enabled: false },
      groupPolicy: "allowlist",
      groupAllowFrom: ["@admin:example.org"],
    },
  },
}
```

برای رفتار الزام اشاره و فهرست مجاز، [گروه‌ها](/fa/channels/groups) را ببینید.

نمونهٔ جفت‌سازی برای پیام‌های مستقیم Matrix:

```bash
openclaw pairing list matrix
openclaw pairing approve matrix <CODE>
```

اگر کاربر تأییدنشدهٔ Matrix پیش از تأیید به ارسال پیام ادامه دهد، OpenClaw از همان کد جفت‌سازی در انتظار دوباره استفاده می‌کند و ممکن است به‌جای تولید کد جدید، پس از یک دورهٔ توقف کوتاه پاسخ یادآوری ارسال کند.

برای روند مشترک جفت‌سازی پیام مستقیم و چیدمان ذخیره‌سازی، [جفت‌سازی](/fa/channels/pairing) را ببینید.

## ترمیم اتاق مستقیم

اگر وضعیت پیام مستقیم دچار انحراف شود، ممکن است OpenClaw در نهایت نگاشت‌های منسوخ `m.direct` داشته باشد که به‌جای پیام مستقیم فعال به اتاق‌های تک‌نفرهٔ قدیمی اشاره می‌کنند. نگاشت فعلی یک همتا را بررسی کنید:

```bash
openclaw matrix direct inspect --user-id @alice:example.org
```

آن را ترمیم کنید:

```bash
openclaw matrix direct repair --user-id @alice:example.org
```

هر دو فرمان برای پیکربندی‌های چندحسابی، `--account <id>` را می‌پذیرند. روند ترمیم:

- یک پیام مستقیم دقیقاً دونفره را که از قبل در `m.direct` نگاشت شده ترجیح می‌دهد
- در صورت نبود آن، به هر پیام مستقیم دقیقاً دونفره‌ای که در حال حاضر با آن کاربر به آن پیوسته‌اید بازمی‌گردد
- اگر پیام مستقیم سالمی وجود نداشته باشد، یک اتاق مستقیم جدید ایجاد و `m.direct` را بازنویسی می‌کند

این روند اتاق‌های قدیمی را به‌طور خودکار حذف نمی‌کند. پیام مستقیم سالم را انتخاب و نگاشت را به‌روزرسانی می‌کند تا ارسال‌های آیندهٔ Matrix، اعلان‌های تأیید و دیگر روندهای پیام مستقیم، اتاق درست را هدف بگیرند.

## تأییدهای اجرا

Matrix می‌تواند به‌عنوان کارخواه بومی تأیید عمل کند. آن را زیر `channels.matrix.execApprovals` پیکربندی کنید (یا برای بازنویسی مختص حساب، زیر `channels.matrix.accounts.<account>.execApprovals`):

- `enabled`: تأییدها را از طریق درخواست‌های بومی Matrix ارائه می‌کند. مقدار تنظیم‌نشده یا `"auto"` به‌محض اینکه دست‌کم یک تأییدکننده قابل تشخیص باشد، آن را به‌طور خودکار فعال می‌کند؛ برای غیرفعال‌سازی صریح، `false` را تنظیم کنید.
- `approvers`: شناسه‌های کاربر Matrix (`@owner:example.org`) که اجازه دارند درخواست‌های اجرا را تأیید کنند. در صورت نبود، به `channels.matrix.dm.allowFrom` بازمی‌گردد.
- `target`: درخواست‌ها کجا ارسال شوند. `"dm"` (پیش‌فرض) آن‌ها را به پیام‌های مستقیم تأییدکنندگان می‌فرستد؛ `"channel"` آن‌ها را به اتاق یا پیام مستقیم مبدأ می‌فرستد؛ `"both"` به هر دو می‌فرستد.
- `agentFilter` / `sessionFilter`: فهرست‌های مجاز اختیاری برای تعیین اینکه کدام عامل‌ها/نشست‌ها تحویل از طریق Matrix را فعال کنند.

صدور مجوز میان انواع تأیید کمی متفاوت است:

- **تأییدهای اجرا** از `execApprovals.approvers` استفاده می‌کنند و در صورت نبود به `dm.allowFrom` بازمی‌گردند.
- **تأییدهای Plugin** فقط از طریق `dm.allowFrom` مجاز می‌شوند.

هر دو نوع، میان‌برهای واکنشی و به‌روزرسانی پیام Matrix را به‌اشتراک می‌گذارند. تأییدکنندگان روی پیام اصلی تأیید، میان‌برهای واکنشی زیر را می‌بینند:

- ✅ یک بار اجازه دادن
- ❌ رد کردن
- ♾️ همیشه اجازه دادن (وقتی سیاست مؤثر اجرا آن را مجاز کند)

فرمان‌های اسلش جایگزین: `/approve <id> allow-once`، `/approve <id> allow-always`، `/approve <id> deny`.

فقط تأییدکنندگان تشخیص‌داده‌شده می‌توانند تأیید یا رد کنند. تحویل کانالی برای تأییدهای اجرا شامل متن فرمان است؛ `channel` یا `both` را فقط در اتاق‌های قابل اعتماد فعال کنید.

مرتبط: [تأییدهای اجرا](/fa/tools/exec-approvals).

## فرمان‌های اسلش

فرمان‌های اسلش (`/new`، `/reset`، `/model`، `/focus`، `/unfocus`، `/agents`، `/session`، `/acp`، `/approve` و غیره) مستقیماً در پیام‌های مستقیم کار می‌کنند. در اتاق‌ها، OpenClaw فرمان‌هایی را که با اشارهٔ Matrix خود ربات آغاز می‌شوند نیز تشخیص می‌دهد؛ بنابراین `@bot:server /new` بدون عبارت منظم سفارشی برای اشاره، مسیر فرمان را فعال می‌کند. این کار باعث می‌شود ربات به پیام‌های اتاقی به‌شکل `@mention /command` که Element و کارخواه‌های مشابه هنگام تکمیل خودکار نام ربات با کلید Tab و سپس تایپ فرمان ارسال می‌کنند، پاسخ‌گو بماند.

قواعد صدور مجوز همچنان اعمال می‌شوند: فرستندگان فرمان باید همان سیاست‌های فهرست مجاز/مالک پیام مستقیم یا اتاق را که برای پیام‌های عادی اعمال می‌شود، برآورده کنند.

## چندحسابی

```json5
{
  channels: {
    matrix: {
      enabled: true,
      defaultAccount: "assistant",
      dm: { policy: "pairing" },
      accounts: {
        assistant: {
          homeserver: "https://matrix.example.org",
          accessToken: "syt_assistant_xxx",
          encryption: true,
        },
        alerts: {
          homeserver: "https://matrix.example.org",
          accessToken: "syt_alerts_xxx",
          dm: {
            policy: "allowlist",
            allowFrom: ["@ops:example.org"],
            threadReplies: "off",
          },
        },
      },
    },
  },
}
```

**وراثت:**

- مقادیر سطح بالای `channels.matrix` به‌عنوان پیش‌فرض حساب‌های نام‌گذاری‌شده عمل می‌کنند، مگر اینکه یک حساب آن‌ها را بازنویسی کند.
- با `groups.<room>.account` یک ورودی اتاق موروثی را به حسابی مشخص محدود کنید. ورودی‌های بدون `account` میان حساب‌ها مشترک‌اند؛ وقتی حساب پیش‌فرض در سطح بالا پیکربندی شده باشد، `account: "default"` همچنان کار می‌کند.

**انتخاب حساب پیش‌فرض:**

- `defaultAccount` را تنظیم کنید تا حساب نام‌گذاری‌شده‌ای را انتخاب کنید که مسیریابی ضمنی، بررسی‌ها و فرمان‌های CLI در اولویت قرار می‌دهند.
- اگر چند حساب دارید و نام یکی از آن‌ها دقیقاً `default` است، OpenClaw حتی در صورت تنظیم‌نبودن `defaultAccount` نیز به‌طور ضمنی از آن استفاده می‌کند.
- در صورت وجود چند حساب نام‌گذاری‌شده و انتخاب‌نشدن حساب پیش‌فرض، فرمان‌های CLI از حدس‌زدن خودداری می‌کنند؛ `defaultAccount` را تنظیم کنید یا `--account <id>` را ارسال کنید.
- بلوک سطح بالای `channels.matrix.*` تنها زمانی به‌عنوان حساب ضمنی `default` در نظر گرفته می‌شود که اطلاعات احراز هویت آن کامل باشد (`homeserver` + `accessToken`، یا `homeserver` + `userId` + `password`). حساب‌های نام‌گذاری‌شده با `homeserver` + `userId` همچنان قابل شناسایی می‌مانند، مشروط بر اینکه اعتبارنامه‌های ذخیره‌شده احراز هویت را پوشش دهند.

**ارتقا:**

- هنگامی که OpenClaw طی ترمیم یا راه‌اندازی، پیکربندی تک‌حسابی را به چندحسابی ارتقا می‌دهد، اگر یک حساب نام‌گذاری‌شده موجود باشد یا `defaultAccount` از قبل به یکی اشاره کند، همان را حفظ می‌کند. فقط کلیدهای احراز هویت/راه‌اندازی اولیه Matrix به حساب ارتقایافته منتقل می‌شوند؛ کلیدهای مشترک سیاست تحویل در سطح بالا باقی می‌مانند.

برای الگوی مشترک چندحسابی، [مرجع پیکربندی](/fa/gateway/config-channels#multi-account-all-channels) را ببینید.

## سرورهای خانگی خصوصی/شبکه محلی

OpenClaw به‌طور پیش‌فرض برای محافظت در برابر SSRF، سرورهای خانگی خصوصی/داخلی Matrix را مسدود می‌کند، مگر اینکه برای هر حساب به‌طور جداگانه آن را فعال کنید.

اگر سرور خانگی شما روی localhost، یک IP شبکه محلی/Tailscale یا یک نام میزبان داخلی اجرا می‌شود، `network.dangerouslyAllowPrivateNetwork` را برای آن حساب فعال کنید:

```json5
{
  channels: {
    matrix: {
      homeserver: "http://matrix-synapse:8008",
      network: {
        dangerouslyAllowPrivateNetwork: true,
      },
      accessToken: "syt_internal_xxx",
    },
  },
}
```

نمونه راه‌اندازی CLI:

```bash
openclaw matrix account add \
  --account ops \
  --homeserver http://matrix-synapse:8008 \
  --allow-private-network \
  --access-token syt_ops_xxx
```

این فعال‌سازی اختیاری فقط مقصدهای خصوصی/داخلی مورد اعتماد را مجاز می‌کند. سرورهای خانگی عمومی با ارتباط رمزنگاری‌نشده، مانند `http://matrix.example.org:8008`، همچنان مسدود می‌مانند. هر زمان ممکن است، `https://` را ترجیح دهید.

## پراکسی‌کردن ترافیک Matrix

اگر استقرار Matrix شما به یک پراکسی خروجی صریح HTTP(S) نیاز دارد، `channels.matrix.proxy` را تنظیم کنید:

```json5
{
  channels: {
    matrix: {
      homeserver: "https://matrix.example.org",
      accessToken: "syt_bot_xxx",
      proxy: "http://127.0.0.1:7890",
    },
  },
}
```

حساب‌های نام‌گذاری‌شده می‌توانند پیش‌فرض سطح بالا را با `channels.matrix.accounts.<id>.proxy` بازنویسی کنند. OpenClaw برای ترافیک زمان اجرای Matrix و بررسی‌های وضعیت حساب از همان تنظیم پراکسی استفاده می‌کند.

## تفکیک مقصد

Matrix در هر جایی که OpenClaw مقصد یک اتاق یا کاربر را درخواست کند، این قالب‌های مقصد را می‌پذیرد:

- کاربران: `@user:server`، `user:@user:server` یا `matrix:user:@user:server`
- اتاق‌ها: `!room:server`، `room:!room:server` یا `matrix:room:!room:server`
- نام‌های مستعار: `#alias:server`، `channel:#alias:server` یا `matrix:channel:#alias:server`

شناسه‌های اتاق Matrix به حروف بزرگ و کوچک حساس‌اند. هنگام پیکربندی مقصدهای صریح تحویل، کارهای Cron، اتصال‌ها یا فهرست‌های مجاز، دقیقاً همان حالت حروف شناسه اتاق در Matrix را به‌کار ببرید. OpenClaw کلیدهای داخلی نشست را برای ذخیره‌سازی به‌شکل معیار نگه می‌دارد؛ بنابراین، این کلیدهای حروف‌کوچک منبع قابل‌اعتمادی برای شناسه‌های تحویل Matrix نیستند.

جست‌وجوی زنده فهرست از حساب واردشده Matrix استفاده می‌کند:

- جست‌وجوی کاربران، فهرست کاربران Matrix را در همان homeserver پرس‌وجو می‌کند.
- جست‌وجوی اتاق‌ها، شناسه‌ها و نام‌های مستعار صریح اتاق را مستقیماً می‌پذیرد. جست‌وجو بر اساس نام اتاق‌های پیوسته‌شده به‌صورت بهترین‌تلاش انجام می‌شود و فقط زمانی برای فهرست‌های مجاز اتاق در زمان اجرا کاربرد دارد که `dangerouslyAllowNameMatching: true` تنظیم شده باشد.
- اگر نام یک اتاق به شناسه یا نام مستعار تبدیل نشود، در تفکیک فهرست مجاز زمان اجرا نادیده گرفته می‌شود.

## مرجع پیکربندی

فیلدهای کاربری از نوع فهرست مجاز (`groupAllowFrom`، `dm.allowFrom`، `groups.<room>.users`) شناسه‌های کامل کاربر Matrix را می‌پذیرند که امن‌ترین گزینه است. ورودی‌هایی که شناسه نیستند، به‌طور پیش‌فرض نادیده گرفته می‌شوند. اگر `dangerouslyAllowNameMatching: true` تنظیم شده باشد، تطابق‌های دقیق نام نمایشی در فهرست Matrix هنگام راه‌اندازی و هر زمان که فهرست مجاز در حین اجرای پایشگر تغییر کند تفکیک می‌شوند؛ ورودی‌های غیرقابل‌تفکیک در زمان اجرا نادیده گرفته می‌شوند.

کلیدهای فهرست مجاز اتاق (`groups`، و `rooms` قدیمی) باید شناسه یا نام مستعار اتاق باشند. کلیدهای حاوی نام ساده اتاق به‌طور پیش‌فرض نادیده گرفته می‌شوند؛ `dangerouslyAllowNameMatching: true` جست‌وجوی بهترین‌تلاش را میان نام اتاق‌های پیوسته‌شده بازمی‌گرداند.

### حساب و اتصال

- `enabled`: کانال را فعال یا غیرفعال می‌کند.
- `name`: برچسب نمایشی اختیاری برای حساب.
- `defaultAccount`: شناسه حساب ترجیحی هنگامی که چند حساب Matrix پیکربندی شده‌اند.
- `accounts`: بازنویسی‌های نام‌گذاری‌شده برای هر حساب. مقادیر سطح بالای `channels.matrix` به‌عنوان پیش‌فرض به ارث می‌رسند.
- `homeserver`: نشانی اینترنتی homeserver، برای نمونه `https://matrix.example.org`.
- `network.dangerouslyAllowPrivateNetwork`: به این حساب اجازه می‌دهد به `localhost`، نشانی‌های IP شبکه محلی/Tailscale یا نام‌های میزبان داخلی متصل شود.
- `proxy`: نشانی اینترنتی اختیاری پراکسی HTTP(S) برای ترافیک Matrix. بازنویسی برای هر حساب پشتیبانی می‌شود.
- `userId`: شناسه کامل کاربر Matrix (`@bot:example.org`).
- `accessToken`: توکن دسترسی برای احراز هویت مبتنی بر توکن. مقادیر متن ساده و SecretRef در ارائه‌دهندگان env/file/exec پشتیبانی می‌شوند ([مدیریت اسرار](/fa/gateway/secrets)).
- `password`: گذرواژه برای ورود مبتنی بر گذرواژه. مقادیر متن ساده و SecretRef پشتیبانی می‌شوند.
- `deviceId`: شناسه صریح دستگاه Matrix.
- `deviceName`: نام نمایشی دستگاه که هنگام ورود با گذرواژه استفاده می‌شود.
- `avatarUrl`: نشانی اینترنتی ذخیره‌شده آواتار خود برای همگام‌سازی نمایه و به‌روزرسانی‌های `profile set`.
- `initialSyncLimit`: حداکثر تعداد رویدادهای دریافت‌شده هنگام همگام‌سازی راه‌اندازی.

### رمزنگاری

- `encryption`: رمزنگاری سرتاسری را فعال می‌کند. پیش‌فرض: `false`.
- `startupVerification`: `"if-unverified"` (پیش‌فرض هنگام فعال بودن رمزنگاری سرتاسری) یا `"off"`. اگر این دستگاه تأیید نشده باشد، هنگام راه‌اندازی به‌طور خودکار درخواست خودتأییدی می‌کند.
- `startupVerificationCooldownHours`: فاصله انتظار تا درخواست خودکار بعدی هنگام راه‌اندازی. پیش‌فرض: `24`.

### دسترسی و خط‌مشی

- `groupPolicy`: `"open"`، `"allowlist"` یا `"disabled"`. پیش‌فرض: `"allowlist"`.
- `groupAllowFrom`: فهرست مجاز شناسه‌های کاربر برای ترافیک اتاق.
- `mentionPatterns`: الگوهای عبارت منظم محدوده‌دار برای اشاره‌ها در اتاق. شیئی با ساختار `{ mode: "allow"|"deny", allowIn: [roomId, ...], denyIn: [roomId, ...] }`. کنترل می‌کند که آیا `agents.list[].groupChat.mentionPatterns` پیکربندی‌شده در هر اتاق اعمال شوند.
- `dm.enabled`: وقتی `false` باشد، همه پیام‌های مستقیم نادیده گرفته می‌شوند. پیش‌فرض: `true`.
- `dm.policy`: `"pairing"` (پیش‌فرض)، `"allowlist"`، `"open"` یا `"disabled"`. پس از پیوستن ربات و طبقه‌بندی اتاق به‌عنوان پیام مستقیم اعمال می‌شود و بر مدیریت دعوت‌ها اثری ندارد.
- `dm.allowFrom`: فهرست مجاز شناسه‌های کاربر برای ترافیک پیام مستقیم.
- `dm.sessionScope`: `"per-user"` (پیش‌فرض) یا `"per-room"`.
- `dm.threadReplies`: بازنویسی ویژه پیام مستقیم برای رشته‌بندی پاسخ‌ها (`"off"`، `"inbound"`، `"always"`).
- `allowBots`: پیام‌های دیگر حساب‌های ربات Matrix پیکربندی‌شده را می‌پذیرد (`true` یا `"mentions"`).
- `allowlistOnly`: وقتی `true` باشد، همه خط‌مشی‌های فعال پیام مستقیم (به‌جز `"disabled"`) و خط‌مشی‌های گروهی `"open"` را به `"allowlist"` وادار می‌کند. خط‌مشی‌های `"disabled"` را تغییر نمی‌دهد.
- `dangerouslyAllowNameMatching`: وقتی `true` باشد، جست‌وجوی نام نمایشی در فهرست Matrix را برای ورودی‌های فهرست مجاز کاربران و جست‌وجوی نام اتاق‌های پیوسته‌شده را برای کلیدهای فهرست مجاز اتاق مجاز می‌کند. شناسه‌های کامل `@user:server` و شناسه‌ها یا نام‌های مستعار اتاق را ترجیح دهید.
- `autoJoin`: `"always"`، `"allowlist"` یا `"off"`. پیش‌فرض: `"off"`. برای همه دعوت‌های Matrix، از جمله دعوت‌های مشابه پیام مستقیم، اعمال می‌شود.
- `autoJoinAllowlist`: اتاق‌ها/نام‌های مستعاری که هنگام `"allowlist"` بودن `autoJoin` مجازند. ورودی‌های نام مستعار در برابر homeserver تفکیک می‌شوند، نه در برابر وضعیتی که اتاق دعوت‌کننده ادعا کرده است.
- `contextVisibility`: میزان مشاهده‌پذیری زمینه تکمیلی (`"all"` پیش‌فرض، `"allowlist"`، `"allowlist_quote"`).

### رفتار پاسخ

- `replyToMode`: `"off"` (پیش‌فرض)، `"first"`، `"all"` یا `"batched"`.
- `threadReplies`: `"off"` (پیش‌فرض سطح بالا، مگر اینکه صریحاً تنظیم شود، به `"inbound"` تفکیک می‌شود)، `"inbound"` یا `"always"`.
- `threadBindings`: بازنویسی‌های مختص کانال برای مسیریابی نشست وابسته به رشته و چرخه عمر آن.
- `streaming`: `"off"` (پیش‌فرض)، `"partial"`، `"quiet"`، `"progress"` یا شکل شیئی `{ mode, preview: { toolProgress }, progress: { label, labels, maxLines, maxLineChars, toolProgress } }`. `true` <-> `"partial"`، `false` <-> `"off"`.
- `blockStreaming`: وقتی `true` باشد، بلوک‌های تکمیل‌شده دستیار به‌صورت پیام‌های پیشرفت جداگانه نگه داشته می‌شوند. پیش‌فرض: `false`.
- `markdown`: پیکربندی اختیاری رندر Markdown برای متن خروجی.
- `responsePrefix`: رشته اختیاری که پیش از پاسخ‌های خروجی قرار می‌گیرد.
- `textChunkLimit`: اندازه قطعه خروجی بر حسب نویسه هنگامی که `chunkMode: "length"` است. پیش‌فرض: `4000`.
- `chunkMode`: `"length"` (پیش‌فرض، جداسازی بر اساس تعداد نویسه‌ها) یا `"newline"` (جداسازی در مرز خطوط).
- `historyLimit`: تعداد پیام‌های اخیر اتاق که وقتی یک پیام اتاق عامل را فعال می‌کند، به‌عنوان `InboundHistory` گنجانده می‌شوند. در صورت تنظیم نبودن از `messages.groupChat.historyLimit` استفاده می‌کند؛ پیش‌فرض مؤثر `0` است (غیرفعال).
- `mediaMaxMb`: سقف اندازه رسانه بر حسب مگابایت برای ارسال‌های خروجی و پردازش ورودی. پیش‌فرض: `20`.

### تنظیمات واکنش

- `ackReaction`: بازنویسی واکنش تأیید برای این کانال/حساب.
- `ackReactionScope`: بازنویسی محدوده (`"group-mentions"` پیش‌فرض، `"group-all"`، `"direct"`، `"all"`، `"none"`، `"off"`).
- `reactionNotifications`: حالت اعلان واکنش ورودی (`"own"` پیش‌فرض، `"off"`).

### ابزارها و بازنویسی‌های مختص هر اتاق

- `actions`: کنترل دسترسی ابزار برای هر کنش (`messages`، `reactions`، `pins`، `profile`، `memberInfo`، `channelInfo`، `verification`).
- `groups`: نگاشت خط‌مشی برای هر اتاق. هویت نشست پس از تفکیک از شناسه پایدار اتاق استفاده می‌کند. (`rooms` نام مستعار قدیمی است.)
  - `groups.<room>.account`: یک ورودی اتاق به‌ارث‌رسیده را به حسابی مشخص محدود می‌کند.
  - `groups.<room>.enabled`: کلید فعال‌سازی مختص اتاق. وقتی `false` باشد، اتاق مانند حالتی که در نگاشت وجود ندارد نادیده گرفته می‌شود.
  - `groups.<room>.requireMention`: بازنویسی مختص اتاق برای الزام اشاره در سطح کانال.
  - `groups.<room>.allowBots`: بازنویسی مختص اتاق برای تنظیم سطح کانال (`true` یا `"mentions"`).
  - `groups.<room>.botLoopProtection`: بازنویسی مختص اتاق برای بودجه محافظت در برابر حلقه ربات‌به‌ربات.
  - `groups.<room>.users`: فهرست مجاز فرستندگان مختص اتاق.
  - `groups.<room>.tools`: بازنویسی‌های اجازه/رد ابزار مختص اتاق.
  - `groups.<room>.autoReply`: بازنویسی دروازه‌بندی اشاره مختص اتاق. `true` الزام‌های اشاره را برای آن اتاق غیرفعال می‌کند؛ `false` آن‌ها را دوباره اجباری می‌کند.
  - `groups.<room>.skills`: پالایه Skills مختص اتاق.
  - `groups.<room>.systemPrompt`: قطعه اعلان سامانه مختص اتاق.

### تنظیمات تأیید اجرای فرمان

- `execApprovals.enabled`: تأییدهای اجرای فرمان را از طریق اعلان‌های بومی Matrix تحویل می‌دهد.
- `execApprovals.approvers`: شناسه‌های کاربران Matrix که مجاز به تأیید هستند. در صورت تنظیم نبودن از `dm.allowFrom` استفاده می‌کند.
- `execApprovals.target`: `"dm"` (پیش‌فرض)، `"channel"` یا `"both"`.
- `execApprovals.agentFilter` / `execApprovals.sessionFilter`: فهرست‌های مجاز اختیاری عامل/نشست برای تحویل.

## مرتبط

- [نمای کلی کانال‌ها](/fa/channels) - همه کانال‌های پشتیبانی‌شده
- [جفت‌سازی](/fa/channels/pairing) - احراز هویت پیام مستقیم و جریان جفت‌سازی
- [گروه‌ها](/fa/channels/groups) - رفتار گفت‌وگوی گروهی و دروازه‌بندی اشاره
- [مسیریابی کانال](/fa/channels/channel-routing) - مسیریابی نشست برای پیام‌ها
- [امنیت](/fa/gateway/security) - مدل دسترسی و مقاوم‌سازی
