Feishu 봇
Feishu(Lark)는 기업에서 메시징과 협업에 사용하는 팀 채팅 플랫폼입니다. 이 plugin은 플랫폼의 WebSocket 이벤트 구독을 사용해 OpenClaw를 Feishu/Lark 봇에 연결하므로, 공개 webhook URL을 노출하지 않고도 메시지를 수신할 수 있습니다.번들 plugin
Feishu는 현재 OpenClaw 릴리스에 번들로 포함되어 제공되므로 별도의 plugin 설치가 필요하지 않습니다. 번들된 Feishu가 포함되지 않은 이전 빌드 또는 사용자 지정 설치를 사용 중인 경우 수동으로 설치하세요.빠른 시작
Feishu 채널을 추가하는 방법은 두 가지입니다.방법 1: 온보딩(권장)
OpenClaw를 방금 설치했다면 온보딩을 실행하세요.- Feishu 앱 생성 및 자격 증명 수집
- OpenClaw에서 앱 자격 증명 구성
- Gateway 시작
openclaw gateway statusopenclaw logs --follow
방법 2: CLI 설정
이미 초기 설치를 완료했다면 CLI를 통해 채널을 추가하세요.openclaw gateway statusopenclaw gateway restartopenclaw logs --follow
1단계: Feishu 앱 만들기
1. Feishu Open Platform 열기
Feishu Open Platform에 접속해 로그인하세요. Lark(글로벌) 테넌트는 https://open.larksuite.com/app을 사용하고 Feishu config에서domain: "lark"를 설정해야 합니다.
2. 앱 만들기
- Create enterprise app을 클릭합니다.
- 앱 이름과 설명을 입력합니다.
- 앱 아이콘을 선택합니다.

3. 자격 증명 복사
Credentials & Basic Info에서 다음을 복사하세요.- App ID(형식:
cli_xxx) - App Secret

4. 권한 구성
Permissions에서 Batch import를 클릭하고 다음을 붙여넣으세요.
5. 봇 기능 활성화
App Capability > Bot에서 다음을 수행하세요.- 봇 기능을 활성화합니다.
- 봇 이름을 설정합니다.

6. 이벤트 구독 구성
⚠️ 중요: 이벤트 구독을 설정하기 전에 다음을 확인하세요.- 이미 Feishu에 대해
openclaw channels add를 실행했는지 - Gateway가 실행 중인지(
openclaw gateway status)
- Use long connection to receive events(WebSocket)를 선택합니다.
- 이벤트
im.message.receive_v1을 추가합니다. - (선택 사항) Drive 댓글 워크플로를 위해
drive.notice.comment_add_v1도 추가합니다.

7. 앱 게시
- Version Management & Release에서 버전을 생성합니다.
- 검토를 위해 제출하고 게시합니다.
- 관리자 승인을 기다립니다(기업 앱은 보통 자동 승인됨).
2단계: OpenClaw 구성
마법사로 구성(권장)
config 파일로 구성
~/.openclaw/openclaw.json을 편집하세요.
connectionMode: "webhook"을 사용하는 경우 verificationToken과 encryptKey를 모두 설정하세요. Feishu webhook 서버는 기본적으로 127.0.0.1에 바인딩됩니다. 의도적으로 다른 바인딩 주소가 필요한 경우에만 webhookHost를 설정하세요.
Verification Token 및 Encrypt Key(webhook 모드)
webhook 모드를 사용할 때는 config에서channels.feishu.verificationToken과 channels.feishu.encryptKey를 모두 설정하세요. 값을 얻으려면:
- Feishu Open Platform에서 앱을 엽니다.
- Development → Events & Callbacks(开发配置 → 事件与回调)로 이동합니다.
- Encryption 탭(加密策略)을 엽니다.
- Verification Token과 Encrypt Key를 복사합니다.

환경 변수로 구성
Lark(글로벌) 도메인
테넌트가 Lark(국제 버전)에 있는 경우 도메인을lark(또는 전체 도메인 문자열)로 설정하세요. channels.feishu.domain 또는 계정별(channels.feishu.accounts.<id>.domain)로 설정할 수 있습니다.
쿼터 최적화 플래그
선택적 플래그 두 가지로 Feishu API 사용량을 줄일 수 있습니다.typingIndicator(기본값true):false이면 입력 중 반응 호출을 건너뜁니다.resolveSenderNames(기본값true):false이면 발신자 프로필 조회 호출을 건너뜁니다.
3단계: 시작 + 테스트
1. Gateway 시작
2. 테스트 메시지 보내기
Feishu에서 봇을 찾아 메시지를 보내세요.3. 페어링 승인
기본적으로 봇은 페어링 코드를 응답합니다. 이를 승인하세요.개요
- Feishu 봇 채널: Gateway가 관리하는 Feishu 봇
- 결정적 라우팅: 응답은 항상 Feishu로 돌아감
- 세션 격리: DM은 메인 세션을 공유하고 그룹은 분리됨
- WebSocket 연결: Feishu SDK를 통한 long connection, 공개 URL 불필요
액세스 제어
다이렉트 메시지
-
기본값:
dmPolicy: "pairing"(알 수 없는 사용자는 페어링 코드를 받음) -
페어링 승인:
-
allowlist 모드: 허용된 Open ID로
channels.feishu.allowFrom을 설정
그룹 채팅
1. 그룹 정책(channels.feishu.groupPolicy):
"open"= 그룹의 모든 사용자 허용"allowlist"=groupAllowFrom만 허용"disabled"= 그룹 메시지 비활성화
allowlist
2. 멘션 요구 사항(channels.feishu.requireMention, channels.feishu.groups.<chat_id>.requireMention으로 재정의 가능):
- 명시적
true= @mention 필요 - 명시적
false= 멘션 없이 응답 - 설정되지 않았고
groupPolicy: "open"인 경우 = 기본값false - 설정되지 않았고
groupPolicy가"open"이 아닌 경우 = 기본값true
그룹 구성 예시
모든 그룹 허용, @mention 불필요(open 그룹의 기본값)
모든 그룹 허용, 하지만 여전히 @mention 필요
특정 그룹만 허용
그룹에서 메시지를 보낼 수 있는 발신자 제한(sender allowlist)
그룹 자체를 허용하는 것 외에도, 해당 그룹의 모든 메시지는 발신자 open_id로 제한됩니다.groups.<chat_id>.allowFrom에 나열된 사용자만 메시지가 처리되며, 다른 멤버의 메시지는 무시됩니다(이는 /reset이나 /new 같은 제어 명령에만 적용되는 것이 아니라 전체 발신자 수준 게이팅입니다).
그룹/사용자 ID 가져오기
그룹 ID(chat_id)
그룹 ID는oc_xxx 형태입니다.
방법 1(권장)
- Gateway를 시작하고 그룹에서 봇을 @mention합니다.
openclaw logs --follow를 실행하고chat_id를 찾습니다.
사용자 ID(open_id)
사용자 ID는ou_xxx 형태입니다.
방법 1(권장)
- Gateway를 시작하고 봇에 DM을 보냅니다.
openclaw logs --follow를 실행하고open_id를 찾습니다.
일반 명령
| 명령 | 설명 |
|---|---|
/status | 봇 상태 표시 |
/reset | 세션 재설정 |
/model | 모델 표시/전환 |
참고: Feishu는 아직 기본 명령 메뉴를 지원하지 않으므로 명령은 텍스트로 보내야 합니다.
Gateway 관리 명령
| 명령 | 설명 |
|---|---|
openclaw gateway status | Gateway 상태 표시 |
openclaw gateway install | Gateway 서비스 설치/시작 |
openclaw gateway stop | Gateway 서비스 중지 |
openclaw gateway restart | Gateway 서비스 재시작 |
openclaw logs --follow | Gateway 로그 추적 |
문제 해결
그룹 채팅에서 봇이 응답하지 않음
- 봇이 그룹에 추가되어 있는지 확인합니다.
- 봇을 @mention했는지 확인합니다(기본 동작).
groupPolicy가"disabled"로 설정되지 않았는지 확인합니다.- 로그를 확인합니다:
openclaw logs --follow
봇이 메시지를 수신하지 않음
- 앱이 게시되고 승인되었는지 확인합니다.
- 이벤트 구독에
im.message.receive_v1이 포함되어 있는지 확인합니다. - long connection이 활성화되어 있는지 확인합니다.
- 앱 권한이 완전한지 확인합니다.
- Gateway가 실행 중인지 확인합니다:
openclaw gateway status - 로그를 확인합니다:
openclaw logs --follow
App Secret 유출
- Feishu Open Platform에서 App Secret을 재설정합니다.
- config에서 App Secret을 업데이트합니다.
- Gateway를 재시작합니다.
메시지 전송 실패
- 앱에
im:message:send_as_bot권한이 있는지 확인합니다. - 앱이 게시되었는지 확인합니다.
- 자세한 오류는 로그를 확인합니다.
고급 구성
여러 계정
defaultAccount는 아웃바운드 API가 accountId를 명시적으로 지정하지 않을 때 어떤 Feishu 계정을 사용할지 제어합니다.
메시지 제한
textChunkLimit: 아웃바운드 텍스트 청크 크기(기본값: 2000자)mediaMaxMb: 미디어 업로드/다운로드 제한(기본값: 30MB)
스트리밍
Feishu는 인터랙티브 카드를 통한 스트리밍 응답을 지원합니다. 활성화하면 봇은 텍스트를 생성하면서 카드를 업데이트합니다.streaming: false로 설정하세요.
ACP 세션
Feishu는 다음에 대해 ACP를 지원합니다.- DM
- 그룹 주제 대화
/acp ... 메시지를 직접 사용하세요.
영구 ACP 바인딩
최상위 타입 지정 ACP 바인딩을 사용해 Feishu DM 또는 주제 대화를 영구 ACP 세션에 고정할 수 있습니다.채팅에서 스레드 바인딩 ACP 생성
Feishu DM 또는 주제 대화에서 ACP 세션을 그 자리에서 생성하고 바인딩할 수 있습니다.--thread here는 DM과 Feishu 주제에서 작동합니다.- 바인딩된 DM/주제의 후속 메시지는 해당 ACP 세션으로 직접 라우팅됩니다.
- v1은 일반 비주제 그룹 채팅을 대상으로 하지 않습니다.
멀티 에이전트 라우팅
bindings를 사용해 Feishu DM 또는 그룹을 서로 다른 agent로 라우팅하세요.
match.channel:"feishu"match.peer.kind:"direct"또는"group"match.peer.id: 사용자 Open ID(ou_xxx) 또는 그룹 ID(oc_xxx)
구성 참조
전체 구성: Gateway configuration 주요 옵션:| 설정 | 설명 | 기본값 |
|---|---|---|
channels.feishu.enabled | 채널 활성화/비활성화 | true |
channels.feishu.domain | API 도메인(feishu 또는 lark) | feishu |
channels.feishu.connectionMode | 이벤트 전송 모드 | websocket |
channels.feishu.defaultAccount | 아웃바운드 라우팅용 기본 계정 ID | 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 | App ID | - |
channels.feishu.accounts.<id>.appSecret | App Secret | - |
channels.feishu.accounts.<id>.domain | 계정별 API 도메인 재정의 | feishu |
channels.feishu.dmPolicy | DM 정책 | pairing |
channels.feishu.allowFrom | DM allowlist(open_id 목록) | - |
channels.feishu.groupPolicy | 그룹 정책 | allowlist |
channels.feishu.groupAllowFrom | 그룹 allowlist | - |
channels.feishu.requireMention | 기본 @mention 필요 여부 | conditional |
channels.feishu.groups.<chat_id>.requireMention | 그룹별 @mention 필요 여부 재정의 | inherited |
channels.feishu.groups.<chat_id>.enabled | 그룹 활성화 | true |
channels.feishu.textChunkLimit | 메시지 청크 크기 | 2000 |
channels.feishu.mediaMaxMb | 미디어 크기 제한 | 30 |
channels.feishu.streaming | 스트리밍 카드 출력 활성화 | true |
channels.feishu.blockStreaming | 블록 스트리밍 활성화 | true |
dmPolicy 참조
| 값 | 동작 |
|---|---|
"pairing" | 기본값. 알 수 없는 사용자는 페어링 코드를 받으며, 승인이 필요함 |
"allowlist" | allowFrom에 있는 사용자만 대화 가능 |
"open" | 모든 사용자 허용(allowFrom에 "*" 필요) |
"disabled" | DM 비활성화 |
지원되는 메시지 유형
수신
- ✅ 텍스트
- ✅ 리치 텍스트(post)
- ✅ 이미지
- ✅ 파일
- ✅ 오디오
- ✅ 비디오/미디어
- ✅ 스티커
전송
- ✅ 텍스트
- ✅ 이미지
- ✅ 파일
- ✅ 오디오
- ✅ 비디오/미디어
- ✅ 인터랙티브 카드
- ⚠️ 리치 텍스트(post 스타일 서식 및 카드, 임의의 Feishu 작성 기능 전체는 아님)
스레드 및 응답
- ✅ 인라인 응답
- ✅ Feishu가
reply_in_thread를 노출하는 경우 주제 스레드 응답 - ✅ 스레드/주제 메시지에 응답할 때 미디어 응답도 스레드 인식을 유지함
Drive 댓글
사용자가 Feishu Drive 문서(Docs, Sheets 등)에 댓글을 추가하면 Feishu가 agent를 트리거할 수 있습니다. agent는 댓글 텍스트, 문서 컨텍스트, 댓글 스레드를 받아 스레드 내에서 응답하거나 문서를 수정할 수 있습니다. 요구 사항:- Feishu 앱 이벤트 구독 설정에서
drive.notice.comment_add_v1을 구독해야 합니다 (기존im.message.receive_v1과 함께) - Drive 도구는 기본적으로 활성화되어 있으며,
channels.feishu.tools.drive: false로 비활성화할 수 있습니다
feishu_drive 도구는 다음 댓글 작업을 제공합니다.
| 작업 | 설명 |
|---|---|
list_comments | 문서의 댓글 목록 표시 |
list_comment_replies | 댓글 스레드의 응답 목록 표시 |
add_comment | 새 최상위 댓글 추가 |
reply_comment | 기존 댓글 스레드에 응답 |
- 댓글 텍스트와 발신자
- 문서 메타데이터(제목, 유형, URL)
- 스레드 내 응답을 위한 댓글 스레드 컨텍스트
feishu_drive.reply_comment를 사용하고, 중복 전송을 피하기 위해 정확히 NO_REPLY / no_reply 무음 토큰을 출력하도록 안내됩니다.
런타임 작업 표면
현재 Feishu는 다음 런타임 작업을 노출합니다.sendreadeditthread-replypinlist-pinsunpinmember-infochannel-infochannel-list- config에서 반응이 활성화된 경우
react및reactions feishu_drive댓글 작업:list_comments,list_comment_replies,add_comment,reply_comment