Consulte os conectores compatíveis com a Application Integration.

Exemplo de integração de e-commerce

Este exemplo de integração ilustra um caso de uso de cenário de back-end de comércio eletrônico.

Mais informações

Para ver a documentação detalhada que inclui este exemplo de código, consulte:

Exemplo de código

{
  "description": "The integration mimics the back office e-commerce order processing. The request is expected to contain order with one or more line items as json object with sku, quantity, price, vendor etc. If the total price of the order goes beyond $100 then there will be an email sent to approve the order else the order will be processed successfully. For all the items which have vendor as external, there will be an external order created by making a rest call to the external server. The response of the integration will be total order value, filtered list of external items and list of http response status received for each rest call made per external line_item.",
  "triggerConfigs": [{
    "label": "OrderProcessApiTrigger",
    "startTasks": [{
      "taskId": "1"
    }],
    "properties": {
      "Trigger name": "ecom-order-processing_API_1"
    },
    "triggerType": "API",
    "triggerNumber": "1",
    "triggerId": "api_trigger/ecom-order-processing_API_1",
    "position": {
      "x": -294,
      "y": -252
    }
  }, {
    "label": "ReportExternalOrders",
    "startTasks": [{
      "taskId": "6"
    }],
    "properties": {
      "Trigger name": "ecom-order-processing_API_2"
    },
    "triggerType": "API",
    "triggerNumber": "2",
    "triggerId": "api_trigger/ecom-order-processing_API_2",
    "position": {
      "x": 210,
      "y": -84
    }
  }],
  "taskConfigs": [{
    "task": "SuspensionTask",
    "taskId": "2",
    "parameters": {
      "customMessage": {
        "key": "customMessage",
        "value": {
          "stringValue": "Hello user, approval request from EcomOrderProcessing integration."
        }
      },
      "isApproved": {
        "key": "isApproved",
        "value": {
          "stringArray": {
            "stringValues": ["$`Task_2_isApproved`$"]
          }
        }
      },
      "suspensionExpiration": {
        "key": "suspensionExpiration",
        "value": {
          "jsonValue": "{\n  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.SuspensionExpiration\",\n  \"remindAfterMs\": 86400000,\n  \"expireAfterMs\": 172800000\n}"
        }
      },
      "notifications": {
        "key": "notifications",
        "value": {
          "jsonValue": "{\n  \"protoValues\": [{\n    \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.Notification\",\n    \"emailAddress\": {\n      \"email\": \"\\u003cchange-this-to-email-id\\u003e\"\n    }\n  }]\n}"
        }
      }
    },
    "nextTasks": [{
      "taskId": "3",
      "condition": "$`Task_2_isApproved`$ \u003d true",
      "displayName": "Proceed if approved"
    }],
    "taskExecutionStrategy": "WHEN_ALL_SUCCEED",
    "displayName": "Approval",
    "successPolicy": {
      "finalState": "SUSPENDED"
    },
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": -42
    }
  }, {
    "task": "FieldMappingTask",
    "taskId": "1",
    "parameters": {
      "FieldMappingConfigTaskParameterKey": {
        "key": "FieldMappingConfigTaskParameterKey",
        "value": {
          "jsonValue": "{\n  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n  \"mappedFields\": [{\n    \"inputField\": {\n      \"fieldType\": \"DOUBLE_VALUE\",\n      \"transformExpression\": {\n        \"initialValue\": {\n          \"referenceValue\": \"$orders_request$\"\n        },\n        \"transformationFunctions\": [{\n          \"functionType\": {\n            \"jsonFunction\": {\n              \"functionName\": \"GET_PROPERTY\"\n            }\n          },\n          \"parameters\": [{\n            \"initialValue\": {\n              \"literalValue\": {\n                \"stringValue\": \"line_items\"\n              }\n            }\n          }]\n        }, {\n          \"functionType\": {\n            \"jsonFunction\": {\n              \"functionName\": \"FOR_EACH\"\n            }\n          },\n          \"parameters\": [{\n            \"initialValue\": {\n              \"literalValue\": {\n                \"protoValue\": {\n                  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.TransformExpression\",\n                  \"initialValue\": {\n                    \"referenceValue\": \"~x\"\n                  },\n                  \"transformationFunctions\": [{\n                    \"functionType\": {\n                      \"jsonFunction\": {\n                        \"functionName\": \"GET_PROPERTY\"\n                      }\n                    },\n                    \"parameters\": [{\n                      \"initialValue\": {\n                        \"literalValue\": {\n                          \"stringValue\": \"quantity\"\n                        }\n                      }\n                    }]\n                  }, {\n                    \"functionType\": {\n                      \"jsonFunction\": {\n                        \"functionName\": \"TO_DOUBLE\"\n                      }\n                    }\n                  }, {\n                    \"functionType\": {\n                      \"doubleFunction\": {\n                        \"functionName\": \"MULTIPLY\"\n                      }\n                    },\n                    \"parameters\": [{\n                      \"initialValue\": {\n                        \"referenceValue\": \"~x\"\n                      },\n                      \"transformationFunctions\": [{\n                        \"functionType\": {\n                          \"jsonFunction\": {\n                            \"functionName\": \"GET_PROPERTY\"\n                          }\n                        },\n                        \"parameters\": [{\n                          \"initialValue\": {\n                            \"literalValue\": {\n                              \"stringValue\": \"price_per_unit\"\n                            }\n                          }\n                        }]\n                      }, {\n                        \"functionType\": {\n                          \"jsonFunction\": {\n                            \"functionName\": \"TO_DOUBLE\"\n                          }\n                        }\n                      }]\n                    }]\n                  }]\n                }\n              }\n            }\n          }]\n        }, {\n          \"functionType\": {\n            \"jsonFunction\": {\n              \"functionName\": \"TO_DOUBLE_ARRAY\"\n            }\n          }\n        }, {\n          \"functionType\": {\n            \"doubleArrayFunction\": {\n              \"functionName\": \"SUM\"\n            }\n          }\n        }]\n      }\n    },\n    \"outputField\": {\n      \"referenceKey\": \"$total_order_value$\",\n      \"fieldType\": \"DOUBLE_VALUE\",\n      \"cardinality\": \"OPTIONAL\"\n    }\n  }]\n}"
        }
      }
    },
    "nextTasks": [{
      "taskId": "2",
      "condition": "$total_order_value$ \u003e\u003d $threshold_order_value$",
      "displayName": "TotalOrderValue Above Threshold ",
      "description": "Checks if the total order value is greater than or equal to $100"
    }, {
      "taskId": "3",
      "condition": "$total_order_value$ \u003c $threshold_order_value$",
      "displayName": "TotalOrderValue Below Threshold",
      "description": "Checks if the total order value is less than $100"
    }],
    "taskExecutionStrategy": "WHEN_ALL_SUCCEED",
    "displayName": "Find Total Order Price",
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": -294,
      "y": -126
    }
  }, {
    "task": "FieldMappingTask",
    "taskId": "5",
    "parameters": {
      "FieldMappingConfigTaskParameterKey": {
        "key": "FieldMappingConfigTaskParameterKey",
        "value": {
          "jsonValue": "{\n  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n  \"mappedFields\": [{\n    \"inputField\": {\n      \"fieldType\": \"JSON_VALUE\",\n      \"transformExpression\": {\n        \"initialValue\": {\n          \"literalValue\": {\n            \"stringValue\": \"{\\\"STATUS\\\" : \\\"PROCESSING_COMPLETE\\\"}\"\n          }\n        },\n        \"transformationFunctions\": [{\n          \"functionType\": {\n            \"stringFunction\": {\n              \"functionName\": \"TO_JSON\"\n            }\n          }\n        }]\n      }\n    },\n    \"outputField\": {\n      \"referenceKey\": \"$orders_response$\",\n      \"fieldType\": \"JSON_VALUE\",\n      \"cardinality\": \"OPTIONAL\"\n    }\n  }]\n}"
        }
      }
    },
    "taskExecutionStrategy": "WHEN_ALL_SUCCEED",
    "displayName": "Build Response",
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": -294,
      "y": 378
    }
  }, {
    "task": "SubWorkflowForEachLoopV2Task",
    "taskId": "4",
    "parameters": {
      "iterationElementMapping": {
        "key": "iterationElementMapping",
        "value": {
          "stringValue": "sub_integration_input"
        }
      },
      "aggregatorParameterMapping": {
        "key": "aggregatorParameterMapping",
        "value": {
          "jsonValue": "{\n  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.ParameterMap\",\n  \"entries\": [{\n    \"key\": {\n      \"literalValue\": {\n        \"stringValue\": \"`Task_6_responseStatus`\"\n      }\n    },\n    \"value\": {\n      \"literalValue\": {\n        \"stringValue\": \"rest_call_response_status\"\n      }\n    }\n  }]\n}"
        }
      },
      "triggerId": {
        "key": "triggerId",
        "value": {
          "stringValue": "api_trigger/ecom-order-processing_API_2"
        }
      },
      "loopMetadata": {
        "key": "loopMetadata",
        "value": {
          "stringArray": {
            "stringValues": ["$`Task_4_loopMetadata`$"]
          }
        }
      },
      "disableEucPropagation": {
        "key": "disableEucPropagation",
        "value": {
          "booleanValue": false
        }
      },
      "listToIterate": {
        "key": "listToIterate",
        "value": {
          "stringValue": "$filtered_external_items$"
        }
      },
      "workflowName": {
        "key": "workflowName",
        "value": {
          "stringValue": "ExampleIntegration-EcomOrderProcessing"
        }
      },
      "requestParameterMapping": {
        "key": "requestParameterMapping"
      },
      "overrideParameterMapping": {
        "key": "overrideParameterMapping"
      }
    },
    "nextTasks": [{
      "taskId": "5"
    }],
    "taskExecutionStrategy": "WHEN_ALL_SUCCEED",
    "displayName": "For Each Loop",
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": -294,
      "y": 252
    }
  }, {
    "task": "FieldMappingTask",
    "taskId": "3",
    "parameters": {
      "FieldMappingConfigTaskParameterKey": {
        "key": "FieldMappingConfigTaskParameterKey",
        "value": {
          "jsonValue": "{\n  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n  \"mappedFields\": [{\n    \"inputField\": {\n      \"fieldType\": \"JSON_VALUE\",\n      \"transformExpression\": {\n        \"initialValue\": {\n          \"referenceValue\": \"$orders_request$\"\n        },\n        \"transformationFunctions\": [{\n          \"functionType\": {\n            \"jsonFunction\": {\n              \"functionName\": \"GET_PROPERTY\"\n            }\n          },\n          \"parameters\": [{\n            \"initialValue\": {\n              \"literalValue\": {\n                \"stringValue\": \"line_items\"\n              }\n            }\n          }]\n        }, {\n          \"functionType\": {\n            \"jsonFunction\": {\n              \"functionName\": \"FILTER_ELEMENTS\"\n            }\n          },\n          \"parameters\": [{\n            \"initialValue\": {\n              \"literalValue\": {\n                \"protoValue\": {\n                  \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.TransformExpression\",\n                  \"initialValue\": {\n                    \"referenceValue\": \"~x\"\n                  },\n                  \"transformationFunctions\": [{\n                    \"functionType\": {\n                      \"jsonFunction\": {\n                        \"functionName\": \"GET_PROPERTY\"\n                      }\n                    },\n                    \"parameters\": [{\n                      \"initialValue\": {\n                        \"literalValue\": {\n                          \"stringValue\": \"vendor\"\n                        }\n                      }\n                    }]\n                  }, {\n                    \"functionType\": {\n                      \"jsonFunction\": {\n                        \"functionName\": \"TO_STRING\"\n                      }\n                    }\n                  }, {\n                    \"functionType\": {\n                      \"stringFunction\": {\n                        \"functionName\": \"EQUALS\"\n                      }\n                    },\n                    \"parameters\": [{\n                      \"initialValue\": {\n                        \"literalValue\": {\n                          \"stringValue\": \"External\"\n                        }\n                      }\n                    }]\n                  }]\n                }\n              }\n            }\n          }]\n        }]\n      }\n    },\n    \"outputField\": {\n      \"referenceKey\": \"$filtered_external_items$\",\n      \"fieldType\": \"JSON_VALUE\",\n      \"cardinality\": \"OPTIONAL\"\n    }\n  }]\n}"
        }
      }
    },
    "nextTasks": [{
      "taskId": "4"
    }],
    "taskExecutionStrategy": "WHEN_ANY_SUCCEED",
    "displayName": "Filter External Items",
    "description": "Filtering out line_items which have vendor as \"External\" so that we can place order request to the vendor",
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": -294,
      "y": 126
    }
  }, {
    "task": "GenericRestV2Task",
    "taskId": "6",
    "parameters": {
      "throwError": {
        "key": "throwError",
        "value": {
          "booleanValue": false
        }
      },
      "responseBody": {
        "key": "responseBody",
        "value": {
          "stringArray": {
            "stringValues": ["$`Task_6_responseBody`$"]
          }
        }
      },
      "disableSSLValidation": {
        "key": "disableSSLValidation",
        "value": {
          "booleanValue": false
        }
      },
      "httpParams": {
        "key": "httpParams"
      },
      "responseHeader": {
        "key": "responseHeader",
        "value": {
          "stringArray": {
            "stringValues": ["$`Task_6_responseHeader`$"]
          }
        }
      },
      "userAgent": {
        "key": "userAgent",
        "value": {
          "stringValue": ""
        }
      },
      "httpMethod": {
        "key": "httpMethod",
        "value": {
          "stringValue": "POST"
        }
      },
      "responseStatus": {
        "key": "responseStatus",
        "value": {
          "stringArray": {
            "stringValues": ["$`Task_6_responseStatus`$"]
          }
        }
      },
      "url": {
        "key": "url",
        "value": {
          "stringValue": "https://mocktarget.apigee.net/echo"
        }
      },
      "urlFetchingService": {
        "key": "urlFetchingService",
        "value": {
          "stringValue": "HARPOON"
        }
      },
      "useSSL": {
        "key": "useSSL",
        "value": {
          "booleanValue": false
        }
      },
      "requestorId": {
        "key": "requestorId",
        "value": {
          "stringValue": ""
        }
      },
      "urlQueryStrings": {
        "key": "urlQueryStrings"
      },
      "requestBody": {
        "key": "requestBody",
        "value": {
          "stringValue": "$sub_integration_input$"
        }
      },
      "followRedirects": {
        "key": "followRedirects",
        "value": {
          "booleanValue": true
        }
      },
      "additionalHeaders": {
        "key": "additionalHeaders"
      }
    },
    "taskExecutionStrategy": "WHEN_ALL_SUCCEED",
    "displayName": "Call REST Endpoint",
    "externalTaskType": "NORMAL_TASK",
    "position": {
      "x": 210,
      "y": 42
    }
  }],
  "integrationParameters": [{
    "key": "total_order_value",
    "dataType": "DOUBLE_VALUE",
    "displayName": "total_order_value",
    "inputOutputType": "OUT"
  }, {
    "key": "`Task_4_loopMetadata`",
    "dataType": "JSON_VALUE",
    "displayName": "`Task_4_loopMetadata`",
    "isTransient": true,
    "producer": "1_4"
  }, {
    "key": "threshold_order_value",
    "dataType": "DOUBLE_VALUE",
    "defaultValue": {
      "doubleValue": 100.0
    },
    "displayName": "threshold_order_value"
  }, {
    "key": "filtered_external_items",
    "dataType": "JSON_VALUE",
    "displayName": "filtered_external_items",
    "inputOutputType": "OUT"
  }, {
    "key": "orders_request",
    "dataType": "JSON_VALUE",
    "defaultValue": {
      "jsonValue": "{\n  \"order_no\": \"12345\",\n  \"buyer_id\": \"raambo\",\n  \"line_items\": [{\n    \"line\": 1.0,\n    \"sku\": \"tr100\",\n    \"vendor\": \"Internal\",\n    \"quantity\": 1.0,\n    \"price_per_unit\": 10.0\n  }, {\n    \"line\": 2.0,\n    \"sku\": \"tbz\",\n    \"vendor\": \"External\",\n    \"quantity\": 24.0,\n    \"price_per_unit\": 1.0\n  }]\n}"
    },
    "displayName": "orders_request",
    "inputOutputType": "IN",
    "jsonSchema": "{\n  \"properties\": {\n    \"buyer_id\": {\n      \"type\": \"string\"\n    },\n    \"line_items\": {\n      \"items\": {\n        \"properties\": {\n          \"price_per_unit\": {\n            \"type\": \"number\"\n          },\n          \"sku\": {\n            \"type\": \"string\"\n          },\n          \"vendor\": {\n            \"type\": \"string\"\n          },\n          \"line\": {\n            \"type\": \"number\"\n          },\n          \"quantity\": {\n            \"type\": \"number\"\n          }\n        },\n        \"type\": \"object\"\n      },\n      \"type\": \"array\"\n    },\n    \"order_no\": {\n      \"type\": \"string\"\n    }\n  },\n  \"type\": \"object\",\n  \"$schema\": \"http://json-schema.org/draft-04/schema#\"\n}"
  }, {
    "key": "rest_call_response_status",
    "dataType": "STRING_ARRAY",
    "displayName": "rest_call_response_status",
    "inputOutputType": "OUT"
  }, {
    "key": "`Task_2_isApproved`",
    "dataType": "BOOLEAN_VALUE",
    "displayName": "`Task_2_isApproved`",
    "isTransient": true,
    "producer": "1_2"
  }, {
    "key": "`Task_6_responseHeader`",
    "dataType": "STRING_VALUE",
    "displayName": "`Task_6_responseHeader`",
    "isTransient": true,
    "producer": "1_6"
  }, {
    "key": "`Task_6_responseBody`",
    "dataType": "STRING_VALUE",
    "displayName": "`Task_6_responseBody`",
    "isTransient": true,
    "producer": "1_6"
  }, {
    "key": "`Task_6_responseStatus`",
    "dataType": "STRING_VALUE",
    "defaultValue": {
      "stringValue": ""
    },
    "displayName": "`Task_6_responseStatus`",
    "inputOutputType": "OUT",
    "isTransient": true,
    "producer": "1_6"
  }, {
    "key": "orders_response",
    "dataType": "JSON_VALUE",
    "displayName": "orders_response",
    "inputOutputType": "OUT"
  }, {
    "key": "sub_integration_input",
    "dataType": "JSON_VALUE",
    "defaultValue": {
      "jsonValue": "{\n}"
    },
    "displayName": "sub_integration_input",
    "inputOutputType": "IN"
  }]
}

