飞鸽催评价（示例插件：抖店客服催评）
=====================================

它是什么
  通过客户端内置的「云捷.飞鸽」能力，给订单**催评价**（抖店客服飞鸽工作台）：
    选店铺 → 连接飞鸽 → 管理「催评内容模板」→ 粘贴订单号 → 开始
  一个订单的「建聊 → 发消息（文字/图片）→ 关会话」全由客户端完成，插件只负责把订单号和内容交出去。
  ⚠️ WebSocket 长连接 / protobuf 组包这些协议细节都在客户端里，插件看不到、也不用管 ——
  对方协议变了只需更新客户端，这个插件不用改。

模板的数据模型（对齐 ERP「催评价发送」）
  每条模板按**店铺**保存（集合 `催评模板`，存在本地数据库，清缓存不丢）：
    · 备注名称            同店铺内唯一
    · 第一段文字          固定文字，最先发
    · 第二段文字多行      多条文字（一行一条），发送时**按索引轮换**取一条
    · 第三段文字          固定文字，最后发；里面若有 [返现] 会替换成「返现金额」
    · 评价图URL           多组图片，发送时**按索引轮换**取一组，组内每张都会发
  每单发送顺序：第一段文字 → 该组图片 → 轮换的第二段文字 → 第三段文字（每条消息间隔 2 秒由客户端控制）。

  轮换规则：第 1 单用第 0 组/第 0 条，第 2 单用第 1 组/第 1 条……索引**持久化**（集合 `催评轮换`，
  按店铺记录「累计已发出多少单」），重开插件会接着往后轮；界面上可查看并可「重置轮换位置」。

怎么跑（本地调试）
  1. 客户端「开发者中心 → 我的应用 → 版本 → 选择/更换目录」选中**本插件的上层那一层**
     （即 `示例插件/飞鸽催评价`，里面有 `发布/` 的那一层；不要选到 `发布/` 里面）
  2. 点「本地调试」→ 打开插件的界面
  3. 上架后的应用没有开发者工具，调试就用「本地调试」跑

使用步骤（界面从上到下 6 个区）
  1. 选店铺（下拉里是"本应用可用"的店铺）→ 点「连接 / 重连」连上飞鸽；
     旁边「刷新状态」可随时刷新连接状态与设备ID（换店铺会自动切回未连接并重读该店的模板与轮换位置）
  2. 内容模板（按店铺保存，重开插件还在）：
     · 点「新建模板」创建；列表里每行可「编辑」「删除」，「刷新模板」重新读取当前店铺的模板
     · 弹窗里填：备注名称（同店铺内唯一）、第一段文字（固定先发）、
       第二段文字（一行一条，发送时按索引轮换取一条）、第三段文字（最后发，支持 [返现] 占位）
     · 图片区可加多组、每组多张：「新增一组」「删除这一组」「删除这张」来管理图片；
       入图两种方式 ——「添加直链」粘贴已上传到抖店图库的直链，
       或「选择图片并上传」把本地图片传到抖店图库，自动把拿到的直链存进这一组
     · 保存后模板留在本地数据库，下次打开还在
  3. 订单来源与轮换位置：把订单号粘到输入框（一行一个，也可逗号 / 空格分隔，会自动去重）；
     右侧显示轮换位置（已发出多少单、下一单用「第几组图 / 第几条文案」），
     可点「重置轮换位置」回到第 1 组 / 第 1 条
  4. 发送设置：选「使用模板」、填「返现金额」（替换第三段里的 [返现]）、按需勾选「已评价的订单跳过」
  5. 点「开始催评」→ 逐单催评，第 5 区日志实时显示进度（建聊 / 发消息 / 限速等待…），
     顶部统计卡与第 6 区结果明细给出每一单的成功、失败原因与用时
  6. 中途想停点「停止」（当前这一单会跑完，后面的不再催）；「清空日志」只清显示，不影响发送

限制与注意
  · **限速是客户端内置的**：发送 ≥ 2 秒/店铺、解密 ≥ 3 秒/店铺；同一店铺会自动排队 ——
    插件不用、也别自己再加延时
  · 轮换位置只在**发送成功**时才往后推一格（失败不推，重试仍用同一组图 / 同一条文案）；
    「重置轮换位置」在催评进行中不可用，要先「停止」
  · ⚠️ **「上传图片到图库」依赖较新的 SDK / 客户端**：若提示不支持，请到「我的应用 → 版本」
    点「更新开发包（整包）」；暂时也可用「添加直链」粘贴已上传到抖店图库的图片地址
  · ⚠️ **触发滑块风控**：返回消息里带「触发滑块验证」时，需要到该店铺页面**手动滑一下**，再重试
  · ⚠️ **前置条件**：店铺要已登录，并**采集过店铺令牌**；客户端版本要够新，
    否则会提示「客户端版本过旧：请更新客户端后再使用飞鸽能力」
  · **订单号目前是手填**：想自动化可以自行接订单列表接口，或用「云捷.定时」做无人值守
  · 勾上「跳过已评价」后，已经评价过的订单会自动跳过（不算失败）

文件结构（`发布/` 里才是会上线运行的文件）
  发布/index.html       插件入口（店铺连接 / 模板管理 / 订单与轮换 / 发送设置 / 实时日志 / 结果明细）
  发布/app.js           插件逻辑（连接、模板增删改查、图片上传、轮换组装、逐单催评、订阅实时日志）
  发布/云捷SDK.js       SDK（不要手写、不要改）
  发布/资源/            Vue2 + ElementUI（本地文件，别改成 CDN）
