omniconva/laravel
OmniConva for Laravel is a lightweight integration package that brings OmniConva services into Laravel applications, offering simple configuration, familiar Laravel conventions, and a clean starting point to help you add OmniConva-powered functionality quickly.
php artisan migrate step (idempotency key widening plus a second published migration), so "configuration task" now includes a deploy-window item, not just composer install.<x-omniconva-chat /> component with signed customer identity means chat is a drop-in, not a bespoke build. It also settles an architectural question early — chat identity is tied to your authenticated customer, so the PM should confirm that model matches the intended customer journey (guests, B2B accounts, multi-storefront users). v1.0.1 hardens this surface: a non-scalar customer id is ignored rather than passed through, so confirm your identity resolver always yields a scalar id.OrderRefused exception's message is sent to OmniConva; any other exception (e.g. a QueryException containing SQL and customer data) is reported to your handler and answered with a generic 500. This means the PM must own an exception-handling policy: customer-safe refusal reasons must be thrown as OmniConva\Laravel\Exceptions\OrderRefused, and everything else must be treated as an internal failure. It also means no PII or schema detail leaks to the channel on unexpected errors — put that in the security review sign-off.SyncsWithOmniConva / SyncsParentWithOmniConva never let a mapping or encoding problem abort your save; the problem is reported instead, and invalid UTF-8 is substituted rather than fatal. This is the right product tradeoff (a bad product record should not break checkout or admin saves), but it creates a silent-failure surface: without alerting on reported exceptions, catalog drift to OmniConva goes unnoticed. Make "alert on reported sync exceptions" a launch checklist item.OMNICONVA_WEBHOOK_URL must be https; http:// is accepted only for localhost and 127.x, and elsewhere only with OMNICONVA_ALLOW_HTTP=1 (e.g. a Docker Compose service name). Webhook deliveries also no longer follow redirects. Product decision: production and staging webhook URLs must be https; any OMNICONVA_ALLOW_HTTP=1 usage is a documented, time-boxed exception (internal network only), not a default.env(), never overwrites a credential with an empty value, always quotes what it writes, and warns when secrets are passed as options. These are the kinds of defects that otherwise surface as "why is this product free?" or "why did the order id change?" support tickets — worth calling out as reduced post-launch support load.Consider adoption when:
EloquentProductSource is the only source shipped, so a non-Eloquent catalog (ERP, external PIM, Elasticsearch) means writing and owning an adapter.OMNICONVA_ALLOW_HTTP=1 for an internal-only host.php artisan migrate; a second migration is published via --tag=omniconva-migrations).Look elsewhere, or budget for in-house work, when:
OMNICONVA_ALLOW_HTTP=1 — the http path is now gated by design.To executives: This is a low-cost, high-leverage channel integration. It gives us product listing, order intake, fulfillment updates, and an embedded customer chat in a single supported package, compressing what would be a multi-week build into a configuration, migration, and QA effort. Security (request signing, https-only webhook transport, no customer data leaked to the channel on unexpected errors, hardened idempotency claims) and data integrity (idempotent order creation, safe catalog sync that cannot break saves) are built in rather than bolted on — which reduces launch risk and the support burden that usually follows a hand-rolled integration. The vendor shipped a security-hardening patch immediately, which is a good responsiveness signal. The caveats are maturity and change management: the patch includes a breaking change for non-https webhook setups and a required database migration, so we should plan a short pilot with a feature flag, pin the version, and review each release before upgrading.
To engineering: Standard Laravel package — composer install, omniconva:install, omniconva:test, omniconva:ping to verify connectivity. Products are served from an EloquentProductSource; add the SyncsWithOmniConva / SyncsParentWithOmniConva traits to models to queue signed product webhooks after commit (mapping/encoding failures are reported, not thrown — wire up alerting). Orders arrive via POST {prefix}/orders with Idempotency-Key handling; push status/tracking back with OmniConva::orderUpdated(). Every route verifies X-OmniConva-Signature. Chat is an anonymous Blade component with signed customer identity. On upgrade to v1.0.1: run php artisan migrate (publish the second migration with --tag=omniconva-migrations), confirm OMNICONVA_WEBHOOK_URL is https (localhost/127.x exempt; other internal hosts need OMNICONVA_ALLOW_HTTP=1), and note webhook deliveries no longer follow redirects. When refusing an order, throw OmniConva\Laravel\Exceptions\OrderRefused — only that message reaches OmniConva; everything else is reported locally and returned as a generic 500.
Decisions we need from this: (1) approve OmniConva as a channel and the pilot scope; (2) confirm our product data is representable by the Eloquent source or budget an adapter; (3) confirm the single-tenant credential model fits our deployment; (4) confirm all non-local webhook endpoints are https and that any OMNICONVA_ALLOW_HTTP=1 use is a documented, time-boxed exception; (5) agree an order-refusal exception policy (customer-safe OrderRefused vs. internal failures) and an alerting plan for reported sync exceptions; (6) agree on version pinning, a migration window per upgrade, and an upgrade-review policy — including patch releases — until the package has a stability track record.
How can I help you explore Laravel packages today?