База знаний EMS-платформы PlatParts Руководство по настройке EMS-платформы PlatParts
v1.0.0

Разработка пакета модуля

На этой странице 11

Разработка пакета модуля интеграции

Структура

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. Включение

  1. Каталог → Синхронизировать
  2. Лицензирование (если нужно)
  3. Включить модуль
  4. Подключения → Создать (одна / все точки)

Шаг 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 внутри.

Связанные разделы