Skip to content

Commit

Permalink
Merge pull request #376 from olapsema/feature/subsc_talks_api
Browse files Browse the repository at this point in the history
talks and subscriptions api
  • Loading branch information
bessudnov authored Sep 13, 2021
2 parents 8d43128 + 489c302 commit 453b70c
Show file tree
Hide file tree
Showing 11 changed files with 830 additions and 34 deletions.
75 changes: 42 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,39 +130,41 @@ $leadsService = $apiClient->leads();

В данный момент доступны следующие сервисы:

| Сервис | Цель сервиса |
|-------------------|-------------------------------|
| notes | Примечание сущности |
| tags | Теги сущностей |
| tasks | Задачи |
| leads | Сделки |
| contacts | Контакты |
| companies | Компании |
| catalogs | Каталоги |
| catalogElements | Элементы каталогов |
| customFields | Пользовательские поля |
| customFieldGroups | Группы пользовательских полей |
| account | Информация об аккаунте |
| roles | Роли пользователей |
| users | Роли юзеров |
| customersSegments | Сегменты покупателей |
| events | Список событий |
| webhooks | Вебхуки |
| unsorted | Неразобранное |
| pipelines | Воронки сделок |
| statuses | Статусы сделок |
| widgets | Виджеты |
| lossReason | Причины отказа |
| transactions | Покупки покупателей |
| customers | Покупатели |
| customersStatuses | Сегменты покупателя |
| Сервис | Цель сервиса |
|----------------------|-------------------------------|
| notes | Примечание сущности |
| tags | Теги сущностей |
| tasks | Задачи |
| leads | Сделки |
| contacts | Контакты |
| companies | Компании |
| catalogs | Каталоги |
| catalogElements | Элементы каталогов |
| customFields | Пользовательские поля |
| customFieldGroups | Группы пользовательских полей |
| account | Информация об аккаунте |
| roles | Роли пользователей |
| users | Роли юзеров |
| customersSegments | Сегменты покупателей |
| events | Список событий |
| webhooks | Вебхуки |
| unsorted | Неразобранное |
| pipelines | Воронки сделок |
| statuses | Статусы сделок |
| widgets | Виджеты |
| lossReason | Причины отказа |
| transactions | Покупки покупателей |
| customers | Покупатели |
| customersStatuses | Сегменты покупателя |
| customersBonusPoints | Бонусные баллы покупателя |
| calls | Звонки |
| products | Товары |
| links | Массовая привязка сущностей |
| shortLinks | Короткие ссылки |
| getOAuthClient | oAuth сервис |
| getRequest | Голый запросы |
| calls | Звонки |
| products | Товары |
| links | Массовая привязка сущностей |
| shortLinks | Короткие ссылки |
| talks | Беседы |
| entitySubscriptions | Подписчики сущности |
| getOAuthClient | oAuth сервис |
| getRequest | Голый запросы |

#### Для большинства сервисов есть базовый набор методов:

Expand Down Expand Up @@ -362,7 +364,7 @@ $leadsService = $apiClient->leads();
redeemPoints(BonusPointsActionModel $bonusPointsActionModel)
```

#### Методы доступные в сервисе ```notes```:
#### Методы доступные в сервисе ```notes```, ```entitySubscriptions```:
1. getByParentId Получение данных по ID родительской сущности
1. parentId - ID родительской сущности
2. filter (BaseEntityFilter) - фильтр
Expand Down Expand Up @@ -473,6 +475,13 @@ $leadsService = $apiClient->leads();
updateSettings(ProductsSettingsModel $productsSettings);
```

#### Методы, доступные в сервисе ```talks```
2. close
1. model (TalkCloseActionModel) - модель для закрытия беседы
2. Результатом выполнения - является закрытие беседы или запуск NPS-бота для последующего закрытия беседы
```php
close(TalkCloseActionModel $closeAction)
```

## Обработка ошибок

Expand Down
50 changes: 50 additions & 0 deletions examples/subscriptions_actions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php

declare(strict_types=1);

use AmoCRM\Exceptions\AmoCRMApiException;
use AmoCRM\Filters\PagesFilter;
use AmoCRM\Helpers\EntityTypesInterface;
use League\OAuth2\Client\Token\AccessTokenInterface;

include_once __DIR__ . '/bootstrap.php';

