https://github.com/ufee/amoapi-v4
amoCRM/Kommo API v4 PHP Client
https://github.com/ufee/amoapi-v4
amocrm api kommo php
Last synced: 4 months ago
JSON representation
amoCRM/Kommo API v4 PHP Client
- Host: GitHub
- URL: https://github.com/ufee/amoapi-v4
- Owner: ufee
- License: mit
- Created: 2025-07-16T14:24:38.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-10-16T09:58:06.000Z (8 months ago)
- Last Synced: 2026-01-11T14:21:01.766Z (5 months ago)
- Topics: amocrm, api, kommo, php
- Language: PHP
- Homepage: https://amocrm.ru/developers/content/crm_platform/platform-abilities
- Size: 97.7 KB
- Stars: 3
- Watchers: 0
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# π amoCRM/Kommo PHP API (v4) Client
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ OAuth 2.0, ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ, ΡΠΎΠ±ΡΡΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ (ΡΠ΄Π΅Π»ΠΊΠΈ, ΠΊΠΎΠ½ΡΠ°ΠΊΡΡ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π·Π°Π΄Π°ΡΠΈ, Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΈ Π΄Ρ.).
---
## β
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- β
ΠΠ΄Π΄Π΅ΡΠΆΠΊΠ° [amoCRM/Kommo API v4](https://www.amocrm.ru/developers/content/crm_platform/platform-abilities)
- β
OAuth 2.0 Ρ Π°Π²ΡΠΎΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΊΠ΅Π½ΠΎΠ²
- β
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ²: ΡΠ°ΠΉΠ»Ρ, Redis, MongoDB + Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ
- β
ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠΎΠ² Π² ΡΠ°ΠΉΠ»Π°Ρ
ΠΈ Redis: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΠΏΠΎΠ»Ρ, ΡΠΈΠΏΡ Π·Π°Π΄Π°Ρ ΠΈ Ρ.Π΄.
- β
ΠΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· `foreach` ΠΈ `do-while`
- β
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· `callbacks`: ΠΎΡΠ»Π°Π΄ΠΊΠ°, ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ
- β
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
- β
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ°ΡΡΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
- β
ΠΡΠ»ΡΡΠΈΠ°ΠΊΠΊΠ°ΡΠ½ΡΠ½ΠΎΡΡΡ
---
## π¦ Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
```bash
composer require ufee/amoapi-v4
```
## βοΈ ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
```php
$api = \Ufee\AmoV4\ApiClient::setInstance([...]);
$leads = $api->leads()->get();
foreach ($leads as $lead) {
echo $lead->name . "\n";
}
```
### ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
```php
$api = \Ufee\AmoV4\ApiClient::setInstance([
'domain' => 'yourdomain', // Π΄ΠΎΠΌΠ΅Π½ (Π±Π΅Π· .amocrm.ru)
'client_id' => '8a8135d4-31ca-47...', // ID ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
'client_secret' => 'zMZFNnho8FozhrDzxrbA9xuR9...',
'redirect_uri' => 'https://yoursite.com/auth/callback',
'zone' => 'ru', // ΠΈΠ»ΠΈ 'com' Π΄Π»Ρ Kommo
]);
```
### ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
```php
$api->setParam('query_delay', 0.15); // Π·Π°Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ (ΡΠ΅ΠΊ)
$api->setParam('query_retries', 3); // ΠΊΠΎΠ»-Π²ΠΎ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ°Ρ
429
$api->setParam('lang', 'ru'); // ΡΠ·ΡΠΊ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
```
### Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Oauth
Π€Π°ΠΉΠ»ΠΎΠ²ΠΎΠ΅ Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ OAuth-ΡΠΎΠΊΠ΅Π½ΠΎΠ²
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: `/src/Temp/{domain}/{client_id}.json`
```php
$api->oauth->setStorageFiles('/path/to/oauth/storage');
```
**ΠΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½**
```php
$api->oauth->setLongToken($long_token);
```
**Redis**
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° [phpredis](https://github.com/phpredis/phpredis)
```php
$redis = new \Redis();
$redis->connect('127.0.0.1');
$redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); // ΠΈΠ»ΠΈ \Redis::SERIALIZER_IGBINARY
$redis->select(4);
$api->oauth->setStorageRedis($redis);
```
**Mongodb**
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° [mongo-php-library](https://github.com/mongodb/mongo-php-library)
```php
$mongo = new \MongoDB\Client('mongodb://127.0.0.1');
$collection = $mongo->selectCollection('amo', 'oauth');
$api->oauth->setStorageMongo($mongo);
```
### ΠΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΎΠ±ΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
ΠΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ Π΄Π»Ρ ΠΊΡΡΠ° / ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
```php
$api->cache->setTtl([
'account' => 60, // 3600
'users' => 60, // 1800
'pipelines' => 60, // 3600
'userGroups' => 60, // 3600
'customFields' => 60, // 1800
'taskTypes' => 60, // 3600
'eventTypes' => 60 // 86400
]);
```
Π€Π°ΠΉΠ»ΠΎΠ²ΠΎΠ΅ Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: `/src/Temp/{domain}/{client_id}.{key}.cache`
```php
$api->cache->setStorageFiles('/path/to/cache/storage', [
'serialize' => 'igbinary_serialize', // ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ serialize
'unserialize' => 'igbinary_unserialize' // ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ unserialize
]);
```
ΠΡΠΈΡΡΠΊΠ° ΠΊΠ΅ΡΠ°
```php
$api->cache->clear('account');
$api->cache->clear('customFields');
$api->cache->clear('taskTypes');
```
**Redis**
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° [phpredis](https://github.com/phpredis/phpredis)
```php
$redis = new \Redis();
redis->connect('127.0.0.1');
$redis->setOption(\Redis::OPT_SERIALIZER, \Redis::SERIALIZER_PHP); // ΠΈΠ»ΠΈ \Redis::SERIALIZER_IGBINARY
$redis->select(4);
$api->cache->setStorageRedis($redis);
```
### π Π‘ΠΎΠ±ΡΡΠΈΡ (Callbacks)
ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ
```php
$api->callbacks->on($event, function($payload) {
// ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° ΡΠΎΠ±ΡΡΠΈΡ
});
```
```php
$api->callbacks->off($event, function($payload) {
// ΠΎΡΠΏΠΈΡΠΊΠ° ΠΎΡ ΡΠΎΠ±ΡΡΠΈΠΉ
});
```
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ
Π‘ΠΎΠ±ΡΡΠΈΡ ΠΏΠΎ query Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅
```php
$api->callbacks->off('query.delay')->on('query.delay', function($query) {
// ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠΏΠΈΡΠ°Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ $query->instance->getParam('query_delay')
// ΠΏΠ°ΡΠ·Π° ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
sleep(1); // ΠΊΠ°ΡΡΠΎΠΌΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ
});
$api->callbacks->on('query.request.before', function($query) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ°
echo '['.$query->method.'] '.$query->getUrl();
});
$api->callbacks->on('query.response.code', function($code, $query) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°
// ΠΏΠΎΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄ΠΎΠ²:
// 429 - ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ
// 401 - ΠΏΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΊΠ΅Π½Π° ΠΈΠ· Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°
// 502,504 - ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ ΠΏΠΎΠ²ΡΠΎΡ
// return false; ΠΏΡΠ΅ΡΡΠ²Π°Π΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
});
$api->callbacks->on('query.response.fail', function($query, $code) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°
// Π²ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠ²Π΅ΡΠ° ΠΊΡΠΎΠΌΠ΅ 200,204
if ($code === 0) {
echo 'Error: '.$query->response->getError()."\n\n";
} else {
echo "Response:\n".$query->endDate().' - ['.$code.'] '.$query->response->getData()."\n\n";
}
});
$api->callbacks->on('query.response.after', function($query, $code) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°
if ($code === 0) {
echo 'Error: '.$query->response->getError()."\n\n";
} else {
echo "Response:\n".$query->endDate().' - ['.$code.'] '.$query->response->getData()."\n\n";
}
});
$api->callbacks->on('oauth.token.fetch', function($oauth, $query, $response) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π°
});
$api->callbacks->on('oauth.token.refresh', function($oauth, $query, $response) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π°
});
$api->callbacks->on('oauth.token.refresh.error', function($exc, $query = null, $response = null) {
// Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π°
});
```
### π ΠΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ OAuth-ΡΠΎΠΊΠ΅Π½Π°
```php
$api->oauth->fetchToken($code); // ΡΠΎΠΊΠ΅Π½ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡΡ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ storage
```
### ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ API Π·Π°ΠΏΡΠΎΡΡ
```php
$query = $api->query('GET','/api/v4/leads/'.$lead_id);
$query->execute();
$raw = $query->response->validated();
print_r($raw); // object of lead
echo $raw->name;
```
### π₯ Π Π°Π±ΠΎΡΠ° Ρ ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ²ΠΈΡΡ:
```php
// ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΡΠ΅ΡΠ²ΠΈΡΠ°
$service = $api->account();
$api->users();
$api->customFields($entity_type);
$api->pipelines();
$api->pipelineStatuses($pipeline_id);
$api->leads();
$api->contacts();
$api->companies();
$api->links();
$api->tasks();
$api->notes($entity_type);
$api->events();
$api->widgets();
$api->webhooks();
```
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
```php
$service->maxPageRows($value);
$service->orderBy($field, $direction = 'asc')
$service->with($values);
$service->setQueryArg($key, $value);
$service->setQueryArgs($args = []);
```
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
```php
$model = $service->find($elem_id, $with = []);
$collection = $service->get($with = null);
$paginate = $service->paginate($with = null);
$paginate = $service->filter($conditions, $with = []);
$paginate = $service->search($phrase, $with = []);
```
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅/ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
$raw_data ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΌΠΎΠ΄Π΅Π»Ρ
```php
$raw_response = $service->add($raw_data);
$raw_response = $service->update($raw_data);
```
#### ΠΠΎΠ΄Π΅Π»Ρ ΡΡΡΠ½ΠΎΡΡΠΈ
ΠΠΎΠ»Ρ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΠ΅Π· Π³Π΅ΡΡΠ΅ΡΡ ΠΈ ΡΠ΅ΡΡΠ΅ΡΡ
```php
$model = $service->create(['field1' => 'value', 'field2' => 'value', ...]);
// ΠΈΠ»ΠΈ
$model = $service->find(123567);
$model->name = 'Name';
$model->price = 100;
$model->save(); // ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ
$model->toArray();
```
#### ΠΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
```php
$models = $service->createCollection([
['field1' => 'value', 'field2' => 'value', ...],
['field1' => 'value', 'field2' => 'value', ...],
]);
// ΠΈΠ»ΠΈ
$models = $service->get();
foreach($models as $model) {
$model->attachTag('AmoV4');
}
$models->save(); // ΠΌΠ°ΡΡΠΎΠ²ΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ
$models->toArray();
```
#### ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΏΠΎ ID
```php
$lead = $api->leads()->find(30013961);
$contact = $api->contacts()->find(45968927);
$company = $api->companies()->find(55968943);
$leads = $api->leads()->find([30013961,30013962,30013963]);
```
#### ΠΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ `_links->next->href` ΠΈΠ· ΠΎΡΠ²Π΅ΡΠ°
```php
$paginate = $api->leads()->paginate();
$paginate->maxPages(10); // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΡΡΡΠ°Π½ΠΈΡ
$paginate->maxRows(100); // ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅
do {
$leads = $paginate->fetchPage();
echo "\nPage ".$paginate->page."\n";
print_r($leads); // collection
} while(
$paginate->nextPage();
);
// ΠΈΠ»ΠΈ ΡΠ°ΠΊ
foreach($paginate as $page_num=>$leads) {
echo "\nPage ".$page_num."\n";
print_r($leads); // collection
}
```
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ»ΡΡΠ°ΡΡ
`_links->next->href` ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π² ΠΎΡΠ²Π΅ΡΠ΅, Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ, Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² `$paginate->fetchAll();`
```php
$paginate->maxPages(10);
while (
$paginate->valid() && ($leads = $paginate->fetchPage()) && $leads->count()
) {
echo "\nPage ".$paginate->page."\n";
print_r($leads); // collection
$paginate->setPageNum($paginate->page+1);
}
// ΠΈΠ»ΠΈ ΡΠ°ΠΊ
$leads = $paginate->fetchAll($max_pages);
```
#### Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
```php
$paginate = $api->leads()->filter([
'price' => ['from' => 0, 'to' => 100500]
]);
foreach($paginate as $page_num=>$leads) {
echo "\nPage ".$page_num."\n";
print_r($leads); // collection
}
```
#### ΠΠΎΠΈΡΠΊ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
```php
$leads = $service->searchByCustomField(string $query, string $field, int $page_limit = 0, array $with = []);
$contacts = $service->searchByPhone(string $phone, int $page_limit = 0, array $with = []);
$contacts = $service->searchByEmail(string $email, int $page_limit = 0, array $with = []);
$companies = $service->searchByName(string $name, int $page_limit = 0, array $with = []);
$paginate = $leads->search('query', ['source_id','source']);
```
#### ΠΠΊΠΊΠ°ΡΠ½Ρ
```php
$account = $api->account()->get();
// ΠΈΠ»ΠΈ
$account = $api->account;
// ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°
$account = $api->cache->account();
// ΠΌΠΎΠ΄Π΅Π»Ρ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
echo $account->id;
echo $account->name;
$userGroups = $account->userGroups; // collection
$taskTypes = $account->taskTypes; // collection
// ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°
$userGroups = $api->cache->userGroups();
$taskTypes = $api->cache->taskTypes();
$eventTypes = $api->cache->eventTypes($lang = null); // ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ·ΡΠΊ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
// ΠΎΡΠΈΡΡΠΊΠ° ΠΊΠ΅ΡΠ°
$api->cache->clear('account');
```
#### ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
```php
$users = $api->users()->get();
// ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°
$users = $api->cache->users();
// ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ id
$user = $api->cache->user(128737);
```
#### ΠΠΎΡΠΎΠ½ΠΊΠΈ ΡΠ΄Π΅Π»ΠΎΠΊ
```php
$pipelines = $api->pipelines()->get();
$pipeline = $api->pipelines()->find($pipeline_id);
// ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°
$pipelines = $api->cache->pipelines();
$pipeline = $api->cache->pipeline($pipeline_id);
// ΠΈΠ»ΠΈ Π½ΠΎΠ²Π°Ρ Π²ΠΎΡΠΎΠ½ΠΊΠ°
$pipeline = $api->pipelines()->create(['name' => 'Π Π΅ΠΊΠ»Π°ΠΌΠ°ΡΠΈΠΈ']);
$pipeline->sort = 20;
$pipeline->is_main = false;
$pipeline->is_unsorted_on = false;
$pipeline->_embedded = [];
$pipeline->save();
// ΡΡΠ°ΠΏΡ Π²ΠΎΡΠΎΠ½ΠΊΠΈ
$statuses = $pipeline->statuses(); // collection
// ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΡΠΎΠ½ΠΊΠΈ
$pipeline->delete();
```
#### ΠΡΠ°ΠΏΡ Π²ΠΎΡΠΎΠ½ΠΎΠΊ
```php
$statuses = $api->pipelineStatuses($pipeline_id)->with(['descriptions'])->get();
$status = $api->pipelineStatuses($pipeline_id)->find($status_id, ['descriptions']);
// ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΡΠ°ΠΏ
$status = $api->pipelineStatuses($pipeline_id)->create(['name' => 'ΠΠΎΠ³ΠΎΠ²ΠΎΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½']);
$status->sort = 50;
$status->save();
// ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΠΏΠ°
$status->delete();
```
#### ΠΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ°
```php
$service = $api->customFields('contacts');
$service = $api->customFields('catalogs', $catalog_id);
$service->maxPageRows(10);
$service->orderBy('sort', 'desc');
// ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
$cfields = $service->get();
// ΠΈΠ»ΠΈ ΠΈΠ· ΠΊΠ΅ΡΠ°
$cfields = $api->cache->customFields('contacts');
$cfields = $api->cache->customFields('catalogs', $catalog_id);
```
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ
```php
$service = $api->customFields('contacts');
$cf = $service->create(['name' => 'ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΎΠΏΠ»Π°ΡΡ']);
$cf->type = 'multiselect';
$cf->enums = [
['value' => 'ΠΠ½Π»Π°ΠΉΠ½', 'sort' => 0],
['value' => 'ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ', 'sort' => 1],
['value' => 'Π‘ΠΠ', 'sort' => 2]
];
$cf->save();
```
#### ΠΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΡΡΡΠ½ΠΎΡΡΠΈ
```php
$lead = $api->leads()->find($lead_id);
$cf = $lead->cf('ΠΠ°ΡΠΈΠ°Π½ΡΡ ΠΎΠΏΠ»Π°ΡΡ');
$cf->reset();
$cf->setValues(['ΠΠ½Π»Π°ΠΉΠ½','ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ']);
$cf->setEnums([845234,945431]);
$values = $cf->getValues();
// ΠΏΠΎΠ»Π΅ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ
$cf = $lead->cf('ΠΠΎΡΠΎΠ΄');
// ΠΏΠΎΠ»Π΅ ΠΏΠΎ id
$cf = $lead->cf(3745829);
$cf->setValue('ΠΠΎΡΠΊΠ²Π°');
$cf->setEnum(546710);
$value = $cf->getValue();
$field = $cf->field;
$enum_values = $field->getEnums();
$enum_ids = $field->getEnumIds();
$values = $field->getValues();
$bool = $field->hasEnum(568345);
$bool = $field->hasValue('Π§Π΅Π±ΠΎΠΊΡΠ°ΡΡ');
$cf = $lead->cf()->byName('ΠΠΎΡΠΎΠ΄');
$cf = $lead->cf()->byId(3745829);
$cf = $lead->cf()->byCode('PHONE');
$cf = $lead->cf()->byType('radiobutton');
$cfields = $lead->cf()->all();
foreach($cfs as $cf) {
print_r($cf->getValue());
echo "\n";
}
```
#### Π‘Π΄Π΅Π»ΠΊΠΈ
```php
$leads = $api->leads()->get();
$leads = $api->leads;
$leads = $api->leads()->with(['source_id','source']))->get();
$leads = $api->leads()->searchByCustomField('ΠΠΎΡΠΊΠ²Π°', 'ΠΠΎΡΠΎΠ΄', 1); // 1 page (250 rows max)
$leads = $api->leads()->searchByName('Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΠ', 1, ['source_id','source']); // 1 page with source
$paginate = $api->leads()
->orderBy('updated_at', 'desc')
->with(['source_id','source','loss_reason'])
->paginate();
$paginate = $api->leads()->filter($conditions = [], $with = []);
$paginate = $api->leads()->search('VIP');
$lead = $api->leads()->find($lead_id);
$lead = $api->leads()->find($lead_ids, ['source_id','source']);
$lead = $api->leads()->create(['name' => 'ΠΠΎΠ²Π°Ρ ΡΠ΄Π΅Π»ΠΊΠ°']);
$lead->price = 100;
$lead->status_id = 21776227;
$lead->cf('ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ')->setValue('ΠΡΡΠΎΠΊΠΈΠΉ'); // set value name by cf name
$lead->cf(123678)->setEnum(83565); // set enum id by cf id
$lead->attachTag('Tag1');
$lead->attachTag(['name' => 'Π¦Π²Π΅ΡΠ½ΠΎΠΉ', 'color' => 'FF8F92']);
$lead->detachTag('Tag3');
$tags = $lead->getTags();
// replace all existing tags
$lead->setTags($tags); // ids or names
$lead->resetTags(); // replace with none
$paginate = $lead->getTasks($filter = []);
$tasks = $lead->getTasks($filter = [])->fetchAll();
$task = $lead->findTask($task_id);
$task = $lead->createTask($type = 1);
$paginate = $lead->getNotes($filter = []);
$notes = $lead->getNotes($filter = [])->fetchAll();
$note = $lead->findTask($task_id);
$note = $lead->createNote($type = 'common');
```
#### ΠΠΈΠ΄ΠΆΠ΅ΡΡ
```php
$paginate = $api->widgets()->paginate();
$paginate->maxRows(100)->maxPages(10);
// ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ next link
foreach($paginate as $page_num=>$widgets) {
echo "\nPage ".$page_num." loaded ".$widgets->count()."\n\n";
print_r($widgets); // collection
}
// ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π΄Π°Π½Π½ΡΡ
while (
$paginate->valid() && ($widgets = $paginate->fetchPage()) && $widgets->count()
) {
echo "\nPage ".$paginate->page." loaded ".$widgets->count()."\n\n";
$paginate->setPageNum($paginate->page+1);
}
// ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
ΡΡΡΠ°Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
$widgets = $api->widgets()->get();
$widgets = $api->widgets()->paginate()->fetchAll($max_pages);
$widget = $widgets->where('id', 972)->first();
// ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΠΏΠΎ ΠΊΠΎΠ΄Ρ
$widget = $api->widgets()->find('amo_asterisk');
// ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
$installed = $api->widgets()->install('amo_asterisk', $settings);
// ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠΎΠ΄Π΅Π»Ρ
$installed = $widget->install([
'login' => 'example',
'password' => 'eXaMp1E',
'phones' => [
1234 => '8927047',
5678 => '8906000',
],
'script_path'=> 'https://site.ru/'
]);
// ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°
$bool = $api->widgets()->uninstall('amo_asterisk');
// ΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π· ΠΌΠΎΠ΄Π΅Π»Ρ
$bool = $widget->uninstall();
```
#### ΠΠ΅Π±Ρ
ΡΠΊΠΈ
```php
// ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π²Π΅Π±Ρ
ΡΠΊΠΎΠ²
$webhooks = $this->crm->webhooks()->get();
// ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ
ΠΏΠΎ url
$webhooks = $this->crm->webhooks()->get($some_url);
foreach($webhooks as $webhook) {
// ΠΎΡΠΏΠΈΡΠΊΠ°
$webhook->unsubscribe();
}
// ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° Π²Π΅Π±Ρ
ΡΠΊ
$webhook = $this->crm->webhooks()->subscribe($some_url, ['note_lead','note_contact','...']);
// ΠΎΡΠΏΠΈΡΠΊΠ°
$result = $this->crm->webhooks()->unsubscribe($some_url);
```