Перейти к основному содержимому

Настройка Feishu / Lark

VibeOS интегрируется с Feishu и Lark в качестве полнофункционального бота. После подключения вы можете общаться с агентом в личных сообщениях или групповых чатах, получать результаты cron-задач в домашнем чате, а также отправлять текст, изображения, аудио и файлы через стандартный шлюз.

Интеграция поддерживает оба режима подключения:

  • websocket — рекомендуется; VibeOS открывает исходящее соединение, и вам не нужен публичный webhook-эндпоинт
  • webhook — полезен, когда вы хотите, чтобы Feishu/Lark отправлял события в ваш шлюз через HTTP

Как работает VibeOS​

КонтекстПоведение
Личные сообщенияVibeOS отвечает на каждое сообщение.
Групповые чатыVibeOS отвечает только при упоминании бота в чате.
Общие групповые чатыПо умолчанию история сессии изолирована для каждого пользователя внутри общего чата.

Это поведение общего чата управляется через config.yaml:

group_sessions_per_user: true

Установите значение false, только если вы явно хотите один общий разговор на чат.

Шаг 1: Создание приложения Feishu / Lark​

Рекомендуемый способ: Создание по QR-коду (одна команда)​

vibeos gateway setup

Выберите Feishu / Lark и отсканируйте QR-код мобильным приложением Feishu или Lark. Vibeos автоматически создаст приложение-бота с правильными разрешениями и сохранит учётные данные.

Альтернатива: Ручная настройка​

Если создание по QR-коду недоступно, мастер переключится на ручной ввод:

  1. Откройте консоль разработчика Feishu или Lark:
  2. Создайте новое приложение.
  3. В разделе Credentials & Basic Info скопируйте App ID и App Secret.
  4. Включите возможность Bot для приложения.
  5. Запустите vibeos gateway setup, выберите Feishu / Lark и введите учётные данные по запросу.
предупреждение

Храните App Secret в секрете. Любой, кто им завладеет, сможет выдать себя за ваше приложение.

Настройка разрешений​

В консоли разработчика Feishu перейдите в Permission Management и добавьте следующие области. Вы можете импортировать их массово на странице разрешений.

Обязательные разрешения:

ОбластьНазначение
im:messageПолучение и чтение сообщений
im:message:send_as_botОтправка сообщений от имени бота
im:resourceДоступ к изображениям, файлам и аудио, отправленным пользователями
im:chatДоступ к метаданным чатов/групп
im:chat:readonlyЧтение списка чатов и участников

Рекомендуемые разрешения (для полной функциональности):

ОбластьНазначение
im:message.reactions:readonlyПолучение событий реакций-эмодзи
admin:app.info:readonlyАвтоматическое определение идентичности бота для проверки @упоминаний
contact:user.id:readonlyРазрешение ID пользователей для сопоставления с белым списком

Настройка событий​

В разделе Events and Callbacks:

  1. Установите режим подключения Long Connection (WebSocket) (рекомендуется) или настройте URL вебхука
  2. В разделе Event Configuration подпишитесь на:
    • im.message.receive_v1 — обязательно для получения сообщений

Публикация приложения​

После настройки разрешений и событий перейдите в Version Management и опубликуйте новую версию приложения. Разрешения вступят в силу только после публикации и утверждения версии (для корпоративных приложений может потребоваться одобрение администратора).

Шаг 2: Выбор режима подключения​

Рекомендуемый режим: WebSocket​

Используйте режим WebSocket, когда VibeOS работает на вашем ноутбуке, рабочей станции или частном сервере. Публичный URL не требуется. Официальный SDK Lark открывает и поддерживает постоянное исходящее WebSocket-соединение с автоматическим переподключением.

FEISHU_CONNECTION_MODE=websocket

Требования: Пакет Python websockets должен быть установлен. SDK управляет жизненным циклом соединения, поддержанием активности и автоматическим переподключением.

Как это работает: Адаптер запускает WebSocket-клиент SDK Lark в фоновом потоке-исполнителе. Входящие события (сообщения, реакции, действия с карточками) направляются в основной цикл asyncio. При разрыве соединения SDK автоматически попытается переподключиться.

Опциональный режим: Webhook​

Используйте режим webhook только в том случае, если VibeOS уже работает за доступным HTTP-эндпоинтом.

FEISHU_CONNECTION_MODE=webhook

В режиме webhook VibeOS запускает HTTP-сервер (через aiohttp) и обслуживает эндпоинт Feishu по адресу:

/feishu/webhook

Требования: Пакет Python aiohttp должен быть установлен.

Вы можете настроить адрес привязки и путь сервера вебхука:

FEISHU_WEBHOOK_HOST=127.0.0.1   # по умолчанию: 127.0.0.1
FEISHU_WEBHOOK_PORT=8765 # по умолчанию: 8765
FEISHU_WEBHOOK_PATH=/feishu/webhook # по умолчанию: /feishu/webhook

Когда Feishu отправляет запрос проверки URL (type: url_verification), вебхук отвечает автоматически, чтобы вы могли завершить настройку подписки в консоли разработчика Feishu. Ответ на проверку ограничен FEISHU_VERIFICATION_TOKEN, если он установлен — запросы проверки с отсутствующим или несовпадающим токеном отклоняются, чтобы неаутентифицированный удалённый клиент не мог доказать контроль над эндпоинтом, повторяя управляемые злоумышленником данные проверки.

Шаг 3: Настройка VibeOS​

Вариант A: Интерактивная настройка​

vibeos gateway setup

Выберите Feishu / Lark и заполните подсказки.

Вариант B: Ручная настройка​

Добавьте следующее в ~/.vibeos/.env:

FEISHU_APP_ID=cli_xxx
FEISHU_APP_SECRET=secret_xxx
FEISHU_DOMAIN=feishu
FEISHU_CONNECTION_MODE=websocket

# Опционально, но настоятельно рекомендуется
FEISHU_ALLOWED_USERS=ou_xxx,ou_yyy
FEISHU_HOME_CHANNEL=oc_xxx

FEISHU_DOMAIN принимает:

  • feishu для Feishu (Китай)
  • lark для Lark (международная версия)

Шаг 4: Запуск шлюза​

vibeos gateway

Затем отправьте сообщение боту из Feishu/Lark, чтобы подтвердить, что соединение активно.

Домашний чат​

Используйте /set-home в чате Feishu/Lark, чтобы назначить его домашним каналом для результатов cron-задач и кроссплатформенных уведомлений.

Вы также можете предварительно настроить его:

FEISHU_HOME_CHANNEL=oc_xxx

Безопасность​

Белый список пользователей​

Для производственного использования установите белый список Open ID Feishu:

FEISHU_ALLOWED_USERS=ou_xxx,ou_yyy

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

Ключ шифрования вебхука​

При работе в режиме webhook установите ключ шифрования для проверки подписи входящих полезных нагрузок вебхука:

FEISHU_ENCRYPT_KEY=your-encrypt-key

Этот ключ находится в разделе Event Subscriptions конфигурации вашего приложения Feishu. Если он установлен, адаптер проверяет каждый запрос вебхука, используя алгоритм подписи:

SHA256(timestamp + nonce + encrypt_key + body)

Вычисленный хеш сравнивается с заголовком x-lark-signature с использованием сравнения, устойчивого к временным атакам. Запросы с недействительными или отсутствующими подписями отклоняются с HTTP 401.

подсказка

В режиме WebSocket проверка подписи выполняется самим SDK, поэтому FEISHU_ENCRYPT_KEY необязателен. В режиме webhook он настоятельно рекомендуется для производства.

Токен проверки​

Дополнительный уровень аутентификации, который проверяет поле token внутри полезных нагрузок вебхука:

FEISHU_VERIFICATION_TOKEN=your-verification-token

Этот токен также находится в разделе Event Subscriptions вашего приложения Feishu. Если он установлен, каждая входящая полезная нагрузка вебхука должна содержать соответствующий token в своём объекте header. Несовпадающие токены отклоняются с HTTP 401.

Оба параметра, FEISHU_ENCRYPT_KEY и FEISHU_VERIFICATION_TOKEN, могут использоваться вместе для обеспечения многоуровневой защиты.

Политика групповых сообщений​

Переменная окружения FEISHU_GROUP_POLICY управляет тем, отвечает ли VibeOS в групповых чатах и как:

FEISHU_GROUP_POLICY=allowlist   # по умолчанию
ЗначениеПоведение
openVibeOS отвечает на @упоминания от любого пользователя в любой группе.
allowlistVibeOS отвечает только на @упоминания от пользователей, перечисленных в FEISHU_ALLOWED_USERS.
disabledVibeOS полностью игнорирует все групповые сообщения.

Во всех режимах бот должен быть явно упомянут (через @ или @all) в группе, прежде чем сообщение будет обработано. Личные сообщения всегда обходят это ограничение.

Установите FEISHU_REQUIRE_MENTION=false, чтобы VibeOS читал весь групповой трафик без необходимости @упоминания:

FEISHU_REQUIRE_MENTION=false

Для початового управления установите require_mention в записи group_rules — см. раздел Початовое управление доступом ниже.

Идентификация бота​

VibeOS автоматически определяет open_id и отображаемое имя бота при запуске. Вам нужно устанавливать их вручную только в том случае, если автоматическое определение не может связаться с API Feishu или если ваше приложение использует ID пользователей с областью действия арендатора:

FEISHU_BOT_OPEN_ID=ou_xxx     # только если автоматическое определение не удалось
FEISHU_BOT_USER_ID=xxx # обязательно, если ваше приложение использует sender_id_type=user_id
FEISHU_BOT_NAME=MyBot # только если автоматическое определение не удалось

Обмен сообщениями между ботами​

По умолчанию VibeOS игнорирует сообщения, отправленные другими ботами. Включите обмен сообщениями между ботами, если хотите, чтобы VibeOS участвовал в A2A-оркестрации или получал уведомления от других ботов в той же группе.

FEISHU_ALLOW_BOTS=mentions   # по умолчанию: none
ЗначениеПоведение
noneИгнорировать все сообщения от других ботов (по умолчанию).
mentionsПринимать только при @упоминании VibeOS ботом-пиром.
allПринимать все сообщения от ботов-пиров.

Также настраивается как feishu.allow_bots в config.yaml (переменная окружения имеет приоритет, если установлены оба).

Ботов-пиров не нужно добавлять в FEISHU_ALLOWED_USERS — этот белый список применяется только к отправителям-людям.

Предоставьте область application:bot.basic_info:read, чтобы отображать имена ботов-пиров; без неё боты-пиры всё равно будут маршрутизироваться корректно, но будут отображаться как их open_id.

Интерактивные действия с карточками​

Когда пользователи нажимают кнопки или взаимодействуют с интерактивными карточками, отправленными ботом, адаптер направляет их как синтетические события команды /card:

  • Нажатия кнопок становятся: /card button {"key": "value", ...}
  • Полезная нагрузка value из определения карточки включается в формате JSON.
  • Действия с карточками дедуплицируются с окном в 15 минут для предотвращения двойной обработки.

Подсказки обновления, управляемые шлюзом, используют нативную карточку Feishu Yes / No вместо возврата к обычным текстовым ответам. Когда vibeos update --gateway требует подтверждения, адаптер записывает выбранный ответ в файл .update_response VibeOS и заменяет карточку встроенным разрешённым состоянием.

События действий с карточками отправляются с MessageType.COMMAND, поэтому они проходят через обычный конвейер обработки команд.

Это также работает для одобрения команд — когда агенту нужно выполнить опасную команду, он отправляет интерактивную карточку с кнопками Allow Once / Session / Always / Deny. Пользователь нажимает кнопку, и обратный вызов действия карточки доставляет решение об одобрении обратно агенту.

Требуемая конфигурация приложения Feishu​

Интерактивные карточки требуют трёх шагов настройки в консоли разработчика Feishu. Отсутствие любого из них приводит к ошибке 200340 при нажатии пользователями кнопок на карточках.

  1. Подпишитесь на событие действия с карточкой: В разделе Event Subscriptions добавьте card.action.trigger в подписанные события.

  2. Включите возможность интерактивных карточек: В разделе App Features > Bot убедитесь, что переключатель Interactive Card включён. Это сообщает Feishu, что ваше приложение может получать обратные вызовы действий с карточками.

  3. Настройте URL запроса карточки (только для режима webhook): В разделе App Features > Bot > Message Card Request URL установите URL на тот же эндпоинт, что и ваш вебхук событий (например, https://your-server:8765/feishu/webhook). В режиме WebSocket это обрабатывается автоматически SDK.

предупреждение

Без всех трёх шагов Feishu будет успешно отправлять интерактивные карточки (для отправки требуется только разрешение im:message:send), но нажатие любой кнопки вернёт ошибку 200340. Карточка кажется работающей — ошибка проявляется только при взаимодействии пользователя с ней.

Интеллектуальные ответы на комментарии в документах​

Помимо чата, адаптер также может отвечать на @-упоминания, оставленные в документах Feishu/Lark. Когда пользователь комментирует документ (локальное выделение текста или комментарий ко всему документу) и @упоминает бота, VibeOS читает документ вместе с окружающей веткой комментариев и публикует ответ LLM непосредственно в ветке.

Работает на основе события drive.notice.comment_add_v1. Обработчик:

  • Получает содержимое документа и временную шкалу комментариев параллельно (20 сообщений для веток ко всему документу, 12 для веток локального выделения).
  • Запускает агента с наборами инструментов feishu_doc + feishu_drive, ограниченными этой единственной сессией комментария.
  • Разбивает ответы на части по 4000 символов и публикует их как ответы в ветке.
  • Кэширует сессии для каждого документа на 1 час с лимитом в 50 сообщений, чтобы последующие комментарии к тому же документу сохраняли контекст.

Трёхуровневый контроль доступа​

Ответы на комментарии в документах работают только по явному разрешению — неявного режима «разрешить всем» нет. Разрешения разрешаются в следующем порядке (первое совпадение выигрывает, для каждого поля):

  1. Точный документ — правило, ограниченное конкретным токеном документа.
  2. Wildcard — правило, соответствующее шаблону документов.
  3. Верхний уровень — правило по умолчанию для рабочего пространства.

Доступны две политики для каждого правила:

  • allowlist — статический список пользователей / арендаторов.
  • pairing — статический список ∪ хранилище, одобренное во время выполнения. Полезно для поэтапных развёртываний, где модераторы могут предоставлять доступ в реальном времени.

Правила хранятся в ~/.vibeos/feishu_comment_rules.json (разрешения pairing в ~/.vibeos/feishu_comment_pairing.json) с горячей перезагрузкой по mtime — изменения вступают в силу при следующем событии комментария без перезапуска шлюза.

CLI:

# Просмотр текущих правил и состояния pairing
python -m gateway.platforms.feishu_comment_rules status

# Симуляция проверки доступа для конкретного документа + пользователя
python -m gateway.platforms.feishu_comment_rules check <fileType:fileToken> <user_open_id>

# Управление разрешениями pairing во время выполнения
python -m gateway.platforms.feishu_comment_rules pairing list
python -m gateway.platforms.feishu_comment_rules pairing add <user_open_id>
python -m gateway.platforms.feishu_comment_rules pairing remove <user_open_id>

Требуемая конфигурация приложения Feishu​

В дополнение к уже предоставленным разрешениям чата/карточек добавьте событие комментария к диску:

  • Подпишитесь на drive.notice.comment_add_v1 в разделе Event Subscriptions.
  • Предоставьте области docs:doc:readonly и drive:drive:readonly, чтобы обработчик мог читать содержимое документа.

События приглашения на собрание​

Вы можете пригласить бота VibeOS Feishu/Lark в видеосовещание так же, как приглашаете участника-человека. Когда бот получает событие приглашения на собрание, VibeOS может автоматически запустить шаг агента, который попытается присоединиться к собранию.

Работает на основе события vc.bot.meeting_invited_v1. Поток:

  • Пользователь приглашает бота в видеосовещание Feishu/Lark.
  • Feishu/Lark отправляет VibeOS событие приглашения на собрание.
  • VibeOS извлекает приглашающего, тему собрания и номер собрания.
  • Если приглашающий авторизован стандартным белым списком шлюза или политикой pairing, агент получает номер собрания и пытается присоединиться автоматически.
  • Если приглашение некорректно или агент не может присоединиться, VibeOS отбрасывает событие или отвечает приглашающему кратким объяснением.

Некорректные приглашения, которые не содержат как приглашающего, так и meeting_no, игнорируются.

Требуемая конфигурация приложения Feishu​

В дополнение к уже предоставленным разрешениям чата/карточек добавьте событие приглашения на видеосовещание:

  • Подпишитесь на vc.bot.meeting_invited_v1 в разделе Event Subscriptions.
  • Включите область разрешений Video Conferencing, запрашиваемую консолью разработчика Feishu/Lark для этого события.
  • Оставьте im:message и im:message:send_as_bot включёнными, чтобы VibeOS мог ответить приглашающему.
  • Убедитесь, что белый список пользователей шлюза или политика pairing авторизуют приглашающего. Приглашения на собрания не обходят обычные проверки доступа шлюза.

Поддержка медиа​

Входящие (получение)​

Адаптер получает и кэширует следующие типы медиа от пользователей:

ТипРасширенияКак обрабатывается
Изображения.jpg, .jpeg, .png, .gif, .webp, .bmpЗагружаются через API Feishu и кэшируются локально
Аудио.ogg, .mp3, .wav, .m4a, .aac, .flac, .opus, .webmЗагружаются и кэшируются; небольшие текстовые файлы автоматически извлекаются
Видео.mp4, .mov, .avi, .mkv, .webm, .m4v, .3gpЗагружаются и кэшируются как документы
Файлы.pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx и другиеЗагружаются и кэшируются как документы

Медиа из сообщений с форматированным текстом (post), включая встроенные изображения и вложения файлов, также извлекаются и кэшируются.

Для небольших текстовых документов (.txt, .md) содержимое файла автоматически внедряется в текст сообщения, чтобы агент мог прочитать его напрямую без использования инструментов.

Исходящие (отправка)​

МетодЧто отправляет
sendТекстовые или форматированные сообщения (post) (автоматическое определение на основе содержимого markdown)
send_image / send_image_fileЗагружает изображение в Feishu, затем отправляет как нативный пузырь изображения (с опциональной подписью)
send_documentЗагружает файл в API Feishu, затем отправляет как вложение файла
send_voiceЗагружает аудиофайл как вложение файла Feishu
send_videoЗагружает видео и отправляет как нативное медиасообщение
send_animationGIF-файлы понижаются до вложений файлов (в Feishu нет нативного пузыря для GIF)

Маршрутизация загрузки файлов автоматическая на основе расширения:

  • .ogg, .opus → загружаются как аудио opus
  • .mp4, .mov, .avi, .m4v → загружаются как медиа mp4
  • .pdf, .doc(x), .xls(x), .ppt(x) → загружаются с типом документа
  • Всё остальное → загружается как файл общего потока

Рендеринг Markdown и запасной вариант Post​

Когда исходящий текст содержит форматирование markdown (заголовки, жирный текст, списки, блоки кода, ссылки и т.д.), адаптер автоматически отправляет его как сообщение Feishu post со встроенным тегом md, а не как обычный текст. Это обеспечивает расширенный рендеринг в клиенте Feishu.

Если API Feishu отклоняет полезную нагрузку post (например, из-за неподдерживаемых конструкций markdown), адаптер автоматически переключается на отправку в виде обычного текста с удалённым markdown. Этот двухэтапный запасной вариант гарантирует, что сообщения всегда доставляются.

Сообщения с обычным текстом (без обнаруженного markdown) отправляются как простой тип сообщения text.

Реакции статуса обработки​

Пока агент работает, бот показывает реакцию Typing на ваше сообщение. Она очищается, когда приходит ответ, или заменяется на CrossMark, если обработка не удалась.

Установите FEISHU_REACTIONS=false, чтобы отключить это.

Защита от всплесков и пакетная обработка​

Адаптер включает подавление дребезга для быстрых всплесков сообщений, чтобы не перегружать агента:

Пакетная обработка текста​

Когда пользователь отправляет несколько текстовых сообщений подряд, они объединяются в одно событие перед отправкой:

НастройкаПеременная окруженияПо умолчанию
Период тишиныVIBEOS_FEISHU_TEXT_BATCH_DELAY_SECONDS0,6 с
Макс. сообщений в пакетеVIBEOS_FEISHU_TEXT_BATCH_MAX_MESSAGES8
Макс. символов в пакетеVIBEOS_FEISHU_TEXT_BATCH_MAX_CHARS4000

Пакетная обработка медиа​

Несколько вложений медиа, отправленных подряд (например, перетаскивание нескольких изображений), объединяются в одно событие:

НастройкаПеременная окруженияПо умолчанию
Период тишиныVIBEOS_FEISHU_MEDIA_BATCH_DELAY_SECONDS0,8 с

Сериализация по чатам​

Сообщения в одном чате обрабатываются последовательно (по одному) для поддержания связности разговора. Каждый чат имеет свою собственную блокировку, поэтому сообщения в разных чатах обрабатываются параллельно.

Ограничение скорости (режим Webhook)​

В режиме webhook адаптер применяет ограничение скорости по IP для защиты от злоупотреблений:

  • Окно: Скользящее окно 60 секунд
  • Лимит: 120 запросов на окно на тройку (app_id, path, IP)
  • Лимит отслеживания: До 4096 уникальных ключей отслеживается (предотвращает неограниченный рост памяти)

Запросы, превышающие лимит, получают HTTP 429 (Too Many Requests).

Отслеживание аномалий вебхука​

Адаптер отслеживает количество последовательных ошибочных ответов на IP-адрес. После 25 последовательных ошибок с одного IP в течение 6-часового окна регистрируется предупреждение. Это помогает обнаружить неправильно настроенных клиентов или попытки сканирования.

Дополнительные защиты вебхука:

  • Лимит размера тела: Максимум 1 МБ
  • Тайм-аут чтения тела: 30 секунд
  • Принудительный Content-Type: Принимается только application/json

Настройка WebSocket​

При использовании режима websocket вы можете настроить поведение переподключения и пинга:

platforms:
feishu:
extra:
ws_reconnect_interval: 120 # Секунды между попытками переподключения (по умолчанию: 120)
ws_ping_interval: 30 # Секунды между WebSocket-пингами (опционально; по умолчанию SDK, если не задано)
НастройкаКлюч конфигурацииПо умолчаниюОписание
Интервал переподключенияws_reconnect_interval120 сКак долго ждать между попытками переподключения
Интервал пингаws_ping_interval(по умолчанию SDK)Частота поддерживающих пингов WebSocket

Початовое управление доступом​

Помимо глобальной FEISHU_GROUP_POLICY, вы можете установить детальные правила для каждого группового чата, используя group_rules в config.yaml:

platforms:
feishu:
extra:
default_group_policy: "open" # По умолчанию для групп, не указанных в group_rules
admins: # Пользователи, которые могут управлять настройками бота
- "ou_admin_open_id"
group_rules:
"oc_group_chat_id_1":
policy: "allowlist" # open | allowlist | blacklist | admin_only | disabled
allowlist:
- "ou_user_open_id_1"
- "ou_user_open_id_2"
"oc_group_chat_id_2":
policy: "admin_only"
"oc_group_chat_id_3":
policy: "blacklist"
blacklist:
- "ou_blocked_user"
"oc_free_chat":
policy: "open"
require_mention: false # переопределяет FEISHU_REQUIRE_MENTION для этого чата
ПолитикаОписание
openЛюбой участник группы может использовать бота
allowlistТолько пользователи из allowlist группы могут использовать бота
blacklistВсе, кроме пользователей из blacklist группы, могут использовать бота
admin_onlyТолько пользователи из глобального списка admins могут использовать бота в этой группе
disabledБот игнорирует все сообщения в этой группе

Установите require_mention: false в записи group_rules, чтобы пропустить требование @упоминания для этого конкретного чата. Если не указано, чат наследует глобальное значение FEISHU_REQUIRE_MENTION.

Группы, не перечисленные в group_rules, используют default_group_policy (по умолчанию равно значению FEISHU_GROUP_POLICY).

Дедупликация​

Входящие сообщения дедуплицируются с использованием ID сообщений и TTL в 24 часа. Состояние дедупликации сохраняется между перезапусками в ~/.vibeos/feishu_seen_message_ids.json.

НастройкаПеременная окруженияПо умолчанию
Размер кэшаVIBEOS_FEISHU_DEDUP_CACHE_SIZE2048 записей

Все переменные окружения​

ПеременнаяОбязательнаяПо умолчаниюОписание
FEISHU_APP_ID✅—Feishu/Lark App ID
FEISHU_APP_SECRET✅—Feishu/Lark App Secret
FEISHU_DOMAIN—feishufeishu (Китай) или lark (международная)
FEISHU_CONNECTION_MODE—websocketwebsocket или webhook
FEISHU_ALLOWED_USERS—(пусто)Список open_id через запятую для белого списка пользователей
FEISHU_ALLOW_BOTS—noneПринимать сообщения от других ботов: none, mentions или all
FEISHU_REQUIRE_MENTION—trueДолжны ли групповые сообщения @упоминать бота
FEISHU_HOME_CHANNEL——ID чата для вывода cron/уведомлений
FEISHU_ENCRYPT_KEY—(пусто)Ключ шифрования для проверки подписи вебхука
FEISHU_VERIFICATION_TOKEN—(пусто)Токен проверки для аутентификации полезной нагрузки вебхука
FEISHU_GROUP_POLICY—allowlistПолитика групповых сообщений: open, allowlist, disabled
FEISHU_BOT_OPEN_ID—_(пу