Feishu
App ID와 App Secret만 있으면 Feishu 봇을 nexu에 연결할 수 있습니다.
1단계: Feishu 앱 생성
- Feishu Open Platform에 접속하여 로그인하고 "Create Custom App"을 클릭합니다.

- 앱 이름, 설명을 입력하고, 아이콘을 선택한 후 "Create"를 클릭합니다.

- "Credentials & Basic Info" 페이지에서 다음 두 값을 복사합니다:
- App ID
- App Secret

2단계: nexu에 자격 증명 추가
nexu 클라이언트를 열고, Feishu 채널 설정에서 App ID와 App Secret을 입력한 후 "Connect"를 클릭합니다.

3단계: 앱 권한 가져오기
- Feishu Open Platform에서 앱을 열고, 왼쪽 사이드바의 "Permission Management"를 클릭한 후 "Batch Import/Export"를 클릭합니다.

- 대화상자에서 "Import"를 선택하고, 다음 JSON을 붙여넣은 후 "Next, Confirm New Permissions"를 클릭합니다.

클릭하여 권한 JSON 펼치기
json
{
"scopes": {
"tenant": [
"board:whiteboard:node:create",
"board:whiteboard:node:delete",
"board:whiteboard:node:read",
"board:whiteboard:node:update",
"calendar:calendar.acl:create",
"calendar:calendar.acl:delete",
"calendar:calendar.acl:read",
"calendar:calendar.event:create",
"calendar:calendar.event:delete",
"calendar:calendar.event:read",
"calendar:calendar.event:reply",
"calendar:calendar.event:update",
"calendar:calendar.free_busy:read",
"calendar:calendar:create",
"calendar:calendar:delete",
"calendar:calendar:read",
"calendar:calendar:subscribe",
"calendar:calendar:update",
"cardkit:card:write",
"contact:contact.base:readonly",
"contact:user.base:readonly",
"docs:document.comment:create",
"docs:document.comment:read",
"docs:document.comment:update",
"docs:document.comment:write_only",
"docs:permission.member:create",
"docx:document.block:convert",
"docx:document:create",
"docx:document:readonly",
"docx:document:write_only",
"drive:drive.metadata:readonly",
"drive:drive.search:readonly",
"drive:drive:version",
"drive:drive:version:readonly",
"im:app_feed_card:write",
"im:biz_entity_tag_relation:read",
"im:biz_entity_tag_relation:write",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.announcement:read",
"im:chat.announcement:write_only",
"im:chat.chat_pins:read",
"im:chat.chat_pins:write_only",
"im:chat.collab_plugins:read",
"im:chat.collab_plugins:write_only",
"im:chat.managers:write_only",
"im:chat.members:bot_access",
"im:chat.members:read",
"im:chat.members:write_only",
"im:chat.menu_tree:read",
"im:chat.menu_tree:write_only",
"im:chat.moderation:read",
"im:chat.tabs:read",
"im:chat.tabs:write_only",
"im:chat.top_notice:write_only",
"im:chat.widgets:read",
"im:chat.widgets:write_only",
"im:chat:create",
"im:chat:delete",
"im:chat:moderation:write_only",
"im:chat:operate_as_owner",
"im:chat:read",
"im:chat:readonly",
"im:chat:update",
"im:datasync.feed_card.time_sensitive:write",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.group_msg",
"im:message.p2p_msg:readonly",
"im:message.pins:read",
"im:message.pins:write_only",
"im:message.reactions:read",
"im:message.reactions:write_only",
"im:message.urgent",
"im:message.urgent.status:write",
"im:message.urgent:phone",
"im:message.urgent:sms",
"im:message:readonly",
"im:message:recall",
"im:message:send_as_bot",
"im:message:send_multi_depts",
"im:message:send_multi_users",
"im:message:send_sys_msg",
"im:message:update",
"im:resource",
"im:tag:read",
"im:tag:write",
"im:url_preview.update",
"im:user_agent:read",
"sheets:spreadsheet.meta:read",
"sheets:spreadsheet.meta:write_only",
"sheets:spreadsheet:create",
"sheets:spreadsheet:read",
"sheets:spreadsheet:write_only",
"task:task:read",
"task:task:write",
"task:tasklist:read",
"task:tasklist:write",
"wiki:member:create",
"wiki:member:retrieve",
"wiki:member:update",
"wiki:wiki:readonly"
],
"user": [
"board:whiteboard:node:create",
"board:whiteboard:node:delete",
"board:whiteboard:node:read",
"board:whiteboard:node:update",
"calendar:calendar.acl:create",
"calendar:calendar.acl:delete",
"calendar:calendar.acl:read",
"calendar:calendar.event:create",
"calendar:calendar.event:delete",
"calendar:calendar.event:read",
"calendar:calendar.event:reply",
"calendar:calendar.event:update",
"calendar:calendar.free_busy:read",
"calendar:calendar:create",
"calendar:calendar:delete",
"calendar:calendar:read",
"calendar:calendar:subscribe",
"calendar:calendar:update",
"cardkit:card:write",
"contact:contact.base:readonly",
"contact:user.base:readonly",
"docs:document.comment:create",
"docs:document.comment:read",
"docs:document.comment:update",
"docs:document.comment:write_only",
"docs:permission.member:create",
"docx:document.block:convert",
"docx:document:create",
"docx:document:readonly",
"docx:document:write_only",
"drive:drive.metadata:readonly",
"drive:drive.search:readonly",
"drive:drive:version",
"drive:drive:version:readonly",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.announcement:read",
"im:chat.announcement:write_only",
"im:chat.chat_pins:read",
"im:chat.chat_pins:write_only",
"im:chat.collab_plugins:read",
"im:chat.collab_plugins:write_only",
"im:chat.managers:write_only",
"im:chat.members:read",
"im:chat.members:write_only",
"im:chat.moderation:read",
"im:chat.tabs:read",
"im:chat.tabs:write_only",
"im:chat.top_notice:write_only",
"im:chat:delete",
"im:chat:moderation:write_only",
"im:chat:read",
"im:chat:readonly",
"im:chat:update",
"im:message",
"im:message.pins:read",
"im:message.pins:write_only",
"im:message.reactions:read",
"im:message.reactions:write_only",
"im:message.urgent.status:write",
"im:message:readonly",
"im:message:recall",
"im:message:update",
"sheets:spreadsheet.meta:read",
"sheets:spreadsheet.meta:write_only",
"sheets:spreadsheet:create",
"sheets:spreadsheet:read",
"sheets:spreadsheet:write_only",
"task:task:read",
"task:task:write",
"task:tasklist:read",
"task:tasklist:write",
"wiki:member:create",
"wiki:member:retrieve",
"wiki:member:update",
"wiki:wiki:readonly"
]
}
}- 가져온 권한(총 178개)을 검토하고 "Apply"를 클릭합니다.

- 데이터 범위 확인 대화상자에서 "Confirm"을 클릭하여 가져오기를 완료합니다.

이 권한은 메시징, 문서 읽기/쓰기, 캘린더 관리, 스프레드시트 작업 등을 포함하며 — 모든 nexu Agent Skills가 올바르게 작동하도록 보장합니다.
4단계: 이벤트 및 콜백 설정
이벤트 설정
- Feishu Open Platform에서 앱을 열고, 왼쪽 사이드바의 "Events & Callbacks"를 클릭한 후 "Event Configuration" 탭을 엽니다.

- "Subscription Method" 옆의 편집 버튼을 클릭하고, "Use Long Connection to Receive Events"를 선택한 후 "Save"를 클릭합니다.

- "Add Event"를 클릭합니다.

- 대화상자에서 다음 이벤트를 검색하여 선택한 후 "Add"를 클릭합니다:
- First conversation created between user and bot (
p2p_chat_create) - Receive message (
im.message.receive_v1) - Bot added to group (
im.chat.member.bot.added_v1) - User enters bot conversation (
im.chat.access_event.bot_p2p_chat_entered_v1)
- First conversation created between user and bot (

- 추가 후 "Added Events" 목록에서 이벤트를 확인합니다.

콜백 설정
- "Callback Configuration" 탭으로 전환하고 "Subscription Method" 옆의 편집 버튼을 클릭합니다.

- "Use Long Connection to Receive Callbacks"를 선택하고 "Save"를 클릭합니다.

- "Add Callback"을 클릭합니다.

- 대화상자에서 "Card" 카테고리를 선택하고, "Card Action Trigger" (
card.action.trigger)를 체크한 후 "Add"를 클릭합니다.

5단계: 게시 및 테스트
- Feishu Open Platform으로 돌아가서 "Version Management & Release"로 이동합니다.

- "Create Version"을 클릭하고, 버전 번호와 릴리스 노트를 입력한 후 "Save"를 클릭합니다.

- "Publish"를 클릭하고 승인을 기다립니다.

- 승인되면 nexu 클라이언트에서 "Chat"을 클릭하여 Feishu로 이동하고 봇과 채팅하세요 🎉

FAQ
Q: 공개 서버가 필요한가요?
아니요. nexu는 Feishu의 Long Connection(WebSocket) 모드를 사용합니다 — 공개 IP나 콜백 URL 불필요.
Q: 왜 이렇게 많은 권한이 필요한가요?
이 권한은 다양한 nexu Agent Skills(메시징, 문서, 캘린더, 스프레드시트 등)에 해당합니다. 기본 채팅만 필요하면 im: 스코프만 활성화할 수 있습니다.