Skip to content

解析表单

  • 输入节点 表单数据结构
  • 数据
json
{
    "answer": "",
    "answerContentType": "FORM",
    "answerType": "FORM",
    "module": "robot",
    "messageId": "7f202ab4f39a41de9feb70e526662712",
    "qid": 0,
    "sseStop": false,
    "option": 0,
    "conversationId": "0cf7ba736113ff71dccb0e686f6e23e7250527",
    "communicateType": "DATA",
    "time": 1747793833412,
    "robot": {
        "scene": 0,
        "subject": "",
        "spage": 1
    },
    "microApps": [],
    "isTransfer": 0,
    "mobileProperties": {
        "type": "FORM",
        "content": "{\"schema\":[{\"description\":\"asdasdasd\",\"fieldType\":[\"Boolean\"],\"id\":\"b2ecf041-7e0f-478b-b0f3-71504e39b271\",\"name\":\"aaaa\",\"required\":true,\"type\":\"Boolean\",\"value\":\"\"},{\"description\":\"dsadasdasd\",\"fieldType\":[\"File\",\"PPT\"],\"id\":\"f2f0b6cf-9365-4044-92f8-8a395772c8f9\",\"name\":\"bbbb\",\"required\":true,\"type\":\"File<PPT>\"}],\"status\":true}",
        "webNum": 0,
        "isSearchLoading": false
    },
    "learnEnable": false,
    "sensitive": 0,
    "origin": "TASK",
    "voicePromptDisable": false,
    "knowledgeGraph": false,
    "feedbackStatus": 0,
    "systemMsg": false
}
  • mobileProperties中
json
{
  "schema": [
    {
      "description": "asdasdasd",
      "fieldType": [
        "Boolean"
      ],
      "id": "b2ecf041-7e0f-478b-b0f3-71504e39b271",
      "name": "aaaa",
      "required": true,
      "type": "Boolean",
      "value": ""
    },
    {
      "description": "dsadasdasd",
      "fieldType": [
        "File",
        "PPT"
      ],
      "id": "f2f0b6cf-9365-4044-92f8-8a395772c8f9",
      "name": "bbbb",
      "required": true,
      "type": "File<PPT>"
    }
  ],
  "status": true
}

在第三方业务方中, 需要根据表单的结构信息进行渲染

  1. schema 为当前表单的结构信息
  • id 为当前字段的唯一标识
  • name 为当前字段的名称
  • type 为当前字段的类型 如果是多个类型, 则使用<连接>, 即泛型的格式, 例如 Array<String>
  • fieldType 为当前字段的类型, 可以为多个类型, 当为多个类型时, 表示当前字段为多选
  • required 为当前字段是否为必填项
  • description 为当前字段的描述
  • value 为当前字段的值, 如字段是文件类型, 则value为文件的objectId, 如果是数组文件类型, 则 value 为文件id的数组 [objectId1, objectId2, ...]
  1. status表示为当前表单的状态
  • true 代表当前表单为可用状态
  • false代表当前表单为不可用状态, 即不可编辑

: 在第三方业务中 status字段需要根据本身业务进行维护, 一般都是在提交表单数据的时候对status字段进行false赋值并且存入当前消息

提交表单

  1. 提交表单数据
json
{
  "data": [
    {
      "description": "asdasdasd",
      "fieldType": [
        "Boolean"
      ],
      "id": "b2ecf041-7e0f-478b-b0f3-71504e39b271",
      "name": "aaaa",
      "required": true,
      "type": "Boolean",
      "value": true
    },
    {
      "description": "dsadasdasd",
      "fieldType": [
        "File",
        "PPT"
      ],
      "id": "f2f0b6cf-9365-4044-92f8-8a395772c8f9",
      "name": "bbbb",
      "required": true,
      "type": "File<PPT>",
      "value": "5a8997e1cef09c7003a982e40b47ce59"
    }
  ]
}

: 这里提交的表单数据就是在原结构数据不动的情况下把每一项的值放到value中即可 2. SSE提交的整体数据

json
{
  "robotUid": "68655758",
  "uid": "68655758",
  "question": {
    "content": "{\"data\":[{\"description\":\"asdasdasd\",\"fieldType\":[\"Boolean\"],\"id\":\"b2ecf041-7e0f-478b-b0f3-71504e39b271\",\"name\":\"aaaa\",\"required\":true,\"type\":\"Boolean\",\"value\":true,\"label\":\"aaaa\",\"placeholder\":\"请输入...\",\"rules\":[{\"required\":true,\"message\":\"aaaa不能为空\"}]},{\"description\":\"dsadasdasd\",\"fieldType\":[\"File\",\"PPT\"],\"id\":\"f2f0b6cf-9365-4044-92f8-8a395772c8f9\",\"name\":\"bbbb\",\"required\":true,\"type\":\"File<PPT>\",\"label\":\"bbbb\",\"placeholder\":\"请输入...\",\"rules\":[{\"required\":true,\"message\":\"bbbb不能为空\"}],\"suffix\":[\".ppt\",\".pptx\"],\"value\":\"5a8997e1cef09c7003a982e40b47ce59\",\"valueDetail\":[{\"name\":\"111.pptx\",\"size\":34984}]}]}"
  },
  "appId": "10008361",
  "extParams": "[{\"name\":\"keepHtml\",\"value\":\"false\"},{\"name\":\"realIp\",\"value\":\"0:0:0:0:0:0:0:1\"}]",
  "robotId": "0dd77bbe282d4fcab141e29d27bd53fe"
}

: 其实提交的数据本身就是个序列化后的json对象, 基本上就是把渲染的表单的数据schema中的value值进行填写, 最后把整体的schema数组放到了 data属性上, 然后在提交

流程总结

  1. 接收到表单消息, 去除数据, 进行渲染 表单
  2. 提交表单数据, 进行数据校验, 校验通过, 将status字段置为false, 如果业务方自身会记录消息记录, 需要把表单所在的消息中的status字段置为false, 并将表单数据存入消息记录中

最近更新: