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

基于Azure Bot Framework(.NET)的Messenger聊天机器人对接Zendesk人工转接方案问询

Azure Bot Framework (.NET) + 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:07:56