Regional platforms
Feishu
Feishu/Lark — это универсальная платформа для совместной работы, где команды общаются, делятся документами, управляют календарями и вместе выполняют работу.
Статус: готово для production для личных сообщений боту и групповых чатов. WebSocket — режим по умолчанию; режим webhook необязателен.
Быстрый старт
Запустите мастер настройки канала
openclaw channels login --channel feishuВыберите ручную настройку, чтобы вставить App ID и App Secret из Feishu Open Platform, или выберите настройку по QR-коду, чтобы создать бота автоматически. Если мобильное приложение Feishu для внутреннего рынка не реагирует на QR-код, запустите настройку повторно и выберите ручную настройку.
После завершения настройки перезапустите gateway, чтобы применить изменения
openclaw gateway restartУправление доступом
Личные сообщения
Настройте dmPolicy, чтобы управлять тем, кто может отправлять личные сообщения боту:
"pairing"- неизвестные пользователи получают код сопряжения; подтвердите через CLI"allowlist"- общаться могут только пользователи, перечисленные вallowFrom"open"- разрешить публичные личные сообщения только когдаallowFromвключает"*"; при ограничивающих записях общаться могут только соответствующие пользователи"disabled"- отключить все личные сообщения
Одобрить запрос на сопряжение:
openclaw pairing list feishuopenclaw 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, и сам бот напрямую, всё равно считается упоминанием бота.
Примеры настройки групп
Разрешить все группы, @упоминание не требуется
{ channels: { feishu: { groupPolicy: "open", }, },}Разрешить все группы, но по-прежнему требовать @упоминание
{ channels: { feishu: { groupPolicy: "open", requireMention: true, }, },}Разрешить только определённые группы
{ channels: { feishu: { groupPolicy: "allowlist", // Идентификаторы групп выглядят так: oc_xxx groupAllowFrom: ["oc_xxx", "oc_yyy"], }, },}В режиме allowlist также можно допустить группу, добавив явную запись groups.<chat_id>. Явные записи не переопределяют groupPolicy: "disabled". Подстановочные значения по умолчанию в groups.* настраивают совпадающие группы, но сами по себе не допускают группы.
{ channels: { feishu: { groupPolicy: "allowlist", groups: { oc_xxx: { requireMention: false, }, }, }, },}Ограничить отправителей внутри группы
{ channels: { feishu: { groupPolicy: "allowlist", groupAllowFrom: ["oc_xxx"], groups: { oc_xxx: { // Пользовательские open_ids выглядят так: ou_xxx allowFrom: ["ou_user1", "ou_user2"], }, }, }, },}Получить идентификаторы групп/пользователей
Идентификаторы групп (chat_id, формат: oc_xxx)
Откройте группу в Feishu/Lark, нажмите значок меню в правом верхнем углу и перейдите в Настройки. Идентификатор группы (chat_id) указан на странице настроек.

Идентификаторы пользователей (open_id, формат: ou_xxx)
Запустите gateway, отправьте личное сообщение боту, затем проверьте журналы:
openclaw logs --followНайдите open_id в выводе журнала. Также можно проверить ожидающие запросы на сопряжение:
openclaw pairing list feishuРаспространённые команды
| Команда | Описание |
|---|---|
/status |
Показать статус бота |
/reset |
Сбросить текущую сессию |
/model |
Показать или сменить модель ИИ |
Устранение неполадок
Бот не отвечает в групповых чатах
- Убедитесь, что бот добавлен в группу
- Убедитесь, что вы @упоминаете бота (требуется по умолчанию)
- Проверьте, что
groupPolicyне равен"disabled" - Проверьте журналы:
openclaw logs --follow
Бот не получает сообщения
- Убедитесь, что бот опубликован и одобрен в Feishu Open Platform / Lark Developer
- Убедитесь, что подписка на события включает
im.message.receive_v1 - Убедитесь, что выбрано постоянное соединение (WebSocket)
- Убедитесь, что выданы все необходимые области разрешений
- Убедитесь, что gateway запущен:
openclaw gateway status - Проверьте журналы:
openclaw logs --follow
Настройка по QR-коду не реагирует в мобильном приложении Feishu
- Запустите настройку повторно:
openclaw channels login --channel feishu - Выберите ручную настройку
- В Feishu Open Platform создайте самосозданное приложение и скопируйте его App ID и App Secret
- Вставьте эти учетные данные в мастер настройки
App Secret утёк
- Сбросьте App Secret в Feishu Open Platform / Lark Developer
- Обновите значение в вашей конфигурации
- Перезапустите gateway:
openclaw gateway restart
Расширенная конфигурация
Несколько аккаунтов
{ 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 поддерживает потоковые ответы через интерактивные карточки. Когда это включено, бот обновляет карточку в реальном времени по мере генерации текста.
{ channels: { feishu: { streaming: true, // включить вывод потоковой карточки (по умолчанию: true) blockStreaming: true, // включить потоковую передачу завершенных блоков }, },}Установите streaming: false, чтобы отправлять полный ответ одним сообщением. blockStreaming по умолчанию отключен; включайте его только если хотите, чтобы завершенные блоки ассистента отправлялись до финального ответа.
Оптимизация квоты
Сократите количество вызовов API Feishu/Lark с помощью двух необязательных флагов:
typingIndicator(по умолчаниюtrue): установитеfalse, чтобы пропустить вызовы реакции набора текстаresolveSenderNames(по умолчаниюtrue): установитеfalse, чтобы пропустить запросы профилей отправителей
{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, },}Сессии ACP
Feishu/Lark поддерживает ACP для личных сообщений и сообщений в групповых ветках. ACP в Feishu/Lark управляется текстовыми командами - встроенных меню slash-команд нет, поэтому используйте сообщения /acp ... прямо в разговоре.
Постоянная привязка ACP
{ 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:
/acp spawn codex --thread here--thread here работает для личных сообщений и сообщений в ветках Feishu/Lark. Последующие сообщения в привязанном разговоре направляются напрямую в эту сессию ACP.
Маршрутизация нескольких агентов
Используйте bindings, чтобы направлять личные сообщения или группы Feishu/Lark разным агентам.
{ 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)
См. Получить идентификаторы групп/пользователей для советов по поиску.
Изоляция агента для каждого пользователя (динамическое создание агента)
Включите dynamicAgentCreation, чтобы автоматически создавать изолированные экземпляры агентов для каждого пользователя личных сообщений. Каждый пользователь получает собственные:
- Независимый каталог рабочего пространства
- Отдельные
USER.md/SOUL.md/MEMORY.md - Приватную историю разговора
- Изолированные Skills и состояние
Это важно для публичных ботов, где нужно, чтобы у каждого пользователя был собственный приватный опыт общения с ИИ-ассистентом.
Быстрая настройка
{ 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", },}Как это работает
Когда новый пользователь отправляет своё первое личное сообщение:
- Канал генерирует уникальный
agentId:feishu-{user_open_id}для аккаунта по умолчанию или ограниченный дайджест идентичности с префиксом аккаунта для именованного аккаунта - Создает новое рабочее пространство по пути
workspaceTemplate - Регистрирует агента и создает привязку для этого пользователя
- Помощник рабочего пространства обеспечивает файлы начальной загрузки (
AGENTS.md,SOUL.md,USER.mdи т. д.) при первом доступе - Направляет все будущие сообщения от этого пользователя его выделенному агенту
Параметры конфигурации
| Настройка | Описание | По умолчанию |
|---|---|---|
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" и управляйте начальными файлами вручную.
{ session: { // For single-user personal bots: enables auto bootstrap loading dmScope: "main", // For public multi-user bots: stronger isolation // dmScope: "per-channel-peer", },}Типичное многопользовательское развертывание
{ 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_xxxxxxworkspace: /Users/you/.openclaw/workspace-feishu-ou_xxxxxxfeishu: dynamic agent created, new route: agent:feishu-ou_xxxxxx:mainВыведите список всех созданных рабочих пространств:
ls -la ~/.openclaw/workspace-*Примечания
- Изоляция рабочего пространства: каждый пользователь получает собственный каталог рабочего пространства и экземпляр агента. Пользователи не могут видеть историю разговоров или файлы друг друга в обычном потоке обмена сообщениями.
- Граница безопасности: это механизм изоляции контекста сообщений, а не граница безопасности против недоверенного совместного арендатора. Процесс агента и среда хоста являются общими.
bindingsдолжен быть пустым: динамические агенты автоматически регистрируют собственные привязки- Путь обновления: существующие ручные привязки продолжают работать вместе с динамическими агентами
session.dmScopeявляется глобальным: это влияет на все каналы, а не только на Feishu
Справочник по конфигурации
Полная конфигурация: Конфигурация Gateway
| Настройка | Описание | По умолчанию |
|---|---|---|
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_*), чтобы
первый ход и последующий ход оставались в одной сессии.
Связанные материалы
- Обзор каналов - все поддерживаемые каналы
- Сопряжение - аутентификация в личных сообщениях и поток сопряжения
- Группы - поведение группового чата и фильтрация по упоминаниям
- Маршрутизация каналов - маршрутизация сессий для сообщений
- Безопасность - модель доступа и усиление защиты