---
read_when:
    - می‌خواهید مسیریابی و جداسازی نشست‌ها را درک کنید
    - می‌خواهید دامنهٔ پیام‌های مستقیم را برای پیکربندی‌های چندکاربره تنظیم کنید
    - در حال اشکال‌زدایی بازنشانی‌های روزانه یا ناشی از بی‌کاری نشست هستید
summary: OpenClaw چگونه نشست‌های گفتگو را مدیریت می‌کند
title: مدیریت نشست‌ها
x-i18n:
    generated_at: "2026-07-16T16:00:39Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 8ec9e33b4d288fa12016092ab2201431631fc9cb77e6e9d4261d348d5a849f65
    source_path: concepts/session.md
    workflow: 16
---

OpenClaw هر پیام ورودی را بر اساس مبدأ آن، مانند پیام‌های مستقیم، گفت‌وگوهای گروهی، کارهای cron و غیره، به یک **نشست** هدایت می‌کند. تمام وضعیت نشست در مالکیت
**Gateway** است؛ کلاینت‌های رابط کاربری داده‌های نشست را از Gateway دریافت می‌کنند.

## نحوه هدایت پیام‌ها

| منبع             | رفتار                          |
| ---------------- | ------------------------------ |
| پیام‌های مستقیم  | به‌طور پیش‌فرض نشست مشترک      |
| گفت‌وگوهای گروهی | مجزا برای هر گروه              |
| اتاق‌ها/کانال‌ها | مجزا برای هر اتاق              |
| کارهای Cron       | نشست تازه برای هر اجرا         |
| Webhookها         | مجزا برای هر هوک               |

## جداسازی پیام‌های مستقیم

به‌طور پیش‌فرض، همه پیام‌های مستقیم برای حفظ پیوستگی از یک نشست مشترک استفاده می‌کنند که برای
راه‌اندازی‌های تک‌کاربره مناسب است.

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

```json5
{
  session: {
    dmScope: "per-channel-peer", // جداسازی بر اساس کانال + فرستنده
  },
}
```

گزینه‌های `session.dmScope`:

| مقدار                                | رفتار                                          |
| ------------------------------------ | ---------------------------------------------- |
| `main` (پیش‌فرض)         | همه پیام‌های مستقیم یک نشست را به اشتراک می‌گذارند |
| `per-peer`                   | جداسازی بر اساس فرستنده، در همه کانال‌ها       |
| `per-channel-peer`                   | جداسازی بر اساس کانال + فرستنده (توصیه‌شده)    |
| `per-account-channel-peer`                   | جداسازی بر اساس حساب + کانال + فرستنده         |

<Tip>
اگر یک شخص از چند کانال با شما تماس می‌گیرد، از
`session.identityLinks` استفاده کنید تا هویت‌های او را به یک شناسه همتای مرجع نگاشت کنید و
یک نشست را به اشتراک بگذارد.
</Tip>

### اتصال کانال‌های پیوندخورده

فرمان‌های اتصال، مسیر پاسخ نشست فعلی گفت‌وگوی مستقیم را بدون آغاز
نشستی جدید به کانال پیوندخورده دیگری منتقل می‌کنند. برای نمونه‌ها، پیکربندی و
عیب‌یابی، به [اتصال کانال](/fa/concepts/channel-docking) مراجعه کنید.

راه‌اندازی خود را با `openclaw security audit` بررسی کنید.

## چرخه عمر نشست

نشست‌ها تا زمانی که طبق `session.reset` منقضی شوند، دوباره استفاده می‌شوند:

- **بازنشانی روزانه** (پیش‌فرض `mode: "daily"`) - نشست جدید در ساعت محلی
  پیکربندی‌شده (`session.reset.atHour`، پیش‌فرض `4`، 0-23) روی میزبان Gateway. تازگی
  روزانه بر اساس زمان آغاز `sessionId` فعلی است، نه نوشتن‌های بعدی
  فراداده.
- **بازنشانی پس از بی‌کاری** (`mode: "idle"`) - نشست جدید پس از `session.reset.idleMinutes`
  بی‌فعالیتی. تازگی بی‌کاری بر اساس آخرین تعامل واقعی کاربر/کانال است؛
  بنابراین رویدادهای سیستمی Heartbeat، Cron و exec نشست را
  فعال نگه نمی‌دارند.
- **بازنشانی دستی** - در گفت‌وگو `/new` یا `/reset` را تایپ کنید. `/new <model>` همچنین
  مدل را تغییر می‌دهد.

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

نشست‌هایی که یک نشست CLI فعال تحت مالکیت ارائه‌دهنده دارند، با پیش‌فرض ضمنی
روزانه قطع نمی‌شوند. وقتی این نشست‌ها باید طبق زمان‌سنج منقضی شوند، از `/reset` استفاده کنید یا `session.reset` را صریحاً پیکربندی کنید.

پیش‌فرض را بر اساس نوع گفت‌وگو یا کانال بازنویسی کنید:

```json5
{
  session: {
    reset: { mode: "daily", atHour: 4 },
    resetByType: {
      group: { mode: "idle", idleMinutes: 120 },
      thread: { mode: "daily", atHour: 6 },
    },
    resetByChannel: {
      discord: { mode: "idle", idleMinutes: 10080 },
    },
  },
}
```

`resetByType` از `direct` (نام مستعار قدیمی `dm`)، `group` و `thread` پشتیبانی می‌کند.
`session.idleMinutes` سطح‌بالای قدیمی همچنان به‌عنوان نام مستعار سازگاری برای
پیش‌فرض حالت بی‌کاری، وقتی هیچ بلوک `session.reset`/`resetByType` تنظیم نشده باشد، کار می‌کند.

## محل نگهداری وضعیت

- **ردیف‌های نشست زمان اجرا:** `~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite`
- **فایل‌های رونوشت بایگانی‌شده:** `~/.openclaw/agents/<agentId>/sessions/`
- **منبع مهاجرت ردیف‌های قدیمی:** `~/.openclaw/agents/<agentId>/sessions/sessions.json`

ردیف‌های نشست در پایگاه داده SQLite مختص هر عامل، مُهرهای زمانی چرخه عمر
جداگانه‌ای نگه می‌دارند:

- `sessionStartedAt`: زمان آغاز `sessionId` فعلی؛ بازنشانی روزانه از آن استفاده می‌کند.
- `lastInteractionAt`: آخرین تعامل کاربر/کانال که طول عمر بی‌کاری را تمدید می‌کند.
- `updatedAt`: آخرین تغییر ردیف ذخیره‌گاه؛ برای فهرست‌کردن و هرس‌کردن مفید است، اما
  مرجع معتبر تازگی بازنشانی روزانه/پس از بی‌کاری نیست.

هنگام مهاجرت از نصب‌های قدیمی‌تر، راه‌اندازی Gateway و `openclaw doctor
--fix` ردیف‌های قدیمی `sessions.json` و تاریخچه رونوشت فعال JSONL را
به‌طور خودکار به SQLite وارد می‌کنند. ردیف‌های فاقد `sessionStartedAt` در صورت وجود، از
سرآیند نشست رونوشت قدیمی JSONL برطرف می‌شوند. اگر ردیفی قدیمی همچنین
فاقد `lastInteractionAt` باشد، تازگی بی‌کاری به زمان آغاز آن نشست بازمی‌گردد،
نه به نوشتن‌های دفترداری بعدی. وقتی بررسی صریح
یا شواهد اعتبارسنجی می‌خواهید، از `openclaw doctor --session-sqlite inspect
--session-sqlite-all-agents` و [توالی مهاجرت Doctor](/fa/cli/doctor#session-sqlite-migration) استفاده کنید.

## نگهداشت نشست

OpenClaw با استفاده از `session.maintenance` و مقادیر پیش‌فرض
نمایش‌داده‌شده، اندازه ذخیره‌سازی نشست را در گذر زمان محدود می‌کند:

```json5
{
  session: {
    maintenance: {
      mode: "enforce", // "enforce" پاک‌سازی را اعمال می‌کند؛ "warn" فقط گزارش می‌دهد
      pruneAfter: "30d",
      maxEntries: 500,
    },
  },
}
```

برای محدودیت‌های `maxEntries` در مقیاس تولید، نوشتن‌های زمان اجرای Gateway از یک
بافر کوچک حد بالای آب استفاده می‌کنند و در دسته‌ها تا سقف پیکربندی‌شده پاک‌سازی می‌شوند.
خواندن‌های ذخیره‌گاه نشست هنگام راه‌اندازی Gateway ورودی‌ها را هرس یا محدود نمی‌کنند؛ بنابراین
نشست‌های راه‌اندازی و Cron مجزا هزینه پاک‌سازی کامل ذخیره‌گاه را نمی‌پردازند.
`openclaw sessions cleanup --enforce` سقف را بلافاصله اعمال می‌کند.

نشست‌های وارسی اجرای مدل Gateway به‌طور پیش‌فرض کوتاه‌عمر هستند. ردیف‌های منطبق با
`agent:*:explicit:model-run-<uuid>` از نگهداری ثابت `24h` استفاده می‌کنند، اما پاک‌سازی
مشروط به فشار است: ردیف‌های وارسی قدیمی را فقط هنگامی حذف می‌کند که فشار
نگهداشت/سقف ورودی نشست ایجاد شود و پیش از آستانه گسترده‌تر سن ورودی‌های قدیمی
و سقف ورودی اجرا می‌شود. نشست‌های عادی مستقیم، گروهی، رشته‌ای، Cron، هوک، Heartbeat،
ACP و زیرعامل این نگهداری 24h را به ارث نمی‌برند.

نگهداشت، اشاره‌گرهای پایدار مکالمه خارجی، از جمله نشست‌های گروهی
و نشست‌های گفت‌وگوی محدود به رشته را حفظ می‌کند و در عین حال اجازه می‌دهد ورودی‌های مصنوعی Cron،
هوک، Heartbeat، ACP و زیرعامل به‌مرور منقضی شوند.

اگر قبلاً از جداسازی پیام مستقیم استفاده کرده‌اید و سپس `session.dmScope` را به
`main` بازگردانده‌اید، ردیف‌های قدیمی پیام مستقیم کلیدگذاری‌شده بر اساس همتا را با
`openclaw sessions cleanup --dry-run --fix-dm-scope` پیش‌نمایش کنید. اعمال همان پرچم
آن ردیف‌های قدیمی پیام مستقیم را بازنشسته می‌کند و رونوشت‌هایشان را به‌صورت بایگانی‌های حذف‌شده
نگه می‌دارد.

هر اجرای نگهداشت را با `openclaw sessions cleanup --dry-run` پیش‌نمایش کنید.

## بررسی نشست‌ها

| فرمان                              | موارد نمایش‌داده‌شده                              |
| ---------------------------------- | ------------------------------------------------- |
| `openclaw status`                 | مسیر ذخیره‌گاه نشست و فعالیت اخیر                 |
| `openclaw sessions --json`                 | همه نشست‌ها (فیلتر با `--active <minutes>`)         |
| `/status` در گفت‌وگو      | میزان استفاده از زمینه، مدل و کلیدهای تغییر وضعیت |
| `/context list`                 | محتوای پرامپت سیستم                               |

## مطالعه بیشتر

- [جست‌وجوی نشست](/fa/concepts/session-search) - بازیابی تمام‌متن از رونوشت‌های گذشته
- [هرس نشست](/fa/concepts/session-pruning) - کوتاه‌سازی نتایج ابزار
- [Compaction](/fa/concepts/compaction) - خلاصه‌سازی مکالمه‌های طولانی
- [ابزارهای نشست](/fa/concepts/session-tool) - ابزارهای عامل برای کار میان‌نشستی
- [بررسی عمیق مدیریت نشست](/fa/reference/session-management-compaction) -
  طرح‌واره ذخیره‌گاه، رونوشت‌ها، سیاست ارسال، فراداده مبدأ و پیکربندی پیشرفته
- [چندعاملی](/fa/concepts/multi-agent) - هدایت و جداسازی نشست میان عامل‌ها
- [وظایف پس‌زمینه](/fa/automation/tasks) - نحوه ایجاد رکوردهای وظیفه دارای ارجاع نشست توسط کارهای جداشده
- [هدایت کانال](/fa/channels/channel-routing) - نحوه هدایت پیام‌های ورودی به نشست‌ها

## مرتبط

- [هرس نشست](/fa/concepts/session-pruning)
- [ابزارهای نشست](/fa/concepts/session-tool)
- [صف فرمان](/fa/concepts/queue)
