fabatek/freshdesk-laravel
Laravel package for integrating Freshdesk into your app: configure API access, interact with Freshdesk resources from Laravel, and streamline support workflows through a simple, framework-friendly interface.
Installation
composer require fabatek/freshdesk-laravel
Publish the config file:
php artisan vendor:publish --provider="Fabatek\Freshdesk\FreshdeskServiceProvider"
Configure .env
Add Freshdesk credentials:
FRESHDESK_DOMAIN=yourdomain.freshdesk.com
FRESHDESK_API_KEY=your_api_key_here
First Use Case: Fetching Tickets
Inject the Fabatek\Freshdesk\Contracts\Freshdesk facade into a controller or service:
use Fabatek\Freshdesk\Facades\Freshdesk;
public function getTickets()
{
$tickets = Freshdesk::tickets()->list();
return response()->json($tickets);
}
Ticket Management
Freshdesk::tickets()->create([
'subject' => 'New Issue',
'description' => 'Details here...',
'priority' => 2,
]);
Freshdesk::tickets()->update(123, ['status' => 2]);
$ticket = Freshdesk::tickets()->show(123);
Contacts & Organizations
$contacts = Freshdesk::contacts()->list();
Freshdesk::contacts()->create(['name' => 'John Doe', 'email' => 'john@example.com']);
Responses & Comments
Freshdesk::tickets()->comments()->create(123, ['comment' => 'Reply here...']);
Searching
$results = Freshdesk::tickets()->search('subject:"urgent"');
user.created):
event(new UserRegistered($user));
// In a listener:
Freshdesk::contacts()->create($user->toFreshdeskArray());
throttle middleware if hitting Freshdesk’s API limits.dispatch(new SyncFreshdeskTicketsJob());
API Key Exposure
FRESHDESK_API_KEY in config files. Use Laravel’s .env and restrict file permissions.config/freshdesk.php:
'api_key' => env('FRESHDESK_API_KEY', false),
Then add a check in a service provider:
if (empty(config('freshdesk.api_key'))) {
throw new \RuntimeException('Freshdesk API key not configured.');
}
Rate Limits
$tickets = Cache::remember('freshdesk_tickets', now()->addMinutes(5), function () {
return Freshdesk::tickets()->list();
});
Pagination
$page = 1;
$perPage = 20;
$tickets = Freshdesk::tickets()->list(['page' => $page, 'per_page' => $perPage]);
Error Handling
try {
$ticket = Freshdesk::tickets()->show(123);
} catch (\Fabatek\Freshdesk\Exceptions\FreshdeskException $e) {
Log::error('Freshdesk API error: ' . $e->getMessage());
return response()->json(['error' => 'Failed to fetch ticket'], 500);
}
FRESHDESK_DEBUG=true in .env to log API requests/responses.$client = Freshdesk::getClient();
$response = $client->request('GET', '/api/v2/tickets');
Custom Endpoints
Extend the package by adding new methods to the Freshdesk facade:
// In a service provider:
Freshdesk::extend('custom', function ($app) {
return new CustomFreshdeskService();
});
Then use:
Freshdesk::custom()->someMethod();
Override API Client Bind a custom HTTP client in the service provider:
$this->app->singleton(\Fabatek\Freshdesk\Contracts\FreshdeskClient::class, function ($app) {
return new CustomGuzzleClient();
});
Webhooks
Use Laravel’s route:webhook to handle Freshdesk webhook payloads:
Route::post('/freshdesk/webhook', function (Request $request) {
$payload = $request->json()->all();
// Process webhook (e.g., update local DB)
});
How can I help you explore Laravel packages today?