PHPackages                             nabarabane/amocrm - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. nabarabane/amocrm

AbandonedLibrary[API Development](/categories/api)

nabarabane/amocrm
=================

Простая обертка для работы с API AmoCRM

v1.1.4(10y ago)461.6k30[4 issues](https://github.com/nabarabane/amocrm/issues)[2 PRs](https://github.com/nabarabane/amocrm/pulls)MITPHPPHP &gt;=5.4.0

Since Jul 22Pushed 6y ago20 watchersCompare

[ Source](https://github.com/nabarabane/amocrm)[ Packagist](https://packagist.org/packages/nabarabane/amocrm)[ RSS](/packages/nabarabane-amocrm/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)DependenciesVersions (11)Used By (0)

amoCRM API
==========

[](#amocrm-api)

Простая обертка для работы с API AmoCRM.

Что умеет
---------

[](#что-умеет)

- Получать информацию об аккаунте
- Получать список объектов
- Создавать новые объекты
- Работать с кастомными полями
- Работать с вебхуками

На данный момент для запросов доступны следующие объекты:

- Контакт [https://developers.amocrm.ru/rest\_api/#contact](https://developers.amocrm.ru/rest_api/#contact)
- Компания [https://developers.amocrm.ru/rest\_api/#company](https://developers.amocrm.ru/rest_api/#company)
- Сделка [https://developers.amocrm.ru/rest\_api/#lead](https://developers.amocrm.ru/rest_api/#lead)
- Задача [https://developers.amocrm.ru/rest\_api/#tasks](https://developers.amocrm.ru/rest_api/#tasks)
- Событие [https://developers.amocrm.ru/rest\_api/#event](https://developers.amocrm.ru/rest_api/#event)

### Требования

[](#требования)

- PHP &gt;= 5.4
- libcurl на сервере

---

Установка
---------

[](#установка)

Добавьте в блок "require" в composer.json вашего проекта

```
"nabarabane/amocrm": "~1.1"
```

Или введите в консоли

```
composer require nabarabane/amocrm:"~1.1"
```

Подготовка к работе и настройка
-------------------------------

[](#подготовка-к-работе-и-настройка)

Создайте папку "config" в корне пакета, куда положите два файла:

- config@{ваш-домен-в-amocrm}.php
- {ваш-домен-в-amocrm}@{email-пользователя-для-запросов}.key Директория должна быть доступна для записи, туда сохраняются куки, которые необходимы для работы API.

Файл с конфигом используется для хранения номеров кастомных полей из AmoCRM, которые вы будете использовать в своей работе, и должен возвращать ассоциативный массив, например:

```
return [
	'ResponsibleUserId' => 330242, //ID ответственного менеджера
	'LeadStatusId' => 8156376, // ID первого статуса сделки
	'ContactFieldPhone' => 1426544, // ID поля номера телефона
	'ContactFieldEmail' => 1426546, // ID поля емейла
	'LeadFieldCustom' => 1740351, // ID кастомного поля сделки
	'LeadFieldCustomValue1' => 4055517, // ID первого значения кастомного поля сделки
	'LeadFieldCustomValue2' => 4055519 // ID второго значения кастомного поля сделки
];
```

Номера полей вашего аккаунта можно получить так:

```
use AmoCRM\Handler;
use AmoCRM\Request;

require('autoload.php');

$api = new Handler('domain', 'user@example.com');
print_r($api->request(new Request(Request::INFO))->result);
```

На страницу будет выведена вся информация об аккаунте.
Выбираете номера нужных полей (номера пользователей, номера кастомных полей сделок и т.д.) и сохраняете в конфиг с понятными вам названиями.

Файл с ключом должен содержать в себе API-ключ выбранного пользователя.

---

Использование
-------------

[](#использование)

### Получение данных

[](#получение-данных)

```
use \AmoCRM\Handler;
use \AmoCRM\Request;

require('autoload.php');

/* Создание экземпляра API, где "domain" - имя вашего домена в AmoCRM, а
"user@example.com" - email пользователя, от чьего имени будут совершаться запросы */
$api = new Handler('domain', 'user@example.com');

/* Создание экземляра запроса */

/* Вторым параметром можно передать дополнительные параметры поиска (смотрите в документации)
В этом примере мы ищем пользователя с номером телефона +7 916 111-11-11
Чтобы получить полный список, укажите пустой массив []
Третьим параметром указывается метод в формате [название объекта, метод] */
$request_get = new Request(Request::GET, ['query' => '79161111111'], ['contacts', 'list']);

/* Выполнение запроса */
$result = $api->request($request_get)->result;

/* Результат запроса сохраняется в свойстве "result" объекта \AmoCRM\Handler()
Содержит в себе объект, полученный от AmoCRM, какой конкретно - сверяйтесь с документацией для каждого метода
Ошибка запроса выбросит исключение */
$api->result == false, если ответ пустой (то есть контакты с таким телефоном не найдены) */
```

#### If-Modified-Since

[](#if-modified-since)

Вы также можете передать дополнительный параметр "IF-MODIFIED-SINCE", в котором указывается дата в формате D, d M Y H:i:s. При передаче этого параметра будут возвращены сущности, изменённые позже этой даты.

```
$request_get = new Request(Request::GET, ['query' => '79161111111'], ['contacts', 'list']);
$request_get->setIfModifiedSince((new DateTime('2016-03-14'))->format(DateTime::RFC1123));
$result = $api->request($request_get)->result;
```

### Создание новых объектов

[](#создание-новых-объектов)

Пример рабочего кода, который покрывает все доступные возможности библиотеки

```
use \AmoCRM\Handler;
use \AmoCRM\Request;
use \AmoCRM\Lead;
use \AmoCRM\Contact;
use \AmoCRM\Note;
use \AmoCRM\Task;

require('autoload.php');

/* Предположим, пользователь ввел какие-то данные в форму на сайте */
$name = 'Пользователь';
$phone = '79161111111';
$email = 'user@user.com';
$message = 'Здравствуйте';

/* Оборачиваем в try{} catch(){}, чтобы отлавливать исключения */
try {
	$api = new Handler('domain', 'user@example.com');

	/* Создаем сделку,
	$api->config содержит в себе массив конфига,
	который вы создавали в начале */
	$lead = new Lead();
	$lead
		/* Название сделки */
		->setName('Заявка')
		/* Назначаем ответственного менеджера */
		->setResponsibleUserId($api->config['ResponsibleUserId'])
		/* Кастомное поле */
		->setCustomField(
			$api->config['LeadFieldCustom'], // ID поля
			$api->config['LeadFieldCustomValue1'] // ID значения поля
		)
		/* Теги. Строка - если один тег, массив - если несколько */
		->setTags(['тег 1', 'тег 2'])
		/* Статус сделки */
		->setStatusId($api->config['LeadStatusId']);

	/* Отправляем данные в AmoCRM
	В случае успешного добавления в результате
	будет объект новой сделки */
	$api->request(new Request(Request::SET, $lead));

	/* Сохраняем ID новой сделки для использования в дальнейшем */
	$lead = $api->last_insert_id;

	/* Создаем контакт */
	$contact = new Contact();
	$contact
		/* Имя */
		->setName($name)
		/* Назначаем ответственного менеджера */
		->setResponsibleUserId($api->config['ResponsibleUserId'])
		/* Привязка созданной сделки к контакту */
		->setLinkedLeadsId($lead)
		/* Кастомные поля */
		->setCustomField(
			$api->config['ContactFieldPhone'],
			$phone, // Номер телефона
			'MOB' // MOB - это ENUM для этого поля, список доступных значений смотрите в информации об аккаунте
		)
		->setCustomField(
			$api->config['ContactFieldEmail'],
			$email, // Email
			'WORK' // WORK - это ENUM для этого поля, список доступных значений смотрите в информации об аккаунте
		)
		/* Теги. Строка - если один тег, массив - если несколько */
		->setTags(['тег контакта 1', 'тег контакта 2']);

	/* Проверяем по емейлу, есть ли пользователь в нашей базе */
	$api->request(new Request(Request::GET, ['query' => $email], ['contacts', 'list']));

	/* Если пользователя нет, вернется false, если есть - объект пользователя */
	$contact_exists = ($api->result) ? $api->result->contacts[0] : false;

	/* Если такой пользователь уже есть - мержим поля */
	if ($contact_exists) {
		$contact
			/* Указываем, что пользователь будет обновлен */
			->setUpdate($contact_exists->id, $contact_exists->last_modified + 1)
			/* Ответственного менеджера оставляем кто был */
			->setResponsibleUserId($contact_exists->responsible_user_id)
			/* Старые привязанные сделки тоже сохраняем */
			->setLinkedLeadsId($contact_exists->linked_leads_id);
	}

	/* Создаем заметку с сообщением из формы */
	$note = new Note();
	$note
		/* Привязка к созданной сделке*/
		->setElementId($lead)
		/* Тип привязки (к сделке или к контакту). Смотрите комментарии в Note.php */
		->setElementType(Note::TYPE_LEAD)
		/* Тип заметки (здесь - обычная текстовая). Смотрите комментарии в Note.php */
		->setNoteType(Note::COMMON)
		/* Текст заметки*/
		->setText($message);

	/* Создаем задачу для менеджера обработать заявку */
	$task = new Task();
	$task
		/* Привязка к созданной сделке */
		->setElementId($lead)
		/* Тип привязки (к сделке или к контакту) Смотрите комментарии в Task.php */
		->setElementType(Task::TYPE_LEAD)
		/* Тип задачи. Смотрите комментарии в Task.php */
		->setTaskType(Task::CALL)
		/* ID ответственного за задачу менеджера */
		->setResponsibleUserId($api->config['ResponsibleUserId'])
		/* Дедлайн задачи */
		->setCompleteTill(time() + 60 * 2)
		/* Текст задачи */
		->setText('Обработать заявку');

	/* Отправляем все в AmoCRM */
	$api->request(new Request(Request::SET, $contact));
	$api->request(new Request(Request::SET, $note));
	$api->request(new Request(Request::SET, $task));
} catch (\Exception $e) {
	echo $e->getMessage();
}
```

### Мультизагрузка объектов

[](#мультизагрузка-объектов)

Есть возможность создавать одновременно несколько объектов одного типа и отправлять их в amoCRM одним запросом

```
use \AmoCRM\Handler;
use \AmoCRM\Request;
use \AmoCRM\Lead;

require('autoload.php');

try {
	$api = new Handler('domain', 'user@example.com');

	/* Первая сделка */
	$lead1 = new Lead();
	$lead1
	    ->setName('Заявка 1')
		->setResponsibleUserId($api->config['ResponsibleUserId'])
		->setStatusId($api->config['LeadStatusId']);

	/* Вторая сделка */
	$lead2 = new Lead();
	$lead2
	    ->setName('Заявка 2')
		->setResponsibleUserId($api->config['ResponsibleUserId'])
		->setStatusId($api->config['LeadStatusId']);

	/* Отправляем данные в AmoCRM */
	$api->request(new Request(Request::SET, [$lead1, $lead2]));
```

Дебаггинг
---------

[](#дебаггинг)

В случае ошибки запроса к API, AmoCRM возвращает только номер ошибки, без текстовых пояснений.
Чтобы включить текстовые пояснения для ошибок, передайте в конструктор хендлера "true" третьим параметром:

```
$api = new Handler('domain', 'user@example.com', true);
```

Теперь вместе с номером ошибки вы будете видеть и что же этот номер означает, и упростите дебаггинг.
Включение этого режима создает дополнительный запрос к диску на чтение файла, где сохранены описания ошибок, поэтому не забудьте отключить дебаггинг в продакшене.

---

Webhooks
--------

[](#webhooks)

Как настроить аккаунт на работу с вебхуками смотрите [здесь](https://developers.amocrm.ru/rest_api/webhooks.php).
Чтобы успешно обрабатывать запрос от AmoCRM на ваш сайт, вам нужно создать слушателя событий в файле, на который AmoCRM шлет свои запросы, и определить функции, которые будут вызываться при определенном событии.

### Список доступных событий

[](#список-доступных-событий)

#### Сделки

[](#сделки)

- **leads-add** Создание сделки
- **leads-update** Изменение сделки
- **leads-delete** Удаление сделки
- **leads-status** Смена статуса сделки
- **leads-responsible** Смена ответственного сделки

#### Контакты

[](#контакты)

- **contacts-add** Создание контакта
- **contacts-update** Изменение контакта
- **contacts-delete** Удаление контакта

#### Компании

[](#компании)

- **companies-add** Создание компании
- **companies-update** Изменение компании
- **companies-delete** Удаление компании

Обратите внимание, что при смене статуса сделки или при смене ответственного сделки, AmoCRM одновременно посылает информацию и об общем изменении сделки, то есть код для **leads-status** и **leads-responsible** всегда будет выполняться вместе с **leads-update.**

```
use \AmoCRM\Webhook;

require('autoload.php');

$listener = new Webhook();

/* Указываете обработчики событий
Callback-функция, передаваемая вторым параметром,
будет вызвана при наступлении соответстующего события */
$listener->on('leads-add', function($domain, $id, $data, $config) {
	/* Тут делаете, что нужно при этом событии

	Сюда передаются следующие параметры:
		$domain - название домена в AmoCRM, с которого пришло событие
		$id - ID сущности
		$data - массив полей сущности
		$config - конфиг этого домена (если вы создавали соответствующий файл, иначе - пустой массив) */
});

/* Если вы хотите назначить одинаковый обработчик нескольким событиям, можно сделать так */
$listener->on(['contacts-add', 'contacts-update'], function($domain, $id, $data, $config) {/* ... */});

/* Запуск слушателя */
$listener->listen();
```

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity32

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity64

Established project with proven stability

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~26 days

Total

10

Last Release

3715d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/958c0a9b9f4af385c5786db3550c9487d946ab55aceb5200a237fd2153a2853d?d=identicon)[nabarabane](/maintainers/nabarabane)

### Embed Badge

![Health badge](/badges/nabarabane-amocrm/health.svg)

```
[![Health](https://phpackages.com/badges/nabarabane-amocrm/health.svg)](https://phpackages.com/packages/nabarabane-amocrm)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[facebook/php-business-sdk

PHP SDK for Facebook Business

90821.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

74513.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

265103.1M454](/packages/google-gax)[google/common-protos

Google API Common Protos for PHP

173103.7M50](/packages/google-common-protos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
