이 가이드에서는 동적 변수를 만드는 방법을 설명합니다.
가능한 경우 변수는 매니페스트 파일에서 입력 변수, 출력 변수 또는 맞춤 리소스로 정적으로 정의해야 합니다. 하지만 입력의 특성이 다르기 때문에 사용자가 에이전트를 구성할 때만 정의할 수 있는 변수가 필요한 상황도 있습니다. 예를 들어 Google Forms의 질문과 답변(및 콘텐츠) 수는 에이전트 구성 중에 특정 양식을 선택할 때까지 확인할 수 없습니다.
동적 변수를 사용하면 매니페스트 파일과 단계의 코드에서 동적 출력 세트를 생성하는 입력을 정의하여 이러한 사례를 처리할 수 있습니다.
매니페스트 파일에서 출력 변수 정의
매니페스트 파일에서 다음 단계를 따르세요.
inputs[]에서 동적 입력 값을 허용하는 입력 변수를 지정합니다.outputs[]에서 동적 출력 변수 집합을 반환하는 출력 변수를 지정합니다. 이 출력에dataType"workflowResourceDefinitionId": "dynamic_resource_id"을 지정합니다.동적 변수를 처리할 맞춤 리소스를 정의합니다.
"resourceType": "DYNAMIC"및"providerFunction": "onDynamicProviderFunction"로workflowResourceDefinitions를 지정합니다.id은outputs[]에 설정된workflowResourceDefinitionId와 일치해야 합니다. 커스텀 리소스에 대해 자세히 알아보려면 커스텀 리소스 정의를 참고하세요.dynamicResourceDefinitionProvider을 단계의 코드에 있는 해당 함수의 이름으로 설정합니다. 이 예에서는 동적 입력 값을 허용하고 맞춤 리소스를 반환하는 구성 카드를 정의하고 반환하는onDynamicDefinitionFunction()입니다.
JSON
"flows": {
"workflowElements" : [{
"id": "getDynamicVariable",
"state": "ACTIVE",
"name": "Get Dynamic Variable",
"description": "Get Dynamic Variable",
"workflowAction": {
"inputs": [
{
"id": "dynamic_resource_input",
"description": "Dynamic Resource Input",
"cardinality": "SINGLE",
"dataType": {
"basicType": "INTEGER"
}
}
],
"outputs": [
{
"id": "dynamic_resource_output",
"description": "Dynamic Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_definition_1"
}
}
}
],
"onConfigFunction": "onDynamicVariableConfigFunction",
"onExecuteFunction": "onDynamicVariableExecuteFunction"
}
}],
"workflowResourceDefinitions": [{
"id": "resource_definition_1",
"name": "Dynamic Resource",
"providerFunction": "onDynamicProviderFunction",
"resourceType" : "DYNAMIC"
}],
"dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}
코드에서 출력 변수 정의
단계의 코드에는 다음 함수가 포함됩니다.
onDynamicVariableConfigFunction(): 동적 입력 위젯이 있는 구성 카드를 빌드하고 반환합니다. 이 함수의 이름은 매니페스트 파일의onConfigFunction()값과 일치해야 합니다. 동적 입력 위젯의 이름은 매니페스트 파일에 설정된id와 일치해야 합니다. 이 동적 입력 위젯을 사용하면 사용자가 Google Forms를 선택하는 등 단계를 구성할 때 동적 변수를 설정할 수 있습니다.onDynamicVariableExecuteFunction(): 단계가 실행될 때 동적 변수 데이터를 출력으로 반환합니다. 이 함수의 이름은 매니페스트 파일의onExecuteFunction()값과 일치해야 합니다.returnOutputVariablesAction의variableData키는 매니페스트 파일에 설정된 출력 변수의id와 일치해야 합니다. 동적 리소스는e.workflow.resourceFieldsDefinitionRetrieval의 이벤트 객체에서 찾을 수 있습니다. 동적 리소스의 모든 입력은 구성 시간에 사용할 수 있어야 하므로 입력은 변수를 참조할 수 없습니다.onDynamicDefinitionFunction(): 이벤트 객체(특히resourceFieldsDefinitionRetrieval)에서 동적 변수 데이터를 가져오고 이후 단계의 출력 변수 이름과onDynamicProviderFunction()가 각 출력 변수에 해당하는 값을 제공할 수 있도록 선택기를 제공하는resourceFieldsDefinitionRetrievedAction를 반환합니다.resourceId는 매니페스트 파일에 설정된workflowResourceDefinitions[]배열의 항목id와 일치해야 합니다.onDynamicProviderFunction():resourceId및workflowResourceDefinitionId에 액세스하여 선택기를 키로 사용하여 각 출력 변수의 값을 제공합니다.
Apps Script
function onDynamicVariableConfigFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextInput()
.setFieldName("dynamic_resource_input")
.setTitle("Dynamic Resource Input")
.setHint("Input a Integer value between 1 and 3\(inclusive\) for corresponding number of output variables")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onDynamicDefinitionFunction(e) {
console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];
let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
.setResourceId("resource_definition_1")
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_1")
.setDisplayText("Question 1")
);
if (input_value == 2 || input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_2")
.setDisplayText("Question 2")
);
}
if (input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_3")
.setDisplayText("Question 3")
);
}
let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
.addDynamicResourceDefinition(resourceDefinitions);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicVariableExecuteFunction(e) {
console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.setVariableDataMap({
"dynamic_resource_output": AddOnsResponseService.newVariableData()
.addResourceReference("my_dynamic_resource_id")
});
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicProviderFunction(e) {
console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));
// resourceId == "my_dynamic_resource_id"
var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
// workflowResourceDefinitionId == "resource_definition_1"
var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(
AddOnsResponseService.newResourceData()
.addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
.addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
.addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
);
const hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
const renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}