이 가이드에서는 Google Workspace Flows의 맞춤 리소스를 정의하는 방법을 설명합니다.
맞춤 리소스는 여러 변수를 함께 그룹화하기 위해 정의할 수 있는 맞춤 데이터 구조입니다. 예를 들어 CRM 리드를 만들려면 이메일 주소, 상세 주소, 이름이 포함된 맞춤 리소스를 전달합니다.
커스텀 리소스를 정의하는 방법에는 두 가지가 있습니다.
- 참조: 맞춤 리소스를 참조로 출력하면 전체 맞춤 리소스 객체 대신 ID로 맞춤 리소스를 반환합니다. 이렇게 하면 흐름 단계 간에 전송되는 데이터가 줄어들어 성능이 개선됩니다. 데이터에 보조 조회가 필요한 경우 ID를 반환하면 이러한 조회를 실행하는 데 유용합니다.
- 값으로: 실행 중에 데이터를 가져와야 하거나 커스텀 리소스가 작고 민감한 데이터가 포함되어 있지 않은 경우 이 메서드를 사용합니다.
커스텀 리소스를 참조로 출력
맞춤 리소스를 참조로 출력하면 전체 맞춤 리소스 객체 대신 ID로 맞춤 리소스를 반환할 수 있습니다. 맞춤 리소스가 크거나 복잡한 경우 ID만 전달하면 흐름 단계 간에 전송되는 데이터가 줄어 성능이 향상됩니다.
맞춤 리소스를 참조로 출력하려면 단계의 매니페스트 파일과 코드를 수정합니다.
매니페스트 파일 수정
매니페스트 파일에서 다음을 수행합니다.
workflowResourceDefinitions를 지정하고id,fields[]배열,providerFunction를 할당합니다.workflowResourceDefinitions은 맞춤 리소스의 데이터 유형과 콘텐츠를 정의하는 구조입니다.fields[]배열 내에서 맞춤 리소스를 구성하는 개별 필드를 지정합니다. 이 예에서는field_1및field_2입니다.providerFunction의 값은 단계 코드의 함수 이름과 일치해야 합니다.providerFunction는 필요할 때 실제 맞춤 리소스 콘텐츠를 가져옵니다.JSON
{ "workflowResourceDefinitions": [ { "id": "resource_id", "name": "Custom Resource", "fields": [ { "selector": "field_1", "name": "Field 1", "dataType": { "basicType": "STRING" } }, { "selector": "field_2", "name": "Field 2", "dataType": { "basicType": "STRING" } } ], "providerFunction": "onMessageResourceFunction" } ] }outputs[]에서 동적 출력 변수 집합을 반환하는 출력 변수를 지정합니다. 출력 변수에는resourceType속성이 있는dataType가 있습니다.cardinality값은SINGLE이어야 합니다.JSON
"outputs": [{ "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceType": { "workflowResourceDefinitionId": "resource_id" } } }]
다음은 커스텀 리소스를 정의하는 전체 매니페스트 파일입니다.
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_id"
}
}
}
],
"onConfigFunction": "onConfigResourceFunction",
"onExecuteFunction": "onExecuteResourceFunction"
}
}
],
"workflowResourceDefinitions": [
{
"id": "resource_id",
"name": "Custom Resource",
"fields": [
{
"selector": "field_1",
"name": "Field 1",
"dataType": {
"basicType": "STRING"
}
},
{
"selector": "field_2",
"name": "Field 2",
"dataType": {
"basicType": "STRING"
}
}
],
"providerFunction": "onMessageResourceFunction"
}
]
}
}
}
코드 수정하기
애플리케이션 코드에서 다음을 수행합니다.
필요할 때 맞춤 리소스 콘텐츠를 가져오는
providerFunction(이 예에서는onMessageResourceFunction())를 구현합니다. 단계의 이벤트 객체 JSON 페이로드인 입력e를 가져와 맞춤 리소스 ID를 설정합니다.Apps Script
function onMessageResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; var field_1 = ...; var field_2 = ...; return { "hostAppAction": { "workflowAction": { "resourceRetrievedAction": { "resourceJson": JSON.stringify({ "field_1": field_1, "field_2": field_2, }) } } } }; }제공자 함수는 API를 호출하거나 데이터베이스를 읽는 등 적절한 메커니즘으로 검색하여 맞춤 리소스의 값을 반환해야 합니다.
ID로 커스텀 리소스를 가져와 반환하려면
onExecuteResourceFunction()에 표시된 대로returnOutputVariablesAction로 반환합니다.Apps Script
function onExecuteResourceFunction(e) { var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId; return { "hostAppAction": { "workflowAction": { "returnOutputVariablesAction": { "variableValues": [{ "variableId": "resource_data", "variableData": { "resourceReferences" : [ resource_id ] } }] } } } }; }
다음은 전체 예입니다.
Apps Script
function onMessageResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
var field_1 = ...;
var field_2 = ...;
return {
"hostAppAction": {
"workflowAction": {
"resourceRetrievedAction": {
"resourceJson": JSON.stringify({
"field_1": field_1,
"field_2": field_2,
})
}
}
}
};
}
function onExecuteResourceFunction(e) {
var resource_id = e.workflow.resourceRetrieval.resourceReference.resourceId;
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceReferences" : [ resource_id ]
}
}]
}
}
}
};
}
맞춤 리소스를 값으로 출력
맞춤 리소스를 참조로 출력할 때는 전체 맞춤 리소스 객체 대신 ID로 맞춤 리소스를 반환합니다. 전체 리소스 객체를 전달해야 하는 경우 resourceValues를 사용하면 됩니다.
resourceValues에서 단계의 출력을 정의합니다.
맞춤 리소스를 값으로 출력하려면 단계의 매니페스트 파일과 코드를 수정하세요.
매니페스트 파일 수정
매니페스트 파일에서 다음을 수행합니다.
workflowResourceDefinitions를 지정하고 ID를 할당합니다.workflowResourceDefinitions는 맞춤 리소스의 데이터 유형과 콘텐츠를 정의하는 구조입니다.workflowResourceDefinitions내에서 맞춤 리소스를 구성하는 개별 필드를 지정합니다. 이 예에서는field_1및field_2입니다.값이 단계의 코드에 있는 함수의 이름인
providerFunction를 지정합니다.providerFunction는 필요할 때 실제 맞춤 리소스 콘텐츠를 가져옵니다.JSON
{ "workflowResourceDefinitions": [ { "id": "resource_id", "name": "Custom Resource", "fields": [ { "selector": "field_1", "name": "Field 1", "dataType": { "basicType": "STRING" } }, { "selector": "field_2", "name": "Field 2", "dataType": { "basicType": "STRING" } } ], "providerFunction": "onExecuteResourceAsValuesFunction" } ] }outputs[]에서resourceValues을 반환하는 출력 변수를 지정합니다.cardinality값은SINGLE이어야 합니다.JSON
{ "outputs": [ { "id": "resource_data", "description": "Resource Data", "cardinality": "SINGLE", "dataType": { "resourceValues": { "value1": "value one" } } } ] }
다음은 맞춤 리소스를 정의하는 전체 매니페스트 파일입니다.
JSON
{
"timeZone": "America/Los_Angeles",
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"addOns": {
"common": {
"name": "Calculator",
"logoUrl": "https://www.gstatic.com/images/branding/productlogos/calculator_search/v1/web-24dp/logo_calculator_search_color_1x_web_24dp.png",
"useLocaleFromApp": true
},
"flows": {
"workflowElements": [
{
"id": "getResourceData",
"state": "ACTIVE",
"name": "Get Resource by ID",
"description": "Get Resource by ID",
"workflowAction": {
"outputs": [
{
"id": "resource_data",
"description": "Resource Data",
"cardinality": "SINGLE",
"dataType": {
"resourceValues": {
"value1": "value one"
}
}
}
],
"onConfigFunction": "onConfigResourceFunction",
"onExecuteFunction": "onExecuteResourceFunction"
}
}
],
"workflowResourceDefinitions": [
{
"id": "resource_id",
"name": "Custom Resource",
"fields": [
{
"selector": "field_1",
"name": "Field 1",
"dataType": {
"basicType": "STRING"
}
},
{
"selector": "field_2",
"name": "Field 2",
"dataType": {
"basicType": "STRING"
}
}
],
"providerFunction": "onExecuteResourceAsValuesFunction"
}
]
}
}
}
코드 수정하기
애플리케이션 코드에서 맞춤 리소스를 JSON으로 정의하고 반환하는 providerFunction(이 예에서는 onExecuteResourceAsValuesFunction())를 구현합니다. 여기서는 resourceJSON로 추상화됩니다.
Apps Script
function onExecuteResourceAsValuesFunction() {
var field_1 = "value 1";
var field_2 = "value 2";
var resourceJSON = JSON.stringify({
"field_1": field_1,
"field_2": field_2,
});
return {
"hostAppAction": {
"workflowAction": {
"returnOutputVariablesAction": {
"variableValues": [{
"variableId": "resource_data",
"variableData": {
"resourceValues" : [ resourceJSON ]
}
}]
}
}
}
};
}