通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

接上一篇 通义千问AI模型对接飞书机器人-模型配置(2-1)

1、通过飞书机器人对接ai的在线接口

参考文档:发送 HTTP 请求

1.1 创建飞书应用

创建流程

配置http请求

 http请求地址上一篇百炼平台配置的应用地址

1.2 企业自建应用对接AI

 添加应用能力

添加权限

添加机器人权限:

im:message

im:message.group_at_msg

im:message.group_at_msg:readonly

im:message.p2p_msg

im:message.p2p_msg:readonly

im:message:send_as_bot

 

 

事件订阅
 消息监听事件

代码参考
/**
  * 用户请求入口
  * @param request
  * @param response
  * @throws Throwable
  */
@RequestMapping(value = "/ask/fileDownload")
 public void ask(HttpServletRequest request, HttpServletResponse response) throws Throwable {

         //3.1 回调扩展包提供的事件回调处理器
//监听消息 ->请求ai->回复消息
         servletAdapter.handleEvent(request, response, EVENT_DISPATCHER);
           
 }
 
 
//1. 注册消息处理器
private final EventDispatcher EVENT_DISPATCHER = EventDispatcher.newBuilder("",
                "")
        .onP2MessageReceiveV1(new ImService.P2MessageReceiveV1Handler() {
            @Override
            public void handle(P2MessageReceiveV1 event) throws Exception {
                log.info("P2MessageReceiveV1={}",Jsons.DEFAULT.toJson(event));

                String content = event.getEvent().getMessage().getContent();
                String text = JSONUtil.parseObj(content).getStr("text");
                log.info("text={}",text);


                // 获取租户 key
                String tenantKey = event.getTenantKey();
                String openId = event.getEvent().getSender().getSenderId().getOpenId();
                aiAssistantService.answer(text,tenantKey,openId);
                log.info("requestId={}",event.getRequestId());
            }
        }).onP2UserCreatedV3(new ContactService.P2UserCreatedV3Handler() {
            @Override
            public void handle(P2UserCreatedV3 event) {
                log.info("P2UserCreatedV3={}",Jsons.DEFAULT.toJson(event));
                log.info(event.getRequestId());
            }
        })
        .onP2MessageReadV1(new ImService.P2MessageReadV1Handler() {
            @Override
            public void handle(P2MessageReadV1 event) {
                log.info("P2MessageReadV1={}",Jsons.DEFAULT.toJson(event));
                System.out.println(event.getRequestId());
            }
        }).onP1MessageReadV1(new ImService.P1MessageReadV1Handler() {
            @Override
            public void handle(P1MessageReadV1 event) {
                log.info("P1MessageReadV1={}",Jsons.DEFAULT.toJson(event));
                System.out.println(event.getRequestId());
            }
        })
        .build();

//2. 注入 ServletAdapter 实例
@Autowired
private ServletAdapter servletAdapter;

//service类的方法
   @Async
    public void answer(String askStr,String tenantKey,String openId) throws Exception {
        //通过openId 获取 sessionId
        String sessionId = map.get(openId);
        log.info("askStr start={}",askStr);
        ApplicationParam param = ApplicationParam.builder()
                .apiKey("sk-*************")
                .appId("*******************")
                .prompt(askStr)
                .sessionId(sessionId)
                .build();
        log.info("param={}",JSONUtil.toJsonStr(param));
        Application application = new Application();
        ApplicationResult result = application.call(param);
        if(result.getOutput().getSessionId()!=null){
            map.put(openId,result.getOutput().getSessionId());
        }
        String text = result.getOutput().getText();
//飞书应用的秘钥,用户回复信息
               Client client = Client.newBuilder("cli_*******","j***********").build();
      
       Map<String, String> map = new HashMap<>();
         map.put("text",text);
         log.info("resp={}",JSONUtil.toJsonStr(map));

        // 发送请求,回复提问
        client.im().message().create(CreateMessageReq.newBuilder()
                        .receiveIdType(ReceiveIdTypeEnum.OPEN_ID)
                        .createMessageReqBody(CreateMessageReqBody.newBuilder()
                                .content(JSONUtil.toJsonStr(map))
                                .msgType(MsgTypeEnum.TEXT.getValue())
                                .receiveId(openId)
                                .build())
                        .build()
                , RequestOptions.newBuilder()
                        .tenantKey(tenantKey)
                        .build());

       log.info("askStr end ={}",askStr);

    }
 效果预览

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-20 10:24:06       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-20 10:24:06       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-20 10:24:06       42 阅读
  4. Python语言-面向对象

    2024-07-20 10:24:06       53 阅读

热门阅读

  1. Shell 构建flutter + Android 生成Apk

    2024-07-20 10:24:06       13 阅读
  2. 前端面试题日常练-day95 【Less】

    2024-07-20 10:24:06       14 阅读
  3. 前端TS习题

    2024-07-20 10:24:06       12 阅读
  4. 在SAP中,ME22N使用的BAPI是什么

    2024-07-20 10:24:06       17 阅读
  5. AI Native应用中的模型微调

    2024-07-20 10:24:06       18 阅读
  6. 题解/算法 {3219. 切蛋糕的最小总开销 II}

    2024-07-20 10:24:06       9 阅读
  7. web前端 Vue 框架面试120题(一)

    2024-07-20 10:24:06       13 阅读
  8. ceph进程网卡绑定逻辑

    2024-07-20 10:24:06       14 阅读
  9. 网络安全-网络安全及其防护措施12

    2024-07-20 10:24:06       12 阅读
  10. C# 结构体(Struct)

    2024-07-20 10:24:06       15 阅读
  11. Ubuntu Docker 安装

    2024-07-20 10:24:06       15 阅读
  12. protoc-gen-go-http: program not found or is not executable

    2024-07-20 10:24:06       15 阅读
  13. Isaac Lab

    2024-07-20 10:24:06       13 阅读