目录
我们提供了一套专区程序的示例代码,开发者可以在示例源码的基础上进行开发,再根据镜像文件配置指引制作镜像。开发者也可以先下载我们制作好的示例镜像,根据镜像文件配置指引在管理端上传配置镜像。示例源码和示例镜像可通过这里下载。
以下是该镜像的启动命令与程序配置说明。
启动命令
/bin/sh
启动参数
/usr/local/wwspecdemo/start.sh
示例程序支持应用同步发起调用sdk接口以及获取回调到专区的数据。
如果要调用某个sdk接口,需要给程序添加对应sdk接口的能力。
输入协议说明
{
"input": {
"func": "指定要处理的逻辑",
"func_req": {
}
}
}
不依赖“能力ID”,而是通过input.func
区分demo要处理的逻辑input.func
提供的能力以及对应的值,可参考demo源码demoloadsdk.py
input.func_req
为json object
,作为input.func
处理逻辑对应的协议
下面以两个能力举例说明。
输入协议
{
"input": {
"func": "sync_msg",
"func_req": {
"cursor": "RMTJID",
"token": "NGEJKGOEGJKOEGNEOAGOEGOKEGHOEEEEE",
"limit": 200
}
}
}
func
固定为sync_msg
,此时func_req
为获取会话记录对应的输入协议
输出协议
{
"errcode":0,
"errmsg":"ok",
"has_more":1,
"next_cursor":"JGNLGEHJGIE",
"msg_list":[
{
"msgid":"xxxmsgid",
"sender":{
"type":1,
"id":"woxxxxxmmgjiegjie"
},
"receiver_list": [
{
"type": 1,
"id": "woAAAAAAAAAAA"
},
{
"type": 2,
"id": "wmXXXXXXXXXXXXX"
}
],
"chatid": "wrXXXXXXXXXX",
"send_time":166666666,
"msgtype":2,
"service_encrypt_info":{
"encrypted_secret_key":"KEYAAAAAAABBBBBB",
"public_key_ver":1
}
}
]
}
输入协议
{
"input": {
"func": "do_async_job",
"func_req": {
}
}
}
func
固定为do_async_job
,此时func_req
为空
调用应用同步调用专区程序接口时,外层notify_id
传入应用接收专区通知回调的NotifyId
字段
输出协议
{
"errcode": 0,
"errmsg": "xxx",
"event_type": "chat_archive_audit_approved_single",
"timestamp": 1408091189,
"chat_archive_audit_approved": {
"userid": "xxxxxxx",
"external_userid": "zzzzz",
"chatid":"xxx"
},
"conversation_new_message": {
"token": "zzzzzzzzzzz"
},
"hit_keyword": {
"token": "xxx"
},
"auth_knowledge_base": {
"knowledge_base_id": "xxxxxxx",
"knowledge_base_name": "zzzzz"
},
"unauth_knowledge_base": {
"knowledge_base_id": "xxxxxxx",
"knowledge_base_name": "zzzzz"
},
"delete_knowledge_base": {
"knowledge_base_id": "xxxxxxx",
"knowledge_base_name": "zzzzz"
},
"chat_archive_export_finished": {
"jobid": "xxx"
}
}
程序没有出现内部错误时,不会返回errcode和errmsg
将所有需要回调的协议合并
启动命令
/usr/bin/java // 绝对路径
启动参数
1. -Dfile.encoding=UTF-8 // 必须指定JVM默认字符编码为UTF-8
2. -jar
3. /app/SpecDemo-with-dependencies.jar // 绝对路径
示例程序支持应用同步发起调用sdk接口以及获取回调到专区的数据。
如果要调用某个sdk接口,需要给程序添加对应sdk接口的能力。
如果需要将Java程序示例直接部署到专区进行调试,程序能力的注册请参照如下内容,否则请求和响应可能无法通过专区通道的校验
ability_id: invoke_sync_msg
ability_id格式:invoke_$API_NAME$
注意:Java程序示例对透传请求的处理逻辑为:将传入的能力ID截断“invoke_”前缀后,直接用于调用sdk。开发者如果需要自定义透传请求的能力ID,请额外添加自定义能力ID与sdk接口名的映射,并保证接口名合法
输入协议:
注意:Java程序示例的默认输入协议中,request_data内无需包裹一层input对象
{
"cursor": "",
"limit": 0,
"token": ""
}
输出协议:
{
"errcode":0,
"errmsg":"ok",
"has_more":1,
"next_cursor":"JGNLGEHJGIE",
"msg_list":[
{
"msgid":"xxxmsgid",
"sender":{
"type":1,
"id":"woxxxxxmmgjiegjie"
},
"receiver_list": [
{
"type": 1,
"id": "woAAAAAAAAAAA"
},
{
"type": 2,
"id": "wmXXXXXXXXXXXXX"
}
],
"chatid": "wrXXXXXXXXXX",
"send_time":166666666,
"msgtype":2,
"service_encrypt_info":{
"encrypted_secret_key":"KEYAAAAAAABBBBBB",
"public_key_ver":1
}
}
]
}
ability_id:get_callback_data
开发者如果需要自定义获取回调数据的能力ID,直接修改Java程序示例的函数AppActiveCall的对应判断逻辑即可,能力ID不涉及其他逻辑
请求必须捎带notify id,用于在专区程序内唯一标识待查询的数据
Java程序示例处理该能力的逻辑:将存储的回调事件数据原样返回,所有回调事件使用同一个能力,回调事件介绍见:专区程序接收事件通知
这里所有回调事件都要通过该能力返回企业应用,因此输出协议内需要注册所有回调事件中可能出现的字段
输入协议:
{}
输出协议:
{
"errcode":0,
"errmsg":"ok",
"event_type": "",
"timestamp": 0,
"chat_archive_audit_approved": {
"userid": "xxxxxxx",
"external_userid": "zzzzz",
"chatid":"xxx"
},
"conversation_new_message": {
"token": "zzzzzzzzzzz"
},
"hit_keyword": {
"token": "xxx"
},
"auth_knowledge_base": {
"knowledge_base_id": "xxxxxxx",
"knowledge_base_name": "zzzzz"
},
"chat_archive_export_finished": {
"jobid": "xxx"
}
}
输出协议字段解析如下:
字段 | 含义 |
---|---|
errcode | demo内部错误的错误码,默认710660,未出错时没有该字段。企业可根据需要在专区程序内自定义错误码 |
errmsg | demo内部错误的错误说明,未出错时没有该字段 |
event_type | 事件类型,各回调事件的共有字段 |
timestamp | 时间戳,各回调事件的共有字段 |
chat_archive_audit_approved | 客户同意进行聊天内容存档事件回调 |
conversation_new_message | 产生会话回调通知 |
hit_keyword | 命中关键词规则通知 |
auth_knowledge_base | 知识集管理回调 |
chat_archive_export_finished | 会话内容导出完成通知 |
启动命令
/bin/bash // 绝对路径
启动参数
/app/run.sh
示例程序支持应用同步发起调用sdk接口以及获取回调到专区的数据。
如果要调用某个sdk接口,需要给程序添加对应sdk接口的能力。
如果需要将c++程序示例直接部署到专区进行调试,程序能力的注册请参照如下内容,否则请求和响应可能无法通过专区通道的校验
ability_id: invoke_sync_msg
ability_id格式:invoke_$API_NAME$
注意:C++程序示例对透传请求的处理逻辑为:将传入的能力ID截断“invoke_”前缀后,直接用于调用sdk。开发者如果需要自定义透传请求的能力ID,请额外添加自定义能力ID与sdk接口名的映射,并保证接口名合法
输入协议:
注意:C++程序示例的默认输入协议中,request_data内无需包裹一层input对象
{
"cursor": "",
"limit": 0,
"token": ""
}
输出协议:
{
"errcode":0,
"errmsg":"ok",
"has_more":1,
"next_cursor":"JGNLGEHJGIE",
"msg_list":[
{
"msgid":"xxxmsgid",
"sender":{
"type":1,
"id":"woxxxxxmmgjiegjie"
},
"receiver_list": [
{
"type": 1,
"id": "woAAAAAAAAAAA"
},
{
"type": 2,
"id": "wmXXXXXXXXXXXXX"
}
],
"chatid": "wrXXXXXXXXXX",
"send_time":166666666,
"msgtype":2,
"service_encrypt_info":{
"encrypted_secret_key":"KEYAAAAAAABBBBBB",
"public_key_ver":1
}
}
]
}
ability_id:get_callback_data
请求必须捎带notify id,用于在专区程序内唯一标识待查询的数据
C++程序示例处理该能力的逻辑:将存储的回调事件数据原样返回,所有回调事件使用同一个能力,回调事件介绍见:专区程序接收事件通知
这里所有回调事件都要通过该能力返回企业应用,因此输出协议内需要注册所有回调事件中可能出现的字段
输入协议:
{}
输出协议:
{
"errcode":0,
"errmsg":"ok",
"event_type": "",
"timestamp": 0,
"chat_archive_audit_approved": {
"userid": "xxxxxxx",
"external_userid": "zzzzz",
"chatid":"xxx"
},
"conversation_new_message": {
"token": "zzzzzzzzzzz"
},
"hit_keyword": {
"token": "xxx"
},
"auth_knowledge_base": {
"knowledge_base_id": "xxxxxxx",
"knowledge_base_name": "zzzzz"
},
"chat_archive_export_finished": {
"jobid": "xxx"
}
}
输出协议字段解析如下:
字段 | 含义 |
---|---|
errcode | demo内部错误的错误码,默认710660,未出错时没有该字段。企业可根据需要在专区程序内自定义错误码 |
errmsg | demo内部错误的错误说明,未出错时没有该字段 |
event_type | 事件类型,各回调事件的共有字段 |
timestamp | 时间戳,各回调事件的共有字段 |
chat_archive_audit_approved | 客户同意进行聊天内容存档事件回调 |
conversation_new_message | 产生会话回调通知 |
hit_keyword | 命中关键词规则通知 |
auth_knowledge_base | 知识集管理回调 |
chat_archive_export_finished | 会话内容导出完成通知 |
程序审核通过并且部署成功后,可使用授权了数据与智能专区权限的应用使用接口应用同步调用程序。
{
"program_id": "xxx",
"ability_id": "xxx",
"request_data": "{\"input\":{\"func\":\"sync_msg\",\"func_req\":{\"cursor\":\"RMTJID\",\"token\":\"NGEJKGOEGJKOEGNEOAGOEGOKEGHOEEEEE\",\"limit\":200}}}"
}
{
"program_id": "xxx",
"ability_id": "xxx",
"notify_id": "xxx",
"request_data": "{\"input\":{\"func\":\"do_async_job\",\"func_req\":{\"notify_id\":\"NOTIFYID\"}}}"
}
"program_id": "xxx",
"ability_id": "invoke_sync_msg",
"request_data": "{\"cursor\":\"xxx\",\"token\":\"xxx\",\"limit\":200}"
"program_id": "xxx",
"ability_id": "get_callback_data",
"notify_id": "xxx",
"request_data": "{}"
"program_id": "xxx",
"ability_id": "invoke_sync_msg",
"request_data": "{\"cursor\":\"xxx\",\"token\":\"xxx\",\"limit\":200}"
"program_id": "xxx",
"ability_id": "get_callback_data",
"notify_id": "xxx",
"request_data": "{}"
背景:企业已产生新的会话事件,应用需要获取会话记录,并且请求需要捎带token以避免频率限制
上述流程可参照下图理解: