Skip to main content

4. 开发直通模式服务

在本章节中,将会介绍如何用 Java 开发一个直通模式下的,实现基本的介绍和发送消息能力。本文将通过 Stream 协议的模式为你展示如何开发一个直通模式下的 Java 应用。 本教程的完整代码可以在 GitHub 仓库中获取,你也可以跳过本文中构建步骤,直接从 GitHub 中 clone 相关代码。

创建 Java 模块

参考 Spring Quickstart Guide 创建一个空的 Spring 工程。 推荐新手采用本教程相同的配置,点此链接进入 spring initializr,本教程相关的参数已经通过 URL 参数自动携带过去。

本教程使用的主要参数包括:

  • Project:Maven
  • Language:Java
  • Spring Boot:2.7.15
  • Java:8

进入页面后,点击 GENERATE 按钮后会下载生成好 Spring 工程文件,解压缩后可以完成 Java 模块创建。

说明

如果你需要在已有的 Java 工程中开发 AI助理 Action,可以跳过这一步。

引入maven依赖

<!-- ... -->
<dependencies>
<!-- ... -->
<dependency>
<groupId>com.dingtalk.open</groupId>
<artifactId>dingtalk-stream</artifactId>
<version>1.3.2</version>
</dependency>
<!-- ... -->
</dependencies>
<!-- ... -->

开发直通模式

一、在 src/main/resources/application.properties 中添加应用凭据的配置:

dingtalk.app.client-id=put-your-client-id-here
dingtalk.app.client-secret=put-your-client-secret-here

注意事项

务必将以上命令中"put-your-client-id-here"和"put-your-client-secret-here"替换成实际的值后再运行,否则无法成功建立连接。Client ID 和 Client Secret 可以通过创建自定义能力获取。

二、在 com.example.ai.actions.direct 包下面创建 WeatherController 类,实现我们业务的 HTTP 接口, 我们以天气查询为例

@RestController
@RequestMapping("/v1/actions/example/weather")
public class WeatherController {
@GetMapping("/get")
@ResponseBody
public Map<String, Object> get(@RequestParam(value = "input", required = false) String input,
@RequestParam(value = "inputAttribute", required = false) String attribute,
@RequestParam(value = "sender", required = false) String sender) {
Map<String, Object> result = new HashMap<>();
String location = "杭州";
String dateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
result.put("location", location);
result.put("dateStr", dateStr);
result.put("text", "晴天");
result.put("temperature", 22);
result.put("humidity", 65);
result.put("wind_direction", "东南风");
return result;
}
}

然后我们配置我们的 Stream 客户端

@Configuration
public class StreamClientConfigure {

@Value("${dingtalk.app.client-id}")
private String clientId;

@Value("${dingtalk.app.client-secret}")
private String clientSecret;

@Bean(initMethod = "start")
public OpenDingTalkClient configure() {
return OpenDingTalkStreamClientBuilder.custom()
.credential(new AuthClientCredential(clientId, clientSecret))
.forwardGraphRequestToHTTP(8080)
.build();
}
}

这里我们使用了 Stream 模式的转发能力,可以将 Graph 请求转发对应的 HTTP 端口。

运行 AI 助理自定义能力

在 IDE 中运行 AiActionsDirectApplication.java 中 main 函数,当看到这样的日志输出时候表示运行成功 [DingTalk] connection is established, connectionId=xxxxxxx ,至此,你已成功基于 Stream 协议的直通模式应用已经开发完成,接下来可以和 AI 助理对话,体验自己开发的 AI 直通模式。