esatisfaction / esat-php
E-satisfaction PHP Library
Requires
- php: ^7.0
- esatisfaction/http: ^1.0
- monolog/monolog: ^1.22
- panda/config: ^2.0
- panda/helpers: ^2.0
- php-http/guzzle6-adapter: ~1.0
- ramsey/uuid: ^3.7
- symfony/cache: ^4.2
- symfony/http-foundation: ^3.3
Requires (Dev)
- phpunit/phpunit: ~6.3
This package is auto-updated.
Last update: 2024-11-19 22:25:00 UTC
README
PHP library for the e-satisfaction API
Requirements
PHP 7.1.0 and later.
Composer
You can install the bindings via Composer. Run the following command:
composer require esatisfaction/esat-php
To use the bindings, use Composer's autoload:
require_once('vendor/autoload.php');
Manual Installation
If you do not wish to use Composer, you can download the latest release. Then, to use the bindings, include the init.php
file.
require_once('/path/to/esatisfaction-php/init.php');
Dependencies
This library require the following extensions and packages in order to work properly:
panda/config
panda/helpers
ramsey/uuid
symfony/http-foundation
monolog/monolog
php-http/guzzle6-adapter
esatisfaction/http
symfony/cache
If you use Composer, these dependencies should be handled automatically. If you install manually, you'll want to make sure that these extensions are available and loaded.
How do I start working with services?
To start working with the SDK, you have to initialize the following:
- Setup the main Esat Registry
- Set the Authorization Scheme to be used by each service's HttpClient
Example:
use \Esat\Esat; use \Esat\Auth\TokenAuthProvider; use \Esat\Http\AuthClient; use \Monolog\Logger; // Initialize Authentication $tokenAuthProvider = new TokenAuthProvider('YOUR_TOKEN', 'YOUR_DOMAIN'); $httpClient = new AuthClient($tokenAuthProvider); // Initialize main Esatisfaction Registry $esatRegistry = new Esat();
Questionnaires
Read your questionnaires:
use \Esat\Services\Questionnaires\Questionnaire; use \Esat\Support\Model\Propel\FilterCriteria; use \Esat\Support\Model\Propel\Pagination; use \Monolog\Logger; // Create Questionnaire Service $questionnaire = new Questionnaire($esatRegistry, new Logger(), $httpClient); // Load all questionnaires for my application $applicationId = '123'; $filterCriteria = (new FilterCriteria())->equal('OwnerApplicationId', $applicationId); $pagination = (new Pagination())->setMaxPerPage(25)->setPage(1); $questionnairePager = $questionnaire->getList($filterCriteria, null, $pagination); // Read all questionnaires foreach ($questionnairePager->getQuestionnaires() as $questionnaireItem) { // Get questionnaire display name echo $questionnaireItem->getDisplayName(); } // Load a questionnaire by id if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); echo $questionnaireModel->getDisplayName(); }
Questionnaire Instances
Create a questionnaire instance and send the link to your customers:
use \Esat\Services\Questionnaires\Instances\Questionnaire; use \Monolog\Logger; // Create Questionnaire Service $questionnaire = new Questionnaire($esatRegistry, new Logger(), $httpClient); // Create questionnaire instance, with metadata $responderMetadata = [ 'email' => 'john@doe.com', 'gender' => 'male' ]; $questionnaireMetadata = [ 'transaction_id' => '12345asd', 'transaction_date' => '2019-05-03 14:12' ]; if ($questionnaire->create('YOUR_QUESTIONNAIRE_ID', [], $questionnaireMetadata, $responderMetadata)) { // Get questionnaire collection url $collectionUrl = $questionnaire->getQuestionnaire()->getCollectionUrl(); // Send your email with the above url }
Read, Update or Delete Questionnaire Instances:
NOTICE: This will cause data deletion and might alter your data. It will not affect your credits as the credits are reduced on questionnaire submit.
use \Esat\Services\Questionnaires\Instances\Questionnaire; use \Monolog\Logger; // Create Questionnaire Service $questionnaire = new Questionnaire($esatRegistry, new Logger(), $httpClient); // Load a questionnaire instance // We always have to load the instance before performing an update or delete operation $instanceId = 'sadfewf2134d'; if (!$questionnaire->load($instanceId)) { // Handle error echo 'Questionnaire instance Not Found'; die; } // Update the questionnaire instance $questionnaire->getQuestionnaire()->setLocale('el'); $questionnaire->getQuestionnaire()->setValidDayes(50); if (!$questionnaire->update()) { // Handle error echo 'Questionnaire instance failed to be updated'; die; } // Load another questionnaire instance to delete // We always have to load the instance before performing an update or delete operation $instanceId = '23rteg34'; if (!$questionnaire->load($instanceId)) { // Handle error echo 'Questionnaire instance Not Found'; die; } // Delete the questionnaire instance if (!$questionnaire->delete()) { // Handle error echo 'Questionnaire instance failed to be deleted'; die; }
Pipelines
Read your pipelines:
use \Esat\Services\Questionnaires\Pipeline; use \Monolog\Logger; // Create Pipeline Service $pipeline = new Pipeline($esatRegistry, new Logger(), $httpClient); // Get all pipelines for a given questionnaire id $questionnaireId = 'asdf34rtefdfwe'; $pipelines = $pipeline->getList($questionnaireId); // Read all pipelines foreach ($pipelines as $pipelineItem) { // Get pipeline title echo $pipelineItem->getTitle(); } // Load a pipeline by id if ($pipeline->load('345uyjhg')) { // Access pipeline data $pipelineModel = $pipeline->getPipeline(); echo $pipelineModel->getTitle(); }
Queue Items
Add a queue item to allow e-satisfaction to send a survey:
use \Esat\Services\Questionnaires\Pipelines\Queue; use \Monolog\Logger; // Create Queue Service $queue = new Queue($esatRegistry, new Logger(), $httpClient); // Prepare queue item parameters $questionnaireId = 'asdf34rtefdfwe'; $pipelineId = 'a09uherwgfd'; $parameters = [ 'responder_channel_identifier' => 'john@doe.com', 'send_time' => '2019-05-02 12:32', ]; // Create queue item if (!$queue->create($questionnaireId, $pipelineId, $parameters)) { // Handle error echo 'Queue item failed to be created. Error: ' . $queue->getErrorFromLastResponse(); die; }
Read, Update or Delete Queue Items:
use \Esat\Services\Questionnaires\Pipelines\Queue; use \Monolog\Logger; // Create Queue Service $queue = new Queue($esatRegistry, new Logger(), $httpClient); // Load a queue item // We always have to load the item before performing an update or delete operation $itemId = '9867w4wqrefd'; if (!$queue->load($itemId)) { // Handle error echo 'Queue item Not Found'; die; } // Update the queue item $queue->getQueueItem()->setLocale('el'); $queue->getQueueItem()->setSendTime('2019-06-03 14:32'); if (!$queue->update()) { // Handle error echo 'Queue item failed to be updated'; die; } // Load another queue item to delete // We always have to load the item before performing an update or delete operation $itemId = '234rweg34'; if (!$queue->load($itemId)) { // Handle error echo 'Queue item Not Found'; die; } // Delete the queue item if (!$queue->delete()) { // Handle error echo 'Queue item failed to be deleted'; die; }
Handling Errors
Each request stores the last response so that you can access it and get messages in case of errors.
use \Esat\Services\Questionnaires\Questionnaire; use \Monolog\Logger; // Create Questionnaire Service $questionnaire = new Questionnaire($esatRegistry, new Logger(), $httpClient); // Load a questionnaire by id if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); } else { // Handle the error, get the http response code and error message, if any $error = ''; switch ($questionnaire->getLastResponse()->getStatusCode()) { case 500: $error = 'An unexpected error occurred'; break; case 404: $error = 'Questionnaire Not Found'; break; default: $error = $questionnaire->getErrorFromLastResponse(); } // Display error echo $error; }
Caching
This library is using a default runtime caching mechanism that reduces API calls during runtime.
The caching mechanism is on service level and works only on READ requests and is being reset when a POST or PATCH method is called on the same service.
If you are trying to READ the same resource twice without any updates in between, the service will hit the cache and get the same result.
You can override the cache by calling setCacheEnabled(false)
on the service before calling the method.
Examples:
use \Esat\Services\Questionnaires\Questionnaire; use \Monolog\Logger; // Create Questionnaire Service $questionnaire = new Questionnaire($esat, new Logger(), $httpClient); // DOES NOT hit cache if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); } // DOES hit cache if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); } // SKIP cache. From now on, all requests will skip cache. $questionnaire->setCacheEnabled(false); if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); } // Enable cache again to restore initial behavior. The following will DO hit cache $questionnaire->setCacheEnabled(true); if ($questionnaire->load('456sdfa')) { // Access questionnaire data $questionnaireModel = $questionnaire->getQuestionnaire(); }
Feedback
This is an open-source library for calling e-satisfaction API.
Feel free to open Issues and Pull Requests to update it or fix bugs that you might find.
Code of Conduct Guidelines
Take a look at the Code of Conduct document.