Giter VIP home page Giter VIP logo

ticket's Introduction

LeanTicket

部署应用

  1. 创建 LeanCloud 应用。
  2. 创建一个 Access Token(账户 - Access Token)。
  3. (国际版跳过此步)准备一个已备案的域名。
  4. 创建两个 Redis 实例,一个名为 QUEUE 数据删除策略选择 noeviction,一个名为 CACHE
  5. 运行 ./deploy/index.mjs 并按照提示提供信息。(如果要部署到国际版,需要设置 CONSOLE_API_SERVER 环境变量。
  6. 根据提示配置 DNS 完成域名绑定(也可在应用的设置 - 域名绑定页中查看或修改配置)。

绑定成功后,访问 https://<绑定的自定义云引擎域名> 即可访问。

开始使用

注册管理员

应用注册的第一个账号默认会被设置为「管理员」和「客服」两种角色,之后可以使用该账号添加更多的账号到「客服」角色之中。

添加客服

任何一个拥有「客服」角色的账号,都可以在 右上角点击用户名 -> 设置 -> 技术支持设置 -> 成员 页面添加其他客服账号,输入希望添加账号的用户名,点击「添加为技术支持人员」。

添加工单分类

「客服」账号可以在 右上角点击用户名 -> 设置 -> 技术支持设置 -> 分类 页面来维护分类。

  • 可以设置多个分类,如「账号问题」、「Android SDK」等,用户提交工单时可以选择对应的分类。
  • 可以设置自己是否负责该分类,也可以看到其他客服负责的分类。
  • 点击分类名称,可以设置「问题描述模板」,之后用户选择分类时模板自动填写,方便用户了解需要补充什么信息。
  • 至少需要添加一个分类,否则无法新建工单。

提交工单

应用的账号都可以提交工单,点击右上角「新建工单」,填写相关信息点击提交即可。

回复工单

工单产生后,应用会根据「工单分类」的负责人,并排除掉「请假」人员,选择工单负责人,该负责人可以在「客服工单列表」中检索到自己负责的工单列表。在工单详情页可以回复用户的问题。

工单状态会随着用户或者客服回复,在「等待客服回复」和「等待用户回复」之间切换。

工单详情页还可以修改工单的分类和负责人信息。

解决或关闭工单

对工单的完结操作有两种「解决」和「关闭」,在工单页面右边可以操作。

  • 如果用户认为问题已经解决,点击「已解决」按钮,则工单状态变为「已解决」。
  • 如果用户认为问题不需要解决,点击「关闭」按钮,则工单状态变为「已关闭」。
  • 如果客服认为问题已经解决,点击「已解决」按钮,则工单状态变为「待确认解决」,此时用户可以看到一个确认信息来「确认已解决」或「未解决」,前者将工单状态变为「已解决」,后者将工单状态变为「等待客服回复」。
  • 如果客服认为问题无法解决,点击「关闭」按钮,则工单状态变为「已关闭」。

统计

应用会将工单的一些信息按周汇总统计,方便客服了解一些数据指标。

注意,统计数据以周五凌晨作为一周的开始,如果希望调整此项设置,请修改 config.webapp.js 中的 offsetDays 变量,例如,改为 0 代表以周一凌晨为一周的开始。

客服个人设置

「客服」账号可以在 右上角点击用户名 -> 设置 -> 技术支持设置 -> 个人设置 页面进行设置。

可以设置企业微信号关联,这样有新的工单等信息时会收到响应的提醒。

如果客服无法处于工作状态,可以「请假」,工单不会分配给请假时间段内的客服。

开发环境

安装依赖

npm install

依赖安装完毕会自动编译应用,如果以后需要手动编译请执行:

npm run build

本地启动

启动服务端(确保已经和 LeanCloud 关联):

lean up

启动客户端:

npm run dev:client

该命令依赖 命令行工具 ,因为需要 lean env 导出 appId 和 appKey。

本地访问

访问 http://localhost:3000 即可。

提示:因为应用依赖较多的 云函数Hook 函数 ,而本地运行时暂不能调用到本地应用的相关代码,所以需要先将应用部署到云端。

Demo

为了方便大家体验 LeanTicket 的功能,我们部署了一个 Demo 应用(这个应用仅供测试,数据随时可能清空)。

LeanTicket Demo

用户名 密码 角色
demo demo 客服
test test 用户

LeanCloud 内部贡献

发布流程:

  1. 特性和 bug 修复在合并到 master 分支后,将 master 分支发布到工单的预备环境测试(如有必要,改动未合并前也可临时在工单预备环境测试)。
  2. 在预备环境充分测试后(比如一周后,具体时间视改动的大小和影响自行把握),发布到工单的生产环境,并在代码仓库打上 lc-YYYYMMDD 的 tag.

另外,实现 LeanCloud 内部功能请加上 enableLeanCloudIntegration 开关。

ticket's People

Contributors

sdjdd avatar sdjcw avatar weakish avatar leeyeh avatar lywtyh avatar notevenaneko avatar sparanoid avatar dependabot[bot] avatar sxiaoxu avatar uffy avatar fareco avatar nicecui avatar ym avatar hjiang avatar sinchang avatar myleslee avatar jwfing avatar zqq90 avatar binaryhb avatar

Stargazers

 avatar Li Jie avatar vuens avatar fengxiaochen avatar gottaboy avatar  avatar  avatar JimmyWongHJW avatar pyja avatar  avatar Maxtune Lee avatar  avatar Andy avatar Pigeon2333 avatar Wier.JI avatar jerryleooo avatar  avatar lz-0701-bill avatar Sonic Gao avatar Haitao avatar WangYS avatar DeFuture avatar  avatar  avatar Mason Xie avatar  avatar  avatar Zhong Chen avatar kylinz avatar William Zhang avatar Russ⚡ avatar 에런 avatar  avatar  avatar panyingfu avatar ahlon avatar Mike Zheng avatar Choi Yan Lok avatar  avatar Alfred Zhao avatar 觀海聽濤 avatar  avatar Chihiro avatar Jasontan avatar  avatar wikimo avatar zhiduopc avatar lenzhao avatar 7doger avatar Oktfolio avatar 天成 avatar Yunjie Dai avatar Yu Gao avatar David Qu avatar dw avatar Spike avatar kevin chou avatar JimZhang avatar bruce avatar 追马 avatar CarltonXu avatar aland-zhang avatar luofei avatar pseudovector avatar Ryan avatar  avatar junbaor avatar Meng Ye avatar Shunqin.Chen avatar c4ys avatar 如梦技术 avatar  avatar DJun avatar OrcsWang avatar  avatar  avatar san avatar  avatar  avatar Liyiming avatar hao avatar koen avatar 邵励治 avatar  avatar  avatar 赤明 avatar littleyvan avatar  avatar CraneHe avatar : ask me anything :) avatar tomato avatar Ma Qiang avatar 支吾猪&&特务兔 avatar  avatar Li Jianfei avatar Yulu Chen avatar 西行寺幽幽子 avatar Leander Chen avatar Vinny Wang avatar Liwen S avatar

Watchers

dennis zhuang avatar  avatar  avatar 刘冲 avatar James Cloos avatar  avatar cfwings avatar robbinfan avatar lipengyue avatar Carlos avatar  avatar qw avatar jason avatar Wu Jun avatar  avatar victory avatar  avatar Antigloss Wong avatar  avatar  avatar  avatar  avatar  avatar Felix_Yao avatar  avatar  avatar 秋兰 avatar  avatar 天涯@ avatar

ticket's Issues

Oauth

请问OAuth的api去哪里了

fix: edit in preview not work

问题

在 preview 里编辑文本后,返回到上一级页面,此时文本框的文本显示是已经编辑后的文本,但是点击「提交回复」后,提交的文本并不是编辑后的文本。

zulip 链接 >

检查 LeanCloud token 失效

token 失效后,创建工单会导致获取不到当前用户的应用列表,重新登录后才会恢复。需要检查一下流程上是否有漏洞。

需要一个文件跳转的路径

背景

文件的域名是可变的,所以我们最佳实践一直是存 File 而不是存 URL。Ticket 马上会支持更多用户自定义字段的展示(统一放在 Tickek 表的 metaData 列中)。这些字段中可能会存有 File 类型的(或者 _File 的 Pointer),但是因为字段名称不是固定的所以没法在查询时 include(或者出于性能考虑不想事先 include)。一个简单的做法是在用户点击下载文件时先 get 一下对应的文件,然后再 redirect 到文件的 URL。这个用法是如此常用所以如果有一个 route 是专门做这个的将会节省很多事情。

接口设计

> GET {domain}/file-redirect/{objectId}
< 301 location: {file-url}

公开标签用户不可设置

tag 只能客服写,用户加不了,那个权限只是控制用户可不可以看到 @weakish

「新建工单」页面里专门有一段 tag 选择相关的逻辑,应该是用户来选的 @leeyeh

可能这个属于年久失修的功能,因为我们自用的工单从来没有建过公开的标签 @weakish

建议前置鉴权环节

目前是当用户填写完表单点击提交按钮的时候才会提示「你没有提交工单的权限」。其实在登录之后就可以提示了,没必要等到这个环节。

根据节点不同显示不同的「帐号关联」相关设置项

截屏2019-09-03下午6 04 00

现在由于国内节点和国际节点的工单系统已经分离,「个人设置」里面关联其他节点的设置项已经过时。可以考虑在国内节点仅保留华北节点和华东节点互相关联的选项,然后国际节点隐藏掉这部分设置(或者隐藏掉国内的两个节点)。

另外新建工单页面的「相关应用」旁边的帮助信息也需要更新:

截屏2019-09-03下午6 08 29

数据库中没有_Role的值

进入工单界面提交工单刷新页面无法显示创建的工单,报错如下
Cannot read property 'getUsers' of undefined
源代码中报的错误是
return role.getUsers().query().ascending('username').find();

