Skip to content

整合 Lark 机器人指南 ​

本指南将介绍如何将 Lark 机器人集成到您的应用程序中。我们将介绍两种集成方式:

  1. 使用 LarksuiteNotificationUtils 工具类
  2. 使用 Lark 官方 SDK (oapi-sdk)

目录 ​


使用 LarksuiteNotificationUtils ​

LarksuiteNotificationUtils 是 tio-utils 内置的工具类,提供了简便的方法将消息推送到 Lark 群组。

添加机器人 ​

  1. 创建群组:首先,创建一个新的群组。
  2. 添加机器人:将 Lark 机器人添加到该群组中。
  3. 获取 Webhook URL:在机器人设置中获取 Webhook 地址,用于后续消息推送。

推送消息 ​

使用 LarksuiteNotificationUtils 推送消息的示例如下:

java
import java.io.IOException;

import nexus.io.tio.utils.environment.EnvUtils;
import nexus.io.tio.utils.notification.LarksuiteNotificationUtils;
import nexus.io.tio.utils.notification.NotifactionWarmModel;

import lombok.extern.slf4j.Slf4j;
import okhttp3.Response;

@Slf4j
public class McBuildErrorBot {

  private static String webHookUrl = EnvUtils.get("warm.notification.webhook.url");

  public static void sendWarm(NotifactionWarmModel model) {
    try (Response response = LarksuiteNotificationUtils.sendWarm(webHookUrl, model)) {
      if (!response.isSuccessful()) {
        try {
          log.info("Failed to push message: {} {}", response.code(), response.body().string());
        } catch (IOException e1) {
          e1.printStackTrace();
        }
      }
    }
  }
}
java
import org.junit.Test;

import nexus.io.manim.utils.McBuildErrorBot;
import nexus.io.tio.utils.environment.EnvUtils;
import nexus.io.tio.utils.notification.NotifactionWarmModel;

public class McBuildErrorBotTest {
  
  @Test
  public void testPush() {
    EnvUtils.load();
    NotifactionWarmModel model=new NotifactionWarmModel();
    model.setContent("test");
    McBuildErrorBot.sendWarm(model);
  }
}

说明:

  • LarksuiteNotificationUtils.sendWarm 方法用于发送消息到指定的 Lark Webhook URL。
  • 使用 EnvUtils.get("warm.notification.webhook.url") 获取存储在环境变量中的 Webhook 地址。
  • model 是NotifactionWarmModel,是要发送的消息内容模型。里面提供了丰富的参数设置

使用 Lark 官方 SDK (oapi-sdk) ​

Lark 官方提供了 oapi-sdk,使得与 Lark API 的集成更加灵活和强大。

创建与添加机器人 ​

  1. 创建机器人:在 Lark 开发者后台创建一个新的机器人应用。
  2. 添加机器人到群组:将机器人添加到目标群组中。

获取机器人基本信息 ​

在机器人创建完成后,记录下机器人的 APP ID 和 APP Secret,这些信息将在后续步骤中使用。

获取 RECEIVE_ID ​

RECEIVE_ID 是指消息接收者的唯一标识,可以是群组 ID 或个人 ID。获取方法通常通过 Lark 提供的接口或在机器人添加到群组后由系统生成。

添加依赖 ​

在您的项目中添加 Lark 官方 SDK 的依赖。使用 Maven 时,在 pom.xml 中添加以下内容:

xml
<dependency>
  <groupId>com.larksuite.oapi</groupId>
  <artifactId>oapi-sdk</artifactId>
  <version>4.0.3</version>
</dependency>

推送消息 ​

编写一个工具类用于发送消息:

java
import com.jfinal.kit.Kv;
import com.lark.oapi.Client;
import com.lark.oapi.service.im.v1.enums.CreateMessageReceiveIdTypeEnum;
import com.lark.oapi.service.im.v1.model.CreateMessageReq;
import com.lark.oapi.service.im.v1.model.CreateMessageReqBody;
import nexus.io.tio.utils.json.JsonUtils;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LarkBotQuestionUtils {
  public static final String APP_ID = "cli_xxxxx"; // 替换为的 APP ID
  public static final String APP_SECRET = "xxxx";    // 替换为的 APP Secret
  public static final String RECEIVE_ID = "xxxx";    // 替换为接收消息的 ID

  public static void send(String text) {
    // 初始化客户端
    Client client = Client.newBuilder(APP_ID, APP_SECRET).build();

    // 构建消息内容
    String content = JsonUtils.toJson(Kv.by("text", text));

    // 构建消息体
    CreateMessageReqBody reqBody = CreateMessageReqBody.newBuilder()
        .receiveId(RECEIVE_ID)
        .msgType("text")
        .content(content)
        .build();

    // 构建消息请求
    CreateMessageReq req = CreateMessageReq.newBuilder()
        .receiveIdType(CreateMessageReceiveIdTypeEnum.CHAT_ID)
        .createMessageReqBody(reqBody)
        .build();

    try {
      // 发送消息
      CreateMessageResp resp = client.im().v1().message().create(req);
      if (resp.getError() != null) {
        log.error("发送消息到 Lark 机器人失败: {}", resp.getError());
      }
    } catch (Exception e) {
      log.error("消息发送异常", e);
    }
  }
}

说明:

  • 初始化客户端:使用 APP_ID 和 APP_SECRET 初始化 Lark API 客户端。
  • 构建消息内容:将文本消息转换为 JSON 格式。
  • 构建消息体:指定接收者 ID、消息类型和内容。
  • 发送消息:通过 Lark API 发送消息,并处理可能的错误。

单元测试 ​

为了验证 LarkBotQuestionUtils 的正常工作,可以编写如下 JUnit 测试:

java
import org.junit.Test;

public class LarkBotQuestionUtilsTest {

  @Test
  public void testSendMessage() {
    LarkBotQuestionUtils.send("好吗?");
  }
}

说明:

  • 该测试将向指定的 Lark 机器人发送一条 "好吗?" 的消息,确保集成工作正常。

总结 ​

通过以上两种方式,您可以方便地将 Lark 机器人集成到您的应用程序中。LarksuiteNotificationUtils 提供了简洁的方法用于快速推送通知,而 Lark 官方 SDK (oapi-sdk) 则提供了更为灵活和强大的功能,适用于需要更复杂集成的场景。根据您的具体需求选择合适的集成方式,实现高效的消息推送。

ref ​

https://github.com/larksuite/oapi-sdk-java

MIT Licensed