全部产品
阿里云办公

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

更新时间:2018-09-27 13:51:49

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

参数名 参数类型 参数说明 可写
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

  1. module.exports.handler = function(event, context, callback) {
  2. var eventResult = "";
  3. try {
  4. var eventObj = JSON.parse(event.toString());
  5. /**
  6. * code block
  7. **/
  8. var slots = eventObj.slotSummary;
  9. var slotValue = slots["选择订单意图.order_id"]||'';
  10. console.info(null, "slotValue:" + slotValue);
  11. if (slotValue && slotValue !==''){
  12. eventObj.global["transedOrderId"] = slotValue;
  13. } else {
  14. eventObj.global["transedOrderId"] = eventObj.environment["orderId"];
  15. }
  16. console.log(eventObj.global["transedOrderId"]);
  17. eventResult = JSON.stringify(eventObj);
  18. callback(null, eventResult);
  19. } catch (e) {
  20. console.error(null, e);
  21. callback(null, e);
  22. }
  23. };

Python

  1. # -*- coding: utf-8 -*-
  2. import logging
  3. import json
  4. def handler(event, context):
  5. logger = logging.getLogger()
  6. logger.info(event)
  7. eventObj = json.loads(event)
  8. slots = eventObj["slotSummary"]
  9. logger.info(slots)
  10. slotValue = slots["选择订单意图.orderId"]
  11. if slotValue is not None:
  12. eventObj["global"]["transedOrderId"] = slotValue;
  13. else:
  14. eventObj["global"]["transedOrderId"] = eventObj["environment"]["orderId"];
  15. return eventObj

JAVA

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.aliyun.fc.runtime.Context;
  5. import com.aliyun.fc.runtime.PojoRequestHandler;
  6. /**
  7. * Created by weili on 2018/8/2.
  8. *
  9. * @author weili
  10. * @date 2018/08/02
  11. */
  12. public class FunctionHandler implements PojoRequestHandler<JSONObject, JSONObject> {
  13. @Override
  14. public JSONObject handleRequest(JSONObject eventObj, Context context) {
  15. /**
  16. * eventObj structure definition
  17. *
  18. * read-only variables
  19. * "environment": "Object",
  20. * "lastOutputForFunction": "String",
  21. * "slotSummary": "Object",
  22. *
  23. * read/write variables
  24. * "global": "Object",
  25. * "overrideResponse": "Object",
  26. * "functionOutput": "String",
  27. * "routeVariable": "String"
  28. */
  29. JSONObject slots = eventObj.getJSONObject("slotSummary");
  30. String slotValue = slots.getString("选择订单意图.order_id");
  31. if (null != slotValue && !"".equals(slotValue)) {
  32. eventObj.getJSONObject("global").get("transedOrderId") = slotValue;
  33. } else {
  34. eventObj.getJSONObject("global").get("transedOrderId") = eventObj.getJSONObject("environment").getString("orderId");
  35. }
  36. return eventObj;
  37. }
  38. }

引用函数返回结果:

image.png | left | 827x459

引用全局变量:

image.png | left | 827x569