延续示例1中的查订单场景,如果想要根据不同的订单号类型,来进行不同的处理逻辑和回复不同的内容,可以在对话流的设计图中进行分支处理。如果当订单为A类订单的时候,可以去查询A类订单的接口,然后进行回复,如果是其他类别订单,则直接进行静态内容的回复。
示例代码
在对话工厂的函数节点中,可以通过打开分支(switch)功能进行对话流程的分支处理。这其中,分支功能的分支判断逻辑都是根据系统内置变量routeVariable的值来执行的。
在“分支判断”函数节点中,打开了分支设置,并且在该节点下游连接了两个节点,如果当订单号是A类订单号时(订单号以“A_”开头),回复A类订单的回复话语,其他订单类别时回复另一种话语。可以看到,分支判断是根据routeVariable的值来判断的,但routeVariable=1时,走标记为“A“的路径,但routeVariable=0时,走标记为“B“的路径。那么,如何对routeVariable进行赋值呢,下面的示例代码中进行了这个操作。代码中通过判断查订单意图的orderId参数,如果订单号以”A_“开头,那么就将routeVariable赋值为1,否值赋值为0。这样就成功的通过自定义代码,对分支逻辑进行了判断。
Node.js
module.exports.handler = function(event, context, callback) {
/** event structure definition
{
// read-only variables
"environment": "Object",
"lastOutputForFunction": "String",
"slotSummary": "Object",
// read/write variables
"global": "Object",
"outputForResponse": "Object",
"outputForFunction": "String",
"routeVariable": "String"
}
**/
var arr = "";
var eventResult = "";
try {
var eventObj = JSON.parse(event);
// add your code here
var slots = eventObj["slotSummary"];
var orderId = slots["查订单.orderId"];
if (orderId.startsWith("A_")) {
eventObj.routeVariable = '1';
} else {
eventObj.routeVariable = '0';
}
eventResult = JSON.stringify(eventObj);
callback(null, eventResult);
} catch (e) {
eventResult = JSON.stringify(eventObj);
callback(null, eventResult);
}
};
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)
orderId = slots[u"查订单.orderId"]
if orderId.startswith("A_"):
eventObj["routeVariable"] = "1"
else:
eventObj["routeVariable"] = "0"
return eventObj
Java
package com.aliyun.openservices.tcp.example.handler;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.fc.runtime.Context;
import com.aliyun.fc.runtime.PojoRequestHandler;
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",
* "outputForResponse": "Object",
* "outputForFunction": "String",
* "routeVariable": "String"
*/
JSONObject slots = eventObj.getJSONObject("slotSummary");
String orderId = slots.getString("查订单.orderId");
if (orderId.startsWith("A_")) {
eventObj.put("routeVariable", "1");
} else {
eventObj.put("routeVariable", "0");
}
return eventObj;
}
}
文档内容是否对您有帮助?