{"_id":"@94ai/aisdk","_rev":"2-3ebb71da390b3e3d36bd1044c8bbd864","name":"@94ai/aisdk","dist-tags":{"latest":"1.1.2"},"versions":{"1.1.2":{"name":"@94ai/aisdk","version":"1.1.2","description":"94AI-弹屏SDK","bin":{"sdk-umd":"bin/index.js"},"main":"dist/94aisdk-1.1.2.cjs.js","module":"dist/94aisdk-1.1.2.esm-bundler.mjs","types":"dist/index.d.ts","scripts":{"start":"npm run dev","dev":"cross-env NODE_ENV=dev webpack -c ./webpack.umd.config.cjs --watch","qa":"cross-env NODE_ENV=qa webpack -c ./webpack.umd.config.cjs --watch","gray":"cross-env NODE_ENV=gray webpack -c ./webpack.umd.config.cjs --watch","prod":"cross-env NODE_ENV=prod webpack -c ./webpack.umd.config.cjs --watch","build:dev:umd":"cross-env NODE_ENV=dev webpack -c ./webpack.umd.config.cjs","build:gray:umd":"cross-env NODE_ENV=gray webpack -c ./webpack.umd.config.cjs","build:qa:umd":"cross-env NODE_ENV=qa webpack -c ./webpack.umd.config.cjs","build:prod:umd":"cross-env NODE_ENV=prod webpack -c ./webpack.umd.config.cjs","build:dev:cjs":"cross-env NODE_ENV=dev webpack -c ./webpack.cjs.config.cjs","build:gray:cjs":"cross-env NODE_ENV=gray webpack -c ./webpack.cjs.config.cjs","build:qa:cjs":"cross-env NODE_ENV=qa webpack -c ./webpack.cjs.config.cjs","build:prod:cjs":"cross-env NODE_ENV=prod webpack -c ./webpack.cjs.config.cjs","build:dev:esm":"cross-env NODE_ENV=dev webpack -c ./webpack.esm.config.cjs","build:gray:esm":"cross-env NODE_ENV=gray webpack -c ./webpack.esm.config.cjs","build:qa:esm":"cross-env NODE_ENV=qa webpack -c ./webpack.esm.config.cjs","build:prod:esm":"cross-env NODE_ENV=prod webpack -c ./webpack.esm.config.cjs","build:dev":"npm run build:dev:umd && npm run build:dev:cjs && npm run build:dev:esm","build:gray":"npm run build:gray:umd && npm run build:gray:cjs && npm run build:gray:esm","build:qa":"npm run build:qa:umd && npm run build:qa:cjs && npm run build:qa:esm","build":"npm run build:prod:umd && npm run build:prod:cjs && npm run build:prod:esm"},"keywords":["94ai","sdk"],"author":{"name":"Dicky_L,xccjh"},"license":"MIT","publishConfig":{"registry":"https://registry.npmjs.org","access":"public"},"devDependencies":{"@babel/core":"^7.21.4","@babel/plugin-transform-runtime":"^7.21.4","@babel/preset-env":"^7.21.4","axios":"^0.21.1","babel-loader":"^9.1.2","cross-env":"^7.0.3","json-bigint":"^1.0.0","ts-loader":"^9.4.2","typescript":"^5.0.4","webpack":"^5.79.0","webpack-cli":"^5.0.1","xmlhttprequest":"^1.8.0"},"dependencies":{"@babel/runtime-corejs3":"^7.21.0","@types/sockjs-client":"^1.5.1","sockjs-client":"1.5.1","tim-js-sdk":"^2.27.2","webstomp-client":"1.2.6"},"babel":{"presets":[["@babel/env"]],"plugins":[["@babel/plugin-transform-runtime",{"corejs":{"version":3,"proposals":true}}]]},"gitHead":"c29ca7a509637b490670f874fdf5d9bc90d8ec87","_id":"@94ai/aisdk@1.1.2","_nodeVersion":"16.19.1","_npmVersion":"8.19.3","dist":{"integrity":"sha512-A04+LHn5SiSxl8qYu2Joai66hj2amhsoRm90St0s89Veic6cbjUHmEu+sy3Ch0iRjMZCCgM3rJ90AULDN5awsw==","shasum":"a343198922a3d8116f93eb0dad588bea5770f26a","tarball":"https://registry.npmjs.org/@94ai/aisdk/-/aisdk-1.1.2.tgz","fileCount":25,"unpackedSize":6031757,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuDGZ+2svlVet0fO+emKdX8DDDzkUaAKuAN4el9iIBbQIhAIeyWTPFfGT3z0aVX6R7sz8JQcOiYKL8WJqUDX1NB9pc"}]},"_npmUser":{"name":"94ai","email":"zjh15018707394@gmail.com"},"directories":{},"maintainers":[{"name":"94ai","email":"zjh15018707394@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/aisdk_1.1.2_1700555983613_0.7357976415662473"},"_hasShrinkwrap":false}},"time":{"created":"2023-11-21T08:39:43.515Z","1.1.2":"2023-11-21T08:39:43.779Z","modified":"2024-05-24T09:10:43.494Z"},"maintainers":[{"email":"liuxiangxiang1992@gmail.com","name":"louislxx"},{"email":"zjh15018707394@gmail.com","name":"nfai"}],"description":"94AI-弹屏SDK","keywords":["94ai","sdk"],"author":{"name":"Dicky_L,xccjh"},"license":"MIT","readme":"# 概述\r\n主体功能用于来电接听前后，订阅获取关于会话内容的消息推送，实现弹屏展示通话记录内容的相关业务。\r\n\r\n旧版弹屏sdk会在坐席接听那刻一次性推送ai和用户聊天的全部消息\r\n\r\n新版弹屏sdk会在话术触发转人工后,开始不断推送ai和用户聊天的消息,以及坐席接听后和用户的聊天记录，直到用户或坐席挂断通话。\r\n\r\n一个坐席只允许一处登录，多处登录会互踢，被踢的坐席默认会定时3s尝试重新登录连接，此时如果异地登录的账号仍在线则会一直做检测能否登录，直到异地登录的账号退出，多处登录互踢的情况同理。\r\n\r\n## 安装\r\n### npm设置私库源\r\n- 参考 《获取94ai前端sdk通用流程》 密码：dbb9\r\n- 执行install命令安装@94ai/aisdk\r\n```shell\r\n$ yarn add @94ai/aisdk\r\n# or\r\n$ npm i @94ai/aisdk\r\n# or\r\n$ pnpm add @94ai/aisdk\r\n```\r\n\r\n### 获取javascript文件\r\n- 参考 《获取94ai前端sdk通用流程》 密码：dbb9\r\n- 执行`npx -y @94ai/aisdk -- sdk-umd`,之后在当前执行命令路径下获取到94aisdk-1.1.2.umd.min.js\r\n\r\n> tip 获取旧版sdk \r\n> 执行`npx -y @94ai/aisdk -- sdk-umd --old`,之后在当前执行命令路径下获取到94aisdk-1.1.1-old.umd.min.js\r\n\r\n# 使用\r\n## 初始化&销毁SDK实例\r\n\r\n### 作为npm包使用\r\n```ts\r\nimport { aiSDK } from '@94ai/aisdk' // or const { aiSDK } = require('@94ai/aisdk')\r\n\r\nexport interface UserInfo {\r\n  userId: string,\r\n  userType: string,\r\n  token: string\r\n  companyId: string\r\n  orgId: string\r\n  oldId: string\r\n  chainId: string\r\n  account:string\r\n  userName: string\r\n  userTypeName: string\r\n}\r\n\r\nexport interface SDKConfig {\r\n  corpId: string,\r\n  secretId: string,\r\n  agentId: string,\r\n  onSuccess?: Function,\r\n  onError?: Function,\r\n  onMessage?: Function,\r\n  onReconnect?: Function\r\n  onSessionEnd?: Function\r\n  onKicked?: Function\r\n}\r\n\r\nexport interface PushData {\r\n  /**\r\n   * 任务 ID\r\n   */\r\n  taskId: string\r\n  /**\r\n   * 分机号\r\n   */\r\n  extensionNumber: string\r\n  /**\r\n   * 外呼 ID\r\n   */\r\n  callid: string\r\n  /**\r\n   * 外呼 ID\r\n   */\r\n  callId: string\r\n  /**\r\n   * 外呼类型\r\n   */\r\n  callType: CallType\r\n  /**\r\n   * 意向标签\r\n   */\r\n  intentTag: string\r\n  /**\r\n   * 外呼号码\r\n   */\r\n  number: string\r\n  /**\r\n   * 号码 ID\r\n   */\r\n  numberMD5: string\r\n  /**\r\n   * 分配坐席 ID\r\n   */\r\n  agentId: number\r\n  /**\r\n   * 坐席标签\r\n   */\r\n  agentTag: string\r\n  /**\r\n   * 用户标签\r\n   */\r\n  tag: string\r\n  /**\r\n   * AI 话术 ID\r\n   */\r\n  templateId: string\r\n  chats: {\r\n    /**\r\n     * 说话内容\r\n     */\r\n    \"content\": string,\r\n    /**\r\n     * 说话时间\r\n     */\r\n    \"createTime\": string,\r\n    /**\r\n     * 说话号码\r\n     */\r\n    \"fromNumber\": string\r\n  }[]\r\n}\r\n\r\nexport type Context = SDKConfig & UserInfo\r\n\r\naiSDK.init({  // 👈 初始化SDK实例连接\r\n  secretId: '50ab02d3a42f788e6d8f7da1c01a68d7', //必填，secretID\r\n  corpId: '392f9b20cf5ff706', //必填，公司ID\r\n  agentId: '1860', //必填，坐席ID\r\n  onError(err: Error, context: Context) { // 👈 所有出错信息回调函数\r\n    console.log(err.message)\r\n  },\r\n  onSuccess(context: Context) {\r\n    console.log('注册订阅成功')\r\n  },\r\n  onKicked(context: Context) { // 👈  一个坐席只允许一处登录，多处登录会互踢，被踢的坐席默认会定时3s尝试重新登录连接，此时如果异地登录的账号仍在线则会一直做检测能否登录，直到异地登录的账号退出，多处登录互踢的情况同理。\r\n    console.log('坐席异地登录，当前被踢出') // 如果不需要重连机制可以在这里执行aiSDK.destroy()，之后如果需要手动连接请再执行aiSDK.init(param)\r\n  },\r\n  onReconnect(context: Context) { // 👈 当出现服务异常或网络异常或被踢导致连接终断，会尝试重连，重连前会回调该函数，如果不需要重连机制也可以在这里执行aiSDK.destroy()\r\n    console.log('尝试重连中...')\r\n  },\r\n  onSessionEnd(callId: string, context: Context) {  // 👈 当一个外呼会话结束会执行此回调\r\n    console.log('当前呼叫会话callId：' + callId + '已结束' )\r\n  },\r\n  onMessage(message: PushData, context: Context) {\r\n    // 来电弹屏信息回调函数  👈 根据message.callId区分不同会话,同个会话callId相同会有多次推送，一个坐席会话结束订阅推送会自动终止查询，如需提前终止查询可以执行aiSDK.stopPolling()\r\n    console.log(message)\r\n    console.log('')\r\n  },\r\n})\r\n\r\n// 如果使用的是vue,参考如下销毁，其他框架同理\r\nonUnmounted(() => {\r\n  aiSDK.destory() // 👈 销毁SDK实例&连接\r\n})\r\n\r\n```\r\n### 作为JavaScript使用\r\n```html\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n  <meta charset=\"utf-8\" />\r\n  <title>94AI-SDK Demo v1.1.1</title>\r\n</head>\r\n<body>\r\n94AI-SDK Demo\r\n<div style=\"padding: 10px\">\r\n  <div style=\"padding: 5px\">secretID secretId: <input type=\"text\" id=\"secretId\"></div>\r\n  <div style=\"padding: 5px\">公司ID corpId: <input type=\"text\" id=\"corpId\"></div>\r\n  <div style=\"padding: 5px\"> 坐席ID agentId: <input type=\"text\" id=\"agentId\"></div>\r\n  <button type=\"button\" id=\"submit\">注册</button>\r\n  <button type=\"button\" id=\"logout\">退出</button>\r\n</div>\r\n<div id=\"angent-message-container\"></div>\r\n<script src=\"94aisdk-1.1.2.umd.min.js\"></script>\r\n<script>\r\ndocument.addEventListener('DOMContentLoaded', () => {\r\n  var angentMessageContainer = document.getElementById('angent-message-container')\r\n  var secretId = document.getElementById('secretId')\r\n  var corpId = document.getElementById('corpId')\r\n  var agentId = document.getElementById('agentId')\r\n  var secretId_storage = localStorage.getItem('secretId')\r\n  var corpId_storage = localStorage.getItem('corpId')\r\n  var agentId_storage = localStorage.getItem('agentId')\r\n  // 设置默认值\r\n  secretId.value = secretId_storage ? secretId_storage : 'db4985b726d673db5db408901b873f3e'\r\n  corpId.value = corpId_storage ? corpId_storage : '17687fc0006b7248'\r\n  agentId.value = agentId_storage ? agentId_storage : '1859'\r\n  var dynamicGenerateDom = (message) => {\r\n    var container = document.createElement('div')\r\n    var agentIdShow = document.createElement('div')\r\n    var agentTag = document.createElement('div')\r\n    var callId = document.createElement('div')\r\n    var callType = document.createElement('div')\r\n    var number = document.createElement('div')\r\n    var numberMD5 = document.createElement('div')\r\n    var templateId = document.createElement('div')\r\n    var tag = document.createElement('div')\r\n    var taskId = document.createElement('div')\r\n    var hr1 = document.createElement('hr')\r\n    var hr2 = document.createElement('hr')\r\n    var chatsLog = document.createElement('div')\r\n    agentIdShow.innerHTML = `<span>agentId:  ${ message.agentId }</span>`\r\n    agentTag.innerHTML = `<span>agentTag:  ${ message.agentTag }</span>`\r\n    callId.innerHTML = `<span>callId:  ${ message.callId }</span>`\r\n    callType.innerHTML = `<span>callType:  ${ message.callType }</span>`\r\n    number.innerHTML = `<span>number:  ${ message.number }</span>`\r\n    numberMD5.innerHTML = `<span>numberMD5:  ${ message.numberMD5 }</span>`\r\n    templateId.innerHTML = `<span>templateId:  ${ message.templateId }</span>`\r\n    tag.innerHTML = `<span>tag:  ${ message.tag }</span>`\r\n    taskId.innerHTML = `<span>taskId:  ${ message.taskId }</span>`\r\n    chatsLog.innerHTML = `<span>chatsLog:  ${ JSON.stringify(message.chats) }</span>`\r\n    container.id = message.callId\r\n    container.appendChild(agentIdShow)\r\n    container.appendChild(agentTag)\r\n    container.appendChild(callId)\r\n    container.appendChild(callType)\r\n    container.appendChild(number)\r\n    container.appendChild(numberMD5)\r\n    container.appendChild(templateId)\r\n    container.appendChild(tag)\r\n    container.appendChild(taskId)\r\n    container.appendChild(hr1)\r\n    container.appendChild(chatsLog)\r\n    container.appendChild(hr2)\r\n    angentMessageContainer.appendChild(container)\r\n  }\r\n  var modifyDialogueRecord = (conversation, message) => {\r\n    conversation.children[0].innerHTML = `<span>agentId:  ${ message.agentId }</span>`\r\n    conversation.children[1].innerHTML = `<span>agentTag:  ${ message.agentTag }</span>`\r\n    conversation.children[2].innerHTML = `<span>callId:  ${ message.callId }</span>`\r\n    conversation.children[3].innerHTML = `<span>callType:  ${ message.callType }</span>`\r\n    conversation.children[4].innerHTML = `<span>number:  ${ message.number }</span>`\r\n    conversation.children[5].innerHTML = `<span>numberMD5:  ${ message.numberMD5 }</span>`\r\n    conversation.children[6].innerHTML = `<span>templateId:  ${ message.templateId }</span>`\r\n    conversation.children[7].innerHTML = `<span>tag:  ${ message.tag }</span>`\r\n    conversation.children[8].innerHTML = `<span>taskId:  ${ message.taskId }</span>`\r\n    conversation.children[10].innerHTML = `<pre>chatsLog:  ${ JSON.stringify(message.chats, null, 4) }</pre>`\r\n  }\r\n  submit.onclick = () => {\r\n    // 保存输入的id信息\r\n    localStorage.setItem('secretId', secretId.value)\r\n    localStorage.setItem('corpId', corpId.value)\r\n    localStorage.setItem('agentId', agentId.value)\r\n    var aiSDKObject = {\r\n      // 开发环境\r\n      secretId: secretId.value, // 必填，secretID\r\n      corpId: corpId.value, // 必填，公司ID\r\n      agentId: agentId.value, // 必填，坐席ID\r\n      onError(err, context) { // 👈 所有出错信息回调函数\r\n        console.log(err.message)\r\n      },\r\n      onSuccess(context) {\r\n        console.log('注册订阅成功')\r\n      },\r\n      onKicked(context) { // 👈 一个坐席只允许一处登录，多处登录会互踢，被踢的坐席默认会定时3s尝试重新登录连接，此时如果异地登录的账号仍在线则会一直做检测能否登录，直到异地登录的账号退出，多处登录互踢的情况同理。\r\n        console.log('坐席异地登录，当前被踢出') // 如果不需要重连机制可以在这里执行aiSDK.destroy()，之后如果需要手动连接请再执行aiSDK.init(param)\r\n      },\r\n      onReconnect(context) { // 👈 当出现服务异常或网络异常或被踢导致连接终断，会尝试重连，重连前会回调该函数，如果不需要重连机制也可以在这里执行aiSDK.destroy()，，之后如果需要手动连接请再执行aiSDK.init(param)\r\n        console.log('尝试重连中...')\r\n      },\r\n      onSessionEnd(callId, context) {  // 👈 当一个【外呼会话结束】时会执行此回调,可以用来执行【销毁】 挂载到页面已结束的会话记录\r\n        console.log('当前呼叫会话callId：' + callId + '已结束')\r\n      },\r\n      // 来电弹屏信息回调函数\r\n      onMessage(message, context) {\r\n        const conversation = document.getElementById(message.callId)\r\n        if (conversation) {// 如果是同一会话，则更新\r\n          modifyDialogueRecord(conversation, message)\r\n        } else { // 如果是不同会话则创建\r\n          dynamicGenerateDom(message)\r\n        }\r\n      },\r\n      // 呼叫中\r\n      onCalling(callbackData, context) {\r\n        console.log('===============呼叫中start报文===============')\r\n        console.log('callbackData:' + callbackData)\r\n        console.log(callbackData)\r\n        console.log('context:')\r\n        console.log(context)\r\n        console.log('===============呼叫中end报文===============')\r\n      },\r\n      // 转接人工\r\n      onEavesdrop(callbackData, context) {\r\n        console.log('===============转接人工start报文===============')\r\n        console.log('callbackData:' + callbackData)\r\n        console.log(callbackData)\r\n        console.log('context:')\r\n        console.log(context)\r\n        console.log('===============转接人工end报文===============')\r\n      },\r\n      // 接听\r\n      onAnswer(callbackData, context) {\r\n        console.log('===============接听start报文===============')\r\n        console.log('callbackData:' + callbackData)\r\n        console.log(callbackData)\r\n        console.log('context:')\r\n        console.log(context)\r\n        console.log('===============接听end报文===============')\r\n      },\r\n      // 挂断\r\n      onHangup(callbackData, context) {\r\n        console.log('===============挂断start报文===============')\r\n        console.log('callbackData:' + callbackData)\r\n        console.log(callbackData)\r\n        console.log('context:')\r\n        console.log(context)\r\n        console.log('===============挂断end报文===============')\r\n      }\r\n    }\r\n    aiSDK.init(aiSDKObject) // 初始化SDK\r\n  }\r\n  logout.onclick = () => {\r\n    aiSDK.destroy()\r\n  }\r\n})\r\ndocument.addEventListener('unload', () => {\r\n  aiSDK.destroy()\r\n})\r\n</script>\r\n</body>\r\n</html>\r\n```\r\n\r\n### secretId（必填）\r\n\r\n   类型：string\r\n\r\n   由 94AI 运营提供\r\n\r\n### corpId（必填）\r\n\r\n   类型：string\r\n\r\n   由 94AI 运营提供\r\n\r\n### sid（必填）\r\n\r\n   类型：string\r\n\r\n   管理员账号登录 94AI 决策平台，进入坐席管理列表页，查看坐席 ID\r\n\r\n## 参数说明\r\n\r\n### onSuccess(context)\r\n返回值：void\r\n### onError(err,context)\r\n返回值：void\r\n\r\n| 参数名 | 中文名   | 类型   | 必填 | 说明     |\r\n| ------ | -------- | ------ | ---- | -------- |\r\n| err.message    | 错误信息 | String | Y    | 例：<br>秘钥错误!<br>企业不存在或者accessToken不存在!<br>坐席不存在! |\r\n### onReconnect(context)\r\n返回值：void\r\n### onKicked(context)\r\n返回值：void\r\n### onSessionEnd(callId, context)\r\n返回值：void\r\n### onMessage(msg,context)\r\n返回值：void\r\n\r\n\r\n| 参数名     | 中文名      | 类型   | 必填 | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                            |\r\n| ---------- | ----------- | ------ | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\r\n| msg.agentId    | 分配坐席 ID | Number | Y    | 分配坐席 ID                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\r\n| msg.agentTag   | 坐席标签    | String | Y    | 建议填写坐席在贵司业务系统唯一标识，用于查询对应 agentId；可以为空。                                                                                                                                                                                                                                                                                                                                                                                            |\r\n| msg.callId     | 外呼 ID     | String | Y    | 例：9b2eb6b8-7a27-4357-b5ec-104450086e24                                                                                                                                                                                                                                                                                                                                                                                                                        |\r\n| msg.callType   | 外呼类型    | Number | Y    | 1001：坐席-人工外呼<br>1002：坐席-AI 外呼-不转人工<br>1003：坐席-AI 外呼-接通转人工<br>1004：坐席-AI 外呼-智能转人工<br>2001：批量-预测外呼<br>2002：批量-AI 外呼-不转人工<br>2003：批量-AI 外呼-接通转人工<br>2004：批量-AI 外呼-智能转人工<br>2005：批量-语音通知                                                                                                                                                                                             |\r\n| msg.number     | 外呼号码    | String | Y    | 外呼号码，需要根据后台设置，控制是否脱敏                                                                                                                                                                                                                                                                                                                                                                                                                        |\r\n| msg.numberMD5  | 号码 ID     | String | Y    | 外呼号码 ID                                                                                                                                                                                                                                                                                                                                                                                                                                                     |\r\n| msg.templateId | AI 话术 ID  | Number | Y    | 外呼的话术模板 ID，可以为空                                                                                                                                                                                                                                                                                                                                                                                                                                     |\r\n| msg.tag        | 用户标签    | String | Y    | 用户标签,最多 50 个字符                                                                                                                                                                                                                                                                                                                                                                                                                                         |\r\n| msg.taskId     | 任务 ID     | String | Y    | 决策系统中的任务编号                                                                                                                                                                                                                                                                                                                                                                                                                                            |\r\n| msg.chats      | 对话记录    | Array  | Y    | 聊天记录，可以为空<br>例：[{<br>\"fromNumber\":\"0\",<br>\"content\": \"你好，请问您是王小帅吗？\",<br>\"createTime\": \"2019-01-09 14:14:19\"<br>},<br>{<br>\"fromNumber\":\"7945bd83237335e5376ff44d62e4f0ae\",<br>\"content\": \"嗯\",<br>\"createTime\": \"2019-01-09 14:14:20\"<br>},<br>{<br>\"fromNumber\":\"0\",<br>\"content\": \"您在九四平台有一笔贷款，本期应还金额 100 元，已经逾期 1 天了，请问您今天晚上 12 点之前能完成还款吗？\",<br>\"createTime\": \"2019-01-09 14:14:21\"<br>}] |\r\n\r\n### chats\r\n\r\n| 参数名     | 中文名   | 类型   | 必填 | 说明                               |\r\n| ---------- | -------- | ------ | ---- | ---------------------------------- |\r\n| content    | 说话内容 | String | Y    | 说话内容                           |\r\n| createTime | 说话时间 | String | Y    | 说话时间，格式:2019-01-09 14:14:19 |\r\n| fromNumber | 说话号码 | String | Y    | 说话号码，其中 0 为机器人          |\r\n\r\n> Demo:\r\n\r\n```json\r\n{\r\n    \"number\": \"13661634186\",\r\n    \"callId\": \"1\",\r\n    \"numberMD5\": \"md4\",\r\n    \"templateId\": 1,\r\n    \"agentTag\": \"agent tag\",\r\n    \"agentId\": 1,\r\n    \"callType\": 1,\r\n    \"taskId\": \"1\",\r\n    \"tag\": \"tag\",\r\n    \"chats\": [\r\n      {\r\n        \"content\": \"hello world906\",\r\n        \"createTime\": \"2021-8-5 19:39:03\",\r\n        \"fromNumber\": \"136616325478\"\r\n      },\r\n      {\r\n        \"content\": \"hello world559\",\r\n        \"createTime\": \"2021-8-5 19:39:03\",\r\n        \"fromNumber\": \"136616325478\"\r\n      },\r\n      ...\r\n    ]\r\n  }\r\n}\r\n```\r\n\r\n\r\n\r\n","readmeFilename":"README.md"}