函數節(jié)點分為內置函數和自定義函數,也可以通過服務注冊中心編寫函數,編寫后使用服務調用節(jié)點進行使用。
內置函數
通用內置函數
支持HTTP/HTTPS協議,您可以完成HTTP標準協議里面的配置。例如:POST/GET方法,query/header/body的請求體。
如果想在配置內置函數時,對變量進行引用,針對不同的變量類型有不同的引用方式:
支持四類變量
槽位變量 intentName.slotName (只讀)
全局變量 botVar.varName(讀寫)
環(huán)境變量 VENDOR_PARAM(只讀)
函數返回 functionOutput(只讀)
自定義函數
在第一次調用函數控制臺開通指引的時候,如果沒有給賬號授權,會提示用戶進行授權,如下圖,授權過程見“函數控制臺開通指引”。
授權后用戶可以綁定在阿里云編寫好的JS 函數,通過選擇服務與函數的方式與畫布中的函數計算綁定,如下圖:
代碼模板(node.js語法):
module.exports.handler = function(event, context, callback) {
/** event structure definition
{
// read-only variables
"environment": "Object",
"lastOutputForFunction": "String",
"slotSummary": "Object",
// read/write variables
"botVar": "Object",
"outputForResponse": "Object",
"outputForFunction": "String",
"routeVariable": "String"
}
**/var eventResult = "";
try {
var eventObj = JSON.parse(event);
// add your code here/**
/**
* code block
**/
eventResult = JSON.stringify(eventObj);
callback(null, eventResult);
} catch (e) {
callback(null, e);
}
};
函數參數說明
參數名 | 參數類型 | 參數說明 | 可寫 |
environment | json | 見下面 environment說明 | 只讀 |
lastOutputForFunction | String | 上一個函數的輸出結果 | 只讀 |
slotSummary | json | 各槽位的填值情況 | 只讀 |
botVar | String | 全局變量,在設計對話流的時候進行定義,在函數執(zhí)行過程中可以直接引用或賦值。 | 是 |
outputForResponse | json | 函數返回結果 | 是 |
outputForFunction | String | 當前函數的輸出值,可以被其它函數通過lastOutputForFunction引用。 | 是 |
routeVariable | String | 函數節(jié)點分支邏輯路由變量,在分支邏輯判斷時需要此參數。 | 是 |
environment參數說明
參數 | 類型 | 說明 |
SENDER_ID | STRING | 發(fā)送者 ID |
SENDER_NICK | STRING | 發(fā)送者昵稱 |
IS_ADMIN | STRING | 是否為企業(yè)管理員 |
SENDER_STAFF_ID | STRING | 當發(fā)送者是企業(yè)機器人所對應的企業(yè)的員工,返回發(fā)送者在企業(yè)的工號。 |
MEMBER_TYPE | STRING | 會員類型 |
TOKEN | STRING | 會話 token |
樣例代碼:
module.exports.handler = function(event, context, callback) {
/** event structure definition
{
// read-only variables
"environment": "Object",
"lastOutputForFunction": "String",
"slotSummary": "Object",
// read/write variables
"botVar": "botVar.varName",
"outputForResponse": "Object",
"outputForFunction": "String",
"routeVariable": "String"
}
**/
var arr = "";
var eventResult = "";
try {
var eventObj = JSON.parse(event);
// add your code here
if (eventObj.environment.hasOwnProperty("orderId")) {
eventObj.routeVariable = '1';
} else {
eventObj.routeVariable = '0';
}
eventResult = JSON.stringify(eventObj);
callback(null, eventResult);
} catch (e) {
arr += e;
eventObj.outputForResponse.htmlText = [arr];
eventResult = JSON.stringify(eventObj);
callback(null, eventResult);
}
};
event數據結構說明:
{
"environment": {
"user_id": "1323011"
},
"lastOutputForFunction": "{\"query\":{\"count\":1,\"created\":\"2018-03-28T10:20:59Z\",\"lang\":\"en-US\",\"results\":{}}}}",
"slotSummary": {
"QueryWeatherIntent.date": "2018-03-29",
"QueryWeatherIntent.date_origin": "明天",
"QueryWeatherIntent.city": "上海",
"QueryWeatherIntent.city_origin": "上海",
},
"botVar": {
"phoneNumber": "13*****000"
},
"outputForResponse": {
"htmlText": [
"It's a fine today.",
"It's a sunny day."
],
"useRandom": true
},
"outputForFunction": "invoke API successfully",
"routeVariable":"OK"
}