如何用Python通过API提取Zendesk自定义字段名称?
提取Zendesk自定义字段名称的解决方案
问题原因
你当前从工单对象中提取的custom_fields,只包含该工单上自定义字段的ID和对应的值(如果已设置),并不包含字段名称——字段名称属于Zendesk全局的工单字段定义,需要单独获取。
解决步骤
1. 获取全局工单自定义字段列表
使用Zenpy的zenpy_client.ticket_fields.list()方法,获取所有工单自定义字段的完整信息,其中包含id和title(字段名称)等核心属性。
2. 构建ID-名称映射字典
把获取到的字段列表转换成以字段ID为键、字段名称为值的字典,方便后续通过ID快速匹配名称。
3. 关联工单的自定义字段ID与名称
结合你之前从工单中拿到的custom_fields列表,通过映射字典匹配出对应的字段名称。
完整代码示例
# 补充Zenpy客户端初始化(原代码遗漏部分) from zenpy import Zenpy from zenpy.lib.api_objects import Ticket, User credentials = {'token': ' ', 'email':'', 'subdomain': ' '} zenpy_client = Zenpy(**credentials) # 创建工单(保留你原有的业务代码) create_ticket = zenpy_client.tickets.create( Ticket(subject='This field will contain a subject', description='This field will contain description', requester=User(name='testtest'), assignee_id=5883758502685, priority='normal' ) ) ticket_id = create_ticket.ticket.id # 直接访问属性,替代__dict__读取更规范 # 获取目标工单的自定义字段 custom_field_ticket = zenpy_client.tickets(id=ticket_id) ticket_custom_fields = custom_field_ticket.custom_fields # 获取全局工单字段,构建ID-名称映射 all_ticket_fields = zenpy_client.ticket_fields.list() field_id_name_map = {field.id: field.title for field in all_ticket_fields} # 输出带名称的自定义字段信息 for field in ticket_custom_fields: field_id = field['id'] field_name = field_id_name_map.get(field_id, f"未知字段(ID:{field_id})") field_value = field.get('value', '未设置值') print(f"字段名称: {field_name}, 字段ID: {field_id}, 当前值: {field_value}")
关键优化说明
- 避免直接访问
__dict__:Zenpy返回的对象支持直接访问属性(如create_ticket.ticket.id),比读取__dict__更安全、符合Python编码规范。 - 过滤原生字段:如果只想获取自定义字段(排除Zendesk原生系统字段),可以添加过滤逻辑:
# 仅保留非系统类型的自定义字段 all_custom_fields = [f for f in zenpy_client.ticket_fields.list() if f.type != 'system'] field_id_name_map = {field.id: field.title for field in all_custom_fields}
内容的提问来源于stack exchange,提问作者Mahesh Manjunath
相关产品推荐
相关产品推荐

