Разработка пакета модуля интеграции
Структура
code
modules/Integrations/MyCrm/
integration.manifest.json
hooks.php
Filament/
MyCrmInstanceFormExtension.php # instance_form
Handlers/
...
PSR‑4: Modules\\ → modules/ в composer.json, затем composer dump-autoload.
Шаг 1. Шаблон
bash
cp -R modules/Integrations/_Template modules/Integrations/MyCrm
code в manifest = имя папки.
Шаг 2. Manifest
См. Manifest. Для CRM с формой в админке добавьте:
json
"capabilities": {
"hooks": true,
"instance_form": "Modules\\Integrations\\MyCrm\\Filament\\MyCrmInstanceFormExtension",
"inbound_webhook": "Modules\\Integrations\\MyCrm\\MyCrmInboundWebhookHandler",
"external_system": "my_crm"
}
Шаг 3. Форма подключения (рекомендуется)
php
final class MyCrmInstanceFormExtension implements IntegrationInstanceFormExtensionInterface
{
public function supports(IntegrationPackage $package): bool
{
return $package->code === 'MyCrm';
}
public function formComponents(?IntegrationInstance $record = null): array
{
return [ /* TextInput, Select, Repeater для маппинга… */ ];
}
public function usesStructuredCredentials(): bool
{
return true;
}
public function scopeModeHelperText(): ?string
{
return 'Для всех точек создастся отдельное подключение на каждый склад.';
}
public function namePlaceholder(): ?string
{
return 'My CRM';
}
}
Не дублируйте настройку в Интеграции, если модуль не legacy МойСклад. См. Подключения.
Шаг 4. hooks.php и handler
php
return [
'order.created' => \Modules\Integrations\MyCrm\Handlers\OrderCreatedHandler::class,
];
php
public function handle(IntegrationHookContext $context): void
{
$order = $context->payload;
// идемпотентность, быстрый exit, тяжёлое — в свой job
}
Шаг 5. Включение
- Каталог → Синхронизировать
- Лицензирование (если нужно)
- Включить модуль
- Подключения → Создать (одна / все точки)
Шаг 6. Воркер
ini
command=php artisan queue:work --queue=integrations.outbound,integrations.MyCrm
numprocs=1
Inbound (опционально)
IntegrationInboundWebhookHandlerInterface + inbound_webhook_secret в credentials.
package_admin и order_header_actions
- Кнопки на странице модуля в каталоге (массовая отправка, настройки по умолчанию).
- Кнопки в шапке заказа.
Эталон: любой завершённый manifest-модуль в modules/Integrations/{Code}/ с integration.manifest.json, hooks.php и Filament/*InstanceFormExtension.php.
ZIP
Корень архива — папка MyCrm/ с manifest внутри.