文档

示例编写程序2 将函数返回的参数传递至对话中

更新时间:

在对话流中引用函数的返回结果,可以通过\${参数名}的方式进行引用具体参数说明:

参数名

参数类型

参数说明

可写

environment

json

见下面 environment说明

只读

lastOutputForFunction

String

上一个函数的输出结果

只读

slotSummary

json

各槽位的填值情况

只读

global

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

FROM

STRING

会话来源:im_h5,group_chat,single_chat,console_im_test

FROM_SITE

STRING

FROM=group_chat,FROM_SITE是群号

参数引用示例:以全局变量为例,此示例说明了如何为全局变量赋值并在后续的节点中引用,其中eventObj.global[“transedOrderId”]中引用的变量为在对话中创建的全局变量,全局变量创建方法,“示例编写程序4”,函数开始时,通过slots=eventObj.slotSummary,获取图中的所有槽位节点,在下一步是判断,如果“选择订单意图.order_id”有值,则将此值赋值组全局变量,并在后续需要用到的节点可以引用。示例代码:

NodeJS

module.exports.handler = function(event, context, callback) { 
  var eventResult = "";
  try {

      var eventObj = JSON.parse(event.toString());

      /**
      * code block
      **/
      var slots = eventObj.slotSummary;
      var slotValue = slots["选择订单意图.order_id"]||'';
      console.info(null, "slotValue:" + slotValue);
      if (slotValue && slotValue !==''){
        eventObj.global["transedOrderId"] = slotValue;
      } else {
        eventObj.global["transedOrderId"] = eventObj.environment["orderId"];
      }
      console.log(eventObj.global["transedOrderId"]);

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

Python

# -*- coding: utf-8 -*-
import logging
import json


def handler(event, context):
    logger = logging.getLogger()
    logger.info(event)
    eventObj = json.loads(event)

    slots = eventObj["slotSummary"]
    logger.info(slots)
    slotValue = slots["选择订单意图.orderId"]

    if  slotValue is not None:
        eventObj["global"]["transedOrderId"] = slotValue;
    else:
        eventObj["global"]["transedOrderId"] = eventObj["environment"]["orderId"];

    return eventObj

JAVA

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;

/**
 * Created by weili on 2018/8/2.
 *
 * @author weili
 * @date 2018/08/02
 */
public class FunctionHandler implements PojoRequestHandler<JSONObject, JSONObject> {
    @Override
    public JSONObject handleRequest(JSONObject eventObj, Context context) {

        /**
         *  eventObj structure definition
         *
         *  read-only variables
         *  "environment": "Object",
         *  "lastOutputForFunction": "String",
         *  "slotSummary": "Object",
         *
         *  read/write variables
         *  "global": "Object",
         *  "overrideResponse": "Object",
         *  "functionOutput": "String",
         *  "routeVariable": "String"
         */

        JSONObject slots = eventObj.getJSONObject("slotSummary");
        String slotValue = slots.getString("选择订单意图.order_id");
        if (null != slotValue && !"".equals(slotValue)) {
            eventObj.getJSONObject("global").get("transedOrderId") = slotValue;
        } else {
            eventObj.getJSONObject("global").get("transedOrderId") = eventObj.getJSONObject("environment").getString("orderId");
        }

        return eventObj;
    }
}

引用函数返回结果:

image.png | left | 827x459

引用全局变量:

引用全局变量