Exemplo de fluxo de integração

A imagem a seguir mostra um exemplo de layout do editor de integração para esse exemplo de código de integração.

imagem mostrando o fluxo de integração de amostra imagem mostrando o fluxo de integração de amostra

Fazer upload e executar a integração de amostra

Para fazer upload e executar a integração de amostra, siga estas etapas:

  1. Salve a amostra de integração como um arquivo .json no seu sistema.
  2. No console do Google Cloud, acesse a página Application Integration.

    Acessar o Application Integration

  3. No menu de navegação, clique em Integrações. A página Lista de integrações é exibida.
  4. Selecione uma integração existente ou clique em CRIAR INTEGRAÇÃO.

    Se você estiver criando uma integração:

    1. Digite um nome e uma descrição na caixa de diálogo Criar integração.
    2. Selecione uma região para a integração.
    3. Selecione uma conta de serviço para a integração. Você pode mudar ou atualizar os detalhes da conta de serviço de uma integração a qualquer momento no painel Resumo da integração na barra de ferramentas.
    4. Clique em Criar.

    Isso abre a integração na página do editor de integração.

  5. No editor de integração, clique em Menu de upload/download e selecione Fazer upload de integração.
  6. Na caixa de diálogo do navegador de arquivos, selecione o arquivo que você salvou na etapa 1 e clique em Open.

    Uma nova versão da integração é criada usando o arquivo enviado.

  7. No editor de integração, clique em Testar.
  8. Clique em Testar integração. Isso vai executar a integração e mostrar o resultado na caixa de diálogo Test Integration.