Consultez les connecteurs compatibles avec Application Integration.

Exemple d'intégration d'e-commerce

Cet exemple d'intégration illustre un cas d'utilisation de backend d'e-commerce.

En savoir plus

Pour obtenir une documentation détaillée incluant cet exemple de code, consultez les articles suivants :

Exemple de code

{
  "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"
  }]
}

Exemple de flux d'intégration

L'image suivante présente un exemple de mise en page de l'éditeur d'intégration pour cet exemple de code d'intégration.

image illustrant l'exemple de flux d'intégration Image montrant l'exemple de flux d'intégration

Importer et exécuter l'exemple d'intégration

Pour importer et exécuter l'exemple d'intégration, procédez comme suit:

  1. Enregistrez l'exemple d'intégration en tant que fichier .json sur votre système.
  2. Dans la console Google Cloud, accédez à la page Application Integration.

    Accéder à Application Integration

  3. Dans le menu de navigation, cliquez sur Intégrations. La page Integrations s'affiche.
  4. Sélectionnez une intégration existante ou créez-en une en cliquant sur Créer une intégration.

    Si vous créez une intégration :

    1. Saisissez un nom et une description dans la boîte de dialogue Créer une intégration.
    2. Sélectionnez une région pour l'intégration.
    3. Sélectionnez un compte de service pour l'intégration. Vous pouvez modifier ou mettre à jour les détails du compte de service d'une intégration à tout moment à partir du volet Integration summary (Résumé de l'intégration) dans la barre d'outils de l'intégration.
    4. Cliquez sur Créer.

    Cela entraîne son ouverture dans l'éditeur d'intégrations.

  5. Dans l'éditeur d'intégration, cliquez sur Menu d'importation/de téléchargement, puis sélectionnez Importer l'intégration.
  6. Dans la boîte de dialogue de l'explorateur de fichiers, sélectionnez le fichier que vous avez enregistré à l'étape 1, puis cliquez sur Ouvrir.

    Une nouvelle version de l'intégration est créée à l'aide du fichier importé.

  7. Dans l'éditeur d'intégrations, cliquez sur Tester.
  8. Cliquez sur Tester l'intégration. L'intégration est alors exécutée et le résultat de l'exécution s'affiche dans le volet Test d'intégration.