指令配置与使用说明
快速阅读
呼入机器人、外呼机器人除了说自然语言,还可以在模型回复里带上指令,让平台收号、等待、写变量、控制这一轮能不能被打断,或离开当前智能体节点。
- 井号指令
#转人工#、#挂机#会跳出当前智能体节点,必须有语音导航上的预置动作和下一跳。 DTMF/DTMF_INTERRUPT在当前对话里收客户按键,一般不新增连线。这是向客户收号,不是座席向外发按键。NIT{...}进入等待客户处理,要配节点上的单次等待、超时唤醒词、最大等待时长。variable{name:...;content:...}把结果写成后续节点能引用的变量。EXT_CMD{...}只控制这一轮播音,不写业务字段。- 指令由模型输出、由平台识别。联调要同时看:模型有没有按格式输出、TTS 有没有把指令念出来、节点动作和下一跳有没有发生。
阅读地图
- 先选指令类型:读「二」「三」。
- 要跳出流程:读「四」。
- 要收号、等待、写变量、控制打断:读「五」至「八」。
- 上线前核对:读「九」「十」。
一、文档说明
本文说明智能体回复里五类指令的格式、该配在智能体还是语音导航、以及配错时通话会怎样。读者是写提示词的实施和画 IVR 的实施。
智能体怎么创建见 智能体搭建、智能体搭建(进阶)。节点上的开场白、预置动作、变量见 交互节点: 智能体。
本文主要说明这五类指令怎么配、怎么验收。座席工作台里的发按键是另一项能力,不在本页格式里。
二、产品总览
指令都由智能体在模型输出里直接返回,平台识别后执行。差别是有的离开当前节点,有的留在当前对话里。
| 指令类型 | 典型格式 | 主要作用 | 是否跳出当前智能体节点 | 适用场景 |
|---|---|---|---|---|
| 井号指令 | #转人工#、#挂机# | 进入该指令对应的后续 IVR 节点 | 是 | 转人工、挂断、流程转场 |
| DTMF 指令 | DTMF{...}、DTMF_INTERRUPT{...} | 收集客户按键 | 否 | 验证码、单号、证件号、密码 |
| NIT 指令 | NIT{等待话术。} | 延长等待,并按时唤醒确认 | 否 | 客户说「稍等」「我查一下」 |
| variable 指令 | variable{name:...;content:...} | 提取变量给后续节点 | 否 | 直呼、分流、查询要引用的结果 |
| EXT_CMD 指令 | EXT_CMD{key:value;key:value} | 控制这一轮播音能否被打断、保护多久 | 否 | 普通回复、工具调用提示音、开场白、带 #转人工# 的播报 |
自动外呼仍是 IVR 外呼任务。指令发生在客户已经进入智能体节点之后,不负责把号码拨出去。
三、核心概念
按这个顺序配,不容易漏:
- 智能体:提示词写清触发条件、输出格式和限制,让模型在该说的时候返回指令。
- 语音导航智能体节点:井号指令要对上预置动作;NIT 要配等待客户处理;variable 要开变量提取。DTMF 通常不要单独开关。
- IVR 连线:只有会跳出当前节点的指令必须有下一跳。没有下一跳时,模型虽然输出了指令,流程仍可能挂断或停在错误链路上。
- 联调:模型输出、TTS 是否念出指令、节点动作、后续节点拿到的结果,四件事一起看。
| 指令类型 | 智能体提示词 | 智能体节点 | IVR 连线 | 配置重点 |
|---|---|---|---|---|
| 井号指令 | 必须 | 必须 | 必须 | 提示词、预置动作、下一跳三者一致 |
| DTMF 指令 | 必须 | 一般不需要 | 不需要 | 提示词触发收号,结果回到当前对话 |
| NIT 指令 | 必须 | 必须 | 不需要 | 单次等待、超时唤醒词、最大等待时长 |
| variable 指令 | 必须 | 必须 | 视后续节点而定 | 变量名一致,后续节点引用同一名字 |
| EXT_CMD 指令 | 必须 | 视场景而定 | 不需要 | 只用平台已支持的 key |
variable 把业务结果交给后续 IVR 节点。EXT_CMD 只告诉平台这一轮播音怎么控制。格式相似,去向不同。只有平台已经支持的 key 会改变播音;模型多写了别的 key,不会按那个 key 执行。
四、井号指令
格式是 #...#。平台识别后离开当前智能体节点,进入语音导航里与该指令对应的后续节点。
例如输出 #转人工# 后,不再留在当前智能体里,而是沿 #转人工# 的连线进入队列、座席或其他人工流程。座席是接电话的人。
三处缺一不可:
- 提示词:满足条件时在回复末尾输出指令。
- 智能体节点预置动作:动作标识与模型输出一致。
- 画布下一跳:跳出之后有明确去向。
提示词
写清何时触发、输出哪一个指令、指令放在句末。# 前不要再加标点。
- 客户要求人工:
好的,请您稍等#转人工# - 对话结束:
再见#挂机# - 项目若使用自定义标识,例如
#转人工客服#,智能体、节点和连线必须同一写法。
指令前的自然语言会播报。指令本身不应被 TTS 念给客户。
节点与连线
进入语音导航的智能体节点,核对预置动作。挂机、转人工通常已内置,节点侧保证标识一致即可。转人工如需在报表里区分「说了转人工」和「真的转到了人工」,同步打开转人工意图统计。自定义井号标识也要有同名动作或同名下一跳。
保存节点后,画布上出现对应出口:
#转人工#接到人工队列、人工节点或其他人工承接。#挂机#接到挂断节点。若要先播一段固定录音,先接播放节点,再结束通话。- 自定义井号指令接到对应业务分支。
只写了提示词、没有下一跳时,模型会输出指令,跳出之后可能直接挂断,或停在错误链路。
#挂机#
#挂机#用于通话不必再继续时,从智能体节点进入挂断相关节点或结束当前链路。
常见写法是 #挂机#。有的项目预置动作标识是 #挂断#,以节点上配置的标识为准,提示词、节点和文档不要混用。
示例:不好意思打扰您了,再见#挂机#
适合回访已完成、客户明确拒绝且不再转人工、通知类信息已经播完。错误写法是 再见!#挂机#。
#转人工#
#转人工#用于智能体不再继续承接时,进入人工座席、队列或其他人工流程。
示例:好的,请您稍等,我这边为您转接人工客服#转人工#
适合客户主动要求转人工,多轮澄清后仍解决不了,或投诉、退款等需要人工处理的情况。转接前可加一句安抚播报。不要把 #转人工# 放在句首,否则流程会立刻转走,后面的话播不出来。
联调至少确认:模型输出的标识正确、指令没有被念出、预置动作已触发、画布进入的是目标节点。
五、DTMF 指令
DTMF 指令在当前智能体节点里向客户收号,适合验证码、物流单号、手机号、证件号、密码等不适合只靠口述的内容。收号完成后,结果以文本回到模型,对话继续。不新增 IVR 连线,也不新增预置动作。
节点侧一般没有单独开关。提示词里写明何时输出、每种场景的参数。
联调覆盖:收号成功、失败、超时重播、客户按 # 提前结束、加密显示。
DTMF
DTMF格式:
DTMF{位数|超时时间|超时提示音|重播次数|是否加密}示例:
DTMF{6|5|您没有按啊,可以再按一次吗|2|0}| 参数位置 | 参数名称 | 作用 | 默认值 | 取值范围 | 说明 |
|---|---|---|---|---|---|
| 1 | 收号位数 | 要采集的按键位数 | 6 | 1-30 | 超出范围时按默认值处理 |
| 2 | 超时时间 | 从最后一次按键开始计时 | 6s | 1-30s | 超时后播放提示音 |
| 3 | 超时提示音 | 超时后的播报 | 平台默认提示 | 自定义字符串 | 留空时使用默认文案 |
| 4 | 重播次数 | 超时后的最大重试次数 | 1 | 1-6 | 超出范围时按默认值处理 |
| 5 | 是否加密 | 按键内容是否加密显示 | 1 | 0 或 1 | 0 明文,1 加密 |
示例里的 5、2、0 是这一条指令的取值,不是上表默认值。
执行规则:
- 客户按
#可提前结束收号,不必凑满位数。 - 达到指定位数时自动结束收号。
- 成功后,按键内容作为文本消息回传给模型。
- 开启加密后,日志和记录里的按键内容按密文展示。
敏感信息建议默认加密。超时提示尽量短,例如「没有收到您的按键,请再输入一次」。第一次联调用位数少的样例。
DTMF_INTERRUPT
DTMF_INTERRUPT参数与 DTMF 相同,格式是 DTMF_INTERRUPT{位数|超时时间|超时提示音|重播次数|是否加密}。差别是收号过程中可以被客户说话打断:继续收号,或退出收号回到对话,由打断判定决定。
DTMF 适合希望客户专心输完。DTMF_INTERRUPT 适合收号较长、客户可能中途发问。上线前看三种边界:先说话后按键、先按键后说话、超时播报时插话。
六、NIT 指令
NIT 在当前智能体节点里进入「等待客户处理」,不跳出节点,也不新增连线。适合客户要查资料、确认信息后再说。
格式:
NIT{等待话术。}示例:NIT{好的,您慢慢查,我等您。}
括号内会作为等待期间的安抚话术播给客户,写短,并以句号收尾。提示词要写明哪些意图必须输出 NIT,不要只写「可以使用」。
节点路径是语音导航智能体节点里的「等待客户处理」,三项一起配:
| 配置项 | 作用 |
|---|---|
| 单次等待时间(秒) | 静默后首次等待多久 |
| 超时唤醒词 | 超过单次等待后播给客户的提示 |
| 最大等待时长(秒) | 这一轮最多等多久;超过后结束等待,进入客户沉默处理 |
执行顺序:模型输出 NIT{...} 后进入等待;先播括号内话术;超过单次等待时间则播超时唤醒词;超过最大等待时长则结束等待并进入客户沉默处理。
等待时间按业务节奏设置,避免过短打断客户,也避免过久占着并发。
交互示例:
外呼机器人:请问他的任职时间是从何时到何时呢?
客户:这个我不确定,我得查一下。
外呼机器人:好的,您慢慢查,我等您。
(30s后)
外呼机器人:请问您这边查好了吗?
客户:稍等啊,马上。
外呼机器人:好的不着急。
客户:嗯,他是2021年4月入职,2025年8月离职。
外呼机器人:好的,那请问他平时主要负责的工作都要哪些呢?上例里的 30 秒是这段对话的举例,不是节点默认值。单次等待和最大等待以节点上填写的秒数为准。呼入机器人使用同一组 NIT 配置。
七、variable 指令
模型已经确认了门店、城市、业务类型或号码,后续直呼、分流、查询还要用这个结果时,用 variable 写成变量。它不单独生成新的跳转出口。
格式:
variable{name:变量名;content:变量值}示例:
variable{name:mall_name;content:上海五角场万达广场}name 与 content 之间用英文冒号 :,多项之间用英文分号 ;。
配置顺序:
- 提示词写清触发条件、变量名和上述格式。变量名与节点完全一致。
- 在语音导航智能体节点的「变量」里打开变量提取,新增同名变量。只有
name一致时,值才会写入 IVR 变量。节点若还要把已有变量传给智能体,同时核对映射。 - 后续节点引用同一名字。直呼节点可以把直拨值设为该变量。分流、查询同样引用这个名字。变量值是中文时,部分后续节点要先解码,例如
{URIDECODE(${number})}。
TTS 不应把 variable{...} 这段念出来。联调看三件事:模型输出里有这个结构、没有被播报、后续节点拿到的不是空值或错值。
变量名使用业务上能看懂的写法,例如 mall_name、city、service_type。一次只提取这一步真正要用的字段。
八、EXT_CMD 指令
EXT_CMD 控制这一轮模型输出文本的播音,不传业务字段,也不代替收号或转人工。当前已明确支持的 key 是 interrupt 和 play_protect。常见于普通回复、工具调用提示音、模型生成开场白,以及带 #转人工# 的播报。
格式:
EXT_CMD{key1:val1;key2:val2}- 以
EXT_CMD{开头,以}结尾。 - 按键值填写。键和值之间可用英文冒号
:或中文冒号:。 - 多组之间可用英文分号
;或中文分号;。
它只作用于模型输出的文本。文本播完、进入别的动作后,这条指令随之失效。例如:
请按键输入您的验证码。DTMF{||||},按井号结束。EXT_CMD{interrupt:true}这里的 EXT_CMD 管的是「请按键输入您的验证码,按井号结束」这一轮文本能不能被打断。进入 DTMF 收号后,这条 EXT_CMD 不再管收号过程。
| key | 类型 | 作用 |
|---|---|---|
interrupt | boolean | 这一轮模型输出文本是否允许被打断 |
play_protect | int | 这一轮从开始播音起,多长时间内不允许被打断 |
interrupt:false 表示这一轮不允许被打断;true 表示允许。允许打断是多数普通回复的默认情况,不必每句都写。
play_protect 单位是毫秒,从开始播音起算。interrupt 为 false 时它不生效。取值按 value <= 30000 处理:小于等于 0 表示保护不生效;大于 30000 按 30000 处理。
常见写法:
EXT_CMD{interrupt:true}
EXT_CMD{interrupt:false}
EXT_CMD{interrupt:true;play_protect:4000}流式输出时,尽量让模型尽早输出 EXT_CMD。识别到指令之前,已经播出的前半段仍按默认规则。
普通模型输出
interrupt 为 false 时,这一轮文本在播放期间不允许被打断。识别是流式的。若识别到指令时已经播了 1 秒,则这 1 秒内仍允许被打断,从识别到之后到播完才按 EXT_CMD 执行。这里的 1 秒是时序举例,不是固定时延。
play_protect 为 4000、识别到指令时已经播了 1 秒时:0 到 1 秒仍可被打断;1 秒到 4 秒不允许被打断。保护区间仍从播音开始计算,不是从识别时刻再加 4 秒。
工具调用提示音
interrupt 为 true 时,工具调用提示音允许被打断,这是默认情况。false 时,提示音播放期间不允许被打断。
生效:模型流式返回工具调用事件并开始播提示音时。失效不晚于这两个时刻里较晚的一个:工具调用之后模型返回第一个文本断句的时刻,以及提示音播完的时刻。
开场白
模型生成开场白使用 EXT_CMD,不是另一套指令。
语音导航智能体节点的「对话启动」里,开场白有两种模式:
- 固定开场白:内容在节点页面填写。
- 模型生成开场白:内容由模型生成。节点页选择模式,并保留公共开关。
节点页仍然生效的是:接通延时播报(接通后何时发起第一句开场白)、开场白优先播报(是否优先保证开场白作为首轮播报)。
interrupt 为 false 时,开场白播放期间不允许被打断。固定开场白从播音开始到结束都不允许打断。模型开场白从识别到这条 EXT_CMD 起,直到播完,不允许打断;识别之前已播出的部分仍按默认规则。
play_protect:固定开场白从播音开始到保护时长结束不允许打断。模型开场白从识别到指令起生效,保护区间仍按「从播音开始到 play_protect 结束」计算。play_protect 为 4000、识别时已播 1 秒时,同样是 0 到 1 秒可打断、1 秒到 4 秒不可打断。
固定开场白的「开场白可打断」「开场白保护时间」在节点页面配置。模型生成开场白的打断和保护看这里的 EXT_CMD。
带 #转人工# 的播报
#转人工# 的播报呼入机器人出现 #转人工# 的这一轮,默认不允许被打断。外呼机器人出现 #转人工# 的这一轮,默认允许被打断。要用 EXT_CMD 覆盖默认时,加在指令后面,不要把 #转人工# 放在句首。
呼入机器人需要允许打断:
正在为您转接人工服务#转人工#,请稍等。EXT_CMD{interrupt:true}外呼机器人需要禁止打断:
正在为您转接人工服务#转人工#,请稍等。EXT_CMD{interrupt:false}配错时重点看:指令写得太靠后,前半句已按默认播完;play_protect 超出范围后被截成 30000 或小于等于 0 而不生效;#转人工# 在句首导致立刻跳走;把 EXT_CMD 当成业务变量,或以为它能改写 DTMF、井号跳转本身。
九、配置建议与验收
| 要做的事 | 用哪类指令 |
|---|---|
| 结束或转走 | 井号指令 |
| 收客户按键 | DTMF 或 DTMF_INTERRUPT |
| 等客户查完再继续 | NIT |
| 把结果交给后续节点 | variable |
| 控制这一轮播音能否被打断 | EXT_CMD |
提示词写的是「什么情况下必须输出」,不是「可以使用」。动作能不能落地,还取决于预置动作、下一跳、变量名、等待客户处理和 key 是否受支持。
上线前至少看这些边界:转人工没有连线、收号超时、等待后的唤醒和沉默处理、变量名不一致、开场白被跳过、EXT_CMD 识别晚于已播出的前半句。
口径保持一处:项目用 #挂机# 就不要在提示词里写 #挂断#;变量名用 mall_name,节点和后续引用也用 mall_name。
十、FAQ
模型输出了 #转人工#,电话却挂了?
提示词、预置动作、画布下一跳要一致。没有把出口接到队列或座席时,跳出智能体节点后到不了人工。
客户听到了 #挂机# 或 variable 原文?
指令应被平台识别并执行,不应交给 TTS。先看输出是不是写在句末、格式是否完整,再看节点是否识别到了对应动作。
DTMF 和发按键是一回事吗?
不是。本页 DTMF 是让客户在电话键盘上输入,结果回到当前对话。座席向外发送按键是另一项能力。
EXT_CMD 能不能把城市写给下一个节点?
不能。业务结果用 variable。EXT_CMD 只处理这一轮播音的 interrupt 和 play_protect。
外呼机器人转人工时,客户一说话就把转接话术打断了?
外呼机器人带 #转人工# 的这一轮默认允许打断。要播完再走,在句末加上 EXT_CMD{interrupt:false},并确认 #转人工# 不在句首。
十一、总结
先分清这轮是要跳出智能体、收号、等待、写变量,还是只改播音打断。井号指令必须三处一致;其余指令留在当前节点,按各自的节点项或 key 验收。TTS 不播指令原文。
Updated about 2 months ago