全部产品
阿里云办公

函数节点

更新时间:2018-07-10 14:08:10

1. 内置函数

通用内置函数

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

image.png | left | 281x224

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

1.槽值引用

  • 原始值引用:${intent.slot.origin}
  • 归一值引用:${intent.slot}

2.全局变量:${global.var}

3.外部传入的环境变量:${var}

2. 自定义函数

在第一次调用函数计算的时候,如果没有给 DS 账号授权,会提示用户进行授权,如下图,授权过程见“函数计算章节”

image.png | left | 394x186

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

image.png | left | 827x334

代码模板(nodejs语法):

  1. module.exports.handler = function(event, context, callback) {
  2. /** event structure definition
  3. {
  4. // read-only variables
  5. "environment": "Object",
  6. "lastOutputForFunction": "String",
  7. "slotSummary": "Object",
  8. // read/write variables
  9. "global": "Object",
  10. "outputForResponse": "Object",
  11. "outputForFunction": "String",
  12. "routeVariable": "String"
  13. }
  14. **/
  15. var eventResult = "";
  16. try {
  17. var eventObj = JSON.parse(event);
  18. // add your code here
  19. /**
  20. * code block
  21. **/
  22. eventResult = JSON.stringify(eventObj);
  23. callback(null, eventResult);
  24. } catch (e) {
  25. callback(null, e);
  26. }
  27. };

函数参数说明

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

样例代码:

  1. module.exports.handler = function(event, context, callback) {
  2. /** event structure definition
  3. {
  4. // read-only variables
  5. "environment": "Object",
  6. "lastOutputForFunction": "String",
  7. "slotSummary": "Object",
  8. // read/write variables
  9. "global": "Object",
  10. "outputForResponse": "Object",
  11. "outputForFunction": "String",
  12. "routeVariable": "String"
  13. }
  14. **/
  15. var arr = "";
  16. var eventResult = "";
  17. try {
  18. var eventObj = JSON.parse(event);
  19. // add your code here
  20. if (eventObj.environment.hasOwnProperty("orderId")) {
  21. eventObj.routeVariable = '1';
  22. } else {
  23. eventObj.routeVariable = '0';
  24. }
  25. eventResult = JSON.stringify(eventObj);
  26. callback(null, eventResult);
  27. } catch (e) {
  28. arr += e;
  29. eventObj.outputForResponse.htmlText = [arr];
  30. eventResult = JSON.stringify(eventObj);
  31. callback(null, eventResult);
  32. }
  33. };

event数据结构说明:

  1. {
  2. "environment": {
  3. "user_id": "1323011"
  4. },
  5. "lastOutputForFunction": "{\"query\":{\"count\":1,\"created\":\"2018-03-28T10:20:59Z\",\"lang\":\"en-US\",\"results\":{}}}}",
  6. "slotSummary": {
  7. "QueryWeatherIntent.date": "2018-03-29",
  8. "QueryWeatherIntent.date_origin": "明天",
  9. "QueryWeatherIntent.city": "上海",
  10. "QueryWeatherIntent.city_origin": "上海",
  11. },
  12. "global": {
  13. "phoneNumber": "13612431276"
  14. },
  15. "outputForResponse": {
  16. "htmlText": [
  17. "It's a fine today.",
  18. "It's a sunny day."
  19. ],
  20. "useRandom": true
  21. },
  22. "outputForFunction": "invoke API successfully",
  23. "routeVariable":"OK"
  24. }