go get -u github.com/larksuite/oapi-sdk-go/v3package 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"
larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1"
larkws "github.com/larksuite/oapi-sdk-go/v3/ws"
)
func main() {
// 注册事件回调,OnP2MessageReceiveV1 为接收消息 v2.0;OnCustomizedEvent 内的 message 为接收消息 v1.0。
eventHandler := dispatcher.NewEventDispatcher("", "").
OnP2MessageReceiveV1(func(ctx context.Context, event *larkim.P2MessageReceiveV1) error {
fmt.Printf("[ OnP2MessageReceiveV1 access ], data: %s\n", larkcore.Prettify(event))
return nil
}).
OnCustomizedEvent("这里填入你要自定义订阅的 event 的 key,例如 out_approval", func(ctx context.Context, event *larkevent.EventReq) error {
fmt.Printf("[ OnCustomizedEvent access ], type: message, data: %s\n", string(event.Body))
return nil
})
// 创建Client
cli := larkws.NewClient("YOUR_APP_ID", "YOUR_APP_SECRET",
larkws.WithEventHandler(eventHandler),
larkws.WithLogLevel(larkcore.LogLevelDebug),
)
// 启动客户端
err := cli.Start(context.Background())
if err != nil {
panic(err)
}
}
onP2MessageReceiveV1 注册接收消息事件回调时,P2便对应的是 v2.0 版本事件结构。


pip install lark-oapi -Uimport lark_oapi as lark
## P2ImMessageReceiveV1 为接收消息 v2.0;CustomizedEvent 内的 message 为接收消息 v1.0。
def do_p2_im_message_receive_v1(data: lark.im.v1.P2ImMessageReceiveV1) -> None:
print(f'[ do_p2_im_message_receive_v1 access ], data: {lark.JSON.marshal(data, indent=4)}')
def do_message_event(data: lark.CustomizedEvent) -> None:
print(f'[ do_customized_event access ], type: message, data: {lark.JSON.marshal(data, indent=4)}')
event_handler = lark.EventDispatcherHandler.builder("", "") \
.register_p2_im_message_receive_v1(do_p2_im_message_receive_v1) \
.register_p1_customized_event("这里填入你要自定义订阅的 event 的 key,例如 out_approval", do_message_event) \
.build()
def main():
cli = lark.ws.Client("YOUR_APP_ID", "YOUR_APP_SECRET",
event_handler=event_handler,
log_level=lark.LogLevel.DEBUG)
cli.start()
if __name__ == "__main__":
main()register_{事件版本}_{事件类型 或 customized_event} 方法处理不同的事件。
data: lark.im.v1.P2ImMessageReceiveV1 指定所选事件,其中:lark.im.v1表示对应的业务域以及版本,可通过事件类型的前缀获取业务域代码,例如 im.message.receive_v1 对应的业务域代码为 im。P2ImMessageReceiveV1 中,P2 表示事件版本为 v2.0,ImMessageReceiveV1 对应事件类型 im.message.receive_v1。.register_p2_im_message_receive_v1() 处理事件,其中:im.message.receive_v1。data: lark.CustomizedEvent 方法,表示处理自定义事件。.register_p1_customized_event("这里填入你要自定义订阅的事件类型,例如 out_approval", do_message_event)## P2ImMessageReceiveV1:
## P2 对应 v2.0 版本,
## ImMessageReceiveV1 对应接收消息事件类型 im.message.receive_v1。
def do_p2_im_message_receive_v1(data: lark.im.v1.P2ImMessageReceiveV1) -> None:
print(f'[ do_p2_im_message_receive_v1 access ], data: {lark.JSON.marshal(data, indent=4)}')
## 如果是 v1.0 版本事件,需要使用 lark.CustomizedEvent
def do_message_event(data: lark.CustomizedEvent) -> None:
print(f'[ do_customized_event access ], type: message, data: {lark.JSON.marshal(data, indent=4)}')
event_handler = lark.EventDispatcherHandler.builder("", "") \
## register_p2 对应 v2.0 版本,
## im_message_receive_v1 对应接收消息事件类型 im.message.receive_v1。
.register_p2_im_message_receive_v1(do_p2_im_message_receive_v1) \
## register_p1 对应 v1.0 版本,
## 参数值需要传入事件类型。例如 out_approval
.register_p1_customized_event("这里填入你要自定义订阅的 event 的 key,例如 out_approval", do_message_event) \
.build()

<dependencies>
...
<dependency>
<groupId>com.larksuite.oapi</groupId>
<artifactId>oapi-sdk</artifactId>
<version>{latest version}</version>
</dependency>
...
</dependencies>package com.lark.oapi.sample.ws;
import com.lark.oapi.core.request.EventReq;
import com.lark.oapi.core.utils.Jsons;
import com.lark.oapi.event.CustomEventHandler;
import com.lark.oapi.event.EventDispatcher;
import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client;
import java.nio.charset.StandardCharsets;
public class Sample {
// onP2MessageReceiveV1 为接收消息 v2.0;onCustomizedEvent 内的 message 为接收消息 v1.0。
private static final EventDispatcher EVENT_HANDLER = EventDispatcher.newBuilder("", "")
.onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {
@Override
public void handle(P2MessageReceiveV1 event) throws Exception {
System.out.printf("[ onP2MessageReceiveV1 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));
}
})
.onCustomizedEvent("这里填入你要自定义订阅的 event 的 key,例如 out_approval", new CustomEventHandler() {
@Override
public void handle(EventReq event) throws Exception {
System.out.printf("[ onCustomizedEvent access ], type: message, data: %s\n", new String(event.getBody(), StandardCharsets.UTF_8));
}
})
.build();
public static void main(String[] args) {
Client cli = new Client.Builder("YOUR_APP_ID", "YOUR_APP_SECRET")
.eventHandler(EVENT_HANDLER)
.build();
cli.start();
}
}
onP2MessageReceiveV1 注册接收消息事件回调时,P2便对应的是 v2.0 版本事件结构。


1.24.0。// 用自己项目中的包管理工具,如 yarn
yarn add @larksuiteoapi/node-sdkimport * as Lark from '@larksuiteoapi/node-sdk';
const baseConfig = {
appId: 'xxx',
appSecret: 'xxx'
}
const client = new Lark.Client(baseConfig);
const wsClient = new Lark.WSClient({...baseConfig, loggerLevel: Lark.LoggerLevel.debug});
wsClient.start({
// 处理「接收消息」事件,事件类型为 im.message.receive_v1
eventDispatcher: new Lark.EventDispatcher({}).register({
'im.message.receive_v1': async (data) => {
const {
message: { chat_id, content}
} = data;
// 示例操作:接收消息后,调用「发送消息」API 进行消息回复。
await client.im.v1.message.create({
params: {
receive_id_type: "chat_id"
},
data: {
receive_id: chat_id,
content: Lark.messageCard.defaultCard({
title: `回复: ${JSON.parse(content).text}`,
content: '新年好'
}),
msg_type: 'interactive'
}
});
}
})
});'im.message.receive_v1' 替换为需要处理的事件的 事件类型。事件类型 可参考指定事件的文档,例如,查阅接收消息事件文档可知,该事件的事件类型为 im.message.receive_v1。wsClient.start({
eventDispatcher: new Lark.EventDispatcher({}).register({
'im.message.receive_v1': async (data) => {
const {
message: { chat_id, content}
} = data;