Skip to content

Latest commit

 

History

History
83 lines (68 loc) · 2.28 KB

README.md

File metadata and controls

83 lines (68 loc) · 2.28 KB

AmazonAlexaService

Simple kept service for parsing and creating requests and responses for the communication between amazons webservice and your application based on amazons alexa skill capabilities.

Add to your project:

composer require dadadev/amazonalexaservice

Simple Usage

Full Example:

<?php

use DaDaDev\AmazonAlexa\AmazonAlexaService;
use DaDaDev\AmazonAlexa\Exceptions\ValidationException;
use DaDaDev\AmazonAlexa\Request;
use DaDaDev\AmazonAlexa\RequestHandling\AbstractIntentHandler;
use DaDaDev\AmazonAlexa\Response;
use DaDaDev\AmazonAlexa\Service\RequestValidationService;
use JMS\Serializer\SerializerBuilder;

class SampleIntentHandler extends AbstractIntentHandler
{
    /** @var AmazonAlexaService */
    private $amazonAlexaService;

    public function __construct(AmazonAlexaService $amazonAlexaService)
    {
        $this->amazonAlexaService = $amazonAlexaService;
    }

    public function getIntentName(): string
    {
        return 'myIntent';
    }

    public function handleIntent(Request $request): ?Response
    {
        return $this->amazonAlexaService->createOutputSpeechResponse('Hello World!');
    }
}

$serializer = SerializerBuilder::create()->build();
$requestValidationService = new RequestValidationService();
$amazonAlexaService = new AmazonAlexaService($serializer);

$jsonRequest = file_get_contents('php://input');
$request = $amazonAlexaService->getAlexaRequest($jsonRequest);

try {
    $requestValidationService->validateIncomingRequest(
        'YOUR APP ID HERE',
        $_SERVER['HTTP_SIGNATURECERTCHAINURL'],
        $_SERVER['HTTP_SIGNATURE'],
        $jsonRequest,
        $request
    );
} catch (\Exception | ValidationException $exception) {
    http_response_code(404);
    exit(json_encode([
        'status' => 'failed',
        'message' => $exception->getMessage(),
        'code' => $exception->getCode(),
    ]));
}

$response = $amazonAlexaService->handleIntents($request, new SampleIntentHandler($amazonAlexaService));

if ($response) {
    header('Content-Type: application/json');
    echo $amazonAlexaService->createJsonFromResponse($response);
    exit();
}

http_response_code(404);
exit(json_encode([
    'status' => 'failed',
    'message' => 'Request was not handled, or returned empty reponse.',
    'code' => '404',
]));