全部产品
阿里云办公

示例编写程序1 将对话参数传递至函数里

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

场景描述

在电商领域,很多时候用户希望查询自己的订单情况,比如订单进度、是否发货等等,我们希望机器人能够通过对话的方式,来向用户收集订单信息,并且根据订单信息进行下一步的查询等操作。在这个例子中,对话流程中有一个叫做“查订单”的意图,包含一个叫做“orderId”的参数。在对话流设计中,我们会设计填槽节点来让机器人通过对话的方式收集用户的订单号orderId。随即在函数节点中,我们想获取机器人收集到的orderId,利用它来做进一步操作,比如在这个例子中我们根据订单号的值来进行分支判断。如果订单号是以“A_”开头的话,那么属于A类订单,否则属于其他类订单。

代码示例

在这个例子中,首先获取到eventObj中的slotSummary字段,slotSummary字段中包含了所有对话中意图的参数,以Key-Value的形式存储,Key的组成为“意图名.参数名”。接下来程序通过判断查订单意图的orderId参数的值来做了一个分支判断。分支判断的具体应用在后面的例子中会涉及到。

Node.js

  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. "overrideResponse": "Object",
  11. "functionOutput": "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. var slots = eventObj["slotSummary"];
  21. var orderId = slots["查订单.orderId"];
  22. if (orderId.startsWith("A_")) {
  23. eventObj.routeVariable = '1';
  24. } else {
  25. eventObj.routeVariable = '0';
  26. }
  27. eventResult = JSON.stringify(eventObj);
  28. callback(null, eventResult);
  29. } catch (e) {
  30. eventResult = JSON.stringify(eventObj);
  31. callback(null, eventResult);
  32. }
  33. };

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. orderId = slots[u"查订单.orderId"]
  11. if orderId.startswith("A_"):
  12. eventObj["routeVariable"] = "1"
  13. else:
  14. eventObj["routeVariable"] = "0"
  15. return eventObj

Java

  1. package com.aliyun.openservices.tcp.example.handler;
  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. public class FunctionHandler implements PojoRequestHandler<JSONObject, JSONObject> {
  7. @Override
  8. public JSONObject handleRequest(JSONObject eventObj, Context context) {
  9. /**
  10. * eventObj structure definition
  11. *
  12. * read-only variables
  13. * "environment": "Object",
  14. * "lastOutputForFunction": "String",
  15. * "slotSummary": "Object",
  16. *
  17. * read/write variables
  18. * "global": "Object",
  19. * "overrideResponse": "Object",
  20. * "functionOutput": "String",
  21. * "routeVariable": "String"
  22. */
  23. JSONObject slots = eventObj.getJSONObject("slotSummary");
  24. String orderId = slots.getString("查订单.orderId");
  25. if (orderId.startsWith("A_")) {
  26. eventObj.put("routeVariable", "1");
  27. } else {
  28. eventObj.put("routeVariable", "0");
  29. }
  30. return eventObj;
  31. }
  32. }