This package was developed to give you a quick start to creating tickets via the Zendesk API.
Zendesk is a cloud-based help desk management solution offering customizable tools to build customer service portals, knowledge base and online communities.
Package | PHP | Laravel | Zendesk |
---|---|---|---|
>v1.0 | >8.2 | > Laravel 10.0 | β |
The currently supported authentication methods are:
Method | Supported |
---|---|
Basic Auth | β |
API token | β |
OAuth access token | β |
You can install the package via composer:
composer require codebar-ag/laravel-zendesk
Optionally, you can publish the config file with:
php artisan vendor:publish --provider="CodebarAg\Zendesk\ZendeskServiceProvider" --tag="config"
You can add the following env variables to your .env
file:
ZENDESK_SUBDOMAIN=your-subdomain #required
ZENDESK_AUTHENTICATION_METHOD=token #default ['basic', 'token']
ZENDESK_EMAIL_ADDRESS=test@example.com #required
ZENDESK_API_TOKEN=your-api-token #required only for token authentication
ZENDESK_API_PASSWORD=your-password #required only for basic authentication
Note: We handle base64 encoding for you so you don't have to encode your credentials.
You can retrieve your API token from your Zendesk Dashboard
To use the package, you need to create a ZendeskConnector instance.
use CodebarAg\Zendesk\ZendeskConnector;
...
$connector = new ZendeskConnector();
The following requests are currently supported:
Request | Supported |
---|---|
List Tickets | β |
Count Tickets | β |
Show Ticket | β |
Create Ticket | β |
Create Attachment | β |
The following responses are currently supported for retrieving the response body:
Response Methods | Description | Supported |
---|---|---|
body | Returns the HTTP body as a string | β |
json | Retrieves a JSON response body and json_decodes it into an array. | β |
object | Retrieves a JSON response body and json_decodes it into an object. | β |
collect | Retrieves a JSON response body and json_decodes it into a Laravel collection. Requires illuminate/collections to be installed. | β |
dto | Converts the response into a data-transfer object. You must define your DTO first | β |
See https://docs.saloon.dev/the-basics/responses for more information.
We provide enums for the following values:
Enum | Values |
---|---|
TicketPriority | 'urgent', 'high', 'normal', 'low' |
TicketType | 'incident', 'problem', 'question', 'task' |
MalwareScanResult | 'malware_found', 'malware_not_found', 'failed_to_scan', 'not_scanned' |
Note: When using the dto method on a response, the enum values will be converted to their respective enum class.
We provide DTOs for the following:
DTO |
---|
AttachmentDTO |
ThumbnailDTO |
UploadDTO |
CommentDTO |
AllTicketsDTO |
CountTicketsDTO |
SingleTicketDTO |
Note: This is the prefered method of interfacing with Requests and Responses however you can still use the json, object and collect methods. and pass arrays to the requests.
use CodebarAg\Zendesk\Requests\CreateSingleTicketRequest;
use CodebarAg\Zendesk\DTOs\SingleTicketDTO;
use CodebarAg\Zendesk\DTOs\CommentDTO;
use CodebarAg\Zendesk\Enums\TicketPriority;
...
$ticketResponse = $connector->send(
new CreateSingleTicketRequest(
SingleTicketDTO::fromArray([
'comment' => CommentDTO::fromArray([
'body' => 'The smoke is very colorful.',
]),
'priority' => TicketPriority::URGENT,
"subject" => "My printer is on fire!",
"custom_fields" => [
[
"id" => 12345678910111,
"value" => "Your custom field value"
],
[
"id" => 12345678910112,
"value" => "Your custom field value 2"
],
],
])
)
);
$ticket = $ticketResponse->dto();
use CodebarAg\Zendesk\Requests\AllTicketsRequest;
...
$listTicketResponse = $connector->send(new AllTicketsRequest());
$listTicketResponse->dto();
use CodebarAg\Zendesk\Requests\CountTicketsRequest;
...
$countTicketResponse = $connector->send(new CountTicketsRequest());
$countTicketResponse->dto();
use CodebarAg\Zendesk\Requests\ShowTicketRequest;
...
$ticketID = 1;
$showTicketResponse = $connector->send(new ShowTicketRequest($ticketID));
$showTicketResponse->dto();
use CodebarAg\Zendesk\Requests\CreateAttachmentRequest;
use CodebarAg\Zendesk\Requests\CreateSingleTicketRequest;
use Illuminate\Support\Facades\Storage;
$uploadResponse = $connector->send(
new CreateAttachmentRequest(
fileName: 'someimage.png',
mimeType: Storage::disk('local')->mimeType('public/someimage.png'),
stream: Storage::disk('local')->readStream('public/someimage.png')
)
);
$token = $uploadResponse->dto()->token;
$ticketResponse = $connector->send(
new CreateSingleTicketRequest(
SingleTicketDTO::fromArray([
'comment' => CommentDTO::fromArray([
...
'uploads' => [
$token,
],
]),
])
)
);
$ticket = $ticketResponse->dto();
Copy your own phpunit.xml-file.
cp phpunit.xml.dist phpunit.xml
Run the tests:
./vendor/bin/pest
Please see CHANGELOG for recent changes.
Please see CONTRIBUTING for details.
composer test
./vendor/bin/pint
Please review our security policy on reporting security vulnerabilities.
- Rhys Lees
- Sebastian Fix
- All Contributors
- Skeleton Repository from Spatie
- Laravel Package Training from Spatie
- Laravel Saloon by Sam CarrΓ©
The MIT License (MIT). Please have a look at License File for more information.