一、概述
本用例实现 C 端智能机器人在线回复功能。当客户通过微信等渠道发起聊天时,系统基于CXG AI 能力,自动分析聊天上下文并生成智能回复给客户,该用例适用于客服未接入回话场景下的实时对话,提升响应效率。
核心能力
实时监听新聊天记录(Conversation Entry)创建事件
自动拼接当前会话内多轮对话上下文
调用提示模板生成自然语言回复
根据回复内容智能判断是否需要转人工客服
非转人工,则根据回复内容自动回复客户
免责声明与责任边界
本文档及其包含的代码、配置示例和提示模板仅作为技术参考与最佳实践展示,旨在演示CXG AI 在客服场景的典型应用方式。本文档内容不构成对产品功能、性能指标或业务效果的任何明示或暗示的承诺与保证。
在实际使用过程中,您需要注意以下事项:
自行评估风险:AI 生成的回复可能存在理解偏差、信息不准确或不符合特定业务规范的情况。建议您建立人工复核机制或自动化校验流程,确保对外发送的内容符合您的品牌标准及安全合规要求。
独立承担责任:由 AI 自动回复功能产生的沟通内容、业务影响及相关后果,需自行承担。阿里云不对因使用本文档中的示例代码、配置或建议而导致的任何直接或间接损失负责。
充分测试验证:建议您先在沙盒环境中进行充分测试,根据实际业务场景调整提示模板、Flow 逻辑及异常处理策略,确认满足需求后再部署至生产环境。
持续监控优化:鉴于 AI 模型输出具有不确定性,建议您建立持续的监控与反馈机制,定期优化提示模板以提升效果。
二、流程示意图

三、配置流程
3.1创建 提示模板 PROMPT TEMPLATE
操作步骤
登录阿里云上的Salesforce,前往 设置,导航栏搜索 提示生成器
新建提示模板:Flex 类型
自定义输入提示模板信息
名称:微信客服自动回复
API 名称: wechat_auto_reply (注意: 这里应与下文需要手动创建Apex 内的触发提示模板的 API Name保持一致)
新增输入数据源
名称:ChatRecord
API 名称:ChatRecord
源类型:自由文本
模板运行时需要:勾选
点击下一步,在 详细信息 设置里选择
模型: 自行选择适合业务的模型,推荐回复速度更快的 Flash 模型
响应: 允许的语言必须要选择并包含中文(简体)
复制并粘贴以下提示词到提示输入框中,您可以根据实际业务需要优化提示词。
## 角色
你是客服助理,负责根据客户与客服的聊天记录,为客服代表生成合适的推荐回复。
## 输入
{!$Input:ChatRecord}
其中包含对话时间(EntryTime__c) 、发送者类型(ActorType__c)和消息内容(Message__c)的完整对话历史
- ActorType__c = EndUser:客户发送的消息
- ActorType__c = Agent:客服代表发送的消息
- ActorType__c = System:系统或自动回复发送的消息
- EntryTime__c:消息发送时间
格式示例:
2026-01-28 10:29:50 [System]:欢迎进入在线客服,请问有什么可以帮您?
2026-01-28 10:30:00 [EndUser]: 你好,我想咨询一下订单状态
2026-01-28 10:30:15 [Agent]: 您好,请问您的订单号是多少?
## 任务
分析最新客户问题及对话上下文,生成一条自然、简洁、友好的推荐回复。
## 回复规则
1. 结合上下文:基于客户最新问题和客服最近的回复内容,提供连贯的推荐回复。
2. 过滤不当内容:不重复客户言论中不道德或不恰当的内容。
3. 保护隐私:回复中不得包含组织的具体信息或敏感数据。
4. 自然融入:回复须符合对话的上下文逻辑和语气。
5. 简洁友好:语言简洁、态度友好,且不得重复客服已发送过的内容。
6. 转人工判断:仅当客户(ActorType__c = EndUser)发送的最新一条消息包含转人工意图时触发。触发关键词
## 输出要求
仅输出推荐回复内容,无需解释、前缀或格式标记。保存,并激活。
提示模板 示例图

3.2 创建 FLOW
操作步骤
登录阿里云上的Salesforce,前往 设置,导航栏搜索 流
新建 流:记录触发流(Record-Triggered ) 类型
自定义输入 Flow 名称,API 名称,描述,例如 微信客服机器人自动回复
3.2.1 开始节点(触发器)
开始节点的触发器进行以下配置:
触发对象:Conversation Entry
触发时机:记录已创建
触发条件:满足所有条件 (AND):(Actor Type 等于 EndUser) AND (Entry Type 等于 Text)
优化流程: 操作和相关记录
如下图所示:

3.2.2 获取 Messaging Session 数据节点
在触发器后的节点上新增一个 获取记录 类型的元素,进行以下配置:
类型:获取记录
标签: 获取 Messaging Session 数据
API 名称: get_message_session_by_entry_id
描述:通过conversationEntryId 获取聊天记录中的 messageSession 数据
获取此对象的记录
对象:Messaging Session
筛选 Messaging Session 记录:
条件要求 :满足自定义条件逻辑
条件逻辑: 1 AND (2 OR 3) AND 4
条件1:
字段:记录 ID
运算符:等于
值:触发 ConversationEntry_c > Conversation Identifier
条件2:
字段: Channel Type
运算符:等于
值:WeChat OA
条件3:
字段: Channel Type
运算符:等于
值:WeChat MP
条件4:
字段: Status
运算符:等于
值:Waiting
排序 Messaging Session 记录:
选择:未排序
存储的记录数量:
选择:仅限第一个记录
如何存储记录数据:
选择:自动存储所有字段
如下图所示:

3.2.3 判断 Messaging Session 是否存在
在 获取 Messaging Session 数据 节点后面新增一个 决策 类型的元素,进行以下配置:
类型:决策
标签:判断 Messaging Session 是否存在
API名称:if_messaging_session_exists
描述:判断 Messaging Session 是否存在
分支 1:
结果标签:Messaging Session 存在
结果 API 名称:Messaging_Session_exists
执行结果的条件要求:满足所有条件(AND)
资源: 来自获取 Messaging Session 数据的Messaging Session > 记录 ID
运算符:为空
值:假
分支 2:
标签:Messaging Session 不存在
在分支2 添加 End 组件
如下图所示:

3.2.4 分析聊天记录并生成回复节点
在 判断 Messaging Session 是否存在 节点的分支1下新增一个 操作 类型的元素,进行以下配置:
类型:操作
搜索并选择 Apex:AIChatResponseGenerator(需要您先创建这个Apex,源码在下方)
标签:分析聊天记录并生成回复
API 名称: analyze_chat_records_generate_response
设置输入值:Messaging Session ID(必需):来自获取Messaging Session 数据的Messaging Session > 记录 ID
其他选项保持默认即可
注意:不建议直接在正式的生产环境组织中创建apex,可以通过以下文档使用其他方式创建。
Deploying Apex | Apex Developer Guide | Salesforce Developers
Unable to create, edit, or delete Apex triggers or classes in Salesforce
AIChatResponseGenerator flow apex类源码:
/**
* @description AI 聊 天 回 复生成 器 - 根 据 聊 天记 录调用 Einstein 提示 模板 生成 智 能 回 复 建 议
*/
global with sharing class AIChatResponseGenerator {
private static final String DEFAULT_ERROR_REPLY = '未能生成回复,请稍后
重试';
// Category最好是放到你们自己的分类中
@InvocableMethod(Label = 'AI Chat Response Generator' Description = '根据聊天记录生成
global static List<AIChatResponse> generate(List<AIChatResponseGeneratorReq> reque
List<AIChatResponse> results = new List<AIChatResponse>();
for (AIChatResponseGeneratorReq request : requests) {
if (String.isBlank(request.messagingSessionId)) {
results.add(new AIChatResponse(DEFAULT_ERROR_REPLY));
continue;
}
String chatHistory = buildChatHistory(request.messagingSessionId);
// 这里可以使用不同的提示模板,每个提示模板都有APIName
String reply = callPromptTemplate(chatHistory, 'wechat_auto_reply');
results.add(new AIChatResponse(reply));
}
return results;
}
// 聊天记录拼接格式示例:2026-01-28 10:30:00 EndUser:你好,我想咨询一下订单状态 2026-01-28
private static String buildChatHistory(String conversationId) {
// 聊天记录拼接格式示例:2026-01-28 10:30:00 EndUser:你好,我想咨询一下订单状态 2026-01-28
private static String buildChatHistory(String conversationId) {
// TODO ConversationEntry__c需要加上生产环境的命名空间
List<ConversationEntry__c> entries = [
SELECT ActorType__c, Message__c, EntryTime__c
FROM ConversationEntry__c
WHERE ConversationId__c = :conversationId
WITH USER_MODE
ORDER BY EntryTime__c ASC
];
List<String> lines = new List<String>();
for (ConversationEntry__c entry : entries) {
if (String.isNotBlank(entry.ActorType__c)
&& String.isNotBlank(entry.Message__c)
&& entry.EntryTime__c != null) {
lines.add(entry.EntryTime__c.format('yyyy-MM-dd HH:mm:ss') + ' ['
+ entry.ActorType__c + ']: ' + entry.Message__c);
}
}
return String.join(lines, '\n');
}
private static String callPromptTemplate(String chatHistory, String templateApiNam
ConnectApi.WrappedValue inputValue = new ConnectApi.WrappedValue();
inputValue.value = chatHistory;
ConnectApi.EinsteinPromptTemplateGenerationsInput request = new ConnectApi.Ein
request.additionalConfig = new ConnectApi.EinsteinLlmAdditionalConfigInput();
// 应用名称
request.additionalConfig.applicationName = 'PromptBuilderPreview';
// 非预览模式,正式调用
request.isPreview = false;
// 提示模板声明的占位符
request.inputParams = new Map<String, ConnectApi.WrappedValue>{ 'Input:ChatRec
// 输出语言为简体中文,必须是prompt template支持的响应语言
request.outputLanguage = 'zh_CN';
try {
ConnectApi.EinsteinPromptTemplateGenerationsRepresentation response =
ConnectApi.EinsteinLLM.generateMessagesForPromptTemplate(templateApiNa
if (!response.generations.isEmpty()) {
return response.generations[0].text;
}
if (!response.generationErrors.isEmpty()) {
System.debug(LoggingLevel.ERROR, 'LLM 生成错误: ' + response.generation
}
} catch (Exception e) {
System.debug(LoggingLevel.ERROR, '提示模板调用异常: ' + e.getMessage());
}
return DEFAULT_ERROR_REPLY;
}
global class AIChatResponseGeneratorReq {
@InvocableVariable(Label = 'Messaging Session ID' Description = '当前聊天的 Mess
global String messagingSessionId;
}
global class AIChatResponse {
@InvocableVariable
global String replyResponse;
public AIChatResponse(String reply) {
this.replyResponse = reply;
}
}
}如下图所示:

3.2.5 检查是否需要转人工客服节点
在分析聊天记录并生成回复节点后面新增一个决策类型的元素,进行以下配置:
类型:决策
标签:检查是否需要转人工客服
API名称:check_if_transfer_to_human_agent
描述:检查 AI 的推荐回复中是否提示需要转人工客服。
分支 1(转人工客服):
结果标签:转人工客服
结果 API 名称:transfer_to_human_agent
执行结果的条件要求
满足任意条件 (OR)
条件1:
a. 资源:来自分析聊天记录并生成回复的输出 > replyResponse
b. 运算符:起始字符
c. 值:Transferring to a human agent
条件2:
a. Resource来自分析聊天记录并生成回复的输出 > replyResponse
b. 运算符:起始字符
c. 值:转人工客服中
注意:以上的转人工条件值是在提示模板提示词里面已经规定好的,如果您自定义了提示词中对于转人工客服相关的回复,需要相应修改条件中的值。
分支 2 (发送 AI 推荐回复)
标签:发送 AI 推荐回复
如下图所示:

3.2.6 发送转人工回复节点
在检查是否需要转人工客服节点的分支 1(转人工客服)下新增一个操作类型的元素,进行以下配置:
类型:操作
搜索并选择 Apex:Send WeChat Service Message (安装 CXG Package 以获取该 Apex)
标签: 发送转人工回复
API 名称:send_transfer_to_agent_message
设置输入值
Content: 来自分析聊天记录并生成回复的输出 > replyResponse
Message Type: 1 (直接输入 1 即可)
Messaging Session ID:来自获取 Messaging Session 数据的Messaging Session > 记录 ID
如下图所示:

3.2.7 执行转人工客服节点
在发送转人工回复节点后,根据是否开通 Omni-channel Routing 有两种情形。
第一种情形
已开通 Omni-channel,并且已经根据 CXG 文档完成 Omni-channel 配置,则可以执行以下步骤:
你需要新增一个 Omni-channel Flow,在转人工时,让 Omni-channel 自动帮您分配 human agent 来服务客户,参考文档:Omni-Channel 配置 - 帮助中心,请根据手动配置 - Flow 配置 - Omni-Channel Routing Flow 章节做配置,配置好后如下图所示

Omni-channel Flow 配置好后,在发送转人工回复节点后新增一个子流类型的元素。
类型:子流
搜索并选择 Flow:Omni-channel-to-queue-or-agent
标签:转给 Queue
API 名称:chat_to_queue
设置输入值
recordId:包括,填入来自获取 Messaging Session 数据的Messaging Session > 记录 ID
routingToQueue:包括,填入 真
userId:不需要勾选包括
注意:
如果要交给 queue 处理,则 routingToQueue 设置为 True
交给 queue 处理后,Omni-channel 会自动根据已有的规则把会话分配给 agent
如果要转交给具体的 agent,则 routingToQueue 设置为 False,并且 userId 为必填
userId 是具体的 agent,您可以在这个子流节点前新增一个节点来按您的规则获取 userId,例如通过 user 的某些备注过滤获取 userId,或者从你已有的 queue 里面获取 userId
如下图所示:

第二种情形
未开通omni-channel,则可以执行以下步骤:
CXG Package 中提供了一个可以在 Flow 中被执行的 Apex,名称为 Accept chat action,用于直接让 agent accept 会话。
在发送转人工回复节点后新增一个操作类型的元素。
类型:操作
搜索并选择 Apex:Accept chat action (安装 CXG Package 以获取该 Apex)
标签: 人工客服接受会话
API 名称:accept_chat_by_human_agent
设置输入值
Session ID: 来自获取 Messaging Session 数据的Messaging Session > 记录 ID
User ID: userId是具体的agent,您可以在这个accept chat action节点前新增一个节点来按您的规则获取userId
如下图所示:

3.2.8 发送 AI 推荐回复节点
在检查是否需要转人工客服节点的分支 2(发送 AI 推荐回复)下新增一个操作类型的元素,进行以下配置:
类型:操作
搜索并选择 Apex:Send WeChat Service Message (安装 CXG Package 以获取该 Apex)
标签: 发送 AI 推荐回复
API 名称:send_ai_reply_message
设置输入值
Content:来自分析聊天记录并生成回复的输出 > replyResponse
Message Type: 1 (直接输入 1 即可)
Messaging Session ID:来自获取 Messaging Session 数据的Messaging Session > 记录 ID
在发送 AI 推荐回复节点后添加 End 组件
如下图所示:

根据文档配置完成后,可以在微信客服会话测试 AI 的自动回复。
四、实现效果
以下示例基于 Omni-Channel 配置。
终端用户在微信发起聊天后,先由 AI 客服进行回复。当要求转接人工时,会收到提示词中预先定义好的回答,如:转人工客服中,请稍等。

人工客服在服务控制台通过 Omni-channel 接入会话。


