ok
Direktori : /home2/selectio/www/3-idiots/vendor/vonage/client-core/src/Voice/NCCO/Action/ |
Current File : /home2/selectio/www/3-idiots/vendor/vonage/client-core/src/Voice/NCCO/Action/Record.php |
<?php /** * Vonage Client Library for PHP * * @copyright Copyright (c) 2016-2020 Vonage, Inc. (http://vonage.com) * @license https://github.com/Vonage/vonage-php-sdk-core/blob/master/LICENSE.txt Apache License 2.0 */ declare(strict_types=1); namespace Vonage\Voice\NCCO\Action; use InvalidArgumentException; use Vonage\Voice\Webhook; use function array_key_exists; use function filter_var; use function preg_match; class Record implements ActionInterface { public const FORMAT_MP3 = "mp3"; public const FORMAT_WAV = "wav"; public const FORMAT_OGG = "ogg"; public const SPLIT = 'conversation'; /** * @var string Record::FORMAT_* */ protected $format = 'mp3'; /** * @var string Record::SPLIT */ protected $split; /** * @var int */ protected $channels; /** * @var int */ protected $endOnSilence; /** * @var string '*'|'#'|1'|2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'|'0' */ protected $endOnKey; /** * @var int */ protected $timeOut = 7200; /** * @var bool */ protected $beepStart = false; /** * @var Webhook */ protected $eventWebhook; /** * @return static */ public static function factory(array $data): self { $action = new self(); if (array_key_exists('format', $data)) { $action->setFormat($data['format']); } if (array_key_exists('split', $data)) { $action->setSplit($data['split']); } if (array_key_exists('channels', $data)) { $action->setChannels($data['channels']); } if (array_key_exists('endOnSilence', $data)) { $action->setEndOnSilence( filter_var($data['endOnSilence'], FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE) ); } if (array_key_exists('endOnKey', $data)) { $action->setEndOnKey($data['endOnKey']); } if (array_key_exists('timeOut', $data)) { $action->setTimeout($data['timeOut']); } if (array_key_exists('beepStart', $data)) { $action->setBeepStart( filter_var($data['beepStart'], FILTER_VALIDATE_BOOLEAN, ['flags' => FILTER_NULL_ON_FAILURE]) ); } if (array_key_exists('eventUrl', $data)) { if (array_key_exists('eventMethod', $data)) { $webhook = new Webhook($data['eventUrl'], $data['eventMethod']); } else { $webhook = new Webhook($data['eventUrl']); } $action->setEventWebhook($webhook); } return $action; } /** * @return array<string, mixed> */ public function jsonSerialize(): array { return $this->toNCCOArray(); } /** * @return array<string, mixed> */ public function toNCCOArray(): array { $data = [ 'action' => 'record', 'format' => $this->getFormat(), 'timeOut' => (string)$this->getTimeout(), 'beepStart' => $this->getBeepStart() ? 'true' : 'false', ]; if ($this->getEndOnSilence()) { $data['endOnSilence'] = (string)$this->getEndOnSilence(); } if ($this->getEndOnKey()) { $data['endOnKey'] = $this->getEndOnKey(); } if ($this->getChannels()) { $data['channels'] = (string)$this->getChannels(); } if ($this->getSplit()) { $data['split'] = $this->getSplit(); } if ($this->getEventWebhook()) { $data['eventUrl'] = [$this->getEventWebhook()->getUrl()]; $data['eventMethod'] = $this->getEventWebhook()->getMethod(); } return $data; } public function getFormat(): string { return $this->format; } /** * @return $this */ public function setFormat(string $format): self { $this->format = $format; return $this; } public function getSplit(): ?string { return $this->split; } /** * @return $this */ public function setSplit(string $split): self { if ($split !== 'conversation') { throw new InvalidArgumentException('Split value must be "conversation" if enabling'); } $this->split = $split; return $this; } public function getEndOnKey(): ?string { return $this->endOnKey; } /** * @return $this */ public function setEndOnKey(string $endOnKey): self { $match = preg_match('/^[*#0-9]$/', $endOnKey); if ($match === 0 || $match === false) { throw new InvalidArgumentException('Invalid End on Key character'); } $this->endOnKey = $endOnKey; return $this; } public function getEventWebhook(): ?Webhook { return $this->eventWebhook; } /** * @return $this */ public function setEventWebhook(Webhook $eventWebhook): self { $this->eventWebhook = $eventWebhook; return $this; } public function getEndOnSilence(): ?int { return $this->endOnSilence; } /** * @return $this */ public function setEndOnSilence(int $endOnSilence): self { if ($endOnSilence > 10 || $endOnSilence < 3) { throw new InvalidArgumentException('End On Silence value must be between 3 and 10 seconds, inclusive'); } $this->endOnSilence = $endOnSilence; return $this; } public function getTimeout(): int { return $this->timeOut; } /** * @return $this */ public function setTimeout(int $timeOut): self { if ($timeOut > 7200 || $timeOut < 3) { throw new InvalidArgumentException('TimeOut value must be between 3 and 7200 seconds, inclusive'); } $this->timeOut = $timeOut; return $this; } public function getBeepStart(): bool { return $this->beepStart; } /** * @return $this */ public function setBeepStart(bool $beepStart): self { $this->beepStart = $beepStart; return $this; } public function getChannels(): ?int { return $this->channels; } /** * @return $this */ public function setChannels(int $channels): self { if ($channels > 32) { throw new InvalidArgumentException('Number of channels must be 32 or less'); } if ($channels > 1) { $this->channels = $channels; $this->setSplit(self::SPLIT); $this->format = self::FORMAT_WAV; } else { $this->channels = null; $this->split = null; } return $this; } }