在上一篇文章中,我使用Oracle Digital Assistant为FlexDeploy实现了一个对话式UI。 今天,我将用Fn Flow丰富它,以便聊天机器人接受发行名称而不是ID来创建快照。 完成后,对话听起来会更加自然:
…
“您可以建立快照吗?” 我问。
“当然,您在想什么版本?” “奥运发布” “创建了要发布的快照 奥运 “她报告。 …
聊天机器人调用Fn Flow,将发布名称作为输入传递给它。 该流程调用Fn函数以获取给定发行版的ID ,然后调用具有该ID的Fn函数调用FlexDeploy Rest API。
因此, createSnapshotFlow会在链中协调两个Fn函数。 使用FlexDeploy REST API获得给定名称的一个发布版本ID :
fdk.handle(function (input) {var res = request('GET', fd_url + '/flexdeploy/rest/v1/release?releaseName=' + input, {});return JSON.parse(res.getBody('utf8'))[0].releaseId;
})
然后使用相同的API为发行ID创建快照:
fdk.handle(function (input) {var res = request('POST', fd_url + '/flexdeploy/rest/v1/releases/'+input+'/snapshot', {json: { action: 'createSnapshot' },});return JSON.parse(res.getBody('utf8'));
})
这种方法的核心是Fn Flow。 createSnapshotFlow的Java代码如下所示:
public class CreateSnapshotFlow {public byte[] createSnapshot(String input) {Flow flow = Flows.currentFlow();FlowFuture<byte[]> stage = flow//invoke checkreleasefn.invokeFunction("01D14PNT7ZNG8G00GZJ000000D", HttpMethod.POST,Headers.emptyHeaders(), input.getBytes()).thenApply(HttpResponse::getBodyAsBytes).thenCompose(releaseId -> flow.//invoke createsnapshotfninvokeFunction("01CXRE2PBANG8G00GZJ0000001", HttpMethod.POST,Headers.emptyHeaders(), releaseId)).thenApply(HttpResponse::getBodyAsBytes);return stage.get();}
请注意,该流使用函数ID而不是函数名称进行操作。 可以使用以下命令行检索所有应用程序函数及其ID的列表:
odaapp是我的Fn应用程序。
而已!
翻译自: https://www.javacodegeeks.com/2019/01/oracle-digital-assistant-fn-project.html