use open_lark::{
prelude::*,
service::apass::models::{
AuditLogListRequest, EnvironmentVariableQueryRequest, FlowExecuteRequest,
FunctionInvokeRequest, RecordQueryRequest, RecordSearchRequest, SeatActivityListRequest,
SeatAssignmentListRequest, UserTaskQueryRequest,
},
};
use serde_json::json;
use std::{collections::HashMap, env};
#[tokio::main]
async fn main() {
dotenvy::dotenv().ok();
let app_id = env::var("APP_ID").expect("APP_ID is required");
let app_secret = env::var("APP_SECRET").expect("APP_SECRET is required");
let client = LarkClient::builder(&app_id, &app_secret)
.with_app_type(AppType::SelfBuild)
.with_enable_token_cache(true)
.build();
println!("=== 席位管理示例 ===");
seat_management_examples(&client, &app_id).await;
println!("\n=== 审计日志示例 ===");
audit_log_examples(&client, &app_id).await;
println!("\n=== 权限管理示例 ===");
permission_management_examples(&client, &app_id).await;
println!("\n=== 对象操作示例 ===");
object_operation_examples(&client, &app_id).await;
println!("\n=== 函数执行示例 ===");
function_execution_examples(&client, &app_id).await;
println!("\n=== 环境变量示例 ===");
environment_variable_examples(&client, &app_id).await;
println!("\n=== 流程管理示例 ===");
flow_management_examples(&client, &app_id).await;
}
async fn seat_management_examples(client: &LarkClient, _app_id: &str) {
let request = SeatAssignmentListRequest {
page_size: Some(10),
page_token: None,
};
match client.apass.seat.list_seat_assignment(request, None).await {
Ok(response) => {
println!("席位分配列表:");
if let Some(items) = &response.data.unwrap().page_response.items {
for seat in items {
println!(" - 用户ID: {:?}, 状态: {:?}", seat.user_id, seat.status);
}
}
}
Err(e) => println!("查询席位分配失败: {e:?}"),
}
let request = SeatActivityListRequest {
page_size: Some(10),
page_token: None,
start_time: None,
end_time: None,
};
match client.apass.seat.list_seat_activity(request, None).await {
Ok(response) => {
println!("席位活跃列表:");
if let Some(items) = &response.data.unwrap().page_response.items {
for activity in items {
println!(
" - 用户ID: {:?}, 活跃时间: {:?}",
activity.user_id, activity.activity_time
);
}
}
}
Err(e) => println!("查询席位活跃失败: {e:?}"),
}
}
async fn audit_log_examples(client: &LarkClient, app_id: &str) {
let request = AuditLogListRequest {
app_id: app_id.to_string(),
start_time: None,
end_time: None,
operation_type: None,
page_size: Some(10),
page_token: None,
};
match client.apass.audit_log.list_audit_logs(request, None).await {
Ok(response) => {
println!("审计日志列表:");
if let Some(items) = &response.data.unwrap().page_response.items {
for log in items {
println!(
" - 操作类型: {:?}, 操作时间: {:?}",
log.operation_type, log.operation_time
);
}
}
}
Err(e) => println!("查询审计日志失败: {e:?}"),
}
}
async fn permission_management_examples(client: &LarkClient, app_id: &str) {
match client
.apass
.permission
.get_role_member(
app_id.to_string(),
"example_role".to_string(),
"ou_example_user_id".to_string(),
None,
)
.await
{
Ok(response) => {
println!("角色成员信息: {:?}", response.data.unwrap().role_member);
}
Err(e) => println!("查询角色成员失败: {e:?}"),
}
}
async fn object_operation_examples(client: &LarkClient, app_id: &str) {
let request = RecordSearchRequest {
app_id: app_id.to_string(),
object_api_name: "example_object".to_string(),
keyword: "test".to_string(),
page_size: Some(10),
page_token: None,
};
match client.apass.object.search_records(request, None).await {
Ok(response) => {
println!("记录搜索结果:");
if let Some(items) = &response.data.unwrap().page_response.items {
for record in items {
println!(" - 记录ID: {:?}", record.record_id);
}
}
}
Err(e) => println!("记录搜索失败: {e:?}"),
}
let request = RecordQueryRequest {
app_id: app_id.to_string(),
object_api_name: "example_object".to_string(),
record_id: "example_record_id".to_string(),
fields: None,
};
match client.apass.object.get_record(request, None).await {
Ok(response) => {
println!("记录详情: {:?}", response.data.unwrap().record);
}
Err(e) => println!("获取记录详情失败: {e:?}"),
}
}
async fn function_execution_examples(client: &LarkClient, app_id: &str) {
let mut parameters = HashMap::new();
parameters.insert("input_param".to_string(), json!("test_value"));
let request = FunctionInvokeRequest {
app_id: app_id.to_string(),
function_api_name: "example_function".to_string(),
parameters: Some(json!(parameters)),
};
match client.apass.function.invoke_function(request, None).await {
Ok(response) => {
println!("函数执行结果: {:?}", response.data.unwrap().invoke_result);
}
Err(e) => println!("函数执行失败: {e:?}"),
}
}
async fn environment_variable_examples(client: &LarkClient, app_id: &str) {
let request = EnvironmentVariableQueryRequest {
app_id: app_id.to_string(),
page_size: Some(10),
page_token: None,
};
match client
.apass
.environment_variable
.query_environment_variables(request, None)
.await
{
Ok(response) => {
println!("环境变量列表:");
if let Some(items) = &response.data.unwrap().page_response.items {
for env_var in items {
println!(" - 变量名: {:?}", env_var.variable_name);
}
}
}
Err(e) => println!("查询环境变量失败: {e:?}"),
}
}
async fn flow_management_examples(client: &LarkClient, app_id: &str) {
let mut parameters = HashMap::new();
parameters.insert("flow_param".to_string(), json!("test_value"));
let request = FlowExecuteRequest {
app_id: app_id.to_string(),
flow_api_name: "example_flow".to_string(),
parameters: Some(json!(parameters)),
};
match client.apass.flow.execute_flow(request, None).await {
Ok(response) => {
println!("流程执行结果: {:?}", response.data.unwrap().execute_result);
}
Err(e) => println!("流程执行失败: {e:?}"),
}
let request = UserTaskQueryRequest {
app_id: app_id.to_string(),
status: Some("pending".to_string()),
page_size: Some(10),
page_token: None,
};
match client.apass.flow.query_user_tasks(request, None).await {
Ok(response) => {
println!("人工任务列表:");
if let Some(items) = &response.data.unwrap().page_response.items {
for task in items {
println!(" - 任务ID: {:?}, 状态: {:?}", task.task_id, task.status);
}
}
}
Err(e) => println!("查询人工任务失败: {e:?}"),
}
}