发送前处理 onSend
通过聊天界面或公开操作 hook 发送之前,onSend 可以改写输入,或者拦下这次发送。它是界面侧的发送回调,不是所有后端请求的统一拦截器。
用法
返回值
拿到的输入
常见用法
带上业务信息。 知识库、连接器、当前页面的上下文放进 metadata:
拦截指令。 /clear 这类只在前端处理的指令不发给后端:
下面匹配的是手动输入的纯文本 /clear。从 / 候选项插入的标签可能编码成文本标记或结构化引用,应按候选项约定读取 content,或在候选项的 onSelect 里直接处理。
拦下之后草稿保留;要清空输入框时用 useComposer().setText('')。
发送前确认。 返回 Promise:
metadata 怎么到后端
metadata 怎么进请求由适配器决定,各内置适配器的默认做法见各协议页面的「输入怎么放进请求」,入口在接入后端。后端要的字段位置不一样时,用适配器上的选项调整(各内置适配器都叫 transformInput)。
配置项
配置项类型默认说明
说明
- 输入框、推荐问题和同一配置上下文中的
useChatkitActions().send会经过onSend;直接调用runtime.actions.send、Core 或适配器不会。重新生成与编辑后重发也不经过。 onSend抛错会中止这次发送。输入框提交会保留草稿并交给onError;程序调用需要处理返回 Promise 的拒绝,不能假定所有调用入口都自动报告错误。异步确认还需由业务方处理取消、重复点击和会话切换。- 当前推荐问题入口没有捕获发送 Promise 的拒绝。共用异步校验时,应在
onSend中捕获预期异常、显示提示并返回false,避免产生未处理的拒绝。 onSend不提供当前会话 id 参数;需要按会话补业务信息时,应从所在页面或 Provider 的会话状态读取。onSend只处理输入,不能改变发送之后的流程(排队、停止、结论判定)。- 输入变成后端请求的那一步在适配器里,不在
onSend里。