{"id":19614783,"url":"https://github.com/leancloud/ticket","last_synced_at":"2025-04-05T13:08:39.326Z","repository":{"id":38325555,"uuid":"84299612","full_name":"leancloud/ticket","owner":"leancloud","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-23T08:21:15.000Z","size":17396,"stargazers_count":290,"open_issues_count":56,"forks_count":63,"subscribers_count":29,"default_branch":"master","last_synced_at":"2024-05-23T08:48:12.713Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/leancloud.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-08T08:56:12.000Z","updated_at":"2024-05-29T05:30:58.118Z","dependencies_parsed_at":"2023-10-26T13:51:28.563Z","dependency_job_id":"7afa28fd-0802-4bff-b36b-7abe3be1bf03","html_url":"https://github.com/leancloud/ticket","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leancloud%2Fticket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leancloud%2Fticket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leancloud%2Fticket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/leancloud%2Fticket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/leancloud","download_url":"https://codeload.github.com/leancloud/ticket/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247339158,"owners_count":20923014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T10:53:43.854Z","updated_at":"2025-04-05T13:08:39.305Z","avatar_url":"https://github.com/leancloud.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LeanTicket\n\n### 部署应用\n\n1. 创建 LeanCloud 应用。\n2. 创建一个 Access Token（账户 - Access Token）。\n3. （国际版跳过此步）准备一个已备案的域名。\n4. 创建两个 Redis 实例，一个名为 `QUEUE` 数据删除策略选择 `noeviction`，一个名为 `CACHE`。\n5. 运行 `./deploy/index.mjs` 并按照提示提供信息。（如果要部署到国际版，需要设置 `CONSOLE_API_SERVER` 环境变量。\n6. 根据提示配置 DNS 完成域名绑定（也可在应用的设置 - 域名绑定页中查看或修改配置）。\n\n绑定成功后，访问 `https://\u003c绑定的自定义云引擎域名\u003e` 即可访问。\n\n### 开始使用\n\n#### 注册管理员\n\n应用注册的第一个账号默认会被设置为「管理员」和「客服」两种角色，之后可以使用该账号添加更多的账号到「客服」角色之中。\n\n#### 添加客服\n\n任何一个拥有「客服」角色的账号，都可以在 右上角点击用户名 -\u003e 设置 -\u003e 技术支持设置 -\u003e 成员 页面添加其他客服账号，输入希望添加账号的用户名，点击「添加为技术支持人员」。\n\n#### 添加工单分类\n\n「客服」账号可以在 右上角点击用户名 -\u003e 设置 -\u003e 技术支持设置 -\u003e 分类 页面来维护分类。\n\n* 可以设置多个分类，如「账号问题」、「Android SDK」等，用户提交工单时可以选择对应的分类。\n* 可以设置自己是否负责该分类，也可以看到其他客服负责的分类。\n* 点击分类名称，可以设置「问题描述模板」，之后用户选择分类时模板自动填写，方便用户了解需要补充什么信息。\n* **至少需要添加一个分类，否则无法新建工单。**\n\n#### 提交工单\n\n应用的账号都可以提交工单，点击右上角「新建工单」，填写相关信息点击提交即可。\n\n#### 回复工单\n\n工单产生后，应用会根据「工单分类」的负责人，并排除掉「请假」人员，选择工单负责人，该负责人可以在「客服工单列表」中检索到自己负责的工单列表。在工单详情页可以回复用户的问题。\n\n工单状态会随着用户或者客服回复，在「等待客服回复」和「等待用户回复」之间切换。\n\n工单详情页还可以修改工单的分类和负责人信息。\n\n#### 解决或关闭工单\n\n对工单的完结操作有两种「解决」和「关闭」，在工单页面右边可以操作。\n* 如果用户认为问题已经解决，点击「已解决」按钮，则工单状态变为「已解决」。\n* 如果用户认为问题不需要解决，点击「关闭」按钮，则工单状态变为「已关闭」。\n* 如果客服认为问题已经解决，点击「已解决」按钮，则工单状态变为「待确认解决」，此时用户可以看到一个确认信息来「确认已解决」或「未解决」，前者将工单状态变为「已解决」，后者将工单状态变为「等待客服回复」。\n* 如果客服认为问题无法解决，点击「关闭」按钮，则工单状态变为「已关闭」。\n\n#### 统计\n\n应用会将工单的一些信息按周汇总统计，方便客服了解一些数据指标。\n\n注意，统计数据以周五凌晨作为一周的开始，如果希望调整此项设置，请修改 `config.webapp.js` 中的 `offsetDays` 变量，例如，改为 `0` 代表以周一凌晨为一周的开始。\n\n#### 客服个人设置\n\n「客服」账号可以在 右上角点击用户名 -\u003e 设置 -\u003e 技术支持设置 -\u003e 个人设置 页面进行设置。\n\n可以设置企业微信号关联，这样有新的工单等信息时会收到响应的提醒。\n\n如果客服无法处于工作状态，可以「请假」，工单不会分配给请假时间段内的客服。\n\n### 开发环境\n\n#### 安装依赖\n\n```\nnpm install\n```\n依赖安装完毕会自动编译应用，如果以后需要手动编译请执行：\n\n```\nnpm run build\n```\n\n#### 本地启动\n\n启动服务端（确保已经和 LeanCloud 关联）：\n\n```\nlean up\n```\n\n启动客户端：\n\n```\nnpm run dev:client\n```\n该命令依赖 [命令行工具](https://leancloud.cn/docs/leanengine_cli.html) ，因为需要 `lean env` 导出 appId 和 appKey。\n\n#### 本地访问\n\n访问 http://localhost:3000 即可。\n\n**提示**：因为应用依赖较多的 [云函数](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#云函数) 和 [Hook 函数](https://leancloud.cn/docs/leanengine_cloudfunction_guide-node.html#Hook_函数) ，而本地运行时暂不能调用到本地应用的相关代码，所以需要先将应用部署到云端。\n\n### Demo\n\n为了方便大家体验 LeanTicket 的功能，我们部署了一个 Demo 应用（这个应用仅供测试，数据随时可能清空）。\n\n[LeanTicket Demo](https://ticket-demo.avosapps.us/)\n\n| 用户名 | 密码 | 角色 |\n| - | - | - |\n| demo | demo | 客服 |\n| test | test | 用户 |\n\n### LeanCloud 内部贡献\n\n发布流程：\n\n1. 特性和 bug 修复在合并到 master 分支后，将 master 分支发布到工单的预备环境测试（如有必要，改动未合并前也可临时在工单预备环境测试）。\n2. 在预备环境充分测试后（比如一周后，具体时间视改动的大小和影响自行把握），发布到工单的生产环境，并在代码仓库打上 `lc-YYYYMMDD` 的 tag.\n\n另外，实现 LeanCloud 内部功能请加上 `enableLeanCloudIntegration` 开关。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleancloud%2Fticket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleancloud%2Fticket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleancloud%2Fticket/lists"}