OpenClaw Feishu / Lark 채널
WebSocket 기반 이벤트 구독을 사용하여 OpenClaw를 Feishu(飞书) 또는 Lark에 연결합니다. 이 기업용 통합을 통해 AI 어시스턴트가 Feishu/Lark(ByteDance의 기업 협업 플랫폼)에서 개인 메시지와 그룹 채팅을 처리할 수 있습니다. OpenClaw는 Feishu 오픈 플랫폼의 롱 커넥션(WebSocket) 모드로 연결되므로 공개 URL이나 Webhook 엔드포인트가 필요 없습니다. Feishu 앱을 만들고 App ID와 App Secret을 입력하기만 하면 어시스턴트가 시작됩니다.
Feishu / Lark 지원 기능
텍스트 메시지
지원
미디어 및 파일
지원
리액션
미지원
스레드
미지원
음성 메시지
미지원
그룹 채팅
지원
Feishu / Lark 사전 요구사항
- Feishu(feishu.cn) 또는 Lark(larksuite.com) 테넌트 계정(앱 생성 권한 필요)
- Feishu 플러그인 설치: openclaw plugins install @openclaw/feishu
- OpenClaw Gateway 실행 및 구성 완료
- 서버에 Node.js 18+ 설치
Feishu / Lark 빠른 설정
Feishu/Lark 앱 생성
Feishu 오픈 플랫폼(open.feishu.cn/app) 또는 Lark 개발자 콘솔(open.larksuite.com/app)에 접속합니다. 새 기업 앱을 만들고 이름, 설명, 아이콘을 설정합니다. 인증 정보 페이지에서 App ID(형식: cli_xxx)와 App Secret을 복사합니다.
권한 및 봇 기능 구성
앱의 권한 관리에서 필요한 권한을 일괄 가져옵니다. 앱 기능 > 봇에서 봇 기능을 활성화합니다. 이벤트 구독에서 '롱 커넥션 사용'(WebSocket 모드)을 선택하고 im.message.receive_v1 이벤트를 추가합니다. 버전 관리 및 릴리스를 통해 앱을 게시합니다.
OpenClaw에 Feishu 채널 구성 추가
'openclaw channels add'를 실행하고 Feishu를 선택하거나, ~/.openclaw/openclaw.json에 수동으로 채널 구성을 추가하고 appId와 appSecret을 입력합니다. 환경 변수 FEISHU_APP_ID와 FEISHU_APP_SECRET도 사용할 수 있습니다.
Gateway 시작 및 테스트
'openclaw gateway'를 실행하여 서비스를 시작합니다. Feishu에서 봇에게 개인 메시지를 보냅니다. 기본 페어링 정책을 사용하는 경우 터미널에서 'openclaw pairing approve feishu <code>'로 발신자를 승인합니다.
Feishu / Lark 구성 예시
{
"channels": {
"feishu": {
"enabled": true,
"dmPolicy": "pairing",
"accounts": {
"main": {
"appId": "cli_xxx",
"appSecret": "YOUR_APP_SECRET",
"botName": "My AI Assistant"
}
}
}
}
}Feishu / Lark 상세 문서
아키텍처 개요
Feishu 앱 생성 및 인증 정보 획득
# 환경 변수 사용
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="your_app_secret"
# 또는 CLI 마법사 사용
openclaw channels addFeishu vs Lark 구성
{
"channels": {
"feishu": {
"domain": "lark",
"accounts": {
"main": {
"appId": "cli_xxx",
"appSecret": "YOUR_APP_SECRET"
}
}
}
}
}DM 정책
{
"channels": {
"feishu": {
"dmPolicy": "allowlist",
"allowFrom": ["ou_xxx", "ou_yyy"]
}
}
}그룹 채팅 관리
{
"channels": {
"feishu": {
"groupPolicy": "open",
"requireMention": true
}
}
}스트리밍 응답(인터랙티브 카드)
{
"channels": {
"feishu": {
"streaming": true
}
}
}메시지 유형 및 미디어 지원
{
"channels": {
"feishu": {
"mediaMaxMb": 30,
"textChunkLimit": 2000
}
}
}다중 계정 및 멀티 에이전트 라우팅
{
"channels": {
"feishu": {
"accounts": {
"support": {
"appId": "cli_aaa",
"appSecret": "secret_a",
"botName": "Support Bot"
},
"hr": {
"appId": "cli_bbb",
"appSecret": "secret_b",
"botName": "HR Bot"
}
}
}
}
}유용한 명령어
Feishu / Lark 구성 참조
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | Feishu 채널 활성화/비활성화 |
| domain | string | "feishu" | API 도메인: 국내용 'feishu'(feishu.cn), 국제용 'lark'(larksuite.com) |
| dmPolicy | string | "pairing" | 봇에 DM할 수 있는 사용자를 제어. 옵션: pairing, allowlist, open, disabled |
| allowFrom | string[] | [] | dmPolicy가 'allowlist'일 때 DM을 허용할 Open ID(ou_xxx) 목록 |
| groupPolicy | string | "open" | 그룹 채팅 정책. 옵션: open, allowlist, disabled |
| requireMention | boolean | true | 그룹 채팅에서 봇이 응답하기 위해 @멘션이 필요한지 여부 |
| streaming | boolean | true | 인터랙티브 카드를 통한 스트리밍 AI 응답 활성화 |
| textChunkLimit | number | 2000 | 텍스트 메시지당 최대 문자 수 |
| mediaMaxMb | number | 30 | 업로드/다운로드 최대 미디어 파일 크기(MB) |
| accounts.<id>.appId | string | "" | Feishu App ID(형식: cli_xxx), 오픈 플랫폼 콘솔에서 획득 |
| accounts.<id>.appSecret | string | "" | Feishu App Secret, 오픈 플랫폼 콘솔에서 획득 |
| accounts.<id>.botName | string | "" | Feishu 채팅에서의 봇 표시 이름 |
| historyLimit | number | 50 | AI 컨텍스트에 포함할 최근 메시지 수 |
Feishu 채널 활성화/비활성화
API 도메인: 국내용 'feishu'(feishu.cn), 국제용 'lark'(larksuite.com)
봇에 DM할 수 있는 사용자를 제어. 옵션: pairing, allowlist, open, disabled
dmPolicy가 'allowlist'일 때 DM을 허용할 Open ID(ou_xxx) 목록
그룹 채팅 정책. 옵션: open, allowlist, disabled
그룹 채팅에서 봇이 응답하기 위해 @멘션이 필요한지 여부
인터랙티브 카드를 통한 스트리밍 AI 응답 활성화
텍스트 메시지당 최대 문자 수
업로드/다운로드 최대 미디어 파일 크기(MB)
Feishu App ID(형식: cli_xxx), 오픈 플랫폼 콘솔에서 획득
Feishu App Secret, 오픈 플랫폼 콘솔에서 획득
Feishu 채팅에서의 봇 표시 이름
AI 컨텍스트에 포함할 최근 메시지 수
Feishu / Lark 자주 묻는 질문
Feishu / Lark 문제 해결
봇이 그룹에 추가되지 않았거나 @멘션이 작동하지 않거나 groupPolicy가 'disabled'로 설정되어 있을 수 있습니다.
앱이 게시되지 않았거나 이벤트 구독이 구성되지 않았거나 권한이 부족할 수 있습니다.
im:message:send_as_bot 권한이 부여되지 않았거나 앱이 게시되지 않았을 수 있습니다.
App Secret이 실수로 버전 관리에 커밋되었거나 안전하지 않은 방식으로 공유되었습니다.
네트워크 불안정 또는 방화벽이 롱 커넥션 WebSocket을 방해하고 있습니다.