# 技能后处理简介

为了扩展自定义技能的能力,技能工作室提供了技能后处理帮助开发者实现丰富的自定义功能,【技能后处理】位于【语义理解引擎】之后,可以直接与万维网通信。

# 业务逻辑

# 能力

  1. 实现多轮对话。
  2. 获取语义结果后,直接与万维网通信,缩短链路时间。
  3. 无需开发者拥有服务器,即可完成业务逻辑处理。

每次客户请求事件会触发技能后处理,引擎将每次的语义理解结果(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.0v2.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协议