Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Feishu / Lark Integration

The synaptic-lark crate integrates Synaptic with the Feishu/Lark Open Platform, providing document loaders, bot framework, and Agent tools for interacting with Feishu services.

Setup

[dependencies]
synaptic = { version = "0.4", features = ["lark"] }

Create a custom app at the Feishu Developer Console, obtain your App ID and App Secret, and enable the required scopes (see Permissions below).

Configuration

use synaptic::lark::LarkConfig;

let config = LarkConfig::new("cli_xxx", "app_secret_xxx");

The tenant_access_token is fetched and refreshed automatically — tokens are valid for 7,200 seconds and are renewed when fewer than 300 seconds remain.


Using with a ReAct Agent

use synaptic::lark::{LarkBitableTool, LarkConfig, LarkMessageTool};
use synaptic::graph::create_react_agent;
use synaptic::openai::OpenAiChatModel;

let model = OpenAiChatModel::from_env();
let config = LarkConfig::new("cli_xxx", "secret_xxx");

let tools: Vec<Box<dyn synaptic::core::Tool>> = vec![
    Box::new(LarkBitableTool::new(config.clone())),
    Box::new(LarkMessageTool::new(config)),
];
let agent = create_react_agent(model, tools);

let result = agent.invoke(
    synaptic::graph::MessageState::from("Check all pending tasks and send a summary to chat oc_xxx"),
).await?;

Permissions

Enable the following scopes in the Feishu Developer Console under Permissions & Scopes:

FeatureRequired Scope
LarkDocLoader (documents)docx:document:readonly
LarkDocLoader (Wiki)wiki:wiki:readonly
LarkMessageToolim:message:send_as_bot
LarkBitableTool (read)bitable:app:readonly
LarkBitableTool (write)bitable:app
LarkBitableLoaderbitable:app:readonly
LarkBitableMemoryStorebitable:app
LarkBitableCheckpointerbitable:app
LarkBitableLlmCachebitable:app
LarkSpreadsheetLoadersheets:spreadsheet:readonly
LarkWikiLoaderwiki:wiki:readonly
LarkDriveLoaderdrive:drive:readonly
LarkOcrTooloptical_char_recognition:image:recognize
LarkTranslateTooltranslation:text:translate
LarkAsrToolspeech_to_text:speech:recognize
LarkDocProcessTooldocument_ai:entity:recognize
LarkEventListener(scope depends on subscribed event)
LarkVectorStoresearch:data_source:write, search:query:execute
LarkBotClient / LarkLongConnListenerim:message:send_as_bot, im:message:receive
LarkContactTool (read users)contact:user.base:readonly
LarkContactTool (read departments)contact:department.base:readonly
LarkChatToolim:chat, im:chat.members
LarkSpreadsheetToolsheets:spreadsheet
LarkCalendarToolcalendar:calendar, calendar:calendar.event
LarkTaskTooltask:task