package com.tencent.wework; /** * @warning: 1. 不要修改成员变量名,native方法内有反射调用 * 2. 调用本地方法需保持包结构,本工具需放在包com.tencent.wework内 * 3. 不允许继承,类名和函数名均不可修改,会影响本地方法的引用,详见:javah生成本地方法头文件 */ public final class SpecSDK { /** * @description 调用本地方法后实例化的对象指针 */ private long specSDKptr = 0; /** * @usage invoke的请求 * @example "{\"limit\":1} */ private String request; public void SetRequest(String request) { this.request = request; } /** * @usage 访问上一次invoke的结果 */ private String response; public String GetResponse() { return response; } /** * @param corpid: 企业corpid,必选参数 * @param agentid: 应用id,必选参数 * @param ability_id: 能力ID,可选参数 * @param job_info: job_info,可选参数 * */ public SpecSDK(String corpId, long agentId) { specSDKptr = NewSDK1(corpId, agentId); } private native long NewSDK1(String corpId, long agentId); public SpecSDK(String corpId, long agentId, String abilityId) { specSDKptr = NewSDK2(corpId, agentId, abilityId); } private native long NewSDK2(String corpId, long agentId, String abilityId); public SpecSDK(String corpId, long agentId, String abilityId, String jobInfo) { specSDKptr = NewSDK3(corpId, agentId, abilityId, jobInfo); } private native long NewSDK3(String corpId, long agentId, String abilityId, String jobInfo); /** * @description 使用callback的请求来初始化 * @param callback_sdk: 要求IsOk()==true * @return C++内部指针,创建失败时指针仍为0,并输出错误日志 * */ public SpecSDK(SpecCallbackSDK callbackSDK) { specSDKptr = NewSDK4(callbackSDK.GetPtr()); } private native long NewSDK4(long callbackSDK); /** * @usage 在Java对象的内存回收前析构C++对象 */ @Override protected void finalize() throws Throwable { DeleteCPPInstance(specSDKptr); super.finalize(); } private native void DeleteCPPInstance(long specSDKptr); /** * @description 用于在专区内调用企业微信接口 * @param api_name 接口名 * @param request json格式的请求数据 * @param response json格式的返回数据 * @return errorcode 参考如下: * 0: 成功 * -910001: SDK没有初始化 * -910002: 没有设置请求体 * -910003: 没有设置请求的API * -910004: 在SDK成员内找不到成员"response",注意lib内有反射机制,不要修改成员变量名 * -910005: 使用未初始化的callback初始化SDK * -910006: invoke调用失败,应检查日志查看具体原因 * -910007: 响应体为空 * @note 当返回0时,表示没有网络或请求协议层面或调用方法的失败, * 调用方需继续检查response中的errcode字段确保业务层面的成功 * * @usage 当前版本sdk支持的接口列表,每个接口的具体协议请查看企业微信文档: * https://developer.work.weixin.qq.com/document/path/91201 * * +--------------------------------+--------------------------------+ * |接口名 |描述 | * |--------------------------------|--------------------------------| * |program_async_job_call_back |上报异步任务结果 | * |sync_msg |获取会话记录 | * |get_group_chat |获取内部群信息 | * |get_agree_status_single |获取单聊会话同意情况 | * |get_agree_status_room |获取群聊会话同意情况 | * |set_hide_sensitiveinfo_config |设置成员会话组件敏感信息隐藏配置| * |get_hide_sensitiveinfo_config |获取成员会话组件敏感信息隐藏配置| * |search_chat |会话名称搜索 | * |search_msg |会话消息搜索 | * |create_rule |新增关键词规则 | * |get_rule_list |获取关键词列表 | * |get_rule_detail |获取关键词规则详情 | * |update_rule |修改关键词规则 | * |delete_rule |删除关键词规则 | * |get_hit_msg_list |获取命中关键词规则的会话记录 | * |create_sentiment_task |创建情感分析任务 | * |get_sentiment_result |获取情感分析结果 | * |create_summary_task |创建摘要提取任务 | * |get_summary_result |获取摘要提取结果 | * |create_customer_tag_task |创建标签匹配任务 | * |get_customer_tag_result |获取标签任务结果 | * |create_recommend_dialog_task |创建话术推荐任务 | * |get_recommend_dialog_result |获取话术推荐结果 | * |create_private_task |创建自定义模型任务 | * |get_private_task_result |获取自定义模型结果 | * |(废弃)document_list |获取知识集列表 | * |create_spam_task |会话反垃圾创建分析任务 | * |get_spam_result |会话反垃圾获取任务结果 | * |create_chatdata_export_job |创建会话内容导出任务 | * |get_chatdata_export_job_status |获取会话内容导出任务结果 | * |spec_notify_app |专区通知应用 | * |create_program_task |创建自定义程序任务 | * |get_program_task_result |获取自定义程序结果 | * |knowledge_base_list |获取企业授权给应用的知识集列表 | * |knowledge_base_create |创建知识集 | * |knowledge_base_detail |获取知识集详情 | * |knowledge_base_add_doc |添加知识集內容 | * |knowledge_base_remove_doc |删除知识集內容 | * |knowledge_base_modify_name |修改知识集名称 | * |knowledge_base_delete |删除知识集 | * |search_contact_or_customer |员工或者客户名称搜索 | * |create_ww_model_task |创建企微通用模型任务 | * |get_ww_model_result |获取企微通用模型结果 | * |get_msg_list_by_page_id |page_id获取消息列表 | * +-----------------------------------------------------------------+ * */ public int Invoke(String apiName) { return Invoke(specSDKptr, apiName, request); } private native int Invoke(long sdk, String apiName, String request); // 静态代码块内还无法调用native日志函数,这里的日志在管理系统无法查询 static { try { Class.forName("com.tencent.wework.SpecUtil"); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }