在对话流中引用函数的返回结果,可以通过\${参数名}的方式进行引用具体参数说明:
参数名 | 参数类型 | 参数说明 | 可写 |
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;
}
}