The driver requires the minicodemonkey/amazon-alexa-php
PHP package.
composer require minicodemonkey/amazon-alexa-php
<?php | |
namespace App; | |
use Alexa\Response\Response as AlexaResponse; | |
use Illuminate\Support\Collection; | |
use Mpociot\BotMan\Answer; | |
use Mpociot\BotMan\Drivers\Driver; | |
use Mpociot\BotMan\Interfaces\UserInterface; | |
use Mpociot\BotMan\Message; | |
use Mpociot\BotMan\Question; | |
use Symfony\Component\HttpFoundation\ParameterBag; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\HttpFoundation\Response; | |
use Mpociot\BotMan\Messages\Message as IncomingMessage; | |
class AlexaDriver extends Driver | |
{ | |
const DRIVER_NAME = 'Alexa'; | |
/** | |
* Determine if the request is for this driver. | |
* | |
* @return bool | |
*/ | |
public function matchesRequest() | |
{ | |
return $this->event->has('requestId') && $this->event->has('type'); | |
} | |
/** | |
* Retrieve the chat message(s). | |
* | |
* @return array | |
*/ | |
public function getMessages() | |
{ | |
$intent = $this->event->get('intent'); | |
$session = $this->payload->get('session'); | |
$message = new Message($intent['name'], $session['user']['userId'], $session['sessionId']); | |
$message->addExtras('slots', $intent['slots']); | |
return [$message]; | |
} | |
/** | |
* @return bool | |
*/ | |
public function isBot() | |
{ | |
return false; | |
} | |
/** | |
* @return bool | |
*/ | |
public function isConfigured() | |
{ | |
return true; | |
} | |
/** | |
* Retrieve User information. | |
* @param Message $matchingMessage | |
* @return UserInterface | |
*/ | |
public function getUser(Message $matchingMessage) | |
{ | |
// TODO: Implement getUser() method. | |
} | |
/** | |
* @param Message $message | |
* @return Answer | |
*/ | |
public function getConversationAnswer(Message $message) | |
{ | |
return Answer::create($message->getMessage())->setMessage($message); | |
} | |
/** | |
* @param string|Question $message | |
* @param Message $matchingMessage | |
* @param array $additionalParameters | |
* @return $this | |
*/ | |
public function reply($message, $matchingMessage, $additionalParameters = []) | |
{ | |
if ($message instanceof Question) { | |
$text = $message->getText(); | |
} elseif ($message instanceof IncomingMessage) { | |
$text = $message->getMessage(); | |
} else { | |
$text = $message; | |
} | |
$response = new AlexaResponse(); | |
$response->respond($text); | |
Response::create(json_encode($response->render()))->send(); | |
} | |
/** | |
* @param Request $request | |
* @return void | |
*/ | |
public function buildPayload(Request $request) | |
{ | |
$this->payload = new ParameterBag((array) json_decode($request->getContent(), true)); | |
$this->event = Collection::make((array) $this->payload->get('request')); | |
} | |
/** | |
* Low-level method to perform driver specific API requests. | |
* | |
* @param string $endpoint | |
* @param array $parameters | |
* @param Message $matchingMessage | |
* @return void | |
*/ | |
public function sendRequest($endpoint, array $parameters, Message $matchingMessage) | |
{ | |
// TODO: Implement sendRequest() method. | |
} | |
} |