使用ZendeskApi_V2创建带内嵌图片工单失败,寻求技术帮助
如何通过Zendesk API创建带内嵌图片的工单
你之前的操作思路偏了哦——直接把RadEditor里的<img>标签塞进HtmlBody是行不通的,因为这些图片的src要么是本地路径,要么是编辑器的临时缓存地址,Zendesk的服务器根本访问不到这些资源,自然显示不出来。要实现内嵌图片,得按照Zendesk API的规则走流程:先上传图片到Zendesk获取专属token,再在工单内容里引用这个token。
具体步骤和代码示例
1. 先上传图片到Zendesk,获取附件token
首先要用Zendesk API的上传接口把图片文件传到Zendesk服务器,拿到对应的token——这个token是后续引用图片的关键。用ZendeskApi_V2的话,代码大概是这样:
// 初始化Zendesk API客户端 var zendeskApi = new ZendeskApiV2.ZendeskApi( "https://你的域名.zendesk.com/api/v2", "你的邮箱", "你的API密钥" ); // 读取本地图片文件(如果是从RadEditor获取的图片流,直接用流即可) using var imageStream = new FileStream(@"C:\test\screenshot.png", FileMode.Open); // 上传附件,获取token var uploadResult = zendeskApi.Attachments.UploadAttachment(imageStream, "screenshot.png"); var attachmentToken = uploadResult.Upload.Token;
2. 构建包含内嵌图片的工单内容
拿到token后,就可以在HtmlBody里用Zendesk指定的格式引用这个图片了。有两种写法:
- Markdown格式:
 - HTML格式:
<img src="{{attachment:你的token}}" alt="图片描述">
用ZendeskApi_V2创建工单的代码示例:
// 构建带内嵌图片的HTML内容 var htmlBody = $@"<p>这是工单的正文内容:</p> <p>下面是截图:</p> <img src=""{{attachment:{attachmentToken}}}"" alt=""系统报错截图"">"; // 创建工单对象 var newTicket = new Ticket { Subject = "系统报错求助(带截图)", Priority = TicketPriority.Normal, Status = TicketStatus.New, Requester = new Requester { Name = "James Rao", Email = "your-email@example.com" }, Comment = new Comment { HtmlBody = htmlBody, // 可选:如果需要确保附件和工单绑定,也可以把token加到Attachments列表里 // Attachments = new List<Attachment> { new Attachment { Token = attachmentToken } } } }; // 发送创建工单请求 var createTicketResult = zendeskApi.Tickets.CreateTicket(newTicket);
关键注意事项
- 禁止引用外部图片:Zendesk不允许在工单内容里引用外部域名的图片,所有内嵌图片必须是上传到Zendesk服务器的附件。
- 权限验证:确保你用来调用API的账户有工单创建和附件上传的权限,否则会返回权限错误。
- 流的处理:如果是从RadEditor直接获取图片流,记得正确处理流的生命周期(比如用
using包裹),避免资源泄漏。
内容的提问来源于stack exchange,提问作者James Rao
相关产品推荐
相关产品推荐

