# srt-ipc-client **Repository Path**: panshangqi/srt-ipc-client ## Basic Information - **Project Name**: srt-ipc-client - **Description**: 工控机客户端 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-12-15 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # electron_whiteboard #### 介绍 {**以下是 Gitee 平台说明,您可以替换此简介** Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} #### 软件架构 软件架构说明 node: 12.16.3 和 electron@10.4.2 严格对应:node node-gyp编译的.node文件 可以在electron 的node环境中使用 安装 asar@3.1.0​​: ``` npm i -g asar@3.1.0 ``` [通过 CMD(命令提示符)运行(推荐)优势​​:CMD 无脚本执行策略限制,直接绕过问题] asar extract .\app.asar ./unpack ``` client/ ├── **package_base/** # 基础层(打包为 base.asar) │ ├── node_modules/ # 仅核心依赖(http/extra-zip) │ │ ├── http/ # 精简版 HTTP 库(如 axios 或 node-fetch) │ │ └── extra-zip/ # 压缩解压库 │ ├── core/ # 核心运行时逻辑 │ │ ├── update.js # 增量更新逻辑 │ │ └── module-loader.js # 动态加载 deps.asar/app.asar │ └── package.json # 声明依赖与入口(main: core/main.js) │ ├── **package_deps/** # 依赖层(打包为 deps.asar) │ ├── node_modules/ # 所有业务依赖(如 vue、sqlite3) │ └── package.json # 声明业务依赖(无入口文件) │ ├── **package_exe/** # 执行层(打包为 exe.asar) │ ├── node_modules/ # 所有业务依赖(如 vue、sqlite3) │ └── package.json # 声明业务依赖(无入口文件) │ ├── **src/** # 应用层(打包为 app.asar) │ ├── src/ # 业务代码(主进程 + 渲染进程) │ │ ├── main/ # 主进程代码 │ │ └── renderer/ # 渲染进程代码(Vue/React 项目) │ └── package.json # 声明业务入口(main: src/main/index.js) │ ├── **scripts/** │ └── pack.js # 分层打包脚本(见下文) │ └── package.json # 根目录配置(构建命令/全局依赖) ``` #### 安装教程 1. npm install --global --production windows-build-tools 2. npm install --global node-gyp@6.1.0 3. npm install #### electron_main_delegate.cc(254)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180. 1)添加 --no-sandbox 参数(最简单) ``` # 在启动命令后添加 --no-sandbox your_app --no-sandbox # 例如 VSCode: code --no-sandbox . # 例如 Electron 应用: electron . --no-sandbox ``` 2)设置环境变量(针对特定应用) ``` # 临时设置 export ELECTRON_DISABLE_SANDBOX=1 your_app # 或永久添加到 ~/.bashrc echo 'export ELECTRON_DISABLE_SANDBOX=1' >> ~/.bashrc source ~/.bashrc ``` #### ffmpeg静态资源包 https://ffmpeg.org/download.html #### 使用说明 1. cd SRTBoard && git pull 前端项目 2. cd client && npm run update 更新前端打包到client下 3. npm run start_mac macos下运行 4. npm run start (window)下运行 #### MacOS打包:如果遇到python得问题 修改 Electron Builder 源码(临时方案)​​ 若环境变量无效,直接修改依赖模块的源码: 找到文件:node_modules/dmg-builder/out/dmg.js 搜索 /usr/bin/python 替换为你的 Python 2.7 路径(如 /usr/local/bin/python2.7)。 ​​注意​​:需重装依赖后需再次修改,适合临时调试。 #### 版本 3.1.1 静安项目 3.2.13 机器人-指令集,课程1.5项目 3.2.30 授课大屏-指令集新增 #### 缓存路径 需要在缓存路径中创建domain.ini 内容 ``` [server] # DEV TEST PRODUCT env=TEST ``` #### appData-当前用户的应用数据文件夹,默认对应: ``` %APPDATA% Windows 中 $XDG_CONFIG_HOME or ~/.config Linux 中 ~/Library/Application Support macOS 中 ``` #### 解决方案Electron安装下载慢 ``` ELECTRON_MIRROR=https://registry.npmmirror.com/electron/ npm install electron@10.4.2 ELECTRON_MIRROR=https://repo.huaweicloud.com/electron/ npm install electron@10.4.2 https://github.com/electron/electron/releases/tag/v10.4.2 下载安装包: Linux:$XDG_CACHE_HOME或~/.cache/electron/ 苹果系统:~/Library/Caches/electron/ Windows:$LOCALAPPDATA/electron/Cache或~/AppData/Local/electron/Cache/ npm i electron@10.4.2 在node_module 下创建出electron vim install.js 在install.js文件中,找到负责下载Electron的部分(通常是downloadArtifact方法),并将其注释掉或修改为从本地压缩包解压的函数(如extractFile)。确保提供正确的本地压缩包路径,如electron-v10.4.2-win32-x64.zip。 extractFile('~/Library/Caches/electron/electron-v10.4.2-win32-x64.zip') 运行node install.js 即可 ``` #### 解决方案npm install electron安装下载失败 ``` 1. 设置 Electron 镜像源(国内用户推荐) npm config set electron_mirror "https://npmmirror.com/mirrors/electron/" 2. 重新安装 npm install electron@10.4.2 --save-dev 3. 验证安装 npx electron -v 如果还不行 # 跳过自动下载 ELECTRON_SKIP_BINARY_DOWNLOAD=1 npm install # 然后手动下载对应版本 npx electron-download --version=13.6.9 --platform=win32 --arch=x64 ``` #### 解决window10 Electron build打包无法下载的问题 ``` 1. 下载:https://repo.huaweicloud.com/electron/10.4.2/ 找到SHASUMS256.txt 和 electron-v10.4.2-win32-ia32.zip 这俩文件放到 %LOCALAPPDATA%\electron\Cache 注意:zip无需解压,SHASUMS256.txt必须要有 2. 下载:https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.3.2/nsis-3.0.3.2.7z 放到Window路径:%LOCALAPPDATA%\electron-builder\Cache\nsis 创建 nsis-3.0.3.2目录,把nsis-3.0.3.2.7z解压到nsis-3.0.3.2 满足 %LOCALAPPDATA%\electron-builder\Cache\nsis\nsis-3.0.3.2 路径下有 ├── NSIS.exe ├── makensis.exe ├── makensis.exe ├── elevate.exe 等等 3. 下载https://github.com/electron-userland/electron-builder-binaries/releases/download/winCodeSign-2.5.0/winCodeSign-2.5.0.7z 放到Window路径:%LOCALAPPDATA%\electron-builder\Cache\winCodeSign 创建winCodeSign-2.5.0目录,把 winCodeSign-2.5.0.7z 解压到winCodeSign-2.5.0 满足 %LOCALAPPDATA%\electron-builder\Cache\winCodeSign\winCodeSign-2.5.0 路径下有 %LOCALAPPDATA%\electron-builder\Cache\winCodeSign\winCodeSign-2.5.0 路径下有 ├── rcedit-ia32.exe ├── rcedit-x64.exe ├── windows-10 ├── linux 等等 ``` #### 解决Ubuntu 打包经常失败的问题 ##### 问题1 ``` 1 网络检测工具 • electron-builder version=21.2.0 os=5.10.120-tegra - • description is missed in the package.json appPackageFile=/opt/sites/srt-ipc-client/client/package_base/package.json | • writing effective config file=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.31/builder-effective-config.yaml • skipped dependencies rebuild reason=npmRebuild is set to false • packaging platform=linux arch=arm64 electron=10.4.2 appOutDir=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.31/linux-arm64-unpacked - ⨯ cannot resolve https://npmmirror.com/mirrors/electron/10.4.2/electron-v10.4.2-linux-arm64.zip: status code 404 解决方案: export ELECTRON_MIRROR="https://mirrors.huaweicloud.com/electron/" export ELECTRON_CUSTOM_DIR=v10.4.2 ``` ##### 问题2 ``` • electron-builder version=21.2.0 os=5.10.120-tegra - • description is missed in the package.json appPackageFile=/opt/sites/srt-ipc-client/client/package_base/package.json | • writing effective config file=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/builder-effective-config.yaml • skipped dependencies rebuild reason=npmRebuild is set to false • packaging platform=linux arch=arm64 electron=10.4.2 appOutDir=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/linux-arm64-unpacked / • building target=AppImage arch=arm64 file=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/srt-ipc-client_v1.0.37_linux_arm64.AppImage - • building target=deb arch=arm64 file=/opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/srt-ipc-client_v1.0.37_linux_arm64.deb | ⨯ cannot execute cause=exit status 1 errorOut=/root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin/ruby: line 6: /root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin.real/ruby: cannot execute binary file: Exec format error /root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin/ruby: line 6: /root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin.real/ruby: Success command=/root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/fpm -s dir --force -t deb -d libgtk-3-0 -d libnotify4 -d libnss3 -d libxss1 -d libxtst6 -d xdg-utils -d libatspi2.0-0 -d libuuid1 -d libappindicator3-1 -d libsecret-1-0 --deb-compression xz --architecture arm64 --name srt-ipc-client --after-install /tmp/t-zZu6em/0-after-install --after-remove /tmp/t-zZu6em/1-after-remove --description ' ' --version 1.0.37 --package /opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/srt-ipc-client_v1.0.37_linux_arm64.deb --maintainer 'Your Name ' --url https://your-project-homepage.com --vendor 'Your Name ' --license ISC /opt/sites/srt-ipc-client/client/build/linux_arm64_v1.0.37/linux-arm64-unpacked/=/opt/srt-ipc-client /opt/sites/srt-ipc-client/client/scripts/build-resources/icon.png=/usr/share/icons/hicolor/0x0/apps/srt-ipc-client.png /tmp/t-zZu6em/2-srt-ipc-client.desktop=/usr/share/applications/srt-ipc-client.desktop workingDir= ExecError: /opt/sites/srt-ipc-client/client/package_base/node_modules/app-builder-bin/linux/arm64/app-builder exited with code ERR_ELECTRON_BUILDER_CANNOT_EXECUTE at ChildProcess. (/opt/sites/srt-ipc-client/client/package_base/node_modules/builder-util/src/util.ts:239:14) at Object.onceWrapper (events.js:417:26) at ChildProcess.emit (events.js:310:20) at maybeClose (internal/child_process.js:1021:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5) { exitCode: 2, alreadyLogged: true, code: 'ERR_ELECTRON_BUILDER_CANNOT_EXECUTE' ``` #### Ubuntu打包,需要安装fpm ``` # 1. 更新包列表 sudo apt update # 2. 安装 fpm 及其依赖(需要 Ruby 环境) sudo apt install ruby ruby-dev rubygems build-essential -y # 3. 通过 gem 安装 fpm sudo gem install fpm 如果安装没有动静,则需要换一下源 移除默认源 gem sources --remove https://rubygems.org/ 换成国内源 gem sources --add https://mirrors.tuna.tsinghua.edu.cn/rubygems export USE_SYSTEM_FPM="true" # 4. 验证安装 fpm --version ``` #### 兼容 1. window10支持透明,win7 实现不了的解决方案: win7的电脑需要桌面-》右键个性化-》设置主题为 aero主题,窗口颜色设置支持透明才可以。如果默认主题是不支持窗口透明化的。 报错异常: 2. 网络异常,下载不了东西,报错信息 3. 进程间通信:字节大小 #### 打点 前端打点: window.Logging({cmd, data: {}}) ### 消息通信 #### 授课大屏和机器人mqtt通信 ``` 前提:room_id 房间号,client_id: 客户端的设备唯一标识 countdown GET接口为: https://teacherclass-dev.3ren.cn/srtclass/room/create?client_id=67aae8c867e44346220d96fb response => { room_id: 123456, token: token, subscribe_topic: 'srt-class/room/{room_id}/client_id/{client_id}/R2T', 需要订阅,消费的主题 relay_topic: 'srt-class/room/{room_id}/client_id/{client_id}/relay', 消息发送给服务端指定的topic "ping_topic": "srt-class/room/104730/client_id/67172a48b9b353107f99b8f1/ping", // 心跳检测消息发送给服务端指定的topic, } 机器人输入这个6位数的房间号,并调用一个http GET接口, 获取token,并订阅对应的主题 GET接口为: https://teacherclass-dev.3ren.cn/srtclass/room/robot/detail?room_id=123456&client_id=aae8c867e4434622020d96fb response => { "subscribe_topic": "srt-class/room/104730/client_id/67172a48b9b353107f99b8f1/T2R", //需要订阅,消费的主题 "relay_topic": "srt-class/room/104730/client_id/67172a48b9b353107f99b8f1/relay", //消息发送给服务端指定的topic "ping_topic": "srt-class/room/104730/client_id/67172a48b9b353107f99b8f1/ping", // 心跳检测消息发送给服务端指定的topic, "token": "67ac5198f43d293d0b07da5d", "room_id": "104730", "mqtt_host":"", "mqtt_port": "", "username": "mqtt用户名", "password": "mqtt密码", } 房间号RoomID:{room_id} 动态数字 授课大屏 T ,订阅主题: 'srt-class/room/{room_id}/client_id/{client_id}/R2T', 发送消息至 'srt-class/room/{room_id}/client_id/{client_id}/relay' 机器人 R, 订阅主题: 'srt-class/room/{room_id}/client_id/{client_id}/T2R', 发送消息至 'srt-class/room/{room_id}/client_id/{client_id}/relay' 消息体: { token: token, source: '', //来源 授课大屏 TeachingScreen 机器人 Robot room_id: room_id, //房间号 client_id: //客户端,机器人的唯一标识ID, data: { //具体的消息内容 event: '', //事件类型, 1.0 ping 1.1、wps--办公软件操作指令. 1.2、link--打开链接指令* 1.3、broadcast--语音播报指令 1.4、text--推送显示消息指令 1.5、draw--点名指令 1.6、countdown--计时指令 1.7、class--课程状态切换指令* 1.8、robot_connected--机器人已连接指令* 1.9、picture 图片* 2.0、package 指令包* 2.1、fixed_text 多行文本,语音播报-触发机器人播报 2.2、agent 智能体 2.3、await 等待多少秒 2.4、speak 机器人说话 2.5、record 提问场景机器人录音 2.6、speakstream 提问场景机器人说话流式播放 2.7、aitool #AI工具(文生文,文生图,打开/关闭) type: 'response' 消息反馈, 'trigger' //主动触发 message_id: '', 消息ID status: "success" / "error". 比如wps,是否打开成功,失败 , error_message: '', ...其他字段 extra: { //wps wps_material_id:素材ID, wps_type: 'docx', 'xlsx', 'pdf',,, wps_page_num: 1, //页码,从1 开始, type=ppt的时候需要 wps_cmd: 'open', //cmd 'close'关闭 'change'翻页 'open' 打开 wps_total_page_num: 10, //总页数 //link: link_url: ''文生图,文生文 link_type: 'text2text', //文生文,文生图 link_title: '', //标题 //broadcast broadcast_cmd: 'stop' // pause 暂停播报,play 开始播报(针对播报的按钮状态) broadcast_page_num: 1, broadcast_material_id, //text text_content: '', text_done: true, true文本完结,false文本未完结 //draw: draw_type: 'group', 'random', draw_count: 1, 学生数量 //countdown countdown_seconds: 400, countdown_status: 'start', //'start'开始 'end' 结束 //class: //robot_connected: 默认下课 class_cmd: 'close', //cmd 'close'关闭 'change': 可是变化,三个id ,class_id变化了都给你发 class_id: ''班级ID class_lesson_id: ''课时ID class_material_id,: ''当前ppt素材id class_page_num,: ''当前ppt页码 picture_list: [{"url":"", "desc":""},{"url":"", "desc":""}] package_title: '', fixed_text_content: '多行文本内容' agent_id: '', //智能体ID agent_name: '', //智能体Name await_second: 10 //10秒 /*********************************/ speak_cmd: 'start', 'end', speak_content: '', //播放的内容 speak_biz_id: '' // start的时候发给机器人, 机器人在接收到end或者主动结束发送end的时候把这个字段带过来, 如果想流式,不打断,就发同一个的 record_cmd: string //'start', 'end' 'update' record_content: string //'' response的时候机器人把record_content发过来 record_student_id: string //学生ID record_biz_id: '' // 录音的start的时候发给机器人, 机器人在接收到end或者主动结束发送end的时候把这个字段带过来 /********************************/ aitool_cmd: '', //open 新增ai互动工具,close 关闭ai互动工具 update 数据更新 aitool_title: '', //例如 文生图1,文生图2 智能体调试1,智能体调试2 aitool_id: '', // 窗口ID, 命名方式: `text2text_${new Date().getTime()}`. `text2image_${new Date().getTime()}` aitool_type: '', //text2text 文生文(智能体调试) text2image 文生图 // 大屏 -> 机器人 aitool_teachingscreen_data: { status: "", //doing 传输中,done 结束, error 失败 stream_result: "", //流式AI结果,增量,大屏同步给机器人的 }, // 机器人->大屏 aitool_robot_data: { status: "" //doing 传输中,done 传输结束, cancel 取消生成, close 关闭 prompt: "", //提示词 (机器人给大屏的)(全量数据) input: "", //输入内容(只有文生文需要)(机器人给大屏的)(全量数据) } } } } MQTT服务端 - :// 订阅动态主题 const topicPattern = 'srt-class/room/+/relay'; onmessage((msg)=>{ if(msg.source == 'TeachingScreen') { 发送至 srt-class/room/{room_id}/T2R }else if(msg.source == 'Robot'){ 发送至 srt-class/room/{room_id}/R2T } //记录日志 }) ``` #### 授课大屏Webview和前端通信消息: ``` 通过消息注册的方法 前端注册监听事件 window.on_robot_message((msg)=>{ msg = { event: 'draw', //抽选: message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 draw_type: 'random', //group 小组抽选,random 随机抽选(目前只有random类型) draw_count: 2, //抽选数量 } msg = { event: 'countdown', //倒计时, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 countdown_seconds: 23, //倒计时秒数 } msg = { event: 'text', //机器人的文本回显, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 text_content: '', //当前需要显示的文本 text_done: true, true文本完结,false文本未完结 } msg = { event: 'broadcast', //语音播报,来自机器人的语音指令, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 broadcast_cmd: 'stop' // pause 暂停播报,play 开始播报(针对播报的按钮状态) broadcast_type: 'ppt', //broadcast_page_num: 1, //broadcast_material_id, } msg = { event: 'wps', //wps, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 wps_material_id:素材ID, wps_type: 'docx', 'xlsx', 'pdf',,, wps_page_num: 1, //页码,从1 开始, type=ppt的时候需要 wps_cmd: 'open', //cmd 'close'关闭 'change'翻页 'open' 打开 wps_app_id: '', wps_token: '', } msg = { event: 'link', //文生图,文生文, 来自机器人的指令 message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 link_type: 'text2text', //文生文,文生图 link_url: '', //网址, link_title: '', //标题 } msg = { event: 'ask', //提问 message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 ask_cmd: '', //open 打开窗口,update 更新数据, close 关闭窗口 ask_students: [ { id: "394934343", name: "张三", ask_status: "", // todo doing done comment_status: "", //todo doing done seconds: 44, //回答了多少秒 }, ... ] }, msg = { event: 'connectcode', connectcode_cmd: string, // 'open' | 'close' } msg = { event: "aitool", // aitool_cmd: '', //open 新增ai互动工具,close 关闭ai互动工具 update 数据更新 aitool_title: '', //例如 文生图1,文生图2 智能体调试1,智能体调试2 aitool_id: '', // 窗口ID, 命名方式: `text2text_${new Date().getTime()}`. `text2image_${new Date().getTime()}` aitool_type: '', //text2text 文生文(智能体调试) text2image 文生图 // 机器人->大屏 aitool_robot_data: { status: "" //doing 传输中,done 传输结束, prompt: "", //提示词 (机器人给大屏的)(全量数据) input: "", //输入内容(只有文生文需要)(机器人给大屏的)(全量数据) } } }) //大屏主动触发,来获取URL window.get_gpt_url(type = 'text2text' 文生文,'text2image' 文生图 ,(data)=>{ const { error: false, error_message: '错误信息', link_url: 网址 } = data if(error){ 弹窗提示 error_message, }else{ 展示 link_url } console.log(data) }) 前端接受到消息处理完之后的反馈 事件完成之后调用的方法,主动发送消息通知操作反馈- window.robot_message_callback(msg) msg = { event: 'draw', //抽选: message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 draw_type: 'random', //group 小组抽选,random 随机抽选 draw_count: 2, //抽选数量, draw_students: [{id: string, name: string },...] error: true/false, error_message: '' } msg = { event: 'close_draw' //关闭抽选弹窗 } msg = { event: 'countdown', //倒计时, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 countdown_status: 'end', 倒计时结束 'start', 倒计时开始 'running' //正在运行时 countdown_seconds: 10, //倒计时秒数 countdown_remain_seconds: 4, //剩余秒数 error: true/false, error_message: '' } msg = { event: 'close_countdown' //关闭倒计时 } msg = { event: 'broadcast', //语音播报,前端交互主动控制是否播放的指令, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 broadcast_cmd: 'stop' // stop 停止播报,play 开始播报(针对播报的按钮状态) broadcast_type: 'ppt', error: true/false, error_message: '' } msg = { event: 'wps', //wps, message_id: '', //消息ID, 处理完之后,发送反馈的时候带上这个 wps_material_id:素材ID, wps_type: 'docx', 'xlsx', 'pdf',,, wps_page_num: 1, //页码,从1 开始, type=ppt的时候需要 wps_total_page_num: 10, //总页数 wps_cmd: 'open', //cmd 'close'关闭 'change'翻页 'open' 打开 error: true/false, error_message: '比如: PPT已经是最后一页' } msg = { event: 'speak', //停止播报 speak_cmd: 'start', 'end' } msg = { event: 'ask', //提问 ask_webclick: true/false, 点击 ask_action: '', // start_ask 开始回答, stop_ask 结束回答 con start_comment 开始评价, all_comment 整体评价 //| 'start_ask' | stop_ask | start_comment | stop_comment | continue_comment | start_all_comment| // stop_all_comment || continue_all_comment ask_student_id: '' } msg = { event: "aitool", // aitool_cmd: '', //open 新增ai互动工具,close 关闭ai互动工具 update 数据更新 aitool_title: '', //例如 文生图1,文生图2 智能体调试1,智能体调试2 aitool_id: '', // 窗口ID, 命名方式: `text2text_${new Date().getTime()}`. `text2image_${new Date().getTime()}` aitool_type: '', //text2text 文生文(智能体调试) text2image 文生图 // 大屏 -> 机器人 aitool_teachingscreen_data: { status: "", //doing 传输中,done 结束, error 失败 stream_result: "", //流式AI结果,增量,大屏同步给机器人的 }, } 获取房间号: window.get_room_code((res)=>{ console.log(res.room_id) }) ``` #### web前端指令包集合,字段 ``` test_package = { "title": "指令标题", "type": "speech/ppt", "material_id": "素材ID", "material_name": "ppt文件名", "page_num": 1, "speech_text": "你好", "actions": [ // { // "type": "fixed_text", //待定 问胡超 // "fixed_text_content": "多行文本,最多200字", // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, // { // "type": "wps", // "wps_material_id": "素材ID", // "wps_type": 'ppt', // "wps_page_num": 1, //页码,从1 开始, type=ppt的时候需要 // "wps_cmd": 'open', //cmd 'close'关闭 'change'翻页 'open' 打开 // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, { "type": "draw", "draw_type": "random", "draw_count": 1, //学生数量 "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 }, // { // "type": "homework", //跟产品确认- 待定 // "question_id": "", // "page": 1, // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, // { // "type": "agent", // "agent_id": "智能体id", // "agent_name": "智能体名称", // "data": {}, // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, // { // "type": "link", // "link_url": "", // "link_type": "custom", // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, // { // "type": "wps", // "wps_material_id": "素材ID", // "wps_type": 'docx/xlsx/pdf', // "wps_page_num": 1, //页码,从1 开始, type=ppt的时候需要 // "wps_cmd": 'open', //cmd 'close'关闭 'change'翻页 'open' 打开 // "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 // }, { "type": "await", "await_seconds": 5, //5秒 "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 },{ "type" : "debug_tools",//指令类型->打开调试工具 "debug_tools_type" : "agent_debug" // agent_debug 智能体调试 text2image 文生图, "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 }, { "type": "countdown", "countdown_seconds": 5, "countdown_status": 'start', "source": "ai" //来源 ai 是ai生成则有此字段,不是则无此字段 通用字段 }] } ```