您的账号不具备提交工单的条件

您的账号不具备提交工单的条件。
[400 POST https://qjnlgvra.engine.lncld.net/1.1/functions/checkPermission]

本来这个页面不报错的,我创建了一个新的应用之后开始的。。。

关联账户跳转地址更新

控制台的域名有所调整,关联账户登录的域名需要更新到新地址:

  • 美国节点: console.leancloud.app
  • 华北节点: console.leancloud.cn

登录失效时提示对用户不友好

用户在打开浏览器时,报错是
image

用户反馈的上下文是:
image

这类问题我自己也遇到过,也有用户打电话来反馈过(说工单挂了)。如果是登录失效的话,建议直接跳转到 登录授权页,这样用户就知道该如何做了。

以某用户身份建工单

以后其它渠道沟通的需求我们也帮用户建个工单吧,工单需要一个以某用户身份建工单的功能。确保所有事都落到纸面,没完成的有提醒。

-- @hjiang

企业微信号如何绑定?

在管理员的个人设置里,有企业微信号的绑定,一直只有未绑定,请问如何操作绑定企业微信,让其可以通知相关人员。

Ubuntu环境 leanticket执行lean up提示apikey value must be defined

按照步骤,执行到lean up时出错。
lean v:0.7.5
nodejs v: 4.2.6
npm v: 5.0.0
账号 cuirongqing
错误:
lean up
✓ 正在检测运行时
✓ 检测到 node.js 运行时
✓ 获取应用信息
✓ 当前应用:Test (pNWeH0jxky8mcNIV75wUBpCI-gzGzoHsz)
✓ 获取运引擎分组 web 信息
✓ 项目已启动,请使用浏览器访问:http://localhost:3000
✓ 云函数调试服务已启动,请使用浏览器访问:http://localhost:3001

[email protected] dev /home/cuirongqing/gitcode/ticket
WEBPACK_DEV_SERVER=http://localhost:8080 nodemon --ignore modules server.js
[nodemon] 1.11.0
[nodemon] to restart at any time, enter rs
[nodemon] watching: .
[nodemon] starting node server.js
/home/cuirongqing/gitcode/ticket/node_modules/mailgun-js/lib/mailgun.js:15
throw new Error('apiKey value must be defined!');
^

Error: apiKey value must be defined!
at new Mailgun (/home/cuirongqing/gitcode/ticket/node_modules/mailgun-js/lib/mailgun.js:15:11)
at module.exports (/home/cuirongqing/gitcode/ticket/node_modules/mailgun-js/lib/mailgun.js:144:10)
at Object. (/home/cuirongqing/gitcode/ticket/api/mail.js:3:38)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object. (/home/cuirongqing/gitcode/ticket/api/notify.js:1:76)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object. (/home/cuirongqing/gitcode/ticket/api/Ticket.js:6:16)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)

[nodemon] app crashed - waiting for file changes before starting...

[求更新] lc的API地址无法修改

2019年06月2x日的域名事件中,官方增加了API的修改方式。

地址:https://blog.avoscloud.com/6846/

git上现在的版本还没有支持这个功能,不过发现官方的工单已经有了。

希望项目主有空更新一下,感谢。

初始化部分是webpack生成的,修改后也会被覆盖:
image

官方工单已经更新:
image

期待更新项目(另外十分同情本次事件的受害者,lc官方背锅心疼……)

重新梳理和改进工单统计页面

wiki 链接

需要确认一下:平均首次响应时长是否按照周期内新增工单统计,平均响应时长是否按照活跃工单统计。

已确认符合描述

活跃工单数(分类)下面所有分类的统计数量累加与总览中活跃工单总数不一致。

各活跃工单数的统计是根据以天为单位生成的统计数据聚合而成,每天的活跃工单会有交集。总览中的活跃工单数根据工单的 objectId 做了去重,所以总数对应不上。由于每天的统计数据仅保存了客服、分类、用户对应的工单数量,没法在聚合时去重,所以这块需要重新设计。

有的客服名字是 undefined

这个是因为 StatsTicket 表里有下面这样的*数据:

{
  "ticketId": "5ffe535b5f9f6d0246a54fc9",
  "firstReplyTime": null
}

正常的应该是这样:

{
  "ticketId": "5ffd89dc17e9de6b39a54f18",
  "userId": "5757b7bc6be3ff00692f5f2b",
  "firstReplyTime": 4461927
}

可以修改下生成数据的逻辑,或者统计时过滤掉非法数据。

1、2 条需要修改统计的逻辑,或者增加一个表、列存放新格式的统计数据。 @weakish @SXiaoXu 听下两位的想法 👀

切换问题分类时,追加内容而不是覆盖

写完“问题描述”,后选择“问题分类”后,把写的内容直接覆盖了。这个直接覆盖太伤了,已经遇到过三次了。。。

切换问题分类时,应该替换为追加内容,而不是覆盖

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.