/** @var \AmoCRM\Client\AmoCRMApiClient $apiClient */
$accessToken = getToken();
$apiClient
->setAccessToken($accessToken)
->setAccountBaseDomain($accessToken->getValues()['baseDomain'])
->onAccessTokenRefresh(
function (AccessTokenInterface $accessToken, string $baseDomain) {
saveToken(
[
'accessToken' => $accessToken->getToken(),
'refreshToken' => $accessToken->getRefreshToken(),
'expires' => $accessToken->getExpires(),
'baseDomain' => $baseDomain,
]
);
}
);

$subscriptionsService = $apiClient->entitySubscriptions(EntityTypesInterface::LEADS);

try {
$filer = (new PagesFilter())
->setLimit(3);
$subscriptions = $subscriptionsService->getByParentId(667999631, $filer);
} catch (AmoCRMApiException $exception) {
printError($exception);
die;
}

var_dump($subscriptions->toArray());

try {
$nextSubscriptions = $subscriptionsService->nextPage($subscriptions);
} catch (AmoCRMApiException $exception) {
printError($exception);
die;
}

var_dump($nextSubscriptions->toArray());
43 changes: 43 additions & 0 deletions examples/talks_actions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?php

declare(strict_types=1);

use AmoCRM\AmoCRM\Models\Talks\TalkCloseActionModel;
use AmoCRM\Exceptions\AmoCRMApiException;
use League\OAuth2\Client\Token\AccessTokenInterface;

include_once __DIR__ . '/bootstrap.php';

/** @var \AmoCRM\Client\AmoCRMApiClient $apiClient */
$accessToken = getToken();
$apiClient
->setAccessToken($accessToken)
->setAccountBaseDomain($accessToken->getValues()['baseDomain'])
->onAccessTokenRefresh(
function (AccessTokenInterface $accessToken, string $baseDomain) {
saveToken(
[
'accessToken' => $accessToken->getToken(),
'refreshToken' => $accessToken->getRefreshToken(),
'expires' => $accessToken->getExpires(),
'baseDomain' => $baseDomain,
]
);
}
);

$talksService = $apiClient->talks();

try {
$talk = $talksService->getOne('114');
} catch (AmoCRMApiException $exception) {
printError($exception);
die;
}

try {
$talksService->close(new TalkCloseActionModel($talk->getTalkId(), true));
} catch (AmoCRMApiException $exception) {
printError($exception);
die;
}
13 changes: 13 additions & 0 deletions src/AmoCRM/Client/AmoCRMApiClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace AmoCRM\Client;

use AmoCRM\EntitiesServices\Customers\BonusPoints;
use AmoCRM\EntitiesServices\EntitySubscriptions;
use AmoCRM\EntitiesServices\Links;
use AmoCRM\EntitiesServices\Products;
use AmoCRM\EntitiesServices\Calls;
Expand All @@ -25,6 +26,7 @@
use AmoCRM\EntitiesServices\Roles;
use AmoCRM\EntitiesServices\Segments;
use AmoCRM\EntitiesServices\ShortLinks;
use AmoCRM\EntitiesServices\Talks;
use AmoCRM\EntitiesServices\Tasks;
use AmoCRM\EntitiesServices\Unsorted;
use AmoCRM\EntitiesServices\Users;
Expand Down Expand Up @@ -588,6 +590,17 @@ public function products(): Products
return new Products($request);
}

public function talks(): Talks
{
return new Talks($this->buildRequest());
}

public function entitySubscriptions(string $entityType): EntitySubscriptions
{
return (new EntitySubscriptions($this->buildRequest()))
->setEntityType($entityType);
}

/**
* Метод вернет объект запроса для любых запросов в amoCRM с текущим Access Token
*
Expand Down
25 changes: 25 additions & 0 deletions src/AmoCRM/Collections/SubscriptionsCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace AmoCRM\Collections;

use AmoCRM\AmoCRM\Models\SubscriptionModel;
use AmoCRM\Collections\Interfaces\HasPagesInterface;
use AmoCRM\Collections\Traits\PagesTrait;
use AmoCRM\Models\RoleModel;

/**
* @method null|SubscriptionModel current()
* @method null|SubscriptionModel last()
* @method null|SubscriptionModel first()
* @method null|SubscriptionModel offsetGet($offset)
* @method self offsetSet($offset, RoleModel $value)
* @method self prepend(RoleModel $value)
* @method self add(RoleModel $value)
* @method null|SubscriptionModel getBy($key, $value)
*/
class SubscriptionsCollection extends BaseApiCollection implements HasPagesInterface
{
use PagesTrait;

public const ITEM_CLASS = SubscriptionModel::class;
}
Loading

0 comments on commit 453b70c

Please sign in to comment.