当前位置:

首页 > 业界资讯 > 附代码,ChatGPT接入飞书详细步骤

附代码,ChatGPT接入飞书详细步骤

最近ChatGPT大火,boss也蠢蠢欲动要求我们把ChatGPT接入飞书,经过一上午的研究,终于注册成功并且实现了飞书机器人对接到ChatGPT。下面给大家分享一下接入飞书的详细步骤。如何接入飞书飞书与chatgpt的交互如下,我们的自定义服务就是充当一个中间人的角色,进行消息的转发。创建飞书机器人1,进入飞书开放平台,选择创建企业自建应用。2,创建完应用以后,点击进入应用,添加机器人。3,给机器人配置消息相关的权限,如果不确定需要什么权限,可以先全部开通。4,配置事件订阅。事件订阅需要先开发一个接口供

本文目录

    附代码,ChatGPT接入飞书详细步骤

    最近ChatGPT大火,boss也蠢蠢欲动要求我们把ChatGPT接入飞书,经过一上午的研究,终于注册成功并且实现了飞书机器人对接到ChatGPT。

    下面给大家分享一下接入飞书的详细步骤。

    如何接入飞书

    飞书与chatgpt的交互如下,我们的自定义服务就是充当一个中间人的角色,进行消息的转发。

    附代码,ChatGPT接入飞书详细步骤

    创建飞书机器人

    1,进入飞书开放平台,选择创建企业自建应用。

    附代码,ChatGPT接入飞书详细步骤

    2,创建完应用以后,点击进入应用,添加机器人。

    附代码,ChatGPT接入飞书详细步骤

    3,给机器人配置消息相关的权限,如果不确定需要什么权限,可以先全部开通。

    附代码,ChatGPT接入飞书详细步骤

    4,配置事件订阅。事件订阅需要先开发一个接口供飞书验证。接口需要可以公网访问。

    附代码,ChatGPT接入飞书详细步骤

    这个接口的代码可以参考如下:

    @PostMapping(value = "/message")
    public FeishuEventDTO message(@RequestBody String body) {
    log.info("收到消息:{}", body);
    FeishuEventParams feishuEventParams = JSON.parseObject(body, FeishuEventParams.class);
    FeishuEventDTO eventDTO = new FeishuEventDTO();
    eventDTO.setChallenge(feishuEventParams.getChallenge());
    return eventDTO;
    }
    
    @Data
    public class FeishuEventParams {
    
    private String challenge;
    private String token;
    private String type;
    }
    
    @Data
    public class FeishuEventDTO {
    private String challenge;
    }

    有一点需要注意的是,这个校验接口和下面接收飞书消息的接口是同一个地址,但是消息体不一样。

    也就是说校验接口是一次性的,校验完之后需要对这个接口进行改造。

    我们先将这个接口发布到一个可以公网访问的项目中,比如接口地址是
    ​​http://xx.xx.xx.xx/xx/xx/message,将其填写到飞书中保存,飞书如果可以成功保存就没问题了。​​

    附代码,ChatGPT接入飞书详细步骤

    OK,到这里飞书的配置基本搞定了,下面就是我们需要进行处理的逻辑了。

    对接逻辑及实现

    先说一下我司对接的大致逻辑,供大家参考。

    用户发送消息到飞书之后,飞书会将消息转发到我们自己的服务上。

    但是这里会存在一个问题,就是当多个用户并发发起会话时,或者一个大群里很多人都在@我们的机器人时,我们需要记住每一个人的回话,在chatgpt查询到结果后,准确的回复这个人。

    由于我司目前也是用于内部测试不想实现太复杂,所以我们采用的思路是:每一个用户的会话转发到我们的服务上时,先将会话内容保存到一个全局的ConcurrentLinkedQueue队列中,然后启动一个线程,不停的消费这个队列。

    队列的泛型是一个提前构造好的对象,这个对象保存着当前消息的消息id,发送人,提问内容等。

    每消费一个对象,就将对象的提问内容发送到chatgpt,获取响应结果以后,调用飞书提供的会话回复接口去回复用户。(如果并发量比较大,这里可以搞成异步的)。

    好了,大致思路就说到这,我们看一下具体的代码。

    1,打开我们的项目,引入chatgpt提供的jar。

    
    com.theokanning.openai-gpt3-java
    service
    0.10.0
    

    2,重写上面的校验接口,改造成接收飞书消息。(接口路径不要变)

    @Slf4j
    @RestController
    @RequestMapping(value = "/query")
    public class QureyController {
    
    public static ConcurrentLinkedQueue consumer 
    = new ConcurrentLinkedQueue<>();
    
    @PostMapping(value = "/message")
    public String message(@RequestBody String body) {
    log.info("收到飞书消息:{}", body);
    JSONObject jsonObject = JSONObject.parseObject(body);
    JSONObject header = jsonObject.getJSONObject("header");
    String eventType = header.getString("event_type");
    if ("im.message.receive_v1".equals(eventType)) {
    JSONObject event = jsonObject.getJSONObject("event");
    JSONObject message = event.getJSONObject("message");
    String messageType = message.getString("message_type");
    if ("text".equals(messageType)) {
    String messageId = message.getString("message_id");
    String content = message.getString("content");
    JSONObject contentJson = JSON.parseObject(content);
    String text = contentJson.getString("text");
    
    FeishuResponse feishuResponse = new FeishuResponse();
    feishuResponse.setMessageId(messageId);
    feishuResponse.setQuery(text);
    log.info("投递用户消息,{}", JSON.toJSON(feishuResponse));
    consumer.add(feishuResponse);
    } else {
    log.info("非文本消息");
    }
    }
    
    return "suc";
    }
    }

    FeishuResponse的结构如下。

    @Data
    public class FeishuResponse {
    
    private String messageId;
    
    private String query;
    
    }

    3,写一个任务线程。

    @Slf4j
    public class AutoSendTask implements Runnable {
    //你的chatgpt的key
    public static final String token = "";
    public static OpenAiService openAiService = null;
    
    static {
    openAiService = new OpenAiService(token, Duration.ofSeconds(60));
    }
    
    @Override
    public void run() {
    while (true) {
    try {
    FeishuResponse poll = consumer.poll();
    if (poll == null) {
    log.info("no query,sleep 2s");
    TimeUnit.SECONDS.sleep(2);
    } else {
    String query = this.query(poll.getQuery());
    this.reply(poll, query);
    }
    } catch (InterruptedException e) {
    log.error("Thread exception...", e);
    }
    }
    }
    
    private String query(String q) {
    log.info("开始提问:{}", q);
    CompletionRequest completionRequest = CompletionRequest.builder()
    .prompt(q)
    .model("text-davinci-003")
    .maxTokens(2048)
    .echo(false)
    .build();
    StringBuilder sb = new StringBuilder();
    CompletionResult completion = openAiService.createCompletion(completionRequest);
    log.info("q:{},获取响应:{}", q, JSON.toJSONString(completion));
    completion.getChoices().forEach(v -> {
    sb.append(v.getText());
    });
    String rs = sb.toString();
    if (rs.startsWith("?")) {
    rs = rs.replaceFirst("?", "");
    }
    if (rs.startsWith("nn")) {
    rs = rs.replaceFirst("nn", "");
    }
    log.info("格式化后的rs:{}", rs);
    return rs;
    }
    
    private String reply(FeishuResponse poll, String rs) {
    JSONObject params = new JSONObject();
    params.put("uuid", RandomUtil.randomNumbers(10));
    params.put("msg_type", "text");
    
    JSONObject content = new JSONObject();
    content.put("text", rs);
    params.put("content", content.toJSONString());
    
    String url = String.format("https://open.feishu.cn/open-apis/im/v1/messages/%s/reply",
     poll.getMessageId());
    String tenantAccessToken = FeishuUtils.getTenantAccessToken();
    String body = null;
    try (HttpResponse authorization = HttpUtil.createPost(url)
    .header("Authorization", "Bearer " + tenantAccessToken)
    .body(params.toJSONString())
    .execute()) {
    body = authorization.body();
    }
    
    return body;
    }
    
    }

    获取飞书token的工具类如下:

    @Slf4j
    public class FeishuUtils {
    
    public static final String tokenUrl
    = "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal/";
    //构建一个cache 缓存飞书的token
    static Cache tokenCache =
    CacheBuilder.newBuilder().expireAfterWrite(Duration.ofSeconds(3500)).build();
    //这个是飞书应用的appid和key,可以在创建的飞书应用中找到
    public static final String appId = "";
    public static final String appKey = "";
    
    public static String getTenantAccessToken() {
    String token = null;
    try {
    token = tokenCache.get("token", () -> {
    JSONObject params = new JSONObject();
    params.put("app_id", appId);
    params.put("app_secret", appKey);
    String body;
    try (HttpResponse execute = HttpUtil.createPost(tokenUrl)
    .body(params.toJSONString()).execute()) {
    body = execute.body();
    }
    log.info("获取飞书token:{}", body);
    if (StrUtil.isNotBlank(body)) {
    String tenantAccessToken = JSON.parseObject(body).getString("tenant_access_token");
    tokenCache.put("token", tenantAccessToken);
    return tenantAccessToken;
    }
    return null;
    });
    } catch (ExecutionException e) {
    throw new RuntimeException(e);
    }
    return token;
    }
    }

    4,启动线程类即可。

    附代码,ChatGPT接入飞书详细步骤

    最后,出于隐私,chatgpt群会话的效果就不展示了,展示一下直接对话机器人的效果吧。

    附代码,ChatGPT接入飞书详细步骤

    最后

    由于我们引入chatgpt也只是抱着尝试的态度,所以代码相对也比较粗糙,如果有哪里写的不好的地方,还望大家海涵。

    文中代码还额外引入的jar有:guava、hutool-all、fastjson。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    业界资讯
    相关文章 更多
    豆包、火山引擎与TRAE有什么区别?视频生成与办公用途导览
    豆包、火山引擎与TRAE有什么区别?视频生成与办公用途导览

    解析字节旗下豆包App、火山引擎、Seedance、TRAE及飞书的定位差异。通过官方文档核对云服务、视频模型、编程工具与办公AI的功能边界,帮助读者准确选择适合的产品入口。

    独家丨从飞书火山整合,看阿里「云钉一体」踩过的坑
    独家丨从飞书火山整合,看阿里「云钉一体」踩过的坑

    阿里云与钉钉的一体化战略因高层战略分歧明显、营收压力巨大及产品与市场错配而遇阻,最终拆分。字节跳动旗下飞书与火山引擎融合面临类似挑战,亟需解决战略统一与营销与服务体系融合问题。

    上汽与飞书达成集团层面合作
    上汽与飞书达成集团层面合作

    上汽集团与飞书达成集团层面合作,AI是促成合作的关键变量。飞书作为工作平台,能够连接人员、知识、业务数据与流程,使AI进入研发、生产等真实业务场景。飞书在汽车行业已有积累,北汽福田、东风奕派等企业通过AI应用提升了效率。上汽正筛选AI应用场景,推动规模化落地。

    飞书如何设置定时发送消息
    飞书如何设置定时发送消息

    飞书定时发送消息功能:打开聊天窗口输入内容,点击发送按钮旁箭头选择“定时发送”,设置具体时间并确认,消息进入待发送状态,到达设定时间自动发出,支持修改或取消。

    飞书多维表格怎么使用
    飞书多维表格怎么使用

    飞书多维表格的核心功能包括创建表格、设置清晰列名、数据录入、排序筛选、关联其他表格实现数据联动,以及共享协作实时编辑。掌握这些操作,可有效提升数字化办公效率,通过灵活运用实现数据高效管理与团队协作。

    飞书聊天窗口打不开如何解决
    飞书聊天窗口打不开如何解决

    飞书聊天窗口打不开,确实挺让人抓狂的——正等着回复消息呢,突然就卡住不动了。别急,这个问题多半不是什么大毛病,咱们按步骤来排查,基本都能搞定。下面这份清单,照着做就行。 飞书聊天窗口无法打开怎么办 先检查网络连接 这是最基础的一步。网络不稳或者根本没连上,聊天窗口自然加载不出来。你可以试试切换网络—

    飞书开放平台是什么
    飞书开放平台是什么

    飞书开放平台,简单来说,就是字节跳动给开发者们准备的一个官方能力入口。它把飞书内部已经打磨好的组织协同、消息通知、文档操作、身份认证这些核心能力,打包成标准化的API、Bot机器人、小程序、自定义应用等形式开放出来。你不需要从零开始造轮子,就能快速接入飞书账号体系、读取群成员列表、在飞书文档里插入表

    飞书开放平台登录入口 飞书开放平台网页版登录入口
    飞书开放平台登录入口 飞书开放平台网页版登录入口

    飞书开放平台的登录入口,其实就是 https://open.feishu.cn。这个地址承载的能力可不简单——多语言SDK集成、OAuth 2.0授权、组织架构自动同步、响应式控制台,全都打包在里面。更不用说背后还有200多个API接口、Webhook订阅、可视化限流,以及从应用到安全的一整套生命周

    飞书开放平台网页版 飞书开放平台网页版入口
    飞书开放平台网页版 飞书开放平台网页版入口

    飞书开放平台的网页版入口其实很简单:直接访问 https://open.feishu.cn 就能进入。这个地址对开发者来说,可以说是整个生态的起点——它集成了多语言SDK、可视化应用创建、内置调试环境以及实时监控能力,覆盖消息、认证、日历、文档等日常办公场景的API。更贴心的是,官方提供了中文文档、

    飞书的开放平台怎么用
    飞书的开放平台怎么用

    在飞书aPaaS里,你想快速生成一套标准Open API,让外部系统安全地调取数据或触发流程,其实根本不需要从零开始手写接口代码。只要配置一下,系统就能自动输出规范的Open API文档。 而要做这件事,你需要具备的是「应用管理员」或「开发者」角色权限,同时区分好开发环境和线上环境。配置时支持直接勾

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。