Compare commits
72 commits
Author | SHA1 | Date | |
---|---|---|---|
9927490844 | |||
|
22e4bf9cac | ||
7a87f2669b | |||
|
f65dcac9f5 | ||
|
9a23562cbd | ||
141c2c9bc3 | |||
46e0f84265 | |||
|
dc0ead717e | ||
2d5a8ceaed | |||
|
2b798fa877 | ||
95520bb1e7 | |||
|
bd0c267f09 | ||
|
f0ba8e65f3 | ||
fb0e9404a5 | |||
|
b1fd78d2b5 | ||
|
5da993d598 | ||
4b6e9e0dff | |||
2640e661cf | |||
|
d34270121c | ||
|
93777973b5 | ||
|
bcf3d0974b | ||
6e4dd6af44 | |||
|
370fd04824 | ||
26aa42ce67 | |||
|
290d5f87e5 | ||
|
54486d4008 | ||
1fc8ccda10 | |||
|
33e816ce97 | ||
|
4b5041b05b | ||
|
8a20b86b17 | ||
a05cf2cc09 | |||
|
be857dd1ac | ||
90b90c0f8d | |||
|
5aaed7ab7d | ||
|
6682b9b02c | ||
41cb22a720 | |||
|
8892e5fe5a | ||
|
e14afbf773 | ||
93924bf3b5 | |||
3d7a10f7c6 | |||
7dd570ffc3 | |||
|
d92b89ad37 | ||
|
8b9afc52af | ||
|
d9192f963c | ||
|
b478dd6f25 | ||
|
29d6732404 | ||
59e9c8d3be | |||
|
e1e484e046 | ||
516e7855a0 | |||
a08a03c1c8 | |||
016f152fef | |||
|
c024350882 | ||
6ec1f00df9 | |||
|
58aa909473 | ||
1650ff34aa | |||
aac414ecd5 | |||
181a9703a5 | |||
910bf5e118 | |||
7e1ed1a241 | |||
45b1012632 | |||
2c5fe64779 | |||
0631c80ebb | |||
c931b2622c | |||
7a92435f9f | |||
|
4b898fdc95 | ||
62ff2ec979 | |||
6476caf9b9 | |||
92a0eb0c0b | |||
6fbddeb2a9 | |||
|
00a8764edb | ||
c9a992bf6b | |||
|
fff4e6d3fa |
68 changed files with 3093 additions and 4586 deletions
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
|
@ -13,16 +13,16 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
php-version: ['7.2', '7.3', '7.4', '8.0']
|
||||
php-version: ['7.3', '7.4', '8.0', '8.1']
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/checkout@v4
|
||||
- name: Setup PHP ${{ matrix.php-version }}
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-version }}
|
||||
tools: composer:v1
|
||||
- name: Composer cache
|
||||
uses: actions/cache@v2
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: ${{ env.HOME }}/.composer/cache
|
||||
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -194,4 +194,7 @@ build/*
|
|||
|
||||
# Test report & coverage
|
||||
test-report.xml
|
||||
.phpunit.result.cache
|
||||
clover.xml
|
||||
composer.lock
|
||||
docker-compose.yml
|
||||
|
|
13
Makefile
13
Makefile
|
@ -1,15 +1,16 @@
|
|||
ROOT_DIR=$(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||
SRC_DIR=$(ROOT_DIR)/src
|
||||
BIN_DIR=$(ROOT_DIR)/vendor/bin
|
||||
ifneq ("$(wildcard docker-compose.yml)","")
|
||||
PHP=docker-compose run --rm --no-deps php php
|
||||
else
|
||||
PHP=php
|
||||
endif
|
||||
|
||||
test:
|
||||
@echo "==> Running tests"
|
||||
@cd $(ROOT_DIR)
|
||||
@cp .env.dist .env
|
||||
@php -d memory_limit=-1 $(BIN_DIR)/phpunit -c phpunit.xml.dist
|
||||
@$(PHP) -d memory_limit=-1 vendor/bin/phpunit -c phpunit.xml.dist
|
||||
@echo "==> Testing complete"
|
||||
|
||||
stan:
|
||||
@echo "==> Running analysis"
|
||||
@php $(BIN_DIR)/phpstan analyse
|
||||
@$(PHP) vendor/bin/phpstan analyse
|
||||
@echo "==> Analysis complete"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
## Requirements
|
||||
|
||||
* PHP 7.1 and above
|
||||
* PHP 7.3 and above
|
||||
* PHP's cURL support
|
||||
* PHP's JSON support
|
||||
|
||||
|
|
|
@ -12,21 +12,21 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.2.5",
|
||||
"php": ">=7.3",
|
||||
"ext-curl": "*",
|
||||
"ext-json": "*",
|
||||
"jms/serializer": "3.*",
|
||||
"symfony/validator": "5.4.*",
|
||||
"doctrine/annotations": "1.13.*",
|
||||
"doctrine/cache": "1.11.*",
|
||||
"guzzlehttp/guzzle": "6.*",
|
||||
"symfony/intl": "^5.4"
|
||||
"symfony/validator": "5.4.*|^6",
|
||||
"doctrine/annotations": "^1",
|
||||
"guzzlehttp/guzzle": "7.*",
|
||||
"symfony/intl": "5.4.*|^6",
|
||||
"symfony/cache": "5.4.*|^6"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpmd/phpmd": "2.*",
|
||||
"squizlabs/php_codesniffer": "3.4.*",
|
||||
"symfony/dotenv": "5.4.*",
|
||||
"phpunit/phpunit": "8.5.*",
|
||||
"phpunit/phpunit": "^9",
|
||||
"phpstan/phpstan": "0.12.*"
|
||||
},
|
||||
"support": {
|
||||
|
|
4436
composer.lock
generated
4436
composer.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -1285,6 +1285,11 @@ parameters:
|
|||
count: 1
|
||||
path: src/Bot/Model/Request/DialogsRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\DialogsRequest\\:\\:setSinceId\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
path: src/Bot/Model/Request/DialogsRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\DialogsRequest\\:\\:setBotId\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
|
@ -1350,6 +1355,11 @@ parameters:
|
|||
count: 1
|
||||
path: src/Bot/Model/Request/MembersRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\MembersRequest\\:\\:setId\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
path: src/Bot/Model/Request/MembersRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\MembersRequest\\:\\:setSince\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
|
@ -1445,6 +1455,11 @@ parameters:
|
|||
count: 1
|
||||
path: src/Bot/Model/Request/MessagesRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\MessagesRequest\\:\\:setLimit\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
path: src/Bot/Model/Request/MessagesRequest.php
|
||||
|
||||
-
|
||||
message: "#^Method RetailCrm\\\\Mg\\\\Bot\\\\Model\\\\Request\\\\MessagesRequest\\:\\:setChannelId\\(\\) has no return typehint specified\\.$#"
|
||||
count: 1
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.5/phpunit.xsd"
|
||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd"
|
||||
backupGlobals="false"
|
||||
colors="false"
|
||||
bootstrap="tests/bootstrap.php"
|
||||
|
@ -15,22 +13,21 @@
|
|||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
stopOnRisky="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Project Test Suite">
|
||||
<directory>tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>src</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
|
||||
<logging>
|
||||
<log type="coverage-clover" target="clover.xml"/>
|
||||
<log type="junit" target="/tmp/logfile.xml"/>
|
||||
</logging>
|
||||
stopOnRisky="false">
|
||||
<coverage>
|
||||
<include>
|
||||
<directory>src</directory>
|
||||
</include>
|
||||
<report>
|
||||
<clover outputFile="clover.xml"/>
|
||||
</report>
|
||||
</coverage>
|
||||
<testsuites>
|
||||
<testsuite name="Project Test Suite">
|
||||
<directory>tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<logging>
|
||||
<junit outputFile="/tmp/logfile.xml"/>
|
||||
</logging>
|
||||
</phpunit>
|
||||
|
|
|
@ -11,9 +11,8 @@
|
|||
namespace RetailCrm\Mg\Bot;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use RetailCrm\Common\Url;
|
||||
use RetailCrm\Common\Serializer;
|
||||
use RetailCrm\Mg\Bot\Model\ModelAdapter;
|
||||
use RetailCrm\Common\Url;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Bot;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Channel\Channel;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Chat\Chat;
|
||||
|
@ -22,13 +21,16 @@ use RetailCrm\Mg\Bot\Model\Entity\Command;
|
|||
use RetailCrm\Mg\Bot\Model\Entity\Customer;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Dialog;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Message\Message;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Template\Template;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\User;
|
||||
use RetailCrm\Mg\Bot\Model\ModelAdapter;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
use RetailCrm\Mg\Bot\Model\Request\UploadFileByUrlRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Response\AssignResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\UnassignResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\ErrorOnlyResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\FullFileResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\MessageSendResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\UnassignResponse;
|
||||
use RetailCrm\Mg\Bot\Model\Response\UploadFileResponse;
|
||||
|
||||
/**
|
||||
|
@ -313,6 +315,48 @@ class Client
|
|||
return $adapter->getResponseModel($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add tag to dialog
|
||||
*
|
||||
* @param Model\Request\DialogTagRequest $request Request parameters
|
||||
*
|
||||
* @return \RetailCrm\Mg\Bot\Model\ModelInterface
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function dialogAddTag(Model\Request\DialogTagRequest $request)
|
||||
{
|
||||
$response = $this->client->makeRequest(
|
||||
sprintf("/dialogs/%d/tags/add", $request->getDialogId()),
|
||||
HttpClient::METHOD_PATCH,
|
||||
$request
|
||||
);
|
||||
|
||||
$adapter = new ModelAdapter(ErrorOnlyResponse::class);
|
||||
|
||||
return $adapter->getResponseModel($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete tag from dialog
|
||||
*
|
||||
* @param Model\Request\DialogTagRequest $request Request parameters
|
||||
*
|
||||
* @return \RetailCrm\Mg\Bot\Model\ModelInterface
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function dialogDeleteTag(Model\Request\DialogTagRequest $request)
|
||||
{
|
||||
$response = $this->client->makeRequest(
|
||||
sprintf("/dialogs/%d/tags/delete", $request->getDialogId()),
|
||||
HttpClient::METHOD_PATCH,
|
||||
$request
|
||||
);
|
||||
|
||||
$adapter = new ModelAdapter(ErrorOnlyResponse::class);
|
||||
|
||||
return $adapter->getResponseModel($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns filtered members list
|
||||
*
|
||||
|
@ -418,6 +462,47 @@ class Client
|
|||
return $adapter->getResponseModel($response);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns templates list
|
||||
*
|
||||
* @return Template[]
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function templates(): array
|
||||
{
|
||||
$response = $this->client->makeRequest(
|
||||
'/templates',
|
||||
HttpClient::METHOD_GET
|
||||
);
|
||||
|
||||
$adapter = new ModelAdapter(Template::class);
|
||||
|
||||
return $adapter->getResponseList($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a template message
|
||||
*
|
||||
* @param string $templateId
|
||||
* @param Model\Request\TemplateSendRequest $request Request parameters
|
||||
*
|
||||
* @return \RetailCrm\Mg\Bot\Model\ModelInterface
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function templateSend(string $templateId, Model\Request\TemplateSendRequest $request): ModelInterface
|
||||
{
|
||||
$response = $this->client->makeRequest(
|
||||
sprintf('/templates/%d/send', $templateId),
|
||||
HttpClient::METHOD_POST,
|
||||
$request
|
||||
);
|
||||
|
||||
$adapter = new ModelAdapter(MessageSendResponse::class);
|
||||
|
||||
return $adapter->getResponseModel($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns filtered users list
|
||||
*
|
||||
|
|
|
@ -13,7 +13,12 @@ namespace RetailCrm\Mg\Bot;
|
|||
use BadMethodCallException;
|
||||
use ErrorException;
|
||||
use Exception;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use GuzzleHttp\Psr7\Utils;
|
||||
use InvalidArgumentException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use RetailCrm\Common\Exception\InvalidJsonException;
|
||||
use RetailCrm\Common\Exception\LimitException;
|
||||
use RetailCrm\Common\Exception\NotFoundException;
|
||||
|
@ -22,11 +27,6 @@ use RetailCrm\Common\Serializer;
|
|||
use RetailCrm\Common\Url;
|
||||
use RuntimeException;
|
||||
use Symfony\Component\Validator\Validation;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use function GuzzleHttp\Psr7\stream_for;
|
||||
|
||||
/**
|
||||
* Class HttpClient
|
||||
|
@ -137,7 +137,7 @@ class HttpClient
|
|||
[self::METHOD_POST, self::METHOD_PUT, self::METHOD_PATCH, self::METHOD_DELETE]
|
||||
) && is_string($requestBody)
|
||||
) {
|
||||
$request = $request->withBody(stream_for($requestBody));
|
||||
$request = $request->withBody(Utils::streamFor($requestBody));
|
||||
}
|
||||
|
||||
$responseObject = null;
|
||||
|
@ -216,14 +216,15 @@ class HttpClient
|
|||
/**
|
||||
* Validate given class
|
||||
*
|
||||
* @param string $class
|
||||
* @param object $class
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function validateRequest($class)
|
||||
private function validateRequest(object $class)
|
||||
{
|
||||
$validator = Validation::createValidatorBuilder()
|
||||
->enableAnnotationMapping()
|
||||
->addDefaultDoctrineAnnotationReader()
|
||||
->getValidator();
|
||||
|
||||
$errors = $validator->validate($class);
|
||||
|
|
|
@ -38,6 +38,7 @@ class Constants
|
|||
|
||||
const BOT_ROLE_DISTRIBUTOR = "distributor";
|
||||
const BOT_ROLE_RESPONSIBLE = "responsible";
|
||||
const BOT_ROLE_HIDDEN = "hidden";
|
||||
|
||||
const MESSAGE_SCOPE_PUBLIC = "public";
|
||||
const MESSAGE_SCOPE_PRIVATE = "private";
|
||||
|
|
|
@ -33,7 +33,7 @@ class Bot implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -42,7 +42,7 @@ class Bot implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
|
|
@ -33,7 +33,7 @@ class Channel implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -41,7 +41,7 @@ class Channel implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
*/
|
||||
private $updatedAt;
|
||||
|
@ -49,7 +49,7 @@ class Channel implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $activatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getActivatedAt",setter="setActivatedAt")
|
||||
*/
|
||||
private $activatedAt;
|
||||
|
@ -57,7 +57,7 @@ class Channel implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $deactivatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getDeactivatedAt",setter="setDeactivatedAt")
|
||||
*/
|
||||
private $deactivatedAt;
|
||||
|
|
|
@ -83,6 +83,15 @@ class ChannelSettings implements ModelInterface
|
|||
*/
|
||||
private $file;
|
||||
|
||||
/**
|
||||
* @var ChannelSettingsSuggestions $suggestions
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Channel\ChannelSettingsSuggestions")
|
||||
* @Accessor(getter="getSuggestions",setter="setSuggestions")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $suggestions;
|
||||
|
||||
/**
|
||||
* @return ChannelSettingsStatus|null
|
||||
*/
|
||||
|
@ -194,4 +203,20 @@ class ChannelSettings implements ModelInterface
|
|||
{
|
||||
$this->file = $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ChannelSettingsSuggestions|null
|
||||
*/
|
||||
public function getSuggestions(): ?ChannelSettingsSuggestions
|
||||
{
|
||||
return $this->suggestions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ChannelSettingsSuggestions $suggestions
|
||||
*/
|
||||
public function setSuggestions(ChannelSettingsSuggestions $suggestions): void
|
||||
{
|
||||
$this->suggestions = $suggestions;
|
||||
}
|
||||
}
|
||||
|
|
100
src/Bot/Model/Entity/Channel/ChannelSettingsSuggestions.php
Normal file
100
src/Bot/Model/Entity/Channel/ChannelSettingsSuggestions.php
Normal file
|
@ -0,0 +1,100 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* ChannelSettingsSuggestions entity
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Channel
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Channel;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
* ChannelSettingsSuggestions class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Channel
|
||||
*/
|
||||
class ChannelSettingsSuggestions implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var string $email
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getEmail", setter="setEmail")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $email;
|
||||
|
||||
/**
|
||||
* @var string $phone
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getPhone", setter="setPhone")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $phone;
|
||||
|
||||
/**
|
||||
* @var string $text
|
||||
*
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getText", setter="setText")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $text;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getEmail(): ?string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $email
|
||||
*/
|
||||
public function setEmail(string $email): void
|
||||
{
|
||||
$this->email = $email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPhone(): ?string
|
||||
{
|
||||
return $this->phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $phone
|
||||
*/
|
||||
public function setPhone(string $phone): void
|
||||
{
|
||||
$this->phone = $phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getText(): ?string
|
||||
{
|
||||
return $this->text;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $text
|
||||
*/
|
||||
public function setText(string $text): void
|
||||
{
|
||||
$this->text = $text;
|
||||
}
|
||||
}
|
|
@ -35,7 +35,7 @@ class Chat implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -43,7 +43,7 @@ class Chat implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
*/
|
||||
private $updatedAt;
|
||||
|
@ -100,7 +100,7 @@ class Chat implements ModelInterface
|
|||
/**
|
||||
* @var ChatLastMessage $lastMessage
|
||||
*
|
||||
* @Type("ChatLastMessage")
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Chat\ChatLastMessage")
|
||||
* @Accessor(getter="getLastMessage",setter="setLastMessage")
|
||||
*/
|
||||
private $lastMessage;
|
||||
|
@ -113,6 +113,14 @@ class Chat implements ModelInterface
|
|||
*/
|
||||
private $lastActivity;
|
||||
|
||||
/**
|
||||
* @var \DateTime $replyDeadline
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:sP'>")
|
||||
* @Accessor(getter="getReplyDeadline",setter="setReplyDeadline")
|
||||
*/
|
||||
private $replyDeadline;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -288,4 +296,20 @@ class Chat implements ModelInterface
|
|||
{
|
||||
$this->lastActivity = $lastActivity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getReplyDeadline(): ?\DateTime
|
||||
{
|
||||
return $this->replyDeadline;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTime $replyDeadline
|
||||
*/
|
||||
public function setReplyDeadline(\DateTime $replyDeadline): void
|
||||
{
|
||||
$this->replyDeadline = $replyDeadline;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ namespace RetailCrm\Mg\Bot\Model\Entity\Chat;
|
|||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Customer;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
|
@ -34,7 +35,7 @@ class ChatLastMessage implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $time
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:sP'>")
|
||||
* @Accessor(getter="getTime",setter="setTime")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -49,6 +50,77 @@ class ChatLastMessage implements ModelInterface
|
|||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var string $scope
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getScope",setter="setScope")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $scope;
|
||||
|
||||
/**
|
||||
* @var int $chatId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getChatId",setter="setChatId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $chatId;
|
||||
|
||||
/**
|
||||
* @var bool $isRead
|
||||
*
|
||||
* @Type("bool")
|
||||
* @Accessor(getter="getIsRead",setter="setIsRead")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $isRead;
|
||||
|
||||
/**
|
||||
* @var bool $isEdit
|
||||
*
|
||||
* @Type("bool")
|
||||
* @Accessor(getter="getIsEdit",setter="setIsEdit")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $isEdit;
|
||||
|
||||
/**
|
||||
* @var string $status
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getStatus",setter="setStatus")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $status;
|
||||
|
||||
/**
|
||||
* @var Customer $from
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Customer")
|
||||
* @Accessor(getter="getFrom",setter="setFrom")
|
||||
*/
|
||||
private $from;
|
||||
|
||||
/**
|
||||
* @var string $content
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getContent",setter="setContent")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* @var \RetailCrm\Mg\Bot\Model\Entity\Message\MessageQuote $quote
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Message\MessageQuote")
|
||||
* @Accessor(getter="getQuote",setter="setQuote")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $quote;
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
|
@ -96,4 +168,132 @@ class ChatLastMessage implements ModelInterface
|
|||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getScope()
|
||||
{
|
||||
return $this->scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $scope
|
||||
*/
|
||||
public function setScope($scope): void
|
||||
{
|
||||
$this->scope = $scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getChatId()
|
||||
{
|
||||
return $this->chatId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $chatId
|
||||
*/
|
||||
public function setChatId($chatId): void
|
||||
{
|
||||
$this->chatId = $chatId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getIsRead()
|
||||
{
|
||||
return $this->isRead;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $isRead
|
||||
*/
|
||||
public function setIsRead($isRead): void
|
||||
{
|
||||
$this->isRead = $isRead;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getIsEdit()
|
||||
{
|
||||
return $this->isEdit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $isEdit
|
||||
*/
|
||||
public function setIsEdit($isEdit): void
|
||||
{
|
||||
$this->isEdit = $isEdit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getStatus()
|
||||
{
|
||||
return $this->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $status
|
||||
*/
|
||||
public function setStatus($status): void
|
||||
{
|
||||
$this->status = $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getFrom()
|
||||
{
|
||||
return $this->from;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $from
|
||||
*/
|
||||
public function setFrom($from): void
|
||||
{
|
||||
$this->from = $from;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getContent()
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $content
|
||||
*/
|
||||
public function setContent($content): void
|
||||
{
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getQuote()
|
||||
{
|
||||
return $this->quote;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $quote
|
||||
*/
|
||||
public function setQuote($quote): void
|
||||
{
|
||||
$this->quote = $quote;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ class ChatMember implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -41,7 +41,7 @@ class ChatMember implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
|
|
@ -33,7 +33,7 @@ class Command implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -41,7 +41,7 @@ class Command implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
|
|
@ -34,7 +34,7 @@ class Customer implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -42,7 +42,7 @@ class Customer implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -167,6 +167,15 @@ class Customer implements ModelInterface
|
|||
*/
|
||||
private $email;
|
||||
|
||||
/**
|
||||
* @var Utm $utm
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Utm")
|
||||
* @Accessor(getter="getUtm",setter="setUtm")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $utm;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -406,4 +415,21 @@ class Customer implements ModelInterface
|
|||
{
|
||||
$this->email = $email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Utm|null
|
||||
*/
|
||||
public function getUtm(): ?Utm
|
||||
{
|
||||
return $this->utm;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Utm $utm
|
||||
* @return void
|
||||
*/
|
||||
public function setUtm(Utm $utm): void
|
||||
{
|
||||
$this->utm = $utm;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ class Dialog implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -41,7 +41,7 @@ class Dialog implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -86,7 +86,7 @@ class Dialog implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $closedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getClosedAt",setter="setClosedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -119,6 +119,15 @@ class Dialog implements ModelInterface
|
|||
*/
|
||||
private $isActive;
|
||||
|
||||
/**
|
||||
* @var Utm $utm
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Utm")
|
||||
* @Accessor(getter="getUtm",setter="setUtm")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $utm;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -294,4 +303,21 @@ class Dialog implements ModelInterface
|
|||
{
|
||||
$this->isActive = $isActive;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Utm|null
|
||||
*/
|
||||
public function getUtm(): ?Utm
|
||||
{
|
||||
return $this->utm;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Utm $utm
|
||||
* @return void
|
||||
*/
|
||||
public function setUtm(Utm $utm): void
|
||||
{
|
||||
$this->utm = $utm;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,6 +49,15 @@ class Item implements ModelInterface
|
|||
*/
|
||||
private $caption;
|
||||
|
||||
/**
|
||||
* @var string $transcription
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getTranscription",setter="setTranscription")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $transcription;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -96,4 +105,20 @@ class Item implements ModelInterface
|
|||
{
|
||||
$this->caption = $caption;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTranscription(): ?string
|
||||
{
|
||||
return $this->transcription;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $transcription
|
||||
*/
|
||||
public function setTranscription(string $transcription): void
|
||||
{
|
||||
$this->transcription = $transcription;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ class Message implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -43,7 +43,7 @@ class Message implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -121,6 +121,23 @@ class Message implements ModelInterface
|
|||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* @var string $note
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getNote",setter="setNote")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $note;
|
||||
|
||||
/**
|
||||
* @var ?Quote $quote
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Message\Quote")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $quote;
|
||||
|
||||
/**
|
||||
* @var bool $isRead
|
||||
*
|
||||
|
@ -178,7 +195,7 @@ class Message implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $channelSentAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getChannelSentAt",setter="setChannelSentAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -378,6 +395,34 @@ class Message implements ModelInterface
|
|||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getNote(): ?string
|
||||
{
|
||||
return $this->note;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $note
|
||||
*/
|
||||
public function setNote(string $note): void
|
||||
{
|
||||
$this->note = $note;
|
||||
}
|
||||
|
||||
public function getQuote(): ?Quote
|
||||
{
|
||||
return $this->quote ?? null;
|
||||
}
|
||||
|
||||
public function setQuote(?Quote $quote): Message
|
||||
{
|
||||
$this->quote = $quote;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool|null
|
||||
*/
|
||||
|
|
172
src/Bot/Model/Entity/Message/MessageQuote.php
Normal file
172
src/Bot/Model/Entity/Message/MessageQuote.php
Normal file
|
@ -0,0 +1,172 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.3
|
||||
*
|
||||
* @category MessageQuote
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Message
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Message;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\User;
|
||||
|
||||
/**
|
||||
* Class MessageQuote
|
||||
*
|
||||
* @category MessageQuote
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Message
|
||||
*/
|
||||
class MessageQuote
|
||||
{
|
||||
/**
|
||||
* @var int $id
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getId",setter="setId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string $type
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getType",setter="setType")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var User $from
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\User")
|
||||
* @Accessor(getter="getFrom",setter="setFrom")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $from;
|
||||
|
||||
/**
|
||||
* @var \DateTime $time
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:sP'>")
|
||||
* @Accessor(getter="getTime",setter="setTime")
|
||||
*/
|
||||
private $time;
|
||||
|
||||
/**
|
||||
* @var string $content
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getContent",setter="setContent")
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* @var object[] $items
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getItems",setter="setItems")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $items;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
public function setId(int $id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType(): ?string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
public function setType(string $type): void
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User|null
|
||||
*/
|
||||
public function getFrom(): ?User
|
||||
{
|
||||
return $this->from;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $from
|
||||
*/
|
||||
public function setFrom(User $from): void
|
||||
{
|
||||
$this->from = $from;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getTime(): ?\DateTime
|
||||
{
|
||||
return $this->time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DateTime $time
|
||||
*/
|
||||
public function setTime(\DateTime $time): void
|
||||
{
|
||||
$this->time = $time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getContent(): string
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $content
|
||||
*/
|
||||
public function setContent(string $content): void
|
||||
{
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return object[]|null
|
||||
*/
|
||||
public function getItems(): ?array
|
||||
{
|
||||
return $this->items;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param object[] $items
|
||||
*/
|
||||
public function setItems(array $items): void
|
||||
{
|
||||
$this->items = $items;
|
||||
}
|
||||
}
|
106
src/Bot/Model/Entity/Message/Quote.php
Normal file
106
src/Bot/Model/Entity/Message/Quote.php
Normal file
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Message;
|
||||
|
||||
use DateTime;
|
||||
use JMS\Serializer\Annotation as Serializer;
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\User;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
class Quote implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*
|
||||
* @Type("integer")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Type("string")
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var User
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\User")
|
||||
*/
|
||||
private $from;
|
||||
|
||||
/**
|
||||
* @var DateTime $time
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:sP'>")
|
||||
* @Accessor(getter="getTime",setter="setTime")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $time;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*
|
||||
* @Type("string")
|
||||
*/
|
||||
private $content;
|
||||
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function setId(int $id): Quote
|
||||
{
|
||||
$this->id = $id;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function setType(string $type): Quote
|
||||
{
|
||||
$this->type = $type;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getFrom(): User
|
||||
{
|
||||
return $this->from;
|
||||
}
|
||||
|
||||
public function setFrom(User $from): Quote
|
||||
{
|
||||
$this->from = $from;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getTime(): DateTime
|
||||
{
|
||||
return $this->time;
|
||||
}
|
||||
|
||||
public function setTime(DateTime $time): Quote
|
||||
{
|
||||
$this->time = $time;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getContent(): string
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
public function setContent(string $content): Quote
|
||||
{
|
||||
$this->content = $content;
|
||||
return $this;
|
||||
}
|
||||
}
|
|
@ -49,6 +49,15 @@ class Responsible implements ModelInterface
|
|||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var string $externalId
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getExternalId",setter="setExternalId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $externalId;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -96,4 +105,20 @@ class Responsible implements ModelInterface
|
|||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getExternalId(): ?string
|
||||
{
|
||||
return $this->externalId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $externalId
|
||||
*/
|
||||
public function setExternalId(string $externalId): void
|
||||
{
|
||||
$this->externalId = $externalId;
|
||||
}
|
||||
}
|
||||
|
|
78
src/Bot/Model/Entity/Tag.php
Normal file
78
src/Bot/Model/Entity/Tag.php
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Tag entity
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
* Tag class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity
|
||||
*/
|
||||
class Tag implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var string $name
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getName",setter="setName")
|
||||
*
|
||||
* @Assert\NotBlank
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var string $colorCode
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getColorCode",setter="setColorCode")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $colorCode;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @return void
|
||||
*/
|
||||
public function setName(string $name): void
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getColorCode(): ?string
|
||||
{
|
||||
return $this->colorCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $colorCode
|
||||
* @return void
|
||||
*/
|
||||
public function setColorCode(string $colorCode): void
|
||||
{
|
||||
$this->colorCode = $colorCode;
|
||||
}
|
||||
}
|
385
src/Bot/Model/Entity/Template/Template.php
Normal file
385
src/Bot/Model/Entity/Template/Template.php
Normal file
|
@ -0,0 +1,385 @@
|
|||
<?php
|
||||
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Template entity
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Template;
|
||||
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
|
||||
/**
|
||||
* Template class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
class Template implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var int $id
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getId",setter="setId")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string $code
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getCode",setter="setCode")
|
||||
*/
|
||||
private $code;
|
||||
|
||||
/**
|
||||
* @var int $channelId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getChannelId",setter="setChannelId")
|
||||
*/
|
||||
private $channelId;
|
||||
|
||||
/**
|
||||
* @var string $name
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getName",setter="setName")
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var bool $enabled
|
||||
*
|
||||
* @Type("bool")
|
||||
* @Accessor(getter="getEnabled",setter="setEnabled")
|
||||
*/
|
||||
private $enabled;
|
||||
|
||||
/**
|
||||
* @var string $type
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getType",setter="setType")
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var array<string, string> $template
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getTemplate",setter="setTemplate")
|
||||
*/
|
||||
private $template;
|
||||
|
||||
/**
|
||||
* @var string $body
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getBody",setter="setBody")
|
||||
*/
|
||||
private $body;
|
||||
|
||||
/**
|
||||
* @var string $lang
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getLang",setter="setLang")
|
||||
*/
|
||||
private $lang;
|
||||
|
||||
/**
|
||||
* @var string $category
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getCategory",setter="setCategory")
|
||||
*/
|
||||
private $category;
|
||||
|
||||
/**
|
||||
* @var string $verificationStatus
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getVerificationStatus",setter="setVerificationStatus")
|
||||
*/
|
||||
private $verificationStatus;
|
||||
|
||||
/**
|
||||
* @var string $rejectionReason
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getRejectionReason",setter="setRejectionReason")
|
||||
*/
|
||||
private $rejectionReason;
|
||||
|
||||
/**
|
||||
* @var string $quality
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getQuality",setter="setQuality")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $quality;
|
||||
|
||||
/**
|
||||
* @var array<string, string> $header
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getHeader",setter="setHeader")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $header;
|
||||
|
||||
/**
|
||||
* @var array<string, array<string, string>> $buttons
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getButtons",setter="setButtons")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $buttons;
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
public function setId(int $id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCode(): ?string
|
||||
{
|
||||
return $this->code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $code
|
||||
*/
|
||||
public function setCode(string $code): void
|
||||
{
|
||||
$this->code = $code;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getChannelId(): ?int
|
||||
{
|
||||
return $this->channelId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $channelId
|
||||
*/
|
||||
public function setChannelId(int $channelId): void
|
||||
{
|
||||
$this->channelId = $channelId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getName(): ?string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
public function setName(string $name): void
|
||||
{
|
||||
$this->name = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool|null
|
||||
*/
|
||||
public function getEnabled(): ?bool
|
||||
{
|
||||
return $this->enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $enabled
|
||||
*/
|
||||
public function setEnabled(bool $enabled): void
|
||||
{
|
||||
$this->enabled = $enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getType(): ?string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
public function setType(string $type): void
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>|null
|
||||
*/
|
||||
public function getTemplate(): ?array
|
||||
{
|
||||
return $this->template;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $template
|
||||
*/
|
||||
public function setTemplate(array $template): void
|
||||
{
|
||||
$this->template = $template;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getBody(): ?string
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $body
|
||||
*/
|
||||
public function setBody(string $body): void
|
||||
{
|
||||
$this->body = $body;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getVerificationStatus(): ?string
|
||||
{
|
||||
return $this->verificationStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $verificationStatus
|
||||
*/
|
||||
public function setVerificationStatus(string $verificationStatus): void
|
||||
{
|
||||
$this->verificationStatus = $verificationStatus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getLang(): ?string
|
||||
{
|
||||
return $this->lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $lang
|
||||
*/
|
||||
public function setLang(string $lang): void
|
||||
{
|
||||
$this->lang = $lang;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCategory(): ?string
|
||||
{
|
||||
return $this->category;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $category
|
||||
*/
|
||||
public function setCategory(string $category): void
|
||||
{
|
||||
$this->category = $category;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getRejectionReason(): ?string
|
||||
{
|
||||
return $this->rejectionReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $rejectionReason
|
||||
*/
|
||||
public function setRejectionReason(string $rejectionReason): void
|
||||
{
|
||||
$this->rejectionReason = $rejectionReason;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getQuality(): ?string
|
||||
{
|
||||
return $this->quality;
|
||||
}
|
||||
|
||||
public function setQuality(string $quality): void
|
||||
{
|
||||
$this->quality = $quality;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>|null
|
||||
*/
|
||||
public function getHeader(): ?array
|
||||
{
|
||||
return $this->header;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $header
|
||||
*/
|
||||
public function setHeader(array $header): void
|
||||
{
|
||||
$this->header = $header;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<string, string>>|null
|
||||
*/
|
||||
public function getButtons(): ?array
|
||||
{
|
||||
return $this->buttons;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, array<string, string>> $buttons
|
||||
*/
|
||||
public function setButtons(array $buttons): void
|
||||
{
|
||||
$this->buttons = $buttons;
|
||||
}
|
||||
}
|
74
src/Bot/Model/Entity/Template/TemplateAttachment.php
Normal file
74
src/Bot/Model/Entity/Template/TemplateAttachment.php
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* TemplateAttachment entity
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Template;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
* TemplateAttachment class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
class TemplateAttachment implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var string $id
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getId",setter="setId")
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @var string $caption
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getCaption",setter="setCaption")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $caption;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getId(): ?string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $id
|
||||
* @return void
|
||||
*/
|
||||
public function setId(string $id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCaption(): ?string
|
||||
{
|
||||
return $this->caption;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $caption
|
||||
*/
|
||||
public function setCaption(string $caption): void
|
||||
{
|
||||
$this->caption = $caption;
|
||||
}
|
||||
}
|
120
src/Bot/Model/Entity/Template/TemplateVariables.php
Normal file
120
src/Bot/Model/Entity/Template/TemplateVariables.php
Normal file
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* TemplateVariables entity
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity\Template;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
* TemplateVariables class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity\Template
|
||||
*/
|
||||
class TemplateVariables implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var array<string, string> $header
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getHeader",setter="setHeader")
|
||||
*/
|
||||
private $header;
|
||||
|
||||
|
||||
/** @var array<TemplateAttachment> $attachments
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getAttachments",setter="setAttachments")
|
||||
*/
|
||||
private $attachments;
|
||||
|
||||
/**
|
||||
* @var array<string, string> $body
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getBody",setter="setBody")
|
||||
*/
|
||||
private $body;
|
||||
|
||||
/**
|
||||
* @var array<string, array<string, string>> $buttons
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getButtons",setter="setButtons")
|
||||
*/
|
||||
private $buttons;
|
||||
|
||||
/**
|
||||
* @return array<string, string>|null
|
||||
*/
|
||||
public function getHeader(): ?array
|
||||
{
|
||||
return $this->header;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $header
|
||||
*/
|
||||
public function setHeader(array $header): void
|
||||
{
|
||||
$this->header = $header;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string>|null
|
||||
*/
|
||||
public function getBody(): ?array
|
||||
{
|
||||
return $this->body;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $body
|
||||
*/
|
||||
public function setBody(array $body): void
|
||||
{
|
||||
$this->body = $body;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<string, string>>|null
|
||||
*/
|
||||
public function getButtons(): ?array
|
||||
{
|
||||
return $this->buttons;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, array<string, string>> $buttons
|
||||
*/
|
||||
public function setButtons(array $buttons): void
|
||||
{
|
||||
$this->buttons = $buttons;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TemplateAttachment[]|null
|
||||
*/
|
||||
public function getAttachments(): ?array
|
||||
{
|
||||
return $this->attachments;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TemplateAttachment[] $attachments
|
||||
*/
|
||||
public function setAttachments(array $attachments): void
|
||||
{
|
||||
$this->attachments = $attachments;
|
||||
}
|
||||
}
|
|
@ -34,7 +34,7 @@ class User implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $createdAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getCreatedAt",setter="setCreatedAt")
|
||||
*/
|
||||
private $createdAt;
|
||||
|
@ -42,7 +42,7 @@ class User implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $updatedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getUpdatedAt",setter="setUpdatedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
@ -136,12 +136,21 @@ class User implements ModelInterface
|
|||
/**
|
||||
* @var \DateTime $revokedAt
|
||||
*
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z'>")
|
||||
* @Type("DateTime<'Y-m-d\TH:i:s\.u\Z', null, ['Y-m-d\TH:i:s\.u\Z', 'Y-m-d\TH:i:s\Z']>")
|
||||
* @Accessor(getter="getRevokedAt",setter="setRevokedAt")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $revokedAt;
|
||||
|
||||
/**
|
||||
* @var bool $isSystem
|
||||
*
|
||||
* @Type("bool")
|
||||
* @Accessor(getter="isSystem",setter="setIsSystem")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $isSystem;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
|
@ -349,4 +358,20 @@ class User implements ModelInterface
|
|||
{
|
||||
$this->revokedAt = $revokedAt;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool|null
|
||||
*/
|
||||
public function isSystem(): ?bool
|
||||
{
|
||||
return $this->isSystem;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $isSystem
|
||||
*/
|
||||
public function setIsSystem(bool $isSystem): void
|
||||
{
|
||||
$this->isSystem = $isSystem;
|
||||
}
|
||||
}
|
||||
|
|
154
src/Bot/Model/Entity/Utm.php
Normal file
154
src/Bot/Model/Entity/Utm.php
Normal file
|
@ -0,0 +1,154 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Utm entity
|
||||
*
|
||||
* @package Retailcrm\Mg\Bot\Model\Entity
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Entity;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
* Utm class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Entity
|
||||
*/
|
||||
class Utm implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var string $campaign
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getCampaign",setter="setCampaign")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $campaign;
|
||||
|
||||
/**
|
||||
* @var string $content
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getContent",setter="setContent")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/**
|
||||
* @var string $medium
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getMedium",setter="setMedium")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $medium;
|
||||
|
||||
/**
|
||||
* @var string $source
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getSource",setter="setSource")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $source;
|
||||
|
||||
/**
|
||||
* @var string $term
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getTerm",setter="setTerm")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $term;
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getCampaign(): ?string
|
||||
{
|
||||
return $this->campaign;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $campaign
|
||||
* @return void
|
||||
*/
|
||||
public function setCampaign(string $campaign): void
|
||||
{
|
||||
$this->campaign = $campaign;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getContent(): ?string
|
||||
{
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $content
|
||||
* @return void
|
||||
*/
|
||||
public function setContent(string $content): void
|
||||
{
|
||||
$this->content = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getMedium(): ?string
|
||||
{
|
||||
return $this->medium;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $medium
|
||||
* @return void
|
||||
*/
|
||||
public function setMedium(string $medium): void
|
||||
{
|
||||
$this->medium = $medium;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getSource(): ?string
|
||||
{
|
||||
return $this->source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $source
|
||||
* @return void
|
||||
*/
|
||||
public function setSource(string $source): void
|
||||
{
|
||||
$this->source = $source;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string|null
|
||||
*/
|
||||
public function getTerm(): ?string
|
||||
{
|
||||
return $this->term;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $term
|
||||
* @return void
|
||||
*/
|
||||
public function setTerm(string $term): void
|
||||
{
|
||||
$this->term = $term;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,7 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class BotsRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
|
||||
/**
|
||||
* @Type("int")
|
||||
|
|
|
@ -23,6 +23,7 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class ChannelsRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
|
||||
/**
|
||||
* @Type("array")
|
||||
|
|
|
@ -23,6 +23,8 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class ChatsRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
use IncludeMassCommunication;
|
||||
|
||||
/**
|
||||
* @Type("int")
|
||||
|
@ -38,6 +40,24 @@ class ChatsRequest implements ModelInterface
|
|||
*/
|
||||
private $channelType;
|
||||
|
||||
/**
|
||||
* @var int $customerId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getCustomerId",setter="setCustomerId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $customerId;
|
||||
|
||||
/**
|
||||
* @var int $sinceId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getSinceId",setter="setSinceId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $sinceId;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
@ -69,4 +89,38 @@ class ChatsRequest implements ModelInterface
|
|||
{
|
||||
$this->channelType = $channelType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getCustomerId(): ?int
|
||||
{
|
||||
return $this->customerId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $customerId
|
||||
* @return void
|
||||
*/
|
||||
public function setCustomerId($customerId)
|
||||
{
|
||||
$this->customerId = $customerId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getSinceId()
|
||||
{
|
||||
return $this->sinceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $sinceId
|
||||
* @return void
|
||||
*/
|
||||
public function setSinceId($sinceId)
|
||||
{
|
||||
$this->sinceId = $sinceId;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class CustomersRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
|
||||
/**
|
||||
* @Type("string")
|
||||
|
|
78
src/Bot/Model/Request/DialogTagRequest.php
Normal file
78
src/Bot/Model/Request/DialogTagRequest.php
Normal file
|
@ -0,0 +1,78 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Dialog add or delete tag request
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Request;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Tag;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
|
||||
/**
|
||||
* DialogTagRequest class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
class DialogTagRequest implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var int $dialogId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getDialogId", setter="setDialogId")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $dialogId;
|
||||
|
||||
/**
|
||||
* @var Tag[] $tags
|
||||
*
|
||||
* @Type("array")
|
||||
* @Accessor(getter="getTags", setter="setTags")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $tags;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getDialogId(): int
|
||||
{
|
||||
return $this->dialogId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $dialogId
|
||||
* @return void
|
||||
*/
|
||||
public function setDialogId(int $dialogId): void
|
||||
{
|
||||
$this->dialogId = $dialogId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Tag[]
|
||||
*/
|
||||
public function getTags(): array
|
||||
{
|
||||
return $this->tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Tag[] $tags
|
||||
* @return void
|
||||
*/
|
||||
public function setTags(array $tags): void
|
||||
{
|
||||
$this->tags = $tags;
|
||||
}
|
||||
|
||||
}
|
|
@ -23,6 +23,17 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class DialogsRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
use IncludeMassCommunication;
|
||||
|
||||
/**
|
||||
* @var int $sinceId
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getSinceId",setter="setSinceId")
|
||||
* @SkipWhenEmpty
|
||||
*/
|
||||
private $sinceId;
|
||||
|
||||
/**
|
||||
* @var int $chatId
|
||||
|
@ -69,6 +80,22 @@ class DialogsRequest implements ModelInterface
|
|||
*/
|
||||
private $assign;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getSinceId()
|
||||
{
|
||||
return $this->sinceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $sinceId
|
||||
*/
|
||||
public function setSinceId(int $sinceId)
|
||||
{
|
||||
$this->sinceId = $sinceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
|
48
src/Bot/Model/Request/IncludeMassCommunication.php
Normal file
48
src/Bot/Model/Request/IncludeMassCommunication.php
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Common fields
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Request;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
|
||||
/**
|
||||
* CommonFields trait
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
trait IncludeMassCommunication
|
||||
{
|
||||
/**
|
||||
* @var int $includeMassCommunication
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getIncludeMassCommunication",setter="setIncludeMassCommunication")
|
||||
* @SkipWhenEmpty
|
||||
*/
|
||||
private $includeMassCommunication;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getIncludeMassCommunication()
|
||||
{
|
||||
return $this->includeMassCommunication;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $includeMassCommunication
|
||||
*/
|
||||
public function setIncludeMassCommunication(?int $includeMassCommunication): void
|
||||
{
|
||||
$this->includeMassCommunication = $includeMassCommunication;
|
||||
}
|
||||
}
|
|
@ -22,6 +22,9 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
*/
|
||||
class MembersRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
|
||||
/**
|
||||
* @var int $chatId
|
||||
*
|
||||
|
@ -49,24 +52,6 @@ class MembersRequest implements ModelInterface
|
|||
*/
|
||||
private $state;
|
||||
|
||||
/**
|
||||
* @var string $since
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getSince",setter="setSince")
|
||||
* @SkipWhenEmpty
|
||||
*/
|
||||
private $since;
|
||||
|
||||
/**
|
||||
* @var string $until
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getUntil",setter="setUntil")
|
||||
* @SkipWhenEmpty
|
||||
*/
|
||||
private $until;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
@ -114,36 +99,4 @@ class MembersRequest implements ModelInterface
|
|||
{
|
||||
$this->state = $state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSince()
|
||||
{
|
||||
return $this->since;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $since
|
||||
*/
|
||||
public function setSince(string $since)
|
||||
{
|
||||
$this->since = $since;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUntil()
|
||||
{
|
||||
return $this->until;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $until
|
||||
*/
|
||||
public function setUntil(string $until)
|
||||
{
|
||||
$this->until = $until;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,6 +72,15 @@ class MessageSendRequest implements ModelInterface
|
|||
*/
|
||||
private $items;
|
||||
|
||||
/**
|
||||
* @var string $note
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getNote",setter="setNote")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $note;
|
||||
|
||||
/**
|
||||
* @var string $scope
|
||||
*
|
||||
|
@ -241,6 +250,22 @@ class MessageSendRequest implements ModelInterface
|
|||
$this->items = $items;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getNote(): ?string
|
||||
{
|
||||
return $this->note;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $note
|
||||
*/
|
||||
public function setNote(string $note): void
|
||||
{
|
||||
$this->note = $note;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
|
|
@ -23,6 +23,7 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class MessagesRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use IncludeMassCommunication;
|
||||
|
||||
/**
|
||||
* @var int $chatId
|
||||
|
@ -105,6 +106,15 @@ class MessagesRequest implements ModelInterface
|
|||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var int $limit
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getLimit",setter="setLimit")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $limit;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
|
@ -248,4 +258,20 @@ class MessagesRequest implements ModelInterface
|
|||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getLimit()
|
||||
{
|
||||
return $this->limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $limit
|
||||
*/
|
||||
public function setLimit(int $limit)
|
||||
{
|
||||
$this->limit = $limit;
|
||||
}
|
||||
}
|
||||
|
|
49
src/Bot/Model/Request/PageLimit.php
Normal file
49
src/Bot/Model/Request/PageLimit.php
Normal file
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Page limit
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Request;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
|
||||
/**
|
||||
* PageLimit trait
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
trait PageLimit
|
||||
{
|
||||
/**
|
||||
* @var int $limit
|
||||
*
|
||||
* @Type("int")
|
||||
* @Accessor(getter="getLimit",setter="setLimit")
|
||||
* @SkipWhenEmpty
|
||||
*/
|
||||
private $limit;
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getLimit(): ?int
|
||||
{
|
||||
return $this->limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $limit
|
||||
* @return void
|
||||
*/
|
||||
public function setLimit($limit)
|
||||
{
|
||||
$this->limit = $limit;
|
||||
}
|
||||
}
|
77
src/Bot/Model/Request/TemplateSendRequest.php
Normal file
77
src/Bot/Model/Request/TemplateSendRequest.php
Normal file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* PHP version 7.1
|
||||
*
|
||||
* Template send request
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Model\Request;
|
||||
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Template\TemplateVariables;
|
||||
use RetailCrm\Mg\Bot\Model\ModelInterface;
|
||||
use Symfony\Component\Validator\Constraints as Assert;
|
||||
|
||||
/**
|
||||
* TemplateSendRequest class
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Model\Request
|
||||
*/
|
||||
class TemplateSendRequest implements ModelInterface
|
||||
{
|
||||
/**
|
||||
* @var string $phone
|
||||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getPhone",setter="setPhone")
|
||||
*
|
||||
* @Assert\NotBlank
|
||||
*/
|
||||
private $phone;
|
||||
|
||||
/**
|
||||
* @var TemplateVariables $args
|
||||
*
|
||||
* @Type("RetailCrm\Mg\Bot\Model\Entity\Template\TemplateVariables")
|
||||
* @Accessor(getter="getArgs",setter="setArgs")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
private $args;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPhone(): string
|
||||
{
|
||||
return $this->phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $phone
|
||||
*/
|
||||
public function setPhone(string $phone): void
|
||||
{
|
||||
$this->phone = $phone;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TemplateVariables|null
|
||||
*/
|
||||
public function getArgs(): ?TemplateVariables
|
||||
{
|
||||
return $this->args;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param TemplateVariables $args
|
||||
*/
|
||||
public function setArgs(TemplateVariables $args): void
|
||||
{
|
||||
$this->args = $args;
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ class UploadFileByUrlRequest implements ModelInterface
|
|||
*
|
||||
* @Type("string")
|
||||
* @Accessor(getter="getUrl",setter="setUrl")
|
||||
* @Assert\NotBlank()
|
||||
* @Assert\NotBlank(allowNull=false)
|
||||
* @Assert\Url()
|
||||
*/
|
||||
private $url;
|
||||
|
|
|
@ -23,6 +23,7 @@ use RetailCrm\Mg\Bot\Model\ModelInterface;
|
|||
class UsersRequest implements ModelInterface
|
||||
{
|
||||
use CommonFields;
|
||||
use PageLimit;
|
||||
|
||||
/**
|
||||
* @Type("string")
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
namespace RetailCrm\Mg\Bot\Model\Response;
|
||||
|
||||
use JMS\Serializer\Annotation\SerializedName;
|
||||
use JMS\Serializer\Annotation\Accessor;
|
||||
use JMS\Serializer\Annotation\SkipWhenEmpty;
|
||||
use JMS\Serializer\Annotation\Type;
|
||||
|
@ -55,6 +56,7 @@ class FullFileResponse implements ModelInterface
|
|||
* @var string $url
|
||||
*
|
||||
* @Type("string")
|
||||
* @SerializedName("Url")
|
||||
* @Accessor(getter="getUrl",setter="setUrl")
|
||||
* @SkipWhenEmpty()
|
||||
*/
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
|
||||
namespace RetailCrm\Mg\Bot\Tests;
|
||||
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use RetailCrm\Mg\Bot\Client;
|
||||
use RetailCrm\Mg\Bot\HttpClient;
|
||||
use RetailCrm\Mg\Bot\Model\Constants;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Channel;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Chat\Chat;
|
||||
|
@ -49,8 +52,11 @@ class ClientListTest extends TestCase
|
|||
|
||||
$response = $client->channels($request);
|
||||
|
||||
static::assertCount(4, $response, "Incorrect channels count");
|
||||
static::assertCount(5, $response, "Incorrect channels count");
|
||||
static::assertInstanceOf(Channel\Channel::class, $response[0], "Incorrect channel instance");
|
||||
|
||||
$textSuggestions = $response[0]->getSettings()->getSuggestions()->getText();
|
||||
static::assertStringContainsString("both", $textSuggestions, "Incorrect text suggestions");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -71,7 +77,28 @@ class ClientListTest extends TestCase
|
|||
|
||||
$response = $client->chats($request);
|
||||
|
||||
static::assertCount(2, $response, "Incorrect chats count");
|
||||
static::assertCount(3, $response, "Incorrect chats count");
|
||||
static::assertInstanceOf(Chat::class, $response[0], "Incorrect chat instance");
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("list")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testGetChatsByCustomerId(): void
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getJsonResponse('chatsByCustomerId')
|
||||
);
|
||||
|
||||
$request = new Request\ChatsRequest();
|
||||
$request->setCustomerId(39);
|
||||
|
||||
$response = $client->chats($request);
|
||||
static::assertCount(1, $response, "Incorrect chats count");
|
||||
static::assertInstanceOf(Chat::class, $response[0], "Incorrect chat instance");
|
||||
}
|
||||
|
||||
|
@ -91,7 +118,7 @@ class ClientListTest extends TestCase
|
|||
$request = new Request\MembersRequest();
|
||||
$response = $client->members($request);
|
||||
|
||||
static::assertCount(4, $response, "Incorrect members count");
|
||||
static::assertCount(5, $response, "Incorrect members count");
|
||||
static::assertInstanceOf(ChatMember::class, $response[0], "Incorrect member instance");
|
||||
}
|
||||
|
||||
|
@ -111,10 +138,11 @@ class ClientListTest extends TestCase
|
|||
$request = new Request\MessagesRequest();
|
||||
$request->setChannelType(Constants::CHANNEL_TYPE_INSTAGRAM);
|
||||
$request->setType(Constants::MESSAGE_TYPE_TEXT);
|
||||
$request->setLimit(1000);
|
||||
|
||||
$response = $client->messages($request);
|
||||
|
||||
static::assertCount(2, $response, "Incorrect message count");
|
||||
static::assertCount(3, $response, "Incorrect message count");
|
||||
static::assertInstanceOf(Message::class, $response[0], "Incorrect message instance");
|
||||
}
|
||||
|
||||
|
@ -156,7 +184,7 @@ class ClientListTest extends TestCase
|
|||
|
||||
$data = $client->bots($request);
|
||||
|
||||
static::assertCount(3, $data);
|
||||
static::assertCount(4, $data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -178,7 +206,7 @@ class ClientListTest extends TestCase
|
|||
|
||||
$response = $client->users($request);
|
||||
|
||||
self::assertCount(2, $response);
|
||||
self::assertCount(3, $response);
|
||||
self::assertInstanceOf(User::class, $response[0]);
|
||||
}
|
||||
|
||||
|
@ -201,7 +229,7 @@ class ClientListTest extends TestCase
|
|||
|
||||
$response = $client->dialogs($request);
|
||||
|
||||
self::assertCount(2, $response);
|
||||
self::assertCount(3, $response);
|
||||
self::assertInstanceOf(Dialog::class, $response[0]);
|
||||
}
|
||||
|
||||
|
@ -222,7 +250,10 @@ class ClientListTest extends TestCase
|
|||
|
||||
$response = $client->customers($request);
|
||||
|
||||
self::assertCount(2, $response);
|
||||
self::assertCount(3, $response);
|
||||
self::assertInstanceOf(Customer::class, $response[0]);
|
||||
|
||||
$utm = $response[0]->getUtm()->getCampaign();
|
||||
static::assertEquals('spring_sale', $utm, "Incorrect utm data");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,9 @@ namespace RetailCrm\Mg\Bot\Tests;
|
|||
use InvalidArgumentException;
|
||||
use RetailCrm\Common\Exception\NotFoundException;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Responsible;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Tag;
|
||||
use RetailCrm\Mg\Bot\Model\Request\DialogAssignRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\DialogTagRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Response\ErrorOnlyResponse;
|
||||
use RetailCrm\Mg\Bot\Test\TestCase;
|
||||
|
||||
|
@ -145,4 +147,180 @@ class DialogsTest extends TestCase
|
|||
self::assertTrue($response->isSuccessful());
|
||||
self::assertEmpty($response->getErrors());
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogAddTagColorError()
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(404,
|
||||
"'color_code can contain only the following values: " .
|
||||
"light-red; light-blue; light-green; light-orange; light-gray; " .
|
||||
"light-grayish-blue; red; blue; green; orange; gray; grayish-blue'"
|
||||
)
|
||||
);
|
||||
|
||||
$tags[0] = new Tag();
|
||||
$tags[0]->setName('tag1');
|
||||
$tags[0]->setColorCode('qwerty');
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(60);
|
||||
$request->setTags($tags);
|
||||
|
||||
$client->dialogAddTag($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogAddTagDialogError()
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(404, "dialog #123456789 not found")
|
||||
);
|
||||
|
||||
$tags[0] = new Tag();
|
||||
$tags[0]->setName('tag1');
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(123456789);
|
||||
$request->setTags($tags);
|
||||
|
||||
$client->dialogAddTag($request);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogAddTagEmptyTagError()
|
||||
{
|
||||
$this->expectException(\TypeError::class);
|
||||
|
||||
$client = self::getApiClient();
|
||||
|
||||
$tags[0] = new Tag();
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(60);
|
||||
$request->setTags($tags);
|
||||
|
||||
$client->dialogAddTag($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogAddTag()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getResponse('{}')
|
||||
);
|
||||
|
||||
$tags[0] = new Tag();
|
||||
$tags[0]->setName('tag1');
|
||||
$tags[0]->setColorCode('red');
|
||||
|
||||
$tags[1] = new Tag();
|
||||
$tags[1]->setName('tag2');
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(60);
|
||||
$request->setTags($tags);
|
||||
|
||||
$response = $client->dialogAddTag($request);
|
||||
|
||||
self::assertInstanceOF(ErrorOnlyResponse::class, $response);
|
||||
self::assertTrue($response->isSuccessful());
|
||||
self::assertEmpty($response->getErrors());
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogDeleteTagDialogError()
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(404, "dialog #123456789 not found")
|
||||
);
|
||||
|
||||
$tags[0] = new Tag();
|
||||
$tags[0]->setName('tag1');
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(123456789);
|
||||
$request->setTags($tags);
|
||||
|
||||
$client->dialogAddTag($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogDeleteTagEmptyTagError()
|
||||
{
|
||||
$this->expectException(\TypeError::class);
|
||||
|
||||
$client = self::getApiClient();
|
||||
|
||||
$tags[0] = new Tag();
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setTags($tags);
|
||||
|
||||
$client->dialogDeleteTag($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("dialogs")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testDialogDeleteTag()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getResponse('{}')
|
||||
);
|
||||
|
||||
$tags[0] = new Tag();
|
||||
$tags[0]->setName('tag1');
|
||||
|
||||
$request = new DialogTagRequest();
|
||||
$request->setDialogId(60);
|
||||
$request->setTags($tags);
|
||||
|
||||
$response = $client->dialogDeleteTag($request);
|
||||
|
||||
self::assertInstanceOF(ErrorOnlyResponse::class, $response);
|
||||
self::assertTrue($response->isSuccessful());
|
||||
self::assertEmpty($response->getErrors());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,17 +27,32 @@ class FileTest extends TestCase
|
|||
* @group("upload")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testUploadFileByUrlException()
|
||||
public function testUploadFileByUrlEmpty()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getEmptyResponse(400)
|
||||
$this->getErrorsResponse(400, 'Something is not quite right.')
|
||||
);
|
||||
|
||||
self::expectException(\InvalidArgumentException::class);
|
||||
$client->uploadFileByUrl('');
|
||||
}
|
||||
/**
|
||||
* @group("upload")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testUploadFileByUrlInvalid()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(400, 'Something is not quite right.')
|
||||
);
|
||||
|
||||
self::expectException(\InvalidArgumentException::class);
|
||||
$client->uploadFileByUrl('rar');
|
||||
}
|
||||
|
||||
|
@ -101,5 +116,8 @@ class FileTest extends TestCase
|
|||
|
||||
self::assertInstanceOf(FullFileResponse::class, $response);
|
||||
self::assertEquals($fileId, $response->getId());
|
||||
|
||||
$fileUrl = 'https://s3.eu-central-1.amazonaws.com/mg-node-files/files/21/b2bdba90-166c-4e0a-829d-69f26a09fd2a';
|
||||
self::assertEquals($fileUrl, $response->getUrl());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
namespace RetailCrm\Mg\Bot\Tests;
|
||||
|
||||
use RetailCrm\Mg\Bot\Model\Constants;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Message\Item;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Message\MessageCost;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Message\MessageDelivery;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Message\MessageOrder;
|
||||
|
@ -361,4 +362,38 @@ class MessagesTest extends TestCase
|
|||
self::assertEquals(3636, $response->getMessageId());
|
||||
}
|
||||
}
|
||||
|
||||
public function testMessageSendItems()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getResponse(
|
||||
'{"message_id":4242,"time":"2019-06-24T06:02:04.434291791Z"}',
|
||||
201
|
||||
)
|
||||
);
|
||||
|
||||
$item = new Item();
|
||||
$item->setCaption('demo caption');
|
||||
$item->setId('e33e5398-814a-47d6-902a-466ba120ce45');
|
||||
|
||||
$request = new MessageSendRequest();
|
||||
$request->setChatId(28);
|
||||
$request->setScope(Constants::MESSAGE_SCOPE_PUBLIC);
|
||||
$request->setContent("Hello");
|
||||
$request->setItems([$item]);
|
||||
$request->setNote('demo note');
|
||||
|
||||
$response = $client->messageSend($request);
|
||||
|
||||
self::assertInstanceOf(MessageSendResponse::class, $response);
|
||||
|
||||
if ($response instanceof MessageSendResponse) {
|
||||
self::assertTrue($response->isSuccessful());
|
||||
self::assertCount(0, $response->getErrors());
|
||||
self::assertEquals(4242, $response->getMessageId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
57
tests/Bot/Tests/Model/ListEntityRequestTest.php
Normal file
57
tests/Bot/Tests/Model/ListEntityRequestTest.php
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Tests\Model;
|
||||
|
||||
use PHPStan\Testing\TestCase;
|
||||
use RetailCrm\Common\Serializer;
|
||||
use RetailCrm\Mg\Bot\Model\Request\BotsRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\ChannelsRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\ChatsRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\CustomersRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\DialogsRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\MembersRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Request\UsersRequest;
|
||||
|
||||
class ListEntityRequestTest extends TestCase
|
||||
{
|
||||
private const LIMIT = 100;
|
||||
|
||||
public function testListRequestsWithLimit(): void
|
||||
{
|
||||
$expected = json_encode(['limit' => self::LIMIT]);
|
||||
$request = new BotsRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new ChannelsRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new ChatsRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new CustomersRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new DialogsRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new MembersRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
|
||||
$request = new UsersRequest();
|
||||
$request->setLimit(self::LIMIT);
|
||||
|
||||
self::assertEquals($expected, Serializer::serialize($request));
|
||||
}
|
||||
}
|
|
@ -37,6 +37,21 @@ class MessageTest extends TestCase
|
|||
self::assertEquals($content, $result->getContent());
|
||||
}
|
||||
|
||||
public function testDeserializationWithQuoute(): void
|
||||
{
|
||||
$json = file_get_contents(__DIR__ . '/../../../Resources/messageWithQuote.json');
|
||||
/** @var Message $message */
|
||||
$message = Serializer::deserialize($json, Message::class);
|
||||
|
||||
self::assertEquals(3373, $message->getId());
|
||||
self::assertNotNull($message->getQuote());
|
||||
self::assertEquals("22144962", $message->getQuote()->getId());
|
||||
self::assertEquals("text", $message->getQuote()->getType());
|
||||
self::assertEquals("11111", $message->getQuote()->getFrom()->getId());
|
||||
self::assertEquals("Something content", $message->getQuote()->getContent());
|
||||
self::assertNotNull($message->getQuote()->getTime());
|
||||
}
|
||||
|
||||
public function testSerialization_NoContent(): void
|
||||
{
|
||||
$item = new Message();
|
||||
|
|
113
tests/Bot/Tests/TemplatesTest.php
Normal file
113
tests/Bot/Tests/TemplatesTest.php
Normal file
|
@ -0,0 +1,113 @@
|
|||
<?php
|
||||
|
||||
namespace RetailCrm\Mg\Bot\Tests;
|
||||
|
||||
use RetailCrm\Common\Exception\NotFoundException;
|
||||
use RetailCrm\Mg\Bot\Model\Request\TemplateSendRequest;
|
||||
use RetailCrm\Mg\Bot\Model\Response\MessageSendResponse;
|
||||
use RetailCrm\Mg\Bot\Test\TestCase;
|
||||
use RetailCrm\Mg\Bot\Model\Entity\Template;
|
||||
|
||||
/**
|
||||
* PHP version 7.0
|
||||
*
|
||||
* Class TemplatesTest
|
||||
*
|
||||
* @package RetailCrm\Mg\Bot\Tests
|
||||
*/
|
||||
class TemplatesTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @group("templates")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testTemplatesList()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getJsonResponse('templates')
|
||||
);
|
||||
|
||||
$response = $client->templates();
|
||||
|
||||
static::assertCount(2, $response, "Incorrect templates count");
|
||||
static::assertInstanceOf(Template\Template::class, $response[0], "Incorrect template instance");
|
||||
|
||||
$templateType = $response[0]->getHeader()['content']['type'];
|
||||
static::assertStringContainsString("video", $templateType, "Incorrect template type");
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("templates")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testTemplateSendNotFound()
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(404, "template id=3 was not found")
|
||||
);
|
||||
|
||||
$request = new TemplateSendRequest();
|
||||
$request->setPhone('123');
|
||||
|
||||
$client->templateSend(3, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("templates")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testTemplateSendVariablesError()
|
||||
{
|
||||
$this->expectException(NotFoundException::class);
|
||||
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getErrorsResponse(404, "variables number doesn't match template")
|
||||
);
|
||||
|
||||
$request = new TemplateSendRequest();
|
||||
$request->setPhone('123');
|
||||
|
||||
$client->templateSend(2, $request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group("templates")
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function testTemplateSendSuccess()
|
||||
{
|
||||
$client = self::getApiClient(
|
||||
null,
|
||||
null,
|
||||
false,
|
||||
$this->getResponse(
|
||||
'{"message_id":4242,"time":"2019-06-24T06:02:04.434291791Z"}',
|
||||
201
|
||||
)
|
||||
);
|
||||
|
||||
$request = new TemplateSendRequest();
|
||||
$request->setPhone('123');
|
||||
|
||||
$response = $client->templateSend(1, $request);
|
||||
|
||||
self::assertInstanceOf(MessageSendResponse::class, $response);
|
||||
|
||||
if ($response instanceof MessageSendResponse) {
|
||||
self::assertTrue($response->isSuccessful());
|
||||
self::assertCount(0, $response->getErrors());
|
||||
self::assertEquals(4242, $response->getMessageId());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -42,5 +42,21 @@
|
|||
"is_active": true,
|
||||
"is_self": false,
|
||||
"is_system": false
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Weird date formats bot",
|
||||
"events": null,
|
||||
"client_id": "identifier_4",
|
||||
"avatar_url": "https://s3.retailcrm.pro/eu-central-1/retailcrm-billing/images/5b97bfd983d2b-bot-logo-2.svg",
|
||||
"roles": [
|
||||
"responsible"
|
||||
],
|
||||
"created_at": "2018-09-06T13:40:02Z",
|
||||
"updated_at": "2018-09-12T06:15:32Z",
|
||||
"deactivated_at": "2019-09-12T06:15:32Z",
|
||||
"is_active": true,
|
||||
"is_self": false,
|
||||
"is_system": false
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -35,6 +35,11 @@
|
|||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
},
|
||||
"suggestions": {
|
||||
"text": "both",
|
||||
"email": "both",
|
||||
"phone": "both"
|
||||
}
|
||||
},
|
||||
"created_at": "2019-06-11T12:46:48.72241Z",
|
||||
|
@ -79,6 +84,11 @@
|
|||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
},
|
||||
"suggestions": {
|
||||
"text": "both",
|
||||
"email": "both",
|
||||
"phone": "both"
|
||||
}
|
||||
},
|
||||
"created_at": "2019-06-11T12:41:44.660495Z",
|
||||
|
@ -123,6 +133,11 @@
|
|||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
},
|
||||
"suggestions": {
|
||||
"text": "both",
|
||||
"email": "both",
|
||||
"phone": "both"
|
||||
}
|
||||
},
|
||||
"created_at": "2019-06-11T12:38:24.322413Z",
|
||||
|
@ -167,6 +182,11 @@
|
|||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
},
|
||||
"suggestions": {
|
||||
"text": "both",
|
||||
"email": "both",
|
||||
"phone": "both"
|
||||
}
|
||||
},
|
||||
"created_at": "2019-06-11T12:33:08.676214Z",
|
||||
|
@ -174,5 +194,54 @@
|
|||
"activated_at": "2019-06-11T12:33:08.676043Z",
|
||||
"deactivated_at": "2019-06-11T12:38:19.615335Z",
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"id": 68,
|
||||
"type": "telegram",
|
||||
"name": "@oldtestbot",
|
||||
"settings": {
|
||||
"status": {
|
||||
"delivered": "send"
|
||||
},
|
||||
"text": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_chars_count": 4096
|
||||
},
|
||||
"product": {
|
||||
"creating": "receive",
|
||||
"editing": "receive"
|
||||
},
|
||||
"order": {
|
||||
"creating": "receive",
|
||||
"editing": "receive"
|
||||
},
|
||||
"image": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 10
|
||||
},
|
||||
"file": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
},
|
||||
"suggestions": {
|
||||
"text": "both",
|
||||
"email": "both",
|
||||
"phone": "both"
|
||||
}
|
||||
},
|
||||
"created_at": "2019-06-11T12:33:08Z",
|
||||
"updated_at": "2019-06-11T12:38:19Z",
|
||||
"activated_at": "2019-06-11T12:33:08Z",
|
||||
"deactivated_at": "2019-06-11T12:38:19Z",
|
||||
"is_active": false
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -57,6 +57,7 @@
|
|||
"author_id": 0,
|
||||
"last_message": null,
|
||||
"last_activity": "2019-06-11T17:36:20+03:00",
|
||||
"reply_deadline": "2019-06-18T17:36:20Z",
|
||||
"created_at": "2019-06-11T12:49:26.938879Z",
|
||||
"updated_at": "2019-06-14T14:40:28.7111Z"
|
||||
},
|
||||
|
@ -108,9 +109,102 @@
|
|||
"last_name": "Петрович"
|
||||
},
|
||||
"author_id": 0,
|
||||
"last_message": null,
|
||||
"last_message": {
|
||||
"id": 1,
|
||||
"time": "2022-12-21T17:15:54+01:00",
|
||||
"type": "command",
|
||||
"scope": "private",
|
||||
"chat_id": 1053,
|
||||
"is_read": false,
|
||||
"is_edit": false,
|
||||
"status": "received",
|
||||
"from": {
|
||||
"id": 2,
|
||||
"external_id": "12",
|
||||
"type": "user",
|
||||
"avatar": null,
|
||||
"name": "Cuenta Soporte",
|
||||
"first_name": "Cuenta",
|
||||
"last_name": "Soporte",
|
||||
"is_technical_account": true
|
||||
}
|
||||
},
|
||||
"last_activity": "2019-06-13T11:07:14+03:00",
|
||||
"reply_deadline": "2019-06-20T11:07:14Z",
|
||||
"created_at": "2019-06-11T07:34:16.082957Z",
|
||||
"updated_at": "2019-06-16T08:10:28.657972Z"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"avatar": "",
|
||||
"name": "",
|
||||
"channel": {
|
||||
"id": 61,
|
||||
"avatar": "",
|
||||
"transport_id": 1,
|
||||
"type": "fbmessenger",
|
||||
"settings": {
|
||||
"status": {
|
||||
"delivered": "send",
|
||||
"read": "send"
|
||||
},
|
||||
"text": {
|
||||
"creating": "both",
|
||||
"quoting": "receive",
|
||||
"max_chars_count": 2000
|
||||
},
|
||||
"product": {
|
||||
"creating": "receive"
|
||||
},
|
||||
"order": {
|
||||
"creating": "receive"
|
||||
},
|
||||
"image": {
|
||||
"creating": "both",
|
||||
"max_items_count": 10
|
||||
},
|
||||
"file": {
|
||||
"creating": "both",
|
||||
"max_items_count": 10
|
||||
}
|
||||
},
|
||||
"name": "testbot",
|
||||
"is_active": false
|
||||
},
|
||||
"members": null,
|
||||
"customer": {
|
||||
"id": 38,
|
||||
"type": "customer",
|
||||
"avatar": "",
|
||||
"name": "Пётр Петрович",
|
||||
"username": "Пётр",
|
||||
"first_name": "Пётр",
|
||||
"last_name": "Петрович"
|
||||
},
|
||||
"author_id": 0,
|
||||
"last_message": {
|
||||
"id": 1,
|
||||
"time": "2022-12-21T17:15:54+01:00",
|
||||
"type": "command",
|
||||
"scope": "private",
|
||||
"chat_id": 1053,
|
||||
"is_read": false,
|
||||
"is_edit": false,
|
||||
"status": "received",
|
||||
"from": {
|
||||
"id": 2,
|
||||
"external_id": "12",
|
||||
"type": "user",
|
||||
"avatar": null,
|
||||
"name": "Cuenta Soporte",
|
||||
"first_name": "Cuenta",
|
||||
"last_name": "Soporte",
|
||||
"is_technical_account": true
|
||||
}
|
||||
},
|
||||
"last_activity": "2019-06-13T11:07:14+03:00",
|
||||
"reply_deadline":"2019-06-20T11:07:14Z",
|
||||
"created_at": "2019-06-11T07:34:16Z",
|
||||
"updated_at": "2019-06-16T08:10:28Z"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
63
tests/Resources/chatsByCustomerId.json
Normal file
63
tests/Resources/chatsByCustomerId.json
Normal file
|
@ -0,0 +1,63 @@
|
|||
[
|
||||
{
|
||||
"id": 30,
|
||||
"avatar": "",
|
||||
"name": "",
|
||||
"channel": {
|
||||
"id": 72,
|
||||
"avatar": "",
|
||||
"transport_id": 4,
|
||||
"type": "fbmessenger",
|
||||
"settings": {
|
||||
"status": {
|
||||
"delivered": "send"
|
||||
},
|
||||
"text": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_chars_count": 4096
|
||||
},
|
||||
"product": {
|
||||
"creating": "receive",
|
||||
"editing": "receive"
|
||||
},
|
||||
"order": {
|
||||
"creating": "receive",
|
||||
"editing": "receive"
|
||||
},
|
||||
"image": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 10
|
||||
},
|
||||
"file": {
|
||||
"creating": "both",
|
||||
"editing": "both",
|
||||
"quoting": "both",
|
||||
"deleting": "receive",
|
||||
"max_items_count": 1
|
||||
}
|
||||
},
|
||||
"name": "testbot",
|
||||
"is_active": true
|
||||
},
|
||||
"members": null,
|
||||
"customer": {
|
||||
"id": 39,
|
||||
"type": "customer",
|
||||
"avatar": "",
|
||||
"name": "Иван",
|
||||
"username": "Иван",
|
||||
"first_name": "Иван"
|
||||
},
|
||||
"author_id": 0,
|
||||
"last_message": null,
|
||||
"last_activity": "2019-06-11T17:36:20+03:00",
|
||||
"created_at": "2019-06-11T12:49:26.938879Z",
|
||||
"updated_at": "2019-06-14T14:40:28.7111Z"
|
||||
}
|
||||
]
|
|
@ -13,7 +13,14 @@
|
|||
"country": "",
|
||||
"language": "en",
|
||||
"phone": "",
|
||||
"email": ""
|
||||
"email": "",
|
||||
"utm": {
|
||||
"campaign": "spring_sale",
|
||||
"content": "textlink",
|
||||
"medium": "cpc",
|
||||
"source": "Google",
|
||||
"term": "running"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
|
@ -29,6 +36,36 @@
|
|||
"country": "",
|
||||
"language": "ru",
|
||||
"phone": "",
|
||||
"email": ""
|
||||
"email": "",
|
||||
"utm": {
|
||||
"campaign": "test",
|
||||
"content": "test",
|
||||
"medium": "test",
|
||||
"source": "test",
|
||||
"term": "test"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"external_id": "2272664739519803",
|
||||
"channel_id": 3,
|
||||
"username": "user2",
|
||||
"first_name": "User2",
|
||||
"last_name": "Lastname2",
|
||||
"created_at": "2019-06-11T07:34:16Z",
|
||||
"updated_at": "2019-06-13T08:07:14Z",
|
||||
"avatar_url": "",
|
||||
"profile_url": "",
|
||||
"country": "",
|
||||
"language": "ru",
|
||||
"phone": "",
|
||||
"email": "",
|
||||
"utm": {
|
||||
"campaign": "",
|
||||
"content": "",
|
||||
"medium": "",
|
||||
"source": "",
|
||||
"term": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"responsible":{"type":"user","id":4,"assigned_at":"2019-06-21T08:01:09Z"},"is_reassign":true,"previous_responsible":{"type":"user","id":12,"assigned_at":"2019-06-11T12:49:34Z"},"left_user_id":12}
|
||||
{"responsible":{"type":"user","id":4,"external_id": "4","assigned_at":"2019-06-21T08:01:09Z"},"is_reassign":true,"previous_responsible":{"type":"user","id":12,"external_id": "12","assigned_at":"2019-06-11T12:49:34Z"},"left_user_id":12}
|
|
@ -1 +1 @@
|
|||
{"previous_responsible":{"type":"user","id":12,"assigned_at":"2019-06-11T12:49:34Z"}}
|
||||
{"previous_responsible":{"type":"user","id":12,"external_id": "12","assigned_at":"2019-06-11T12:49:34Z"}}
|
|
@ -11,6 +11,7 @@
|
|||
"responsible": {
|
||||
"type": "user",
|
||||
"id": 12,
|
||||
"external_id": "12",
|
||||
"assigned_at": "2019-06-11T12:49:34.716716Z"
|
||||
},
|
||||
"is_active": true
|
||||
|
@ -27,8 +28,26 @@
|
|||
"responsible": {
|
||||
"type": "user",
|
||||
"id": 12,
|
||||
"external_id": "12",
|
||||
"assigned_at": "2019-06-11T08:40:14.136916Z"
|
||||
},
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"id": 58,
|
||||
"chat_id": 28,
|
||||
"begin_message_id": 1,
|
||||
"ending_message_id": 30,
|
||||
"created_at": "2019-06-11T07:34:16Z",
|
||||
"updated_at": "2019-06-16T08:10:28Z",
|
||||
"closed_at": "2019-06-16T08:10:28Z",
|
||||
"is_assigned": true,
|
||||
"responsible": {
|
||||
"type": "user",
|
||||
"id": 12,
|
||||
"external_id": "12",
|
||||
"assigned_at": "2019-06-11T08:40:14Z"
|
||||
},
|
||||
"is_active": true
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -34,5 +34,14 @@
|
|||
"state": "kicked",
|
||||
"chat_id": 29,
|
||||
"user_id": 4
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"created_at": "2019-06-11T07:34:16Z",
|
||||
"updated_at": "2019-06-11T08:40:14Z",
|
||||
"is_author": false,
|
||||
"state": "kicked",
|
||||
"chat_id": 29,
|
||||
"user_id": 4
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
40
tests/Resources/messageWithQuote.json
Normal file
40
tests/Resources/messageWithQuote.json
Normal file
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"id": 3373,
|
||||
"time": "2023-04-26T21:22:19+03:00",
|
||||
"type": "text",
|
||||
"scope": "public",
|
||||
"chat_id": 519717,
|
||||
"is_read": false,
|
||||
"is_edit": false,
|
||||
"status": "seen",
|
||||
"from": {
|
||||
"id": 519896,
|
||||
"external_id": "",
|
||||
"type": "customer",
|
||||
"avatar": "",
|
||||
"name": "Иван Иванов",
|
||||
"username": "Иван",
|
||||
"first_name": "Иван",
|
||||
"last_name": "Иванов"
|
||||
},
|
||||
"content": "А можно при встрече и оплата картой.",
|
||||
"quote": {
|
||||
"id": 22144962,
|
||||
"type": "text",
|
||||
"from": {
|
||||
"id": 11111,
|
||||
"external_id": "116",
|
||||
"type": "user",
|
||||
"avatar": "",
|
||||
"name": "Николай Замышляев",
|
||||
"first_name": "Николай",
|
||||
"last_name": "Замышляев",
|
||||
"available": true
|
||||
},
|
||||
"time": "2023-04-26T21:20:30+03:00",
|
||||
"content": "Something content"
|
||||
},
|
||||
"channel_id": 61,
|
||||
"created_at": "2023-04-26T18:22:19.785679Z",
|
||||
"updated_at": "2023-04-26T18:22:20.533114Z"
|
||||
}
|
|
@ -44,5 +44,29 @@
|
|||
"channel_id": 61,
|
||||
"created_at": "2019-05-20T12:24:52.478633Z",
|
||||
"updated_at": "2019-05-20T12:24:52.585284Z"
|
||||
},
|
||||
{
|
||||
"id": 3372,
|
||||
"time": "2019-05-20T15:24:52+03:00",
|
||||
"type": "text",
|
||||
"scope": "public",
|
||||
"chat_id": 26,
|
||||
"is_read": false,
|
||||
"is_edit": false,
|
||||
"status": "seen",
|
||||
"from": {
|
||||
"id": 35,
|
||||
"type": "customer",
|
||||
"avatar": "",
|
||||
"name": "Иванов Иван",
|
||||
"username": "username",
|
||||
"first_name": "Иванов Иван"
|
||||
},
|
||||
"content": "❤️",
|
||||
"note": "!️",
|
||||
"quote": null,
|
||||
"channel_id": 61,
|
||||
"created_at": "2019-05-20T12:24:52Z",
|
||||
"updated_at": "2019-05-20T12:24:52Z"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
56
tests/Resources/templates.json
Normal file
56
tests/Resources/templates.json
Normal file
|
@ -0,0 +1,56 @@
|
|||
[
|
||||
{
|
||||
"id": 1,
|
||||
"code": "test1#ru",
|
||||
"channel_id": 1,
|
||||
"name": "test1",
|
||||
"enabled": true,
|
||||
"type": "media",
|
||||
"template": [
|
||||
"test1Template"
|
||||
],
|
||||
"body": "test1Template",
|
||||
"lang": "ru",
|
||||
"category": "marketing",
|
||||
"verification_status": "approved",
|
||||
"header": {
|
||||
"content": {
|
||||
"type": "video"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"code": "test2#ru",
|
||||
"channel_id": 5,
|
||||
"name": "test2",
|
||||
"enabled": true,
|
||||
"type": "media",
|
||||
"template": [
|
||||
"Вы не завершили покупку на нашем сайте.\n",
|
||||
{
|
||||
"var": "custom"
|
||||
},
|
||||
"Пройдите по ссылке чтобы оформить заказ."
|
||||
],
|
||||
"body": "Вы не завершили покупку на нашем сайте.\n{{1}}Пройдите по ссылке чтобы оформить заказ.",
|
||||
"lang": "ru",
|
||||
"category": "marketing",
|
||||
"verification_status": "approved",
|
||||
"header": {
|
||||
"content": {
|
||||
"body": "Товары в вашей корзине ждут вас!",
|
||||
"type": "text"
|
||||
}
|
||||
},
|
||||
"buttons": {
|
||||
"items": [
|
||||
{
|
||||
"label": "Перейти в корзину",
|
||||
"url": "https://test-url/{{1}}",
|
||||
"type": "url"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
|
@ -19,5 +19,15 @@
|
|||
"updated_at": "2019-06-07T11:36:52.342065Z",
|
||||
"is_online": false,
|
||||
"is_active": true
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"external_id": "33",
|
||||
"username": "User 3",
|
||||
"first_name": "User",
|
||||
"created_at": "2018-09-06T13:19:25Z",
|
||||
"updated_at": "2019-06-07T11:36:52Z",
|
||||
"is_online": false,
|
||||
"is_active": true
|
||||
}
|
||||
]
|
||||
]
|
||||
|
|
|
@ -6,8 +6,11 @@ if (function_exists('date_default_timezone_set')
|
|||
date_default_timezone_set(date_default_timezone_get());
|
||||
}
|
||||
|
||||
$loader = include dirname(__DIR__) . '/vendor/autoload.php';
|
||||
$loader->add('RetailCrm\\Mg\\Bot\\Test', __DIR__);
|
||||
(static function () {
|
||||
$loader = include dirname(__DIR__) . '/vendor/autoload.php';
|
||||
$loader->add('RetailCrm\\Mg\\Bot\\Test', __DIR__);
|
||||
})();
|
||||
|
||||
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue