You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:00:54