基于Azure Bot Framework(.NET)的Messenger聊天机器人对接Zendesk人工转接方案问询
我之前做过类似的集成,结合你的需求(转接时自动创建Zendesk工单+同步对话记录),给你梳理下落地的具体步骤,都是经过实践验证的:
1. 先搞定基础依赖
首先得把Zendesk的API集成到你的.NET Bot项目里,官方的NuGet包ZendeskApiClient是最省心的选择,不用自己写HTTP请求的细节。
- 直接在NuGet包管理器里搜
ZendeskApiClient安装就行,或者用命令:Install-Package ZendeskApiClient - 提前在Zendesk后台准备好API凭证:你的Zendesk子域名、管理员邮箱、生成的API密钥(在Zendesk的Admin Center -> Apps and integrations -> APIs -> Zendesk API里创建)
2. 转接触发时的核心操作(创工单+同步对话)
不管你用什么逻辑触发转接,一旦触发,Bot里要执行这三个关键步骤:
2.1 收集并整理对话历史
首先得把用户和Bot之前的所有对话捞出来,整理成清晰的格式,方便人工客服查看。这里要注意,Azure Bot Framework默认不会自动存对话历史,你得自己用ConversationState来持久化每轮消息(推荐用Azure Cosmos DB当存储后端,稳定又好查)。
示例代码片段(.NET):
// 从ConversationState里取出存储的对话历史 var conversationHistory = await _conversationState.GetAsync(turnContext, () => new ConversationHistory()); // 格式化对话:区分Bot和用户消息,加上时间戳 var formattedChatLog = string.Join("\n\n", conversationHistory.Messages.Select(msg => $"{(msg.IsBotMessage ? "[Bot]" : "[用户]")} [{msg.Timestamp:yyyy-MM-dd HH:mm:ss}]: {msg.Content}" ));
这里的ConversationHistory是你自己定义的类,用来存每条消息的内容、是否是Bot发送的、时间戳这些字段。
2.2 调用Zendesk API创建工单
把整理好的对话记录作为工单的核心内容,同时可以设置工单的主题、优先级、关联用户(如果能从Messenger拿到用户邮箱的话,直接映射到Zendesk的请求人)。
示例代码:
// 初始化Zendesk客户端 var zendeskOptions = new ZendeskApiClientOptions { BaseUri = new Uri("https://你的Zendesk子域名.zendesk.com/api/v2/"), Credentials = new ZendeskCredentials("管理员邮箱@你的域名.com", "你的Zendesk API密钥") }; var zendeskClient = new ZendeskApiClient(zendeskOptions); // 构建工单请求 var ticketRequest = new TicketCreateRequest { Ticket = new Ticket { Subject = $"Messenger客服转接 - 用户ID: {turnContext.Activity.From.Id}", Comment = new Comment { Body = $"用户与Bot对话记录:\n\n{formattedChatLog}" }, Priority = TicketPriority.Normal, Status = TicketStatus.New, // 如果能获取到用户邮箱,直接关联到Zendesk请求人 Requester = new Requester { Name = turnContext.Activity.From.Name, Email = "用户邮箱@example.com" } } }; // 创建工单 var createdTicket = await zendeskClient.Tickets.CreateAsync(ticketRequest);
如果用户在对话里发了图片、文件这类附件,得先调用Zendesk的附件API上传,然后把附件ID加到工单的Comment里,这样人工客服就能看到附件了。
2.3 给用户反馈+处理会话移交
工单创建成功后,先给用户发个消息:"已帮您转接人工客服,客服会尽快回复您,请稍等~"
如果想让用户后续的消息直接发给Zendesk人工,不用经过Bot中转,推荐用Facebook的Handover Protocol(会话移交协议):
- 在Facebook开发者后台,把你的Zendesk配置为Secondary Receiver,Bot作为Primary Receiver
- 转接时调用Facebook的API,把会话控制权移交给Zendesk,这样用户再发消息就直接到Zendesk的人工队列里了,Bot暂时不会再接收到这些消息。
3. 转接后的后续流程处理
3.1 工单状态同步(可选)
如果需要Bot知道工单的处理进度(比如人工回复了、工单关闭了),可以在Zendesk后台设置Webhook:当工单状态变化时,Zendesk主动给你的Bot后端发通知,然后Bot可以给用户发消息告知,比如"您的问题已经处理完成啦,有其他需求随时找我们~"
3.2 异常兜底
一定要处理Zendesk API调用失败的情况:比如网络波动、权限不够,这时可以加个重试机制,或者把失败记录到日志里,后续人工补建工单,别让用户的请求石沉大海。另外,如果对话历史没捞到,至少要创建一个基础工单,注明“对话记录获取失败”,保证用户的需求能被人工看到。
4. 几个关键提醒
- 隐私合规: 同步对话记录前,要确保符合隐私法规(比如GDPR),别同步用户的敏感信息,或者提前告知用户对话会被同步到客服系统。
- 权限配置: Zendesk的API密钥必须有创建工单、上传附件的权限,别因为权限不够导致创建工单失败。
- 对话历史存储: 一定要配置
ConversationState来存对话,不然转接时拿不到之前的聊天记录,工单就没意义了。
内容的提问来源于stack exchange,提问作者Edhelvar

