如何通过pyotrs或非GUI方式关闭OTRS工单?
通过Python或非GUI方式关闭OTRS工单的解决方案
由于pyotrs当前仅支持工单数据查询,无法执行修改操作,你可以通过以下两种方案实现关闭工单的需求:
方案一:调用OTRS REST API(Python实现)
OTRS官方提供了REST API支持工单状态修改,步骤如下:
1. 确认REST API已启用
在OTRS后台系统配置中,启用REST::Enable选项,并确保API用户拥有修改工单状态的权限。
2. Python代码示例
使用requests库发送PUT请求修改工单状态:
直接通过工单ID关闭
import requests from requests.auth import HTTPBasicAuth # 替换为你的OTRS配置信息 otrs_api_url = "https://your-otrs-domain/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket/{ticket_id}" username = "your-otrs-username" password = "your-otrs-password" target_ticket_id = 1234 # 目标工单ID close_state_id = 6 # 替换为你系统中"关闭"状态的ID(可在OTRS后台工单状态配置中查看) # 构造请求体 payload = { "Ticket": {"StateID": close_state_id}, "DynamicFields": {} # 无需修改动态字段可留空 } # 发送修改请求 response = requests.put( otrs_api_url.format(ticket_id=target_ticket_id), json=payload, auth=HTTPBasicAuth(username, password) ) # 验证结果 if response.status_code == 200: print(f"工单 {target_ticket_id} 已成功关闭") else: print(f"关闭失败:{response.text}")
通过工单编号关闭(先查ID再修改)
如果只有工单编号,可先查询对应ID再执行关闭操作:
import requests from requests.auth import HTTPBasicAuth otrs_api_url = "https://your-otrs-domain/otrs/nph-genericinterface.pl/Webservice/GenericTicketConnectorREST/Ticket" username = "your-otrs-username" password = "your-otrs-password" ticket_number = "20240520000001" # 目标工单编号 # 查询工单ID search_params = {"TicketNumber": ticket_number} search_response = requests.get( otrs_api_url, params=search_params, auth=HTTPBasicAuth(username, password) ) if search_response.status_code == 200: ticket_data = search_response.json() ticket_id = ticket_data["Ticket"][0]["TicketID"] print(f"获取工单ID:{ticket_id}") # 执行关闭操作 close_state_id = 6 update_url = otrs_api_url + "/{ticket_id}".format(ticket_id=ticket_id) payload = {"Ticket": {"StateID": close_state_id}} update_response = requests.put(update_url, json=payload, auth=HTTPBasicAuth(username, password)) if update_response.status_code == 200: print(f"工单 {ticket_number} 已成功关闭") else: print(f"关闭失败:{update_response.text}") else: print(f"查询工单失败:{search_response.text}")
方案二:使用OTRS服务器端CLI命令(非GUI)
如果能直接访问OTRS服务器,可通过官方控制台命令关闭工单:
# 通过工单ID关闭,替换状态名称为你系统中的关闭状态(如"Closed successful") /opt/otrs/bin/otrs.Console.pl Ticket::StateSet --ticket-id 1234 --state "Closed successful" # 或通过工单编号关闭 /opt/otrs/bin/otrs.Console.pl Ticket::StateSet --ticket-number 20240520000001 --state "Closed successful"
注意事项
- 状态ID/名称需与OTRS后台配置一致,可在「工单状态」管理页面查看
- API用户需拥有工单修改权限,否则会返回权限错误
- 若使用Token认证而非账号密码,需将
HTTPBasicAuth替换为headers={"Authorization": "Token your-token"}
内容的提问来源于stack exchange,提问作者mrin9san
相关产品推荐
相关产品推荐

