Installation
composer require mohamed-fathy/freshdesk-laravel
Publish the config file:
php artisan vendor:publish --provider="MohamedFathy\FreshdeskLaravel\FreshdeskServiceProvider"
Configuration
Edit .env with Freshdesk credentials:
FRESHDESK_DOMAIN=yourdomain.freshdesk.com
FRESHDESK_API_KEY=your_api_key_here
FRESHDESK_API_VERSION=v2
First Use Case Fetch a ticket by ID in a controller:
use MohamedFathy\FreshdeskLaravel\Facades\Freshdesk;
public function showTicket($id) {
$ticket = Freshdesk::ticket()->show($id);
return response()->json($ticket);
}
Ticket Management
Freshdesk::ticket()->create(['subject' => 'Test', 'description' => 'Hello']).Freshdesk::ticket()->update($id, ['status' => 2]).Freshdesk::ticket()->list(['page' => 1, 'per_page' => 20]).Contact Integration
Freshdesk::contact()->list().Response Handling Wrap API calls in try-catch for error handling:
try {
$response = Freshdesk::ticket()->show($id);
} catch (\MohamedFathy\FreshdeskLaravel\Exceptions\FreshdeskException $e) {
return response()->json(['error' => $e->getMessage()], 400);
}
ticket.updated) via observers.dispatch(new FreshdeskTicketSyncJob($ticketId));
$contacts = Cache::remember('freshdesk_contacts', now()->addHours(1), function () {
return Freshdesk::contact()->list();
});
Deprecated API Version
https://{domain}.freshdesk.com/api/v2/.Rate Limiting
use Symfony\Component\HttpClient\RetryableHttpClient;
use Symfony\Component\HttpClient\RetryableHttpClientInterface;
$client = new RetryableHttpClient(
new RetryableHttpClientInterface(),
[
'max_retries' => 3,
'delay' => 1000,
'multiplier' => 2,
'statuses' => [429],
]
);
Missing Facade Methods
// app/Providers/FreshdeskServiceProvider.php
Freshdesk::extend('custom_endpoint', function ($app) {
return new CustomEndpoint($app['freshdesk.http_client']);
});
Enable Logging
Add to config/freshdesk.php:
'debug' => env('FRESHDESK_DEBUG', false),
Logs will appear in storage/logs/laravel.log.
Raw Responses Access raw responses for debugging:
$response = Freshdesk::ticket()->show($id);
\Log::debug($response->originalResponse->getContent());
Custom HTTP Client
Bind a custom Guzzle client in AppServiceProvider:
$this->app->bind('freshdesk.http_client', function () {
return new \GuzzleHttp\Client([
'timeout' => 30,
'headers' => ['User-Agent' => 'MyApp/1.0'],
]);
});
Response Transformers
Override response handling in app/Providers/FreshdeskServiceProvider.php:
Freshdesk::macro('transformResponse', function ($response) {
return json_decode($response->getBody(), true);
});
Webhooks
Use Laravel’s HasApiTokens for webhook verification:
public function handleWebhook(Request $request) {
$payload = $request->json()->all();
$signature = $request->header('X-Freshdesk-Signature');
if (!hash_equals(
hash_hmac('sha256', $request->getContent(), config('freshdesk.webhook_secret')),
$signature
)) {
abort(401);
}
// Process payload
}
How can I help you explore Laravel packages today?