gurmehub / helpdesk
Laravel Helpdesk package — Odoo XML-RPC client and Inertia React pages.
Package info
Language:TypeScript
pkg:composer/gurmehub/helpdesk
Requires
- php: ^8.2
- illuminate/http: ^11.0|^12.0
- illuminate/routing: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
- inertiajs/inertia-laravel: ^2.0
README
Laravel Composer paketi. Odoo Helpdesk ile XML-RPC (/xmlrpc/2/common, /xmlrpc/2/object) üzerinden konuşur. Inertia + React (Polaris) sayfaları içerir. Ticket için Eloquent model yoktur.
Gereksinimler
- PHP 8.2+
- Laravel 11 veya 12 (Inertia React)
- Host’ta Polaris, App Bridge, Vite ve React hazır olmalı
- Host’ta Laravel Wayfinder (
laravel/wayfinder+@laravel/vite-plugin-wayfinder) kurulu olmalı — paket frontend URL’leri için zorunlu - Giriş yapmış kullanıcı:
users.name= Shopify mağaza domaini (Odooshopify_domainile eşleşir) - Host’ta
verify.shopifymiddleware tanımlı olmalı (API route’ları bunu kullanır) App\Models\Userüzerinde Shopify GraphQL içinapi()->graph()olmalı (create/reply iletişim alanları)
Kurulum
composer require gurmehub/helpdesk:^0.1
Host .env:
HELPDESK_ODOO_URL=https://odoo.example.com HELPDESK_ODOO_DB=odoo HELPDESK_ODOO_USERNAME=api@example.com HELPDESK_ODOO_PASSWORD=api-key-or-password HELPDESK_TEAM_ID=1 HELPDESK_ODOO_COMPANY_ID=1,3 # isteğe bağlı: # HELPDESK_SOLVED_STAGE_ID= # HELPDESK_TIMEOUT=30 # HELPDESK_LANG=tr_TR # HELPDESK_PREFIX=helpdesk # HELPDESK_ROUTE_TICKETS=tickets
HELPDESK_TEAM_ID ticket oluşturmak için zorunludur. HELPDESK_ODOO_COMPANY_ID virgülle ayrılmış company id listesidir (allowed_company_ids).
Config publish (opsiyonel):
php artisan vendor:publish --tag=helpdesk-config
Host app.blade.php (zorunlu)
Laravel Inertia scaffold genelde sayfa chunk’ını Vite ile preload eder:
@vite(['resources/js/app.tsx', "resources/js/pages/{$page['component']}.tsx"])
Helpdesk sayfaları paket içinde (vendor/gurmehub/helpdesk/...) olduğu için bu path production manifest’te yoktur ve şu hatayı üretir:
Unable to locate file in Vite manifest: resources/js/pages/helpdesk/tickets/index.tsx
Sadece entry bırakın:
@vite(['resources/js/app.tsx'])
Sayfalar app.tsx içindeki import.meta.glob + resolveHelpdeskPage ile yüklenir. Host sayfaları bozulmaz; yalnızca erken page preload kalkar.
Host Inertia resolve
Paket resources/js/inertia.ts içinde kendi glob’unu taşır. Host app.tsx’e fallback ekleyin:
import { resolveHelpdeskPage } from "../../vendor/gurmehub/helpdesk/resources/js/inertia"; const hostPages = import.meta.glob("./pages/**/*.tsx"); createInertiaApp({ resolve: (name) => { const hostKey = `./pages/${name}.tsx`; if (hostPages[hostKey]) { return resolvePageComponent(hostKey, hostPages); } return resolveHelpdeskPage(name); }, // ... });
vite.config.ts değiştirmenize gerek yok (Wayfinder plugin zaten host’ta olmalı). Asıl zorunlu olan üstteki app.blade.php @vite düzeltmesidir.
Paket içinde ayrı bir tsconfig.json yoktur; Vite host projenin tsconfig.json dosyasını kullanır.
Kurulumdan sonra frontend’i build edin (npm run build veya npm run dev) — helpdesk sayfaları host Vite bundle’ına o zaman girer.
Wayfinder (frontend URL’leri)
Paket React sayfaları route URL’lerini controller’dan Inertia prop olarak almaz. URL’ler host Wayfinder ile üretilir:
import { index, create, show, store, storeMessage, markSolved, } from "@/actions/Gurmehub/Helpdesk/Http/Controllers/TicketController"; create.url(); show.url(ticketId); store.url(); storeMessage.url(ticketId); markSolved.url(ticketId);
Önemli: route env değişince yeniden build
HELPDESK_PREFIX, HELPDESK_ROUTE_TICKETS (veya config/helpdesk.php route ayarları) değişirse Wayfinder URL’leri build anındaki değerlere gömülür. Sadece .env değiştirmek frontend’deki linkleri güncellemez.
Değişiklikten sonra mutlaka:
npm run build
(@laravel/vite-plugin-wayfinder build/dev sırasında wayfinder:generate çalıştırır.)