逻辑节点-函数应用

函数节点分为内置函数和自定义函数,也可以通过服务注册中心编写函数,编写后使用服务调用节点进行使用。

内置函数

通用内置函数

支持HTTP/HTTPS协议,您可以完成HTTP标准协议里面的配置。例如:POST/GET方法,query/header/body的请求体。

image

如果想在配置内置函数时,对变量进行引用,针对不同的变量类型有不同的引用方式:

  • 支持四类变量

    • 槽位变量 intentName.slotName (只读)

    • 全局变量 botVar.varName(读写)

    • 环境变量 VENDOR_PARAM(只读)

    • 函数返回 functionOutput(只读)

自定义函数

在第一次调用函数控制台开通指引的时候,如果没有给账号授权,会提示用户进行授权,如下图,授权过程见“函数控制台开通指引”。

前往函数控制台开通指引

image

授权后用户可以绑定在阿里云编写好的JS 函数,通过选择服务函数的方式与画布中的函数计算绑定,如下图:

image

代码模板(node.js语法):

module.exports.handler = function(event, context, callback) {
    /** event structure definition
    {    
      // read-only variables
      "environment": "Object",
      "lastOutputForFunction": "String",
      "slotSummary": "Object",

      // read/write variables
      "botVar": "Object",
      "outputForResponse": "Object",
      "outputForFunction": "String",
      "routeVariable": "String"
    }
    **/var eventResult = "";
    try {
        var eventObj = JSON.parse(event);

        // add your code here/**
       /**
        * code block
        **/

        eventResult = JSON.stringify(eventObj);
        callback(null, eventResult);
    } catch (e) {
        callback(null, e);
    }
};

函数参数说明

参数名

参数类型

参数说明

可写

environment

json

见下面 environment说明

只读

lastOutputForFunction

String

上一个函数的输出结果

只读

slotSummary

json

各槽位的填值情况

只读

botVar

String

全局变量,在设计对话流的时候进行定义,在函数执行过程中可以直接引用或赋值。

outputForResponse

json

函数返回结果

outputForFunction

String

当前函数的输出值,可以被其它函数通过lastOutputForFunction引用。

routeVariable

String

函数节点分支逻辑路由变量,在分支逻辑判断时需要此参数。

environment参数说明

参数

类型

说明

SENDER_ID

STRING

发送者 ID

SENDER_NICK

STRING

发送者昵称

IS_ADMIN

STRING

是否为企业管理员

SENDER_STAFF_ID

STRING

当发送者是企业机器人所对应的企业的员工,返回发送者在企业的工号。

MEMBER_TYPE

STRING

会员类型

TOKEN

STRING

会话 token

样例代码:

module.exports.handler = function(event, context, callback) {
    /** event structure definition
    {
      // read-only variables
      "environment": "Object",
      "lastOutputForFunction": "String",
      "slotSummary": "Object",

      // read/write variables
      "botVar": "botVar.varName",
      "outputForResponse": "Object",
      "outputForFunction": "String",
      "routeVariable": "String"
    }
    **/
    var arr = "";
    var eventResult = "";
    try {
        var eventObj = JSON.parse(event);
        // add your code here

        if (eventObj.environment.hasOwnProperty("orderId")) {
            eventObj.routeVariable = '1';
        } else {
            eventObj.routeVariable = '0';
        }
        eventResult = JSON.stringify(eventObj);
        callback(null, eventResult);
    } catch (e) {
        arr += e;
        eventObj.outputForResponse.htmlText = [arr];
        eventResult = JSON.stringify(eventObj);
        callback(null, eventResult);
    }
};

event数据结构说明:

{
 "environment": {
 "user_id": "1323011"
 },
 "lastOutputForFunction": "{\"query\":{\"count\":1,\"created\":\"2018-03-28T10:20:59Z\",\"lang\":\"en-US\",\"results\":{}}}}",
 "slotSummary": {
 "QueryWeatherIntent.date": "2018-03-29",
 "QueryWeatherIntent.date_origin": "明天",
 "QueryWeatherIntent.city": "上海",
 "QueryWeatherIntent.city_origin": "上海",
 },
 "botVar": {
 "phoneNumber": "13*****000"
 },
 "outputForResponse": {
 "htmlText": [
 "It's a fine today.",
 "It's a sunny day."
 ],
 "useRandom": true
 },
 "outputForFunction": "invoke API successfully",
 "routeVariable":"OK"
 }