### Set up HTTP Server for Webhook in Go Source: https://open.feishu.cn/document/server-docs/contact-v3/employee_type_enum/events/created Set up an HTTP server to listen on port 7777 and handle incoming webhook events using the NewEventHandlerFunc. This example demonstrates basic server setup for receiving events. ```go // 创建路由处理器 Create route handler http.HandleFunc("/webhook/event", httpserverext.NewEventHandlerFunc(handler, larkevent.WithLogLevel(larkcore.LogLevelDebug))) err := http.ListenAndServe(":7777", nil) if err != nil { panic(err) } ``` -------------------------------- ### Register Event and Start HTTP Server in Go Source: https://open.feishu.cn/document/server-docs/docs/drive-v1/event/list/file-read Sets up an event dispatcher and an HTTP server to handle incoming events in Go. ```go package main import ( "context" "fmt" "net/http" larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "github.com/larksuite/oapi-sdk-go/v3/core/httpserverext" larkevent "github.com/larksuite/oapi-sdk-go/v3/event" "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher" "github.com/larksuite/oapi-sdk-go/v3/service/drive/v1" ) // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations func main() { // 注册事件 Register event eventHandler := dispatcher.NewEventDispatcher("", ""). OnP2FileReadV1(func(ctx context.Context, event *larkdrive.P2FileReadV1) error { fmt.Printf("[ OnP2FileReadV1 access ], data: %s\n", larkcore.Prettify(event)) return nil }) // 创建路由处理器 Create route handler http.HandleFunc("/webhook/event", httpserverext.NewEventHandlerFunc(handler, larkevent.WithLogLevel(larkcore.LogLevelDebug))) err := http.ListenAndServe(":7777", nil) if err != nil { panic(err) } } ``` -------------------------------- ### Create Node.js Route Handler Source: https://open.feishu.cn/document/server-docs/helpdesk-v1/notification/events/approve This Node.js example sets up an HTTP server to handle webhook events. It uses the Lark Node.js SDK to adapt requests to an event dispatcher, listening on port 3000. Refer to the SDK preparation guide for setup. ```javascript // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/nodejs-sdk/preparation-before-development import http from 'http'; import * as lark from '@larksuiteoapi/node-sdk'; // 注册事件 Register event const eventDispatcher = new lark.EventDispatcher({ encryptKey: '', verificationToken: '', }).register({ 'helpdesk.notification.approve_v1': async (data) => { console.log(data); return 'success'; }, }); const server = http.createServer(); // 创建路由处理器 Create route handler server.on('request', lark.adaptDefault('/webhook/event', eventDispatcher)); server.listen(3000); ``` -------------------------------- ### Get Bitable Metadata Request Example Source: https://open.feishu.cn/document/server-docs/docs/bitable-v1/app/get This example demonstrates how to make a GET request to retrieve the metadata of a specific bitable. Ensure you include the correct `app_token` in the URL and a valid `Authorization` header. ```http GET https://open.feishu.cn/open-apis/bitable/v1/apps/:app_token Authorization: Bearer Content-Type: application/json ``` -------------------------------- ### Register and Handle Events in Go Source: https://open.feishu.cn/document/server-docs/application-v6/event/updated Provides an example of setting up an event dispatcher and an HTTP server for event handling in Go. ```go package main import ( "context" "fmt" "net/http" larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "github.com/larksuite/oapi-sdk-go/v3/core/httpserverext" larkevent "github.com/larksuite/oapi-sdk-go/v3/event" "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher" "github.com/larksuite/oapi-sdk-go/v3/service/application/v6" ) // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations func main() { // 注册事件 Register event eventHandler := dispatcher.NewEventDispatcher("", ""). OnP2ApplicationFeedbackUpdatedV6(func(ctx context.Context, event *larkapplication.P2ApplicationFeedbackUpdatedV6) error { fmt.Printf("[ OnP2ApplicationFeedbackUpdatedV6 access ], data: %s\n", larkcore.Prettify(event)) return nil }) // 创建路由处理器 Create route handler http.HandleFunc("/webhook/event", httpserverext.NewEventHandlerFunc(handler, larkevent.WithLogLevel(larkcore.LogLevelDebug))) err := http.ListenAndServe(":7777", nil) if err != nil { panic(err) } } ``` -------------------------------- ### Register and Handle Events in Java Source: https://open.feishu.cn/document/server-docs/application-v6/event/updated Shows how to configure an EventDispatcher and initialize a Client in Java. ```java package com.example.sample; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.application.ApplicationService; import com.lark.oapi.service.application.v6.model.P2ApplicationFeedbackUpdatedV6; import com.lark.oapi.event.EventDispatcher; import com.lark.oapi.ws.Client; // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations public class Sample { // 注册事件 Register event private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "") .onP2ApplicationFeedbackUpdatedV6(new ApplicationService.P2ApplicationFeedbackUpdatedV6Handler() { @Override public void handle(P2ApplicationFeedbackUpdatedV6 event) throws Exception { System.out.printf("[ onP2ApplicationFeedbackUpdatedV6 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); } }) .build(); public static void main(String[] args) { // 构建 client Build client Client client = new Client.Builder("APP_ID", "APP_SECRET") .eventHandler(EVENT_HANDLER) .build(); // 建立长连接 Establish persistent connection client.start(); } } ``` -------------------------------- ### Get Shift Example Source: https://open.feishu.cn/document/server-docs/attendance-v1/shift/get This example demonstrates the structure of a successful response when retrieving shift information. ```APIDOC ## GET /attendance/v1/shift/:shift_id ### Description Retrieves the details of a specific shift. ### Method GET ### Endpoint /attendance/v1/shift/:shift_id ### Parameters #### Path Parameters - **shift_id** (string) - Required - The ID of the shift to retrieve. ### Response #### Success Response (200) - **code** (integer) - The response code. - **msg** (string) - The response message. - **data** (object) - The shift details. - **shift_id** (string) - The ID of the shift. - **shift_name** (string) - The name of the shift. - **punch_times** (integer) - The number of punch times for the shift. - **is_flexible** (boolean) - Indicates if the shift is flexible. - **flexible_minutes** (integer) - The number of flexible minutes allowed. - **flexible_rule** (array) - Rules for flexibility. - **no_need_off** (boolean) - Indicates if time off is not required. - **punch_time_rule** (array) - Rules for punch times. - **late_off_late_on_rule** (array) - Rules for late off and late on. - **rest_time_rule** (array) - Rules for rest times. - **overtime_rule** (array) - Rules for overtime. - **day_type** (integer) - The type of day. - **overtime_rest_time_rule** (array) - Rules for overtime rest times. - **late_minutes_as_serious_late** (integer) - Threshold for serious late. - **shift_middle_time_rule** (object) - Rule for middle time of the shift. - **shift_attendance_time_config** (object) - Configuration for shift attendance time. - **late_off_late_on_setting** (object) - Settings for late off and late on. - **id** (string) - The ID of the shift. - **rest_time_flexible_configs** (array) - Flexible configurations for rest times. #### Response Example ```json { "code": 0, "msg": "success", "data": { "shift_id": "6919358778597097404", "shift_name": "早班", "punch_times": 1, "is_flexible": false, "flexible_minutes": 60, "flexible_rule": [ { "flexible_early_minutes": 60, "flexible_late_minutes": 60 } ], "no_need_off": true, "punch_time_rule": [ { "on_time": "9:00", "off_time": "18:00", "late_minutes_as_late": 30, "late_minutes_as_lack": 60, "on_advance_minutes": 60, "early_minutes_as_early": 30, "early_minutes_as_lack": 60, "off_delay_minutes": 60, "late_minutes_as_serious_late": 40, "no_need_on": true, "no_need_off": true } ], "late_off_late_on_rule": [ { "late_off_minutes": 60, "late_on_minutes": 30 } ], "rest_time_rule": [ { "rest_begin_time": "13:00", "rest_end_time": "14:00" } ], "overtime_rule": [ { "on_overtime": "9:00", "off_overtime": "18:00" } ], "day_type": 1, "overtime_rest_time_rule": [ { "rest_begin_time": "13:00", "rest_end_time": "14:00" } ], "late_minutes_as_serious_late": 40, "shift_middle_time_rule": { "middle_time_type": 0, "fixed_middle_time": "12:00" }, "shift_attendance_time_config": { "attendance_time": 1, "on_attendance_time": 1, "off_attendance_time": 1 }, "late_off_late_on_setting": { "late_off_base_on_time_type": 0, "late_on_base_on_time_type": 0 }, "id": "6919358778597097404", "rest_time_flexible_configs": [ { "need_flexible": false, "late_mins": 0 } ] } } ``` ``` -------------------------------- ### Get User Information Request Example Source: https://open.feishu.cn/document/server-docs/acs-v1/user/get This example demonstrates how to make a GET request to retrieve a single user's information. Ensure you include the correct Authorization header and user ID in the path. ```http GET https://open.feishu.cn/open-apis/acs/v1/users/:user_id Header: Authorization: Bearer t-7f1bcd13fc57d46bac21793a18e560 Query: user_id_type: open_id ``` -------------------------------- ### Register Event and Start HTTP Server in Go Source: https://open.feishu.cn/document/server-docs/application-v6/event/app-availability-scope-extended Sets up an event dispatcher and an HTTP webhook handler using the Go SDK. ```go package main import ( "context" "fmt" "net/http" larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "github.com/larksuite/oapi-sdk-go/v3/core/httpserverext" larkevent "github.com/larksuite/oapi-sdk-go/v3/event" "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher" "github.com/larksuite/oapi-sdk-go/v3/service/application/v6" ) // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations func main() { // 注册事件 Register event eventHandler := dispatcher.NewEventDispatcher("", ""). OnP2ApplicationVisibilityAddedV6(func(ctx context.Context, event *larkapplication.P2ApplicationVisibilityAddedV6) error { fmt.Printf("[ OnP2ApplicationVisibilityAddedV6 access ], data: %s\n", larkcore.Prettify(event)) return nil }) // 创建路由处理器 Create route handler http.HandleFunc("/webhook/event", httpserverext.NewEventHandlerFunc(handler, larkevent.WithLogLevel(larkcore.LogLevelDebug))) err := http.ListenAndServe(":7777", nil) if err != nil { panic(err) } } ``` -------------------------------- ### Go SDK - Event Subscription Example Source: https://open.feishu.cn/document/server-docs/corehr-v1/probation/converted Example of how to subscribe to and handle the P2EmploymentConvertedV1 event using the Feishu Go SDK. ```Go package main import ( "context" "fmt" larkcore "github.com/larksuite/oapi-sdk-go/v3/core" larkevent "github.com/larksuite/oapi-sdk-go/v3/event" "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher" larkcorehr "github.com/larksuite/oapi-sdk-go/v3/service/corehr/v1" larkws "github.com/larksuite/oapi-sdk-go/v3/ws" ) // SDK user guide: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations func main() { // Register event eventHandler := dispatcher.NewEventDispatcher("", ""). OnP2EmploymentConvertedV1(func(ctx context.Context, event *larkcorehr.P2EmploymentConvertedV1) error { fmt.Printf("[ OnP2EmploymentConvertedV1 access ], data: %s\n", larkcore.Prettify(event)) return nil }) // Build client cli := larkws.NewClient("YOUR_APP_ID", "YOUR_APP_SECRET", larkws.WithEventHandler(eventHandler), larkws.WithLogLevel(larkcore.LogLevelDebug), ) // Establish persistent connection err := cli.Start(context.Background()) if err != nil { panic(err) } } ``` -------------------------------- ### Get Meeting Recording Response Example Source: https://open.feishu.cn/document/server-docs/vc-v1/meeting-recording/get This is an example of a successful response when retrieving a meeting recording. It includes the recording URL and duration. ```json { "code": 0, "msg": "success", "data": { "recording": { "url": "https://meetings.feishu.cn/minutes/obcn37dxcftoc3656rgyejm7", "duration": "30000" } } } ``` -------------------------------- ### Get Message Reactions Example Source: https://open.feishu.cn/document/server-docs/im-v1/message-reaction/list This is an example of the JSON response when successfully retrieving message reactions. It includes details about each reaction, the operator, action time, and reaction type. ```json { "code": 0, "msg": "success", "data": { "items": [ { "reaction_id": "ZCaCIjUBVVWSrm5L-3ZTw****", "operator": { "operator_id": "ou_ff0b7ba35fb****", "operator_type": "user" }, "action_time": "1626086391570", "reaction_type": { "emoji_type": "SMILE" } } ], "has_more": true, "page_token": "YhljsPiGfUgnVAg9urvRFd-BvSqRL****" } } ``` -------------------------------- ### Register and Handle Events in Java Source: https://open.feishu.cn/document/server-docs/corehr-v1/organization-management/department/deleted Demonstrates event registration and client initialization using the Java SDK. ```java package com.example.sample; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.corehr.CorehrService; import com.lark.oapi.service.corehr.v1.model.P2DepartmentDeletedV1; import com.lark.oapi.event.EventDispatcher; import com.lark.oapi.ws.Client; // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations public class Sample { // 注册事件 Register event private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "") .onP2DepartmentDeletedV1(new CorehrService.P2DepartmentDeletedV1Handler() { @Override public void handle(P2DepartmentDeletedV1 event) throws Exception { System.out.printf("[ onP2DepartmentDeletedV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); } }) .build(); public static void main(String[] args) { // 构建 client Build client Client client = new Client.Builder("APP_ID", "APP_SECRET") .eventHandler(EVENT_HANDLER) .build(); // 建立长连接 Establish persistent connection client.start(); } } ``` -------------------------------- ### Get Message Response Body Example Source: https://open.feishu.cn/document/server-docs/im-v1/message/get This JSON structure represents a successful response from the Get Message API, detailing a single text message with sender information and mentions. ```json { "code": 0, "msg": "success", "data": { "items": [ { "message_id": "om_dc13264520392913993dd051dba21dcf", "root_id": "om_40eb06e7b84dc71c03e009ad3c754195", "parent_id": "om_d4be107c616aed9c1da8ed8068570a9f", "thread_id": "omt_d4be107c616a", "msg_type": "text", "create_time": "1615380573411", "update_time": "1615380573411", "deleted": false, "updated": false, "chat_id": "oc_5ad11d72b830411d72b836c20", "sender": { "id": "cli_9f427eec54ae901b", "id_type": "app_id", "sender_type": "app", "tenant_key": "736588c9260f175e" }, "body": { "content": "{\"text\":\"test content\"}" }, "mentions": [ { "key": "@_user_1", "id": "ou_155184d1e73cbfb8973e5a9e698e74f2", "id_type": "open_id", "name": "Tom", "tenant_key": "736588c9260f175e" } ] } ] } } ``` -------------------------------- ### Register and Handle Events in Java Source: https://open.feishu.cn/document/server-docs/corehr-v1/contract/created Demonstrates event registration and client initialization using the Java SDK. ```java package com.example.sample; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.corehr.CorehrService; import com.lark.oapi.service.corehr.v1.model.P2ContractCreatedV1; import com.lark.oapi.event.EventDispatcher; import com.lark.oapi.ws.Client; // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations public class Sample { // 注册事件 Register event private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "") .onP2ContractCreatedV1(new CorehrService.P2ContractCreatedV1Handler() { @Override public void handle(P2ContractCreatedV1 event) throws Exception { System.out.printf("[ onP2ContractCreatedV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); } }) .build(); public static void main(String[] args) { // 构建 client Build client Client client = new Client.Builder("APP_ID", "APP_SECRET") .eventHandler(EVENT_HANDLER) .build(); // 建立长连接 Establish persistent connection client.start(); } } ``` -------------------------------- ### Get Candidates API Response Example Source: https://open.feishu.cn/document/server-docs/hire-v1/get-candidates/website/list-2 This JSON object represents a typical response from the Get Candidates API, illustrating the structure of candidate data, including personal information, contact details, and educational background. ```json { "code": 0, "msg": "OK", "data": { "items": [ { "id": "7180173030711111111", "name": { "zh_cn": "张三", "en_us": "Zhang San" }, "mobile": "11111111111", "email": "11111111111@qq.com", "avatar_key": "dadsadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadad:: ``` -------------------------------- ### Register and Handle Events in Java Source: https://open.feishu.cn/document/server-docs/corehr-v1/employee/employment/updated Demonstrates event registration and client initialization using the Java SDK. ```java package com.example.sample; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.corehr.CorehrService; import com.lark.oapi.service.corehr.v1.model.P2EmploymentUpdatedV1; import com.lark.oapi.event.EventDispatcher; import com.lark.oapi.ws.Client; // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations public class Sample { // 注册事件 Register event private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "") .onP2EmploymentUpdatedV1(new CorehrService.P2EmploymentUpdatedV1Handler() { @Override public void handle(P2EmploymentUpdatedV1 event) throws Exception { System.out.printf("[ onP2EmploymentUpdatedV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); } }) .build(); public static void main(String[] args) { // 构建 client Build client Client client = new Client.Builder("APP_ID", "APP_SECRET") .eventHandler(EVENT_HANDLER) .build(); // 建立长连接 Establish persistent connection client.start(); } } ``` -------------------------------- ### Register and Handle Events in Java Source: https://open.feishu.cn/document/server-docs/corehr-v1/job_change/updated Demonstrates event registration and client initialization using the Java SDK. ```java package com.example.sample; import com.lark.oapi.core.utils.Jsons; import com.lark.oapi.service.corehr.CorehrService; import com.lark.oapi.service.corehr.v1.model.P2JobChangeUpdatedV1; import com.lark.oapi.event.EventDispatcher; import com.lark.oapi.ws.Client; // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/java-sdk-guide/preparations public class Sample { // 注册事件 Register event private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "") .onP2JobChangeUpdatedV1(new CorehrService.P2JobChangeUpdatedV1Handler() { @Override public void handle(P2JobChangeUpdatedV1 event) throws Exception { System.out.printf("[ onP2JobChangeUpdatedV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); } }) .build(); public static void main(String[] args) { // 构建 client Build client Client client = new Client.Builder("APP_ID", "APP_SECRET") .eventHandler(EVENT_HANDLER) .build(); // 建立长连接 Establish persistent connection client.start(); } } ``` -------------------------------- ### Get Meeting Details Source: https://open.feishu.cn/document/server-docs/vc-v1/video-conferencing-overview Retrieves detailed information about a specific meeting, including its topic, ID, link, start time, status, and participant list. ```APIDOC ## GET /open-apis/vc/v1/meetings/:meeting_id ### Description Gets detailed data for a meeting, including its topic, meeting ID, meeting link, start time, meeting status, and participant list. ### Method GET ### Endpoint /open-apis/vc/v1/meetings/:meeting_id ### Parameters #### Path Parameters - **meeting_id** (string) - Required - The ID of the meeting to retrieve. ### Response #### Success Response (200) - **meeting_id** (string) - The unique identifier for the meeting. - **topic** (string) - The subject or topic of the meeting. - **meeting_url** (string) - The URL to join the meeting. - **start_time** (string) - The scheduled start time of the meeting (Unix timestamp). - **status** (integer) - The current status of the meeting (e.g., 0: scheduled, 1: ongoing, 2: ended). - **participants** (array) - A list of participants in the meeting. - **user_id** (string) - The ID of the participant. - **name** (string) - The name of the participant. - **join_time** (string) - The time the participant joined the meeting (Unix timestamp). - **leave_time** (string) - The time the participant left the meeting (Unix timestamp). #### Response Example { "data": { "meeting_id": "7187654321012345678", "topic": "Project Discussion", "meeting_url": "https://example.feishu.cn/meetings/j/abc123xyz", "start_time": "1678886400", "status": 1, "participants": [ { "user_id": "ou_abcdef12345", "name": "Alice", "join_time": "1678886460", "leave_time": "0" } ] } } ``` -------------------------------- ### Helps Example for Permissions Source: https://open.feishu.cn/document/server-docs/api-call-guide/calling-process/get- This JSON snippet illustrates the 'helps' array, providing URLs and descriptions to guide users in obtaining missing API permissions. ```json { "helps": [ { "url": "https://open.feishu.cn/app/cli_a61e4f1234xxx/auth?q=event:ip_list&op_from=openapi", "description": "Learn more about scopes and how to add them: [event:ip_list]" } ] } ``` -------------------------------- ### Register and Start Go HTTP Event Handler Source: https://open.feishu.cn/document/server-docs/approval-v4/event/common-event/custom-approval-event Sets up an event dispatcher and binds it to an HTTP server route for handling incoming events. ```go package main import ( "context" "fmt" "net/http" larkcore "github.com/larksuite/oapi-sdk-go/v3/core" "github.com/larksuite/oapi-sdk-go/v3/core/httpserverext" larkevent "github.com/larksuite/oapi-sdk-go/v3/event" "github.com/larksuite/oapi-sdk-go/v3/event/dispatcher" "github.com/larksuite/oapi-sdk-go/v3/service/approval/v4" ) // SDK 使用说明 SDK user guide:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/server-side-sdk/golang-sdk-guide/preparations func main() { // 注册事件 Register event eventHandler := dispatcher.NewEventDispatcher("", ""). OnP2ApprovalUpdatedV4(func(ctx context.Context, event *larkapproval.P2ApprovalUpdatedV4) error { fmt.Printf("[ OnP2ApprovalUpdatedV4 access ], data: %s\n", larkcore.Prettify(event)) return nil }) // 创建路由处理器 Create route handler http.HandleFunc("/webhook/event", httpserverext.NewEventHandlerFunc(handler, larkevent.WithLogLevel(larkcore.LogLevelDebug))) err := http.ListenAndServe(":7777", nil) if err != nil { panic(err) } } ``` -------------------------------- ### Python Flask Event Handler Setup Source: https://open.feishu.cn/document/server-docs/vc-v1/scope_config/events/updated Set up an event handler for P2VcReserveConfigUpdatedV1 events in a Flask application. Ensure the Lark SDK is installed and imported. ```python from flask import Flask from lark_oapi.adapter.flask import * import lark_oapi as lark app = Flask(__name__) def do_p2_vc_reserve_config_updated_v1(data: lark.vc.v1.P2VcReserveConfigUpdatedV1) -> None: print(f'[ do_p2_vc_reserve_config_updated_v1 access ], data: {lark.JSON.marshal(data, indent=4)}') # 注册事件 Register event event_handler = lark.EventDispatcherHandler.builder("", "") \ .register_p2_vc_reserve_config_updated_v1(do_p2_vc_reserve_config_updated_v1) \ .build() # 创建路由处理器 Create route handler @app.route("/webhook/event", methods=["POST"]) def event(): resp = event_handler.do(parse_req()) return parse_resp(resp) if __name__ == "__main__": app.run(port=7777) ```