# 技能后处理简介
为了扩展自定义技能的能力,技能工作室提供了技能后处理帮助开发者实现丰富的自定义功能,【技能后处理】位于【语义理解引擎】之后,可以直接与万维网通信。
# 业务逻辑
# 能力
- 实现多轮对话。
- 获取语义结果后,直接与万维网通信,缩短链路时间。
- 无需开发者拥有服务器,即可完成业务逻辑处理。
每次客户请求事件会触发技能后处理,引擎将每次的语义理解结果(request:JSON)发送给技能后处理,开发者加工完数据,返回一个处理结果(response:JSON),引擎通过解析 response 来决定最终下发到客户端的数据。
# 调用方式
讯飞技能工作室的技能后处理可以通过云函数和webhook来进行调用。
# 云函数
支持在线编辑,也可上传JS文件。
# 运行环境
云函数的本质是 FaaS (Function as a Service)服务,运行在讯飞云服务器上。
云端提供 NodeJS 环境为v9.10.1。除 nodejs 携带的标准模块(http crypto https url dgram net stream string_decoder timers buffer)外,还提供了以下第三方模块供开发者使用:
promise asap async bson caseless concat-stream
data-format double-ended-queue fibers http-basic
http-response-object inherits ioredis isarray
json5 minimist ms node-zookeeper-client qs
readable-stream resolve-from safe-buffer semver
streamroller string_decoder request-promise
then-request typedarray util-deprecate
除此之外,云函数为开发者提供了一个全局变量 AIUI,以及用于打印日志的 console。点击查看更多云函数接口:v2.0,v2.1
# 安全
云端对于技能运行环境都进行了资源隔离以及运行时监测,危险的代码并不会影响云函数服务器的正常运行,但系统检测到云端代码运行异常时,云端将下线该技能并判断技能开发者是否有违规行为。
凡 NodeJS 标准不建议的代码请勿编写,如:阻止事件循环。NodeJS 为单线程环境运行,如果存在死循环、无限递归等无限占用 cpu 的情况,技能将不能接收用户消息,云端检测到后也会对技能进行下线处理,云端默认每次请求交互800毫秒超时,开发者技能应该在该超时时间内调用 api 的 response 接口,否则云端代替返回超时错误,此类情况可能出现在:
- 上述事件循环阻塞。
- 开发者在异步操作(如 http 调用)回调中调用返回接口,该异步操作可能返回时间较长,此类情况应该对该异步操作设置超时,不要让云端触发超时。
注意
event(Deprecated)、response(Deprecated)、context(Deprecated)、eventName(Deprecated)为四个过时的全局变量点击阅读接口参数 (opens new window)。建议尽快迁移到最新的接口,以使用填槽对话等新特性。
# Webhook
Webhook的本质是一个web调用,若通过公网部署,会对技能的使用产生一些额外的耗时。
当技能使用Webhook时,在Webhook部署时需要完成以下操作。
- 在技能平台上填写部署地址,即技能部署在服务器上的地址,这里请填写URL地址。
- 技能需要验证IFLYOS发送的请求,验证步骤请参考技能请求校验。
注意
Webhook只支持v2.1协议。
← 知识库 云函数接口_v2.1 →