eikona-media/akeneo5-0-tessa-connector
Verify Akeneo API Readiness
Ensure your Akeneo 5.0 instance API is functional (test via GET /api/rest/v1/products).
Debug Apache misconfigurations if headers are stripped (see Akeneo API Troubleshooting).
Install the Bundle
composer require eikona-media/akeneo5-0-tessa-connector
Register Routes
Append to config/routes/routes.yml:
tessa_media:
resource: "@EikonaTessaConnectorBundle/Resources/config/routing.yml"
Configure TESSA Connection
Set TESSA API credentials in config/packages/eikona_tessa_connector.yaml:
eikona_tessa_connector:
api:
endpoint: "https://your-tessa-instance.com/api"
username: "your_username"
password: "your_password"
First Use Case: Sync a Product’s Media Use the CLI command to push a product’s media to TESSA:
php bin/console eikona:tessa:push-product-media <product-sku>
Media Synchronization
php bin/console eikona:tessa:pull-media <product-sku>
php bin/console eikona:tessa:push-product-media <product-sku>
--batch flag for bulk operations (e.g., php bin/console eikona:tessa:push-product-media --batch).Event-Driven Integration
Subscribe to Akeneo events (e.g., product.save) to auto-sync media:
// config/services.yaml
services:
App\EventListener\TessaMediaSyncListener:
tags:
- { name: kernel.event_listener, event: product.save, method: onProductSave }
// src/EventListener/TessaMediaSyncListener.php
use Eikona\TessaConnectorBundle\Service\TessaMediaService;
class TessaMediaSyncListener {
public function __construct(private TessaMediaService $tessaMediaService) {}
public function onProductSave(ProductInterface $product) {
$this->tessaMediaService->pushProductMedia($product->getCode());
}
}
Custom Field Mapping
Override default field mappings (e.g., for custom TESSA metadata) in config/packages/eikona_tessa_connector.yaml:
eikona_tessa_connector:
field_mapping:
tessa_custom_field: "custom_attribute_code"
AkeneoApiClient for custom API calls:
$client = $this->container->get('eikona_tessa_connector.akeneo_api_client');
$products = $client->getProducts(['limit' => 10]);
# config/packages/monolog.yaml
handlers:
tessa:
type: stream
path: "%kernel.logs_dir%/tessa.log"
level: debug
symfony/messenger):
$this->tessaMediaService->pushProductMediaAsync($productSku);
API Authentication Failures
401 Unauthorized errors when syncing.config/packages/eikona_tessa_connector.yaml and check Akeneo API headers (ensure Authorization is not stripped by Apache).Media File Size Limits
413 Payload Too Large.client_max_body_size in Apache/Nginx or TESSA’s upload limits.Field Mapping Conflicts
InvalidArgumentException.config/packages/eikona_tessa_connector.yaml against Akeneo’s product attributes and TESSA’s schema.Duplicate Media Handling
unique_identifier in config to deduplicate:
eikona_tessa_connector:
unique_identifier: "tessa_media_id"
-v or -vvv to commands for detailed logs:
php bin/console eikona:tessa:push-product-media SKU -vvv
php bin/console eikona:tessa:validate-mapping <product-sku>
pim_catalog_product table to verify media associations:
SELECT * FROM pim_catalog_product WHERE code = 'SKU';
Custom Sync Logic
Extend the TessaMediaService to add pre/post-sync hooks:
// src/Service/CustomTessaMediaService.php
use Eikona\TessaConnectorBundle\Service\TessaMediaService;
class CustomTessaMediaService extends TessaMediaService {
public function pushProductMedia(string $sku): void {
// Custom logic before sync
parent::pushProductMedia($sku);
// Custom logic after sync
}
}
Register the service in config/services.yaml:
services:
Eikona\TessaConnectorBundle\Service\TessaMediaService:
alias: App\Service\CustomTessaMediaService
Custom TESSA API Endpoints
Override the TessaApiClient to support non-standard endpoints:
// src/Client/CustomTessaApiClient.php
use Eikona\TessaConnectorBundle\Client\TessaApiClient;
class CustomTessaApiClient extends TessaApiClient {
protected function getBaseUri(): string {
return 'https://custom-tessa-endpoint.com/api';
}
}
Bind the service in config/services.yaml:
services:
Eikona\TessaConnectorBundle\Client\TessaApiClient:
class: App\Client\CustomTessaApiClient
Webhook Integration Listen for TESSA webhooks to trigger Akeneo updates:
// src/Controller/TessaWebhookController.php
use Symfony\Component\HttpFoundation\Request;
use Eikona\TessaConnectorBundle\Service\TessaWebhookService;
class TessaWebhookController {
public function __construct(private TessaWebhookService $webhookService) {}
public function handle(Request $request) {
$this->webhookService->processWebhook($request->getContent());
return new Response('OK');
}
}
Route the webhook in config/routes.yaml:
tessa_webhook:
path: /tessa/webhook
controller: App\Controller\TessaWebhookController::handle
methods: [POST]
How can I help you explore Laravel packages today?