# Magento 2 (Adobe Commerce) Integration for Botpress ## Overview This Botpress integration allows seamless interaction with **Magento 2 (Adobe Commerce)** to fetch product information, stock data, and sync products to Botpress tables. Perfect for e-commerce chatbots that need real-time product data and inventory management. ## Features - **Product Management:** Retrieve products with flexible search criteria - **Stock Information:** Get real-time stock levels and availability - **Data Synchronization:** Sync products to Botpress tables with automatic schema creation - **Custom Attributes:** Support for custom product attributes - **Advanced Filtering:** Filter products during sync operations - **OAuth Authentication:** Secure API access using OAuth 1.0a --- ## Installation and Configuration ### Step 1: Create Magento Integration 1. Open your **Magento Admin Panel** 2. Navigate to **System > Extensions > Integrations** 3. Click **Add New Integration** 4. Enter a valid name (e.g., `Botpress Integration`) 5. Go to the **API** tab and check: - `Catalog` and all items underneath it - `Inventory` (for stock operations) - `User Content` > `All Reviews` - `Reports` > `Reviews` (By Customers, By Products) - `Attributes` > `Product`, `Attribute Set`, `Ratings`, `Swatches` > **Note:** These additional API scopes are required for full product, review, and attribute support in the integration. > > **To enable review functionality, you must also install the Reviews API module:** > > ```sh > composer require divante/magento2-review-api > > bin/magento setup:upgrade > ``` > > This ensures the necessary endpoints for product reviews are available in your Magento instance. 6. Return to the **Integration Info** tab, enter your admin password, and click **Save** 7. In the integrations list, click **Activate** next to your new integration 8. Copy the following credentials: - **Consumer Key** - **Consumer Secret** - **Access Token** - **Access Token Secret** ### Step 2: Configure Botpress Integration 1. In Botpress, navigate to your bot's **Integrations** section 2. Find and enable the **Magento 2** integration 3. Enter the following configuration: - **Magento Domain URL** (e.g., `www.yourstore.com`) - **Store Code** (optional, defaults to `all` - see Store Code section below) - **Consumer Key** - **Consumer Secret** - **Access Token** - **Access Token Secret** - **Botpress Personal Access Token (PAT)** for Tables API access 4. Click **Save Configuration** > **Note:** The integration will automatically detect your store's base currency during the first sync operation. No additional currency configuration is required. --- ## Store Code Configuration The **Store Code** parameter allows you to specify which Magento store view to use for API requests. This is particularly useful for multi-store Magento installations. ### Default Behavior - **Default Value:** `all` (accesses all store views) - **When to use:** Single-store installations or when you want to access products across all store views ### Multi-Store Configuration For multi-store Magento installations, you can specify a specific store code: - **Store Code Examples:** - `/default` - Default store view - `/en` - English store view - `/fr` - French store view - `/de` - German store view - `/us` - US store view ### How to Find Your Store Code 1. In your **Magento Admin Panel**, navigate to **Stores > All Stores** 2. Click on the **Store View** tab 3. The **Code** column shows the store codes available for your installation 4. Use the code with a leading slash (e.g., `/en` for the English store view) ### Usage Examples - **Single Store:** Leave as default (`all`) or use `default` - **Multi-Store English:** Use `en` to access only English store products - **Multi-Store French:** Use `fr` to access only French store products > **Note:** The store code affects all API requests, including product retrieval, stock information, and sync operations. Make sure to use the appropriate store code for your use case. --- ## Available Actions ### **Get Products** Retrieve products from your Magento catalog using flexible search criteria. > **Note:** To filter products, provide the filter JSON directly (as an array or object) in the input field—do not wrap it in a string, do not use escaped characters. All filter JSON examples in this guide apply to both the **Get Products** and **Sync Products to Botpress Table** actions. #### **Input Example** **Filter by Price:** ```json [{ "field": "price", "condition": "gt", "value": 100 }] ``` **Filter by SKU:** ```json [{ "field": "sku", "condition": "eq", "value": "24-MB01" }] ``` #### **Output** ```json { "result": { "items": [ { "id": 1, "sku": "24-MB01", "name": "Joust Duffle Bag", "price": 34.0, "type_id": "simple", "created_at": "2023-01-01 00:00:00", "updated_at": "2023-01-01 00:00:00" } ], "search_criteria": {}, "total_count": 1 } } ``` ### **Get Stock Item** Get real-time stock information for a specific product by SKU. #### **Input Parameters** | Parameter | Type | Required | Description | | --------- | ------ | -------- | --------------------------------------------------- | | `sku` | String | Yes | The SKU of the product to get stock information for | #### **Usage Example** ```json { "sku": "24-MB01" } ``` #### **Output** ```json { "qty": 50, "is_in_stock": true } ``` ### **Sync Products to Botpress Table** Automatically sync products from Magento to a Botpress table with intelligent schema creation. Large syncs are automatically split across multiple webhook executions to handle timeouts. #### **Input Parameters** | Parameter | Type | Required | Description | | -------------------------------- | ------- | -------- | ------------------------------------------------------------- | | `table_name` | String | Yes | Name of the Botpress table to sync products to | | `custom_columns_to_add_to_table` | String | No | Comma-separated list of custom product attributes | | `filters_json` | String | No | JSON array of filter objects for selective syncing | | `retrieve_reviews` | Boolean | No | Whether to fetch and include product reviews (default: false) | #### **Webhook Continuation Setup** For large product catalogs, the sync action automatically continues in batches using webhook. **No manual intervention is required**—the sync will continue automatically until all products are processed. #### **Default Table Schema** The integration automatically creates a table with the following columns: | Column Name | Type | Description | | ---------------- | ------- | -------------------------------------------------------------------- | | `sku` | text | Product SKU (required, unique) | | `name` | text | Product name | | `description` | text | Product description | | `price` | number | Product price | | `original_price` | number | Original price (if available) | | `currency` | text | Currency code (e.g., USD) | | `image_url` | text | Main product image URL | | `thumbnail_url` | text | Thumbnail image URL | | `stock_qty` | number | Quantity in stock | | `is_in_stock` | boolean | Whether the product is in stock | | `average_rating` | number | Average review rating (only populated if `retrieve_reviews` is true) | | `review_count` | number | Number of reviews (only populated if `retrieve_reviews` is true) | #### **Usage Examples** **Basic Sync:** - **Table Name:** magento_products **With Custom Attributes:** - **Table Name:** magento_products - **Custom Columns to Add to Table:** color,brand,size,material **With Filtering:** - **Table Name:** magento_products - **Custom Columns to Add to Table:** color,tent_type - **Filters JSON:** [{"field": "price", "condition": "gt", "value": 50}] **With Reviews Enabled:** - **Table Name:** magento_products - **Custom Columns to Add to Table:** color,brand - **Retrieve Reviews:** true - **Filters JSON:** [{"field": "price", "condition": "gt", "value": 100}] #### **Output** ```json { "success": true, "synced_count": 150, "total_count": 200, "table_name": "magento_products" } ``` --- ## Advanced Filtering ### Filter Conditions When using `filters_json` in the sync action, you can use the following conditions based on the [Adobe Commerce REST API documentation](https://developer.adobe.com/commerce/webapi/rest/use-rest/performing-searches/#logical-and-and-or-search): | Condition | Description | Example | | --------- | --------------------------------------------- | ---------------------------------------------------------------- | | `eq` | Equals | `{"field": "sku", "condition": "eq", "value": "24-MB01"}` | | `neq` | Not equal | `{"field": "price", "condition": "neq", "value": 0}` | | `gt` | Greater than | `{"field": "price", "condition": "gt", "value": 100}` | | `gteq` | Greater than or equal | `{"field": "price", "condition": "gteq", "value": 50}` | | `lt` | Less than | `{"field": "price", "condition": "lt", "value": 200}` | | `lteq` | Less than or equal | `{"field": "price", "condition": "lteq", "value": 150}` | | `from` | Beginning of a range (must be used with `to`) | `{"field": "price", "condition": "from", "value": 50}` | | `to` | End of a range (must be used with `from`) | `{"field": "price", "condition": "to", "value": 200}` | | `like` | Like (supports SQL wildcard characters) | `{"field": "name", "condition": "like", "value": "jacket"}` | | `nlike` | Not like | `{"field": "name", "condition": "nlike", "value": "test"}` | | `in` | In (comma-separated list of values) | `{"field": "sku", "condition": "in", "value": "SKU1,SKU2,SKU3"}` | | `nin` | Not in (comma-separated list of values) | `{"field": "sku", "condition": "nin", "value": "SKU1,SKU2"}` | | `finset` | A value within a set of values | `{"field": "category_id", "condition": "finset", "value": "5"}` | | `nfinset` | A value that is not within a set of values | `{"field": "category_id", "condition": "nfinset", "value": "5"}` | | `moreq` | More or equal | `{"field": "price", "condition": "moreq", "value": 100}` | | `null` | Is null | `{"field": "description", "condition": "null"}` | | `notnull` | Not null | `{"field": "color", "condition": "notnull"}` | ### Filter Examples #### Filter by Price Range **Table Name:** magentoProducts **Custom Columns to Add to Table:** (leave blank or enter your custom attributes) **Filters JSON:** [ { "field": "price", "condition": "gteq", "value": 50 }, { "field": "price", "condition": "lteq", "value": "200 } ] --- #### Filter by Custom Attributes **Table Name:** magentoProducts **Custom Columns to Add to Table:** color,brand **Filters JSON:** [ { "field": "color", "condition": "notnull" }, { "field": "brand", "condition": "eq", "value": "Nike" } ] --- #### Filter by SKU Pattern **Table Name:** magentoProducts **Custom Columns to Add to Table:** (leave blank or enter your custom attributes) **Filters JSON:** [ { "field": "sku", "condition": "neq", "value": "" } ] --- ### Logical AND and OR Operations **Logical AND (multiple filter groups):** ```json [ { "field": "price", "condition": "gteq", "value": 50 }, { "field": "price", "condition": "lteq", "value": 200 }, { "field": "status", "condition": "eq", "value": "1" } ] ``` **Logical OR (multiple filters in same group):** ```json [ { "field": "sku", "condition": "like", "value": "WSH%" }, { "field": "sku", "condition": "like", "value": "WP%" } ] ``` **Complex AND/OR combination:** ```json [ { "field": "sku", "condition": "like", "value": "WSH%" }, { "field": "sku", "condition": "like", "value": "WP%" }, { "field": "price", "condition": "from", "value": 40 }, { "field": "price", "condition": "to", "value": 49.99 } ] ``` > **Note:** OR operations can only be performed within the same filter group. You cannot perform OR across different filter groups like `(A AND B) OR (X AND Y)`. --- ## 📋 Search Criteria Reference For advanced product filtering, refer to the [Adobe Commerce API Documentation](https://developer.adobe.com/commerce/webapi/rest/use-rest/performing-searches/). --- ## Best Practices ### Performance Optimization - Use specific search criteria to reduce response times ### Data Management - Use custom columns to add to table to include relevant product information - Enable reviews retrieval for products that have customer feedback ### Security - Keep your OAuth credentials secure --- ## 🔗 Additional Resources - [Adobe Commerce API Documentation](https://developer.adobe.com/commerce/webapi/rest/) - [Botpress Tables API](https://botpress.com/docs/learn/reference/tables)
Créez des expériences incroyables pour les agents IA.