如何 HN: Qisutu – 一个开源、自托管的工单和服务台系统
摘要
Qisutu 是一个开源、自托管的工单和服务台系统,使用 Perl/CGI 和 MariaDB 构建,提供代理/客户门户、邮件处理和 REST API 功能,版本 1.0.2 现已稳定,可用于生产环境。
查看缓存全文
缓存时间: 2026/08/26 15:25
qisutu/qisutu 来源:https://github.com/qisutu/qisutu
Deutsch | English | Français | Italiano | Português (Brasil) | Português (Portugal) | Español | Nederlands | Polski | Čeština | Türkçe
Qisutu
Qisutu 是一个基于 Perl/CGI、MariaDB(或 MySQL)、Template Toolkit 和浏览器用户界面的新型开源工单系统。
项目网站:https://qisutu.de
发布状态
Qisutu 是一个可独立安装的开源工单系统,具备坐席门户与客户门户、邮件处理、目录登录、自动化、知识库、配置管理数据库、报表和 REST API 功能。
Qisutu 1.0.2 是一个稳定、可用于生产环境的版本,这意味着它已不再处于开发阶段。接口和数据库结构将在常规版本维护周期中持续演进;必要的变更将通过内置更新程序和持续携带的数据迁移来提供。
语言支持
Qisutu 1.0.2 包含十一种完整的界面语言:德语 (de)、英语 (en)、法语 (fr)、意大利语 (it)、巴西葡萄牙语 (pt-BR)、欧洲葡萄牙语 (pt-PT)、西班牙语 (es)、荷兰语 (nl)、波兰语 (pl)、捷克语 (cs) 和土耳其语 (tr)。
安装
请以 root 身份在 /opt 目录下执行以下命令:
wget https://ftp.qisutu.de/qisutu-1.0.2.tar.gz
tar xzf qisutu-1.0.2.tar.gz
mv qisutu-1.0.2 qisutu
useradd -d /opt/qisutu -c 'Qisutu user' qisutu
usermod -G www-data qisutu
chown qisutu:www-data -R qisutu
cd /opt/qisutu
chmod +x install.sh
./install.sh
install.sh 在启动时会立即询问界面语言选择。此选择将保存在实例配置中,Web 安装程序会立即以该语言打开,并将其设为 Qisutu 的默认语言。
实例目录的名称直接决定了技术实例值。从 /opt/qisutu 生成的实例名为 qisutu,不会额外添加 qisutu- 前缀。
随后请打开脚本输出的地址,例如:
http://服务器地址/qisutu/install.pl
然后按照 Web 安装程序的六个步骤操作。
install.sh 会检测操作系统,安装所需的软件包和 Perl 模块,并为每个 Qisutu 实例配置独立的 Apache 集成、systemd 服务、Web 路径和数据库配置。因此,生产系统和测试系统可以并行运行在同一服务器上。
Web 安装程序会创建相应的数据库、指定的数据库用户、来自 install/sql/schema.sql 的表结构、来自 install/sql/insert.sql 的基础数据以及第一个管理员账户。
随机生成的数据库密码将直接写入该实例的 core/config/QisutuConfig.pm 文件中。
详细的说明和两个并行实例的完整示例请参阅 INSTALL.md。
更新
请以 root 身份在 /opt 目录下执行以下命令:
wget https://ftp.qisutu.de/qisutu-1.0.2.tar.gz
tar xzf qisutu-1.0.2.tar.gz
chown qisutu:www-data -R /opt/qisutu-1.0.2
cd /opt/qisutu-1.0.2
chmod +x update.sh
./update.sh
cd /opt
rm -R qisutu-1.0.2
rm qisutu-1.0.2.tar.gz
更新程序通过 var/install/instance.conf 文件识别实例,仅停止该实例的守护进程并锁定其邮件获取。它将所有受管理的程序文件直接复制到现有安装中,不会覆盖实例文件、Apache 配置或 systemd 配置。
根据需要,它还可以创建数据库备份。表结构和所有持续携带的数据迁移将得到完整检查,并在必要时补充。详细信息请参阅 INSTALL.md。
目录结构
bin/– CGI 入口点、后台进程和命令行程序core/– 配置、模块、模板、语言和系统类install/sql/schema.sql– 完整的表结构install/sql/insert.sql– 新安装的基础数据scriptfiles/– Apache 和 systemd 模板var/static/– 前端资源和集成的第三方资源
附加模块
自版本 0.0.78 起,Qisutu 拥有自己的模块管理器,用于处理包含可读 qisutu-module.json 文件的普通模块 ZIP 包。管理员可以在管理区域安装、更新和卸载附加模块。实际的文件操作由 Qisutu 守护进程独立于 Web 进程执行。
每个附加模块提供自己的管理员链接和配置界面;敏感信息可加密存储。
从 Qisutu 1.0.2 开始,核心还提供了版本化的内部附加模块 API 1.0。它包括可复用的模块服务、通过守护进程持续提供的核心事件、具有独立 API 权限的隔离 REST 路由以及受控的 UI 插入点。没有指定 API 的现有模块保持兼容。
模块可以声明其所需的 API 版本和特定能力;在需要时,Qisutu 会在安装前请求一次常规核心更新,而不会创建客户特定的核心变体。
Qisutu 核心本身不包含任何具体的附加模块。附加模块作为独立项目开发,以包含完整可读源代码的普通 ZIP 文件发布,并仅通过管理区域安装。安装流程和安全检查在 MODULES.md 中描述。
时间记录
坐席在创建工单、添加文章或工单变更时,可以选择记录以小时和分钟为单位的工作时间。每条记录区分可计费和不可计费时间,并可关联到在管理区域维护的活动类型。也支持手动录入单条记录。
时间记录是防篡改的:它们不会被编辑或删除。合理的更正操作会以强制填写理由的方式冲销原始记录,并创建一条关联的替代记录。
更正权限在全新安装和更新时仅分配给管理员组。
时间数据仅在坐席和管理区域处理;客户界面和客户文章中不包含时间记录功能。
邮件获取与 OAuth2
管理区域在唯一的菜单项 “邮件获取” 下集中管理传入的邮件账户。该处的概览显示现有账户,并提供三种设置方式:
- 标准 IMAP(使用用户名和密码)
- Microsoft 365(使用 OAuth2/XOAUTH2)
- Google Workspace 或 Gmail(使用 OAuth2/XOAUTH2)
Microsoft 和 Google 账户保存后会直接重定向到相应的提供商。Qisutu 使用一个短期、一次性的状态值验证 OAuth2 回调,存储 Access Token 和 Refresh Token,随后测试 IMAP 连接。账户在测试成功后才会被激活。
过期的 Access Token 会在邮件获取时自动通过 Refresh Token 续订。实例相关的 Qisutu 守护进程每五分钟自动获取已设置的邮箱。每个实例仅使用其自己的安装目录和配置。无需为 qisutu-mail-fetch.pl 额外设置 cron 作业。
非活跃账户在重新激活前会自动检查其 IMAP/OAuth2 连接是否正常。账户必须先被禁用才能被彻底删除。删除时会移除其凭证和 OAuth2 Token;已有的邮件处理日志将保留并与已删除的账户解耦。
菜单项 “SMTP 设置” 为出站邮件提供同样清晰分离的账户类型:标准 SMTP、Microsoft 365 和 Google Workspace/Gmail。
Microsoft 和 Google 使用真实的 OAuth2 Token 和 AUTH XOAUTH2;Microsoft 自动获取范围 https://outlook.office.com/SMTP.Send,Google 获取范围 https://mail.google.com/。Access Token 和 Refresh Token 加密存储并自动续订。OAuth SMTP 账户在成功授权并通过真实 SMTP 连接测试后才会激活。账户界面还提供 “重新连接” 和 “断开 OAuth 连接” 选项。
设置前必须在 “管理 > 系统设置” 中配置一个外部可访问的 HTTPS 基础 URL 作为 Qisutu 地址。在相应账户界面显示的重定向 URI 必须在 OAuth2 提供商处精确注册为允许的重定向 URI。更多信息请参阅 INSTALL.md。
通信日志
在 “管理 > 通信日志” 下,IMAP 获取、SMTP 发送和 OAuth2 Token 操作会被记录,包含开始时间、耗时、结果、账户快照和各个处理步骤。视图提供关键指标以及按时间范围、日志类型、方向、账户、状态和搜索词进行的筛选。
对于每封邮件,仅存储技术元数据,如发件人、收件人、主题、Message-ID 和可能的工单关联;不会复制邮件正文和附件。密码、客户端密钥以及 Access Token 和 Refresh Token 会在存储前从技术响应中移除。
保留期限可在系统设置中配置,默认为 90 天;值为 0 则禁用自动清理。
给客户的自动回复
在 “管理 > 自动回复” 下,为四种仅涉及客户的事件提供了独立的 HTML 模板:客户创建的工单、客户回复、客户对已关闭工单的回复,以及被 Postmaster 过滤器拒绝的邮件。
每个模板拥有独立的主题、CKEditor 文本、启用开关以及用于工单、客户用户、系统和传入邮件的占位符。模板在安装或更新后默认禁用。这使得管理员可以明确决定发送哪些确认邮件。
对于拒绝回复,Postmaster 过滤器必须使用操作 “拒绝邮件并触发自动回复”;现有的完全忽略邮件操作不会产生回复。
由坐席创建的工单和坐席回复不会触发额外的客户邮件。
LDAP 与 Active Directory
管理员在 “管理 > LDAP / Active Directory” 下设置两个完全独立的配置文件:一个专门用于坐席,另一个用于客户用户及其客户公司。两个配置文件拥有各自的连接、搜索、映射、测试和激活设置。
登录界面无需选择提供商;Qisutu 根据门户自动使用合适的活动配置文件。登录名、名字、姓氏和电子邮件在两个配置文件中都是必填映射项。
坐席配置文件可以继承额外的坐席字段,并将新创建的坐席分配到默认组。
客户配置文件还需要一个用于唯一 Qisutu 客户编号的 LDAP 属性和一个用于客户公司名称的 LDAP 属性;其他客户用户字段也可以映射。Qisutu 中定义为必填的附加字段需要相应的 LDAP 映射和目录中的值。
在成功的坐席登录后,Qisutu 使用映射登录属性的标准值进行账户匹配。如果存在具有此登录名的坐席,则继续使用;否则创建一个新坐席。
对于客户登录,会根据映射的客户编号查找或创建客户公司。客户用户根据其标准登录名查找或创建,并精确分配到该公司。如果电子邮件地址已被其他地方使用,则会导致错误,而绝不会自动合并账户。
连接只能通过 LDAPS 或 StartTLS 进行。证书验证默认启用,技术搜索账户的密码加密存储。
更改会禁用受影响的配置文件;在重新激活之前,必须成功测试连接、用户搜索和所有必填值。
如果相应的活动目录中找不到用户,仍然允许使用现有的本地账户登录。如果找到目录条目,则以其密码验证为准。
客户表单与网络表单
在 “管理 > 表单” 下,管理员可以为客户门户和公共网络表单创建自定义表单。每个表单有一个固定的目标队列、多语言文本以及自定义的可选或必填字段。
客户表单可以开放给所有客户或仅选定的客户。只要没有自定义的客户表单,客户门户中现有的标准工单创建方式将保持可用。
公共网络表单获得一个直接链接和现成的 iframe 代码。Qisutu 通过内容安全策略(Content Security Policy)、蜜罐(Honeypot)和时间检查以及可配置的限制来保护它们。
姓名和电子邮件是必填项;网络表单联系人不会获得活跃的登录账户。
所有表单值除了作为动态工单字段存储外,还作为不可更改的提交状态存储。坐席在工单详情视图中的 “表单信息” 下看到此状态,登录的客户在 “您的表单信息” 下看到。后续对表单的修改不会改变已有的提交。
CMDB
集成的 CMDB 无需预定义的 CI 类型。管理员完全自行定义 CI 类型、字段组、必填字段、选择字段和唯一字段、状态目录以及有向关系类型。
CI 清单、客户和联系人关联、关系、归档和导入也完全在管理区域完成。
坐席不修改 CMDB 主数据;他们仅在工单详情视图中搜索和关联 CI,并在那里以只读方式打开已关联的 CI。
在合并工单时,其 CI 关联将完整转移到目标工单。
每个业务变更都记录在不可更改的 CI 历史记录中。
与厂商无关的 CSV 导入配置文件将源列、值和更新规则映射到 Qisutu 字段。唯一匹配按源通过外部 ID 进行。保存的配置文件可以手动执行或通过 cron 作业在夜间执行,例如:
/opt/qisutu/bin/qisutu-cmdb-import.pl --profile 1 --file /srv/import/idoit.csv
在客户门户中,仅显示该登录客户或联系人明确授权访问的活跃 CI,且仅显示明确授权访问的 CI 字段。
主数据 CSV 导入
在 “管理 > CSV 导入” 下,提供了客户、联系人和坐席的独立导入功能。基本结构是固定的;相应 Qisutu 安装的活跃动态字段会自动作为 dynamic. 附加到模板中。因此,应始终直接从目标安装下载当前模板。
每次运行都会首先进行完整检查。预览显示新增、更改、未更改和错误行;如果出现错误,导入将被锁定。只有在确认后,Qisutu 才会将所有行作为一个数据库事务写入。
客户编号或登录名用作唯一匹配键。CSV 中未包含的数据记录不会被处理。
相似文章
HN展示:一个开源制造ERP/MES/QMS系统
一个专为CMMC合规设计的开源、自托管制造ERP/MES/QMS系统,可在受监管行业中实现完全数据所有权和本地部署。
Show HN:Epiq – 基于Git的分布式问题追踪器TUI
Epiq 是一款终端原生、基于Git的问题追踪器,具有 ASCII 看板、不可变事件日志,并支持 MCP 以实现代理工作流。它允许以本地优先的方式进行分布式协作,无需中心服务。
展示 HN:ResolveHQ – 基于 Cloudflare Workers、D1、R2 和 Queues 构建的帮助台
ResolveHQ 是一个 Cloudflare 原生的、可自托管的帮助台,适用于小型支持团队,具有共享收件箱、电子邮件集成和可选的人工智能草拟响应功能。
Ticket Fairy CLI
Ticket Fairy 提供命令行界面和 Model Context Protocol 服务器,用于活动票务,提供开发者工具来管理票务销售和分发。
Show HN: DeepSQL – 一款用于Postgres和MySQL的可自托管DBA代理
DeepSQL是一款可自托管的AI DBA代理,能够监控、优化和管理Postgres和MySQL数据库,旨在降低成本并提升性能。