Event-based integrations
The following sections demonstrate all the event-based integrations that Adobe Commerce integration starter kit has to offer, including webhook ingestion, event handler actions and event ingestion actions.
The consumer and event handler actions implement the business logic needed to synchronize data between Commerce and the external systems being integrated.
Additionally, boilerplate code, responses, and samples for event ingestion and synchronous webhook actions are provided.
The synchronous webhook responses for each action are configured for the Commerce webhook module. To customize the responses for other implementations, modify the responses.js file.
Ingestion webhook
The Adobe Commerce integration starter kit supports ingestion webhooks. They provide an alternative method to deliver events for scenarios where the calling system cannot produce a request to interact directly with the event provider. For example, if the client cannot add custom headers to the request.
Enabling ingest webhooks
To enable webhooks in the starter kit, uncomment the ingestion section in your app.config.yaml file:
Copied to your clipboardingestion:license: Apache-2.0actions:$include: ./actions/ingestion/actions.config.yaml
Customizing ingest webhooks
Data parameters contain the information of the event to publish. Each event must include an entity, event, and value. The value parameter contains the data to send through the event.
The following entities and their corresponding events are currently available:
productbe-observer.catalog_product_createbe-observer.catalog_product_updatebe-observer.catalog_product_delete
customerbe-observer.customer_createbe-observer.customer_updatebe-observer.customer_delete
customer-groupbe-observer.customer_group_createbe-observer.customer_group_updatebe-observer.customer_group_delete
orderbe-observer.sales_order_status_updatebe-observer.sales_order_shipment_createbe-observer.sales_order_shipment_update
stockbe-observer.catalog_stock_update
The list of entities and their corresponding backoffice events is available in the starter kit's scripts/onboarding/config/events.json file.
The following JSON payload demonstrates a product entity with a create event:
Copied to your clipboard{"data": {"uid": "event_uid_1","event": "be-observer.catalog_product_create","value": {"sku": "PRODUCT_SKU","name": "Product SKU","price": 1,"description": "Product SKU description"}}}
Authentication and parameters
Ingest webhooks are not authenticated by default. To add authentication and enable an authentication check, modify the actions/ingestion/webhook/auth.js file's checkAuthentication function.
You can access any needed environment parameter from params. Use the following parameters to inform your .env authentication settings.
You can provide additional .env parameters by adding them to the inputs section of the actions/ingestion/webhook/actions.config.yaml file:
Copied to your clipboardwebhook:function: ./consumer/index.jsweb: 'no'runtime: nodejs:16inputs:LOG_LEVEL: debugOAUTH_ORG_ID: $OAUTH_ORG_IDOAUTH_CLIENT_ID: $OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET: $OAUTH_CLIENT_SECRETOAUTH_TECHNICAL_ACCOUNT_ID: $OAUTH_TECHNICAL_ACCOUNT_IDOAUTH_TECHNICAL_ACCOUNT_EMAIL: $OAUTH_TECHNICAL_ACCOUNT_EMAILIO_MANAGEMENT_BASE_URL: $IO_MANAGEMENT_BASE_URLIO_CONSUMER_ID: $IO_CONSUMER_IDIO_PROJECT_ID: $IO_PROJECT_IDIO_WORKSPACE_ID: $IO_WORKSPACE_IDAIO_runtime_namespace: $AIO_runtime_namespaceYOUR_PARAM: $YOUR_PARAM_ENVannotations:require-adobe-auth: falsefinal: true
consumer action
The main purpose of this action is to route events to the event handler action. Normally, this routing is determined by the name of the event received.
The consumer action is subscribed to a set of events. In many cases, all the events originate from the same entity, such as the product entity. However, there are examples where a consumer receives events from multiple entities belonging to the same "domain", such as order and shipment. When the event provider receives an event, this runtime action will be automatically activated.
The response returned by a consumer action is expected to be consistent with the response received from the activation of the subsequent event handler action. For example, if the event handler action returns an HTTP/400 status, the consumer action is expected to respond with the same status. This ensures that the event processing is appropriately retried based on the event handler action response.
When it receives an event that it does not know how to route, it is expected to return HTTP/400 status. This will prevent the event handling from being retried.
By default, consumer actions have the following response:
Copied to your clipboard// ./actions/responses.js#successResponsereturn {statusCode: 200,body: {type: 'EVENT TYPE',response: {// Response returned by the event handler action}}}
Copied to your clipboard// ./actions/responses.js#errorResponsereturn {error: {statusCode: 400, // 404, 500, etc,body : {error: 'YOUR ERROR MESSAGE'}}}
event handler action
The main purpose of this action is to manage an event that notifies you about a change in one of the integrated systems. Typically, its business logic includes an API call to propagate the changes to the other system being integrated.
The consumer action synchronously activates these event handler actions to delegate the handling of an event.
The response returned by an event handler action includes a statusCode attribute. This attribute allows the consumer action to propagate the response HTTP status code upstream to properly reflect the event registration information located on the Debug Tracing tab in the Adobe Developer Console.
By default, event handler actions have the following response:
Copied to your clipboard// ./actions/responses.js#actionSuccessResponsereturn {statusCode: 200,body: {success: true,message: 'YOUR SUCCESS MESSAGE'}}
Copied to your clipboard// ./actions/responses.js#actionErrorResponsereturn {statusCode: 400, // 404, 500, etcbody: {success: false,error: 'YOUR ERROR MESSAGE'}}
event ingestion action
The main purpose of this runtime action is to provide an alternative method to deliver events to the integration, if the 3rd-party, backoffice application cannot fulfill the Events Publishing API's requirements.
For more information, see Ingestion webhooks.
To get the URL of the webhook, run the following command:
Copied to your clipboardaio runtime action get ingestion/webhook --url
By default, event ingestion actions have the following response:
Copied to your clipboard// ./actions/responses.js#successResponsereturn {statusCode: 200,body: {type: 'EVENT TYPE',response: {success: true,message: 'Event published successfully'}}}
Copied to your clipboard// ./actions/responses.js#errorResponsereturn {error: {statusCode: 400, // 404, 500, etc,body : {error: 'YOUR ERROR MESSAGE'}}}
Sample code
The Adobe Commerce Extensibility Code Samples repository contains samples that illustrate the following concepts:
