Skip to content

Commit

Permalink
Merge eb22332 into 8ec7baa
Browse files Browse the repository at this point in the history
  • Loading branch information
maxbeckers committed Apr 15, 2020
2 parents 8ec7baa + eb22332 commit 6393631
Show file tree
Hide file tree
Showing 18 changed files with 550 additions and 0 deletions.
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Change Log

## [1.8.0](https://github.com/maxbeckers/amazon-alexa-php/tree/1.8.0) (2020-04-15)
[Full Changelog](https://github.com/maxbeckers/amazon-alexa-php/compare/1.7.0...1.8.0)

**Closed issues:**
- Add handling for Alexa Event requests [\#82](https://github.com/maxbeckers/amazon-alexa-php/issues/82)

## [1.7.0](https://github.com/maxbeckers/amazon-alexa-php/tree/1.7.0) (2019-12-19)
[Full Changelog](https://github.com/maxbeckers/amazon-alexa-php/compare/1.6.0...1.7.0)

## [1.6.0](https://github.com/maxbeckers/amazon-alexa-php/tree/1.6.0) (2018-06-13)
[Full Changelog](https://github.com/maxbeckers/amazon-alexa-php/compare/1.5.0...1.6.0)

## [1.5.0](https://github.com/maxbeckers/amazon-alexa-php/tree/1.5.0) (2018-06-05)
[Full Changelog](https://github.com/maxbeckers/amazon-alexa-php/compare/1.4.0...1.5.0)

Expand Down
11 changes: 11 additions & 0 deletions src/Request/Request.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
use MaxBeckers\AmazonAlexa\Exception\MissingRequestDataException;
use MaxBeckers\AmazonAlexa\Exception\MissingRequiredHeaderException;
use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent\SkillAccountLinkedRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent\SkillDisabledRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent\SkillEnabledRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent\SkillPermissionAcceptedRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent\SkillPermissionChangedRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AudioPlayer\PlaybackFailedRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AudioPlayer\PlaybackFinishedRequest;
use MaxBeckers\AmazonAlexa\Request\Request\AudioPlayer\PlaybackNearlyFinishedRequest;
Expand Down Expand Up @@ -57,6 +62,12 @@ class Request
CanFulfillIntentRequest::TYPE => CanFulfillIntentRequest::class,
// Connections Response Request
ConnectionsResponseRequest::TYPE => ConnectionsResponseRequest::class,
// Skill event types
SkillAccountLinkedRequest::TYPE => SkillAccountLinkedRequest::class,
SkillEnabledRequest::TYPE => SkillEnabledRequest::class,
SkillDisabledRequest::TYPE => SkillDisabledRequest::class,
SkillPermissionAcceptedRequest::TYPE => SkillPermissionAcceptedRequest::class,
SkillPermissionChangedRequest::TYPE => SkillPermissionChangedRequest::class,
];

/**
Expand Down
50 changes: 50 additions & 0 deletions src/Request/Request/AlexaSkillEvent/AlexaSkillEventRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
abstract class AlexaSkillEventRequest extends AbstractRequest
{
/**
* @var string
*/
public $eventCreationTime;

/**
* @var string
*/
public $eventPublishingTime;

/**
* @var string
*/
public $requestId;

/**
* @param array $amazonRequest
*/
protected function setRequestData(array $amazonRequest)
{
$this->requestId = $amazonRequest['requestId'];

$this->setTime('timestamp', $amazonRequest['timeStamp']);
$this->setTime('eventCreationTime', $amazonRequest['eventCreationTime']);
$this->setTime('eventPublishingTime', $amazonRequest['eventPublishingTime']);

$this->locale = $amazonRequest['locale'];
}

private function setTime($attribute, $value)
{
//Workaround for amazon developer console sending unix timestamp
try {
$this->{$attribute} = new \DateTime($value);
} catch (\Exception $e) {
$this->{$attribute} = (new \DateTime())->setTimestamp(intval($value / 1000));
}
}
}
28 changes: 28 additions & 0 deletions src/Request/Request/AlexaSkillEvent/Permission.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class Permission
{
/**
* @var string|null
*/
public $scope;

/**
* @param array $amazonRequest
*
* @return Permission
*/
public static function fromAmazonRequest(array $amazonRequest): self
{
$permission = new self();

$permission->scope = isset($amazonRequest['scope']) ? $amazonRequest['scope'] : null;

return $permission;
}
}
28 changes: 28 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillAccountLinkedBody.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillAccountLinkedBody
{
/**
* @var string|null
*/
public $accessToken;

/**
* @param array $amazonRequest
*
* @return SkillAccountLinkedBody
*/
public static function fromAmazonRequest(array $amazonRequest): self
{
$body = new self();

$body->accessToken = isset($amazonRequest['accessToken']) ? $amazonRequest['accessToken'] : null;

return $body;
}
}
32 changes: 32 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillAccountLinkedRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillAccountLinkedRequest extends AlexaSkillEventRequest
{
const TYPE = 'AlexaSkillEvent.SkillAccountLinked';

/**
* @var SkillAccountLinkedBody|null
*/
public $body;

/**
* {@inheritdoc}
*/
public static function fromAmazonRequest(array $amazonRequest): AbstractRequest
{
$request = new self();

$request->type = self::TYPE;
$request->body = isset($amazonRequest['body']) ? SkillAccountLinkedBody::fromAmazonRequest($amazonRequest['body']) : null;
$request->setRequestData($amazonRequest);

return $request;
}
}
31 changes: 31 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillDisabledBody.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillDisabledBody
{
const PERSISTED = 'PERSISTED';
const NOT_PERSISTED = 'NOT_PERSISTED';

/**
* @var string|null
*/
public $userInformationPersistenceStatus;

/**
* @param array $amazonRequest
*
* @return SkillDisabledBody
*/
public static function fromAmazonRequest(array $amazonRequest): self
{
$body = new self();

$body->userInformationPersistenceStatus = isset($amazonRequest['userInformationPersistenceStatus']) ? $amazonRequest['userInformationPersistenceStatus'] : null;

return $body;
}
}
32 changes: 32 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillDisabledRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillDisabledRequest extends AlexaSkillEventRequest
{
const TYPE = 'AlexaSkillEvent.SkillDisabled';

/**
* @var SkillDisabledBody|null
*/
public $body;

/**
* {@inheritdoc}
*/
public static function fromAmazonRequest(array $amazonRequest): AbstractRequest
{
$request = new self();

$request->type = self::TYPE;
$request->body = isset($amazonRequest['body']) ? SkillDisabledBody::fromAmazonRequest($amazonRequest['body']) : null;
$request->setRequestData($amazonRequest);

return $request;
}
}
26 changes: 26 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillEnabledRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillEnabledRequest extends AlexaSkillEventRequest
{
const TYPE = 'AlexaSkillEvent.SkillEnabled';

/**
* {@inheritdoc}
*/
public static function fromAmazonRequest(array $amazonRequest): AbstractRequest
{
$request = new self();

$request->type = self::TYPE;
$request->setRequestData($amazonRequest);

return $request;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillPermissionAcceptedRequest extends AlexaSkillEventRequest
{
const TYPE = 'AlexaSkillEvent.SkillPermissionAccepted';

/**
* @var SkillPermissionBody|null
*/
public $body;

/**
* {@inheritdoc}
*/
public static function fromAmazonRequest(array $amazonRequest): AbstractRequest
{
$request = new self();

$request->type = self::TYPE;
$request->body = isset($amazonRequest['body']) ? SkillPermissionBody::fromAmazonRequest($amazonRequest['body']) : null;
$request->setRequestData($amazonRequest);

return $request;
}
}
34 changes: 34 additions & 0 deletions src/Request/Request/AlexaSkillEvent/SkillPermissionBody.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillPermissionBody
{
/**
* @var array
*/
public $acceptedPermissions;

/**
* @param array $amazonRequest
*
* @return SkillPermissionBody
*/
public static function fromAmazonRequest(array $amazonRequest): self
{
$body = new self();

$body->acceptedPermissions = [];

if ($amazonRequest['acceptedPermissions']) {
foreach ($amazonRequest['acceptedPermissions'] as $permission) {
$body->acceptedPermissions[] = Permission::fromAmazonRequest($permission);
}
}

return $body;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?php

namespace MaxBeckers\AmazonAlexa\Request\Request\AlexaSkillEvent;

use MaxBeckers\AmazonAlexa\Request\Request\AbstractRequest;

/**
* @author Maximilian Beckers <beckers.maximilian@gmail.com>
*/
class SkillPermissionChangedRequest extends AlexaSkillEventRequest
{
const TYPE = 'AlexaSkillEvent.SkillPermissionChanged';

/**
* @var SkillPermissionBody|null
*/
public $body;

/**
* {@inheritdoc}
*/
public static function fromAmazonRequest(array $amazonRequest): AbstractRequest
{
$request = new self();

$request->type = self::TYPE;
$request->body = isset($amazonRequest['body']) ? SkillPermissionBody::fromAmazonRequest($amazonRequest['body']) : null;
$request->setRequestData($amazonRequest);

return $request;
}
}

0 comments on commit 6393631

Please sign in to comment.