> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Feishu

Feishu/Lark — это универсальная платформа для совместной работы, где команды общаются, делятся документами, управляют календарями и вместе выполняют работу.

**Статус:** готово для production для личных сообщений боту и групповых чатов. WebSocket — режим по умолчанию; режим webhook необязателен.

***

## Быстрый старт

<Note>
  Требуется OpenClaw 2026.5.29 или новее. Выполните `openclaw --version`, чтобы проверить версию. Обновитесь командой `openclaw update`.
</Note>

<Steps>
  <Step title="Запустите мастер настройки канала">
    ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
    openclaw channels login --channel feishu
    ```

    Выберите ручную настройку, чтобы вставить App ID и App Secret из Feishu Open Platform, или выберите настройку по QR-коду, чтобы создать бота автоматически. Если мобильное приложение Feishu для внутреннего рынка не реагирует на QR-код, запустите настройку повторно и выберите ручную настройку.
  </Step>

  <Step title="После завершения настройки перезапустите gateway, чтобы применить изменения">
    ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
    openclaw gateway restart
    ```
  </Step>
</Steps>

***

## Управление доступом

### Личные сообщения

Настройте `dmPolicy`, чтобы управлять тем, кто может отправлять личные сообщения боту:

* `"pairing"` - неизвестные пользователи получают код сопряжения; подтвердите через CLI
* `"allowlist"` - общаться могут только пользователи, перечисленные в `allowFrom`
* `"open"` - разрешить публичные личные сообщения только когда `allowFrom` включает `"*"`; при ограничивающих записях общаться могут только соответствующие пользователи
* `"disabled"` - отключить все личные сообщения

**Одобрить запрос на сопряжение:**

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw pairing list feishu
openclaw pairing approve feishu <CODE>
```

### Групповые чаты

**Политика групп** (`channels.feishu.groupPolicy`):

| Значение      | Поведение                                                                                |
| ------------- | ---------------------------------------------------------------------------------------- |
| `"open"`      | Отвечать на все сообщения в группах                                                      |
| `"allowlist"` | Отвечать только группам из `groupAllowFrom` или явно настроенным в `groups.<chat_id>`    |
| `"disabled"`  | Отключить все групповые сообщения; явные записи `groups.<chat_id>` не переопределяют это |

По умолчанию: `allowlist`

**Требование упоминания** (`channels.feishu.requireMention`):

* `true` - требовать @упоминание (по умолчанию)
* `false` - отвечать без @упоминания
* Переопределение для группы: `channels.feishu.groups.<chat_id>.requireMention`
* Широковещательные `@all` и `@_all` не считаются упоминаниями бота. Сообщение, в котором упомянуты и `@all`, и сам бот напрямую, всё равно считается упоминанием бота.

***

## Примеры настройки групп

### Разрешить все группы, @упоминание не требуется

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      groupPolicy: "open",
    },
  },
}
```

### Разрешить все группы, но по-прежнему требовать @упоминание

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      groupPolicy: "open",
      requireMention: true,
    },
  },
}
```

### Разрешить только определённые группы

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      // Идентификаторы групп выглядят так: oc_xxx
      groupAllowFrom: ["oc_xxx", "oc_yyy"],
    },
  },
}
```

В режиме `allowlist` также можно допустить группу, добавив явную запись `groups.<chat_id>`. Явные записи не переопределяют `groupPolicy: "disabled"`. Подстановочные значения по умолчанию в `groups.*` настраивают совпадающие группы, но сами по себе не допускают группы.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      groups: {
        oc_xxx: {
          requireMention: false,
        },
      },
    },
  },
}
```

### Ограничить отправителей внутри группы

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["oc_xxx"],
      groups: {
        oc_xxx: {
          // Пользовательские open_ids выглядят так: ou_xxx
          allowFrom: ["ou_user1", "ou_user2"],
        },
      },
    },
  },
}
```

***

<a id="get-groupuser-ids" />

## Получить идентификаторы групп/пользователей

### Идентификаторы групп (`chat_id`, формат: `oc_xxx`)

Откройте группу в Feishu/Lark, нажмите значок меню в правом верхнем углу и перейдите в **Настройки**. Идентификатор группы (`chat_id`) указан на странице настроек.

<img src="https://mintcdn.com/clawdhub/0NpU6wNaI7exeaOE/images/feishu-get-group-id.png?fit=max&auto=format&n=0NpU6wNaI7exeaOE&q=85&s=1c9b41e1f9743621dfdd3abf7e952405" alt="Получить идентификатор группы" width="1636" height="1764" data-path="images/feishu-get-group-id.png" />

### Идентификаторы пользователей (`open_id`, формат: `ou_xxx`)

Запустите gateway, отправьте личное сообщение боту, затем проверьте журналы:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw logs --follow
```

Найдите `open_id` в выводе журнала. Также можно проверить ожидающие запросы на сопряжение:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw pairing list feishu
```

***

## Распространённые команды

| Команда   | Описание                       |
| --------- | ------------------------------ |
| `/status` | Показать статус бота           |
| `/reset`  | Сбросить текущую сессию        |
| `/model`  | Показать или сменить модель ИИ |

<Note>
  Feishu/Lark не поддерживает встроенные меню slash-команд, поэтому отправляйте их как обычные текстовые сообщения.
</Note>

***

## Устранение неполадок

### Бот не отвечает в групповых чатах

1. Убедитесь, что бот добавлен в группу
2. Убедитесь, что вы @упоминаете бота (требуется по умолчанию)
3. Проверьте, что `groupPolicy` не равен `"disabled"`
4. Проверьте журналы: `openclaw logs --follow`

### Бот не получает сообщения

1. Убедитесь, что бот опубликован и одобрен в Feishu Open Platform / Lark Developer
2. Убедитесь, что подписка на события включает `im.message.receive_v1`
3. Убедитесь, что выбрано **постоянное соединение** (WebSocket)
4. Убедитесь, что выданы все необходимые области разрешений
5. Убедитесь, что gateway запущен: `openclaw gateway status`
6. Проверьте журналы: `openclaw logs --follow`

### Настройка по QR-коду не реагирует в мобильном приложении Feishu

1. Запустите настройку повторно: `openclaw channels login --channel feishu`
2. Выберите ручную настройку
3. В Feishu Open Platform создайте самосозданное приложение и скопируйте его App ID и App Secret
4. Вставьте эти учетные данные в мастер настройки

### App Secret утёк

1. Сбросьте App Secret в Feishu Open Platform / Lark Developer
2. Обновите значение в вашей конфигурации
3. Перезапустите gateway: `openclaw gateway restart`

***

## Расширенная конфигурация

### Несколько аккаунтов

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      defaultAccount: "main",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          name: "Primary bot",
          tts: {
            providers: {
              openai: { voice: "shimmer" },
            },
          },
        },
        backup: {
          appId: "cli_yyy",
          appSecret: "yyy",
          name: "Backup bot",
          enabled: false,
        },
      },
    },
  },
}
```

`defaultAccount` управляет тем, какой аккаунт используется, когда исходящие API не указывают `accountId`.
`accounts.<id>.tts` использует ту же форму, что и `messages.tts`, и выполняет глубокое слияние поверх
глобальной конфигурации TTS, поэтому настройки Feishu с несколькими ботами могут хранить общие учетные данные
провайдера глобально, переопределяя только голос, модель, персону или автоматический режим
для каждого аккаунта.

### Ограничения сообщений

* `textChunkLimit` - размер фрагмента исходящего текста (по умолчанию: `2000` символов)
* `mediaMaxMb` - лимит загрузки/скачивания медиа (по умолчанию: `30` МБ)

### Потоковая передача

Feishu/Lark поддерживает потоковые ответы через интерактивные карточки. Когда это включено, бот обновляет карточку в реальном времени по мере генерации текста.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      streaming: true, // включить вывод потоковой карточки (по умолчанию: true)
      blockStreaming: true, // включить потоковую передачу завершенных блоков
    },
  },
}
```

Установите `streaming: false`, чтобы отправлять полный ответ одним сообщением. `blockStreaming` по умолчанию отключен; включайте его только если хотите, чтобы завершенные блоки ассистента отправлялись до финального ответа.

### Оптимизация квоты

Сократите количество вызовов API Feishu/Lark с помощью двух необязательных флагов:

* `typingIndicator` (по умолчанию `true`): установите `false`, чтобы пропустить вызовы реакции набора текста
* `resolveSenderNames` (по умолчанию `true`): установите `false`, чтобы пропустить запросы профилей отправителей

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      typingIndicator: false,
      resolveSenderNames: false,
    },
  },
}
```

### Сессии ACP

Feishu/Lark поддерживает ACP для личных сообщений и сообщений в групповых ветках. ACP в Feishu/Lark управляется текстовыми командами - встроенных меню slash-команд нет, поэтому используйте сообщения `/acp ...` прямо в разговоре.

#### Постоянная привязка ACP

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "feishu",
        accountId: "default",
        peer: { kind: "direct", id: "ou_1234567890" },
      },
    },
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "feishu",
        accountId: "default",
        peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" },
      },
      acp: { label: "codex-feishu-topic" },
    },
  ],
}
```

#### Создать ACP из чата

В личном сообщении или ветке Feishu/Lark:

```text theme={"theme":{"light":"min-light","dark":"min-dark"}}
/acp spawn codex --thread here
```

`--thread here` работает для личных сообщений и сообщений в ветках Feishu/Lark. Последующие сообщения в привязанном разговоре направляются напрямую в эту сессию ACP.

### Маршрутизация нескольких агентов

Используйте `bindings`, чтобы направлять личные сообщения или группы Feishu/Lark разным агентам.

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  agents: {
    list: [
      { id: "main" },
      { id: "agent-a", workspace: "/home/user/agent-a" },
      { id: "agent-b", workspace: "/home/user/agent-b" },
    ],
  },
  bindings: [
    {
      agentId: "agent-a",
      match: {
        channel: "feishu",
        peer: { kind: "direct", id: "ou_xxx" },
      },
    },
    {
      agentId: "agent-b",
      match: {
        channel: "feishu",
        peer: { kind: "group", id: "oc_zzz" },
      },
    },
  ],
}
```

Поля маршрутизации:

* `match.channel`: `"feishu"`
* `match.peer.kind`: `"direct"` (личное сообщение) или `"group"` (групповой чат)
* `match.peer.id`: Open ID пользователя (`ou_xxx`) или идентификатор группы (`oc_xxx`)

См. [Получить идентификаторы групп/пользователей](#get-groupuser-ids) для советов по поиску.

***

## Изоляция агента для каждого пользователя (динамическое создание агента)

Включите `dynamicAgentCreation`, чтобы автоматически создавать **изолированные экземпляры агентов** для каждого пользователя личных сообщений. Каждый пользователь получает собственные:

* Независимый каталог рабочего пространства
* Отдельные `USER.md` / `SOUL.md` / `MEMORY.md`
* Приватную историю разговора
* Изолированные Skills и состояние

Это важно для публичных ботов, где нужно, чтобы у каждого пользователя был собственный приватный опыт общения с ИИ-ассистентом.

<Note>
  Динамические привязки включают нормализованный Feishu `accountId`, поэтому аккаунты по умолчанию и именованные аккаунты направляют каждого отправителя к правильному динамическому агенту.

  Если именованный аккаунт создал динамического агента без области действия в более старом релизе, этот legacy-агент по-прежнему учитывается в `maxAgents`. Убедитесь, что он не используется аккаунтом по умолчанию, прежде чем удалять его, или временно увеличьте `maxAgents`; OpenClaw не может безопасно определить, какому аккаунту принадлежит неоднозначное legacy-состояние.
</Note>

### Быстрая настройка

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      dmPolicy: "open",
      allowFrom: ["*"],
      dynamicAgentCreation: {
        enabled: true,
        workspaceTemplate: "~/.openclaw/workspace-{agentId}",
        agentDirTemplate: "~/.openclaw/agents/{agentId}/agent",
      },
    },
  },
  session: {
    // Важно: делает личное сообщение каждого пользователя его "основной сессией"
    // Автоматически загружает USER.md / SOUL.md / MEMORY.md
    // Для более сильной изоляции используйте "per-channel-peer" вместо этого
    dmScope: "main",
  },
}
```

### Как это работает

Когда новый пользователь отправляет своё первое личное сообщение:

1. Канал генерирует уникальный `agentId`: `feishu-{user_open_id}` для аккаунта по умолчанию или ограниченный дайджест идентичности с префиксом аккаунта для именованного аккаунта
2. Создает новое рабочее пространство по пути `workspaceTemplate`
3. Регистрирует агента и создает привязку для этого пользователя
4. Помощник рабочего пространства обеспечивает файлы начальной загрузки (`AGENTS.md`, `SOUL.md`, `USER.md` и т. д.) при первом доступе
5. Направляет все будущие сообщения от этого пользователя его выделенному агенту

### Параметры конфигурации

| Настройка                                                | Описание                                                         | По умолчанию                         |
| -------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ |
| `channels.feishu.dynamicAgentCreation.enabled`           | Включить автоматическое создание агента для каждого пользователя | `false`                              |
| `channels.feishu.dynamicAgentCreation.workspaceTemplate` | Шаблон пути для рабочих пространств динамических агентов         | `~/.openclaw/workspace-{agentId}`    |
| `channels.feishu.dynamicAgentCreation.agentDirTemplate`  | Шаблон имени каталога агента                                     | `~/.openclaw/agents/{agentId}/agent` |
| `channels.feishu.dynamicAgentCreation.maxAgents`         | Максимальное количество создаваемых динамических агентов         | без ограничения                      |

Переменные шаблона:

* `{agentId}` - сгенерированный ID агента (например, `feishu-ou_xxxxxx` или `feishu-support-<identity_digest>`)
* `{userId}` - Feishu open\_id отправителя (например, `ou_xxxxxx`)

### Область сеанса

`session.dmScope` управляет тем, как личные сообщения сопоставляются с сеансами агента. Это **глобальная настройка**, которая влияет на все каналы.

| Значение                     | Поведение                                                                   | Лучше всего подходит для                                                           |
| ---------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `"main"`                     | DM каждого пользователя сопоставляется с основным сеансом его агента        | Однопользовательские боты, где нужно автоматически загружать `USER.md` / `SOUL.md` |
| `"per-channel-peer"`         | Каждая комбинация (канал + пользователь) получает отдельный сеанс           | Публичные многопользовательские боты, которым нужна более строгая изоляция         |
| `"per-account-channel-peer"` | Каждая комбинация (аккаунт + канал + пользователь) получает отдельный сеанс | Многоаккаунтные боты, которым нужна изоляция сеансов на уровне аккаунта            |

**Компромисс**: использование `"main"` включает автоматическую загрузку файлов начальной инициализации (`USER.md`, `SOUL.md`, `MEMORY.md`), но означает, что все DM во всех каналах используют один и тот же шаблон ключей сеанса. Для публичных многопользовательских ботов, где изоляция важнее автоматической загрузки начальных файлов, рассмотрите `"per-channel-peer"` и управляйте начальными файлами вручную.

<Note>
  Используйте `"per-account-channel-peer"`, когда именованные аккаунты Feishu должны сохранять отдельные сеансы для одного и того же отправителя. Динамические привязки сохраняют область аккаунта.
</Note>

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  session: {
    // For single-user personal bots: enables auto bootstrap loading
    dmScope: "main",

    // For public multi-user bots: stronger isolation
    // dmScope: "per-channel-peer",
  },
}
```

### Типичное многопользовательское развертывание

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  channels: {
    feishu: {
      appId: "cli_xxx",
      appSecret: "xxx",
      dmPolicy: "open",
      allowFrom: ["*"],
      groupPolicy: "open",
      requireMention: true,
      dynamicAgentCreation: {
        enabled: true,
        workspaceTemplate: "~/.openclaw/workspace-{agentId}",
        agentDirTemplate: "~/.openclaw/agents/{agentId}/agent",
      },
    },
  },
  session: {
    // Choose dmScope based on your isolation needs:
    // "main" for bootstrap auto-loading, "per-channel-peer" for stronger isolation
    dmScope: "main",
  },
  bindings: [], // Empty - dynamic agents auto-bind
}
```

### Проверка

Проверьте журналы Gateway, чтобы подтвердить, что динамическое создание работает:

```
feishu: creating dynamic agent "feishu-ou_xxxxxx" for user ou_xxxxxx
workspace: /Users/you/.openclaw/workspace-feishu-ou_xxxxxx
feishu: dynamic agent created, new route: agent:feishu-ou_xxxxxx:main
```

Выведите список всех созданных рабочих пространств:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
ls -la ~/.openclaw/workspace-*
```

### Примечания

* **Изоляция рабочего пространства**: каждый пользователь получает собственный каталог рабочего пространства и экземпляр агента. Пользователи не могут видеть историю разговоров или файлы друг друга в обычном потоке обмена сообщениями.
* **Граница безопасности**: это механизм изоляции контекста сообщений, а не граница безопасности против недоверенного совместного арендатора. Процесс агента и среда хоста являются общими.
* **`bindings` должен быть пустым**: динамические агенты автоматически регистрируют собственные привязки
* **Путь обновления**: существующие ручные привязки продолжают работать вместе с динамическими агентами
* **`session.dmScope` является глобальным**: это влияет на все каналы, а не только на Feishu

***

## Справочник по конфигурации

Полная конфигурация: [Конфигурация Gateway](/ru/gateway/configuration)

| Настройка                                                | Описание                                                                                            | По умолчанию                         |
| -------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `channels.feishu.enabled`                                | Включить или отключить канал                                                                        | `true`                               |
| `channels.feishu.domain`                                 | Домен API (`feishu` или `lark`)                                                                     | `feishu`                             |
| `channels.feishu.connectionMode`                         | Транспорт событий (`websocket` или `webhook`)                                                       | `websocket`                          |
| `channels.feishu.defaultAccount`                         | Аккаунт по умолчанию для исходящей маршрутизации                                                    | `default`                            |
| `channels.feishu.verificationToken`                      | Требуется для режима webhook                                                                        | -                                    |
| `channels.feishu.encryptKey`                             | Требуется для режима webhook                                                                        | -                                    |
| `channels.feishu.webhookPath`                            | Путь маршрута Webhook                                                                               | `/feishu/events`                     |
| `channels.feishu.webhookHost`                            | Хост привязки Webhook                                                                               | `127.0.0.1`                          |
| `channels.feishu.webhookPort`                            | Порт привязки Webhook                                                                               | `3000`                               |
| `channels.feishu.accounts.<id>.appId`                    | ID приложения                                                                                       | -                                    |
| `channels.feishu.accounts.<id>.appSecret`                | Секрет приложения                                                                                   | -                                    |
| `channels.feishu.accounts.<id>.domain`                   | Переопределение домена для аккаунта                                                                 | `feishu`                             |
| `channels.feishu.accounts.<id>.tts`                      | Переопределение TTS для аккаунта                                                                    | `messages.tts`                       |
| `channels.feishu.dmPolicy`                               | Политика DM                                                                                         | `pairing`                            |
| `channels.feishu.allowFrom`                              | Список разрешенных отправителей DM (список open\_id)                                                | -                                    |
| `channels.feishu.groupPolicy`                            | Политика групп                                                                                      | `allowlist`                          |
| `channels.feishu.groupAllowFrom`                         | Список разрешенных групп                                                                            | -                                    |
| `channels.feishu.requireMention`                         | Требовать @упоминание в группах                                                                     | `true`                               |
| `channels.feishu.groups.<chat_id>.requireMention`        | Переопределение @упоминания для группы; явные ID также допускают группу в режиме списка разрешенных | унаследовано                         |
| `channels.feishu.groups.<chat_id>.enabled`               | Включить или отключить конкретную группу                                                            | `true`                               |
| `channels.feishu.dynamicAgentCreation.enabled`           | Включить автоматическое создание агента для каждого пользователя                                    | `false`                              |
| `channels.feishu.dynamicAgentCreation.workspaceTemplate` | Шаблон пути для рабочих пространств динамических агентов                                            | `~/.openclaw/workspace-{agentId}`    |
| `channels.feishu.dynamicAgentCreation.agentDirTemplate`  | Шаблон имени каталога агента                                                                        | `~/.openclaw/agents/{agentId}/agent` |
| `channels.feishu.dynamicAgentCreation.maxAgents`         | Максимальное количество создаваемых динамических агентов                                            | без ограничения                      |
| `channels.feishu.textChunkLimit`                         | Размер фрагмента сообщения                                                                          | `2000`                               |
| `channels.feishu.mediaMaxMb`                             | Ограничение размера медиа                                                                           | `30`                                 |
| `channels.feishu.streaming`                              | Потоковый вывод карточек                                                                            | `true`                               |
| `channels.feishu.blockStreaming`                         | Потоковая отправка ответов завершенными блоками                                                     | `false`                              |
| `channels.feishu.typingIndicator`                        | Отправлять реакции набора текста                                                                    | `true`                               |
| `channels.feishu.resolveSenderNames`                     | Разрешать отображаемые имена отправителей                                                           | `true`                               |
| `channels.feishu.tools.bitable`                          | Включить инструменты Bitable/Base                                                                   | `true`                               |
| `channels.feishu.tools.base`                             | Псевдоним для `channels.feishu.tools.bitable`; явный `bitable` имеет приоритет, когда заданы оба    | `true`                               |
| `channels.feishu.accounts.<id>.tools.bitable`            | Ограничитель инструментов Bitable/Base для аккаунта                                                 | унаследовано                         |
| `channels.feishu.accounts.<id>.tools.base`               | Псевдоним для аккаунта для `tools.bitable`                                                          | унаследовано                         |

***

## Поддерживаемые типы сообщений

### Получение

* ✅ Текст
* ✅ Форматированный текст (post)
* ✅ Изображения
* ✅ Файлы
* ✅ Аудио
* ✅ Видео/медиа
* ✅ Стикеры

Входящие аудиосообщения Feishu/Lark нормализуются как медиа-плейсхолдеры, а не как необработанный JSON `file_key`. Когда настроен `tools.media.audio`, OpenClaw скачивает ресурс голосовой заметки и запускает общую аудиотранскрибацию перед ходом агента, поэтому агент получает текстовую расшифровку речи. Если Feishu включает текст расшифровки прямо в полезную нагрузку аудио, этот текст используется без дополнительного вызова ASR. Без провайдера аудиотранскрибации агент все равно получает плейсхолдер `<media:audio>` вместе с сохраненным вложением, а не необработанную полезную нагрузку ресурса Feishu.

### Отправка

* ✅ Текст
* ✅ Изображения
* ✅ Файлы
* ✅ Аудио
* ✅ Видео/медиа
* ✅ Интерактивные карточки (включая потоковые обновления)
* ⚠️ Форматированный текст (форматирование в стиле публикаций; не поддерживает все возможности авторинга Feishu/Lark)

Нативные аудиопузырьки Feishu/Lark используют тип сообщения Feishu `audio` и требуют
загрузки медиа Ogg/Opus (`file_type: "opus"`). Существующие медиа `.opus` и `.ogg`
отправляются напрямую как нативное аудио. MP3/WAV/M4A и другие вероятные аудиоформаты
транскодируются в Ogg/Opus 48 кГц с помощью `ffmpeg` только когда ответ запрашивает
доставку голосом (`audioAsVoice` / инструмент сообщений `asVoice`, включая ответы
с голосовыми заметками TTS). Обычные вложения MP3 остаются обычными файлами. Если `ffmpeg` отсутствует или
преобразование завершается неудачно, OpenClaw откатывается к файловому вложению и записывает причину в журнал.

### Треды и ответы

* ✅ Встроенные ответы
* ✅ Ответы в тредах
* ✅ Медиаответы сохраняют привязку к треду при ответе на сообщение в треде

Для `groupSessionScope: "group_topic"` и `"group_topic_sender"` нативные
тематические группы Feishu/Lark используют `thread_id` события (`omt_*`) как канонический
ключ сессии темы. Если нативное событие начала темы опускает `thread_id`, OpenClaw
заполняет его из Feishu перед маршрутизацией хода. Обычные ответы в группе, которые
OpenClaw превращает в треды, продолжают использовать ID корневого сообщения ответа (`om_*`), чтобы
первый ход и последующий ход оставались в одной сессии.

***

## Связанные материалы

* [Обзор каналов](/ru/channels) - все поддерживаемые каналы
* [Сопряжение](/ru/channels/pairing) - аутентификация в личных сообщениях и поток сопряжения
* [Группы](/ru/channels/groups) - поведение группового чата и фильтрация по упоминаниям
* [Маршрутизация каналов](/ru/channels/channel-routing) - маршрутизация сессий для сообщений
* [Безопасность](/ru/gateway/security) - модель доступа и усиление защиты
