Сделки (Leads)
Ресурс client.leads предоставляет полный набор методов для работы со сделками AmoCRM.
Получение сделок
Список сделок
Авто-пагинация (рекомендуется): без page метод возвращает Iterator[Lead]
и автоматически обходит все страницы, запрашивая по 50 элементов:
for lead in client.leads.list():
print(lead.id, lead.name, lead.price)
# Или собрать в список сразу
all_leads = list(client.leads.list())
Одна страница: передайте page явно — метод вернёт list[Lead]:
leads = client.leads.list(page=1, limit=50)
Доступные параметры:
page— номер страницы (начиная с 1); если не передан — авто-пагинацияlimit— количество сделок на странице (максимум 250; по умолчанию 50 при авто-пагинации)query— строка полнотекстового поискаfilter— словарь фильтров:{"status_id": 123}→filter[status_id]=123order— словарь сортировки:{"created_at": "desc"}with_— дополнительные связанные данные (см. ниже)
См. также
Пагинация — подробнее про авто-пагинацию и оба режима работы list().
Одна сделка по ID
lead = client.leads.get(42)
По умолчанию get() автоматически добавляет with=contacts, поэтому
поле lead.contacts будет заполнено без дополнительных параметров.
Чтобы отключить подгрузку контактов, передайте пустой список:
lead = client.leads.get(42, with_=[])
Чтобы запросить дополнительные данные, передайте нужные ключи явно:
lead = client.leads.get(42, with_=["contacts", "loss_reason"])
Создание и обновление
from amocrm import Lead
# Создать одну или несколько сделок (не более 50 за запрос)
new_leads = client.leads.create([
Lead(name="Новая сделка", price=5000, status_id=1234),
])
# Обновить (не более 50 за запрос, каждая сделка должна содержать id)
client.leads.update([Lead(id=10, price=9000)])
# Обновить одну сделку по ID
client.leads.update_one(Lead(id=10, price=9000))
Предупреждение
За один запрос можно передать не более 50 сделок. При превышении
лимита выбрасывается AmoCRMError.
Связанные сущности: контакты и компании
Загрузка при чтении
get() подгружает контакты автоматически (with=contacts по умолчанию).
Для компаний добавьте "companies" явно:
lead = client.leads.get(42, with_=["contacts", "companies"])
if lead.contacts:
for contact in lead.contacts:
print(contact.id, contact.name)
if lead.company:
print(lead.company.id, lead.company.name)
Поля модели Lead:
contacts: list[Contact] | None— список связанных контактов (API может вернуть несколько)company: Company | None— первая связанная компания (берётся_embedded.companies[0])
Создание сделок со связанными сущностями (complex)
Эндпоинт POST /api/v4/leads/complex позволяет за один запрос
создать сделку вместе с контактом и компанией:
from amocrm import Lead, Contact, Company
lead = Lead(
name="Комплексная сделка",
price=15000,
contacts=[Contact(name="Иван Иванов", first_name="Иван")],
company=Company(name="ООО Ромашка"),
)
result = client.leads.create_complex([lead])
Ограничения create_complex:
не более 50 сделок за запрос
не более 1 контакта на сделку
При нарушении любого ограничения выбрасывается
AmoCRMError до отправки запроса.
Сериализация в to_dict
При передаче в API контакты и компания попадают в ключ _embedded:
lead = Lead(
name="Сделка",
contacts=[Contact(id=5)],
company=Company(id=10),
)
lead.to_dict()
# {
# "name": "Сделка",
# "_embedded": {
# "contacts": [{"id": 5}],
# "companies": [{"id": 10}],
# }
# }
Примечание
Теги (tags) остаются на верхнем уровне словаря — это соглашение
AmoCRM API для операций записи. Связанные сущности (контакты, компании)
при записи передаются через _embedded.
Обработка ошибок
from amocrm.exceptions import AmoCRMError, AmoCRMAPIError
try:
client.leads.create([Lead(name=f"Deal {i}") for i in range(51)])
except AmoCRMError as e:
print(e) # create allows at most 50 items per request
try:
lead = Lead(contacts=[Contact(id=1), Contact(id=2)])
client.leads.create_complex([lead])
except AmoCRMError as e:
print(e) # create_complex allows at most 1 contact per lead