Python AmoCRM API v2 (http://www.amocrm.ru/) (human interface for easy using)
Installation
pip install amocrm_api
Usage
Авторизация
Авторизация - с Июня 2020 amocrm форсировала смену авторизации с токена на Oauth Но Oauth без поддержки server to server взаимодействия, связи с чем текущая реализация содержит следующие ограничения 1. В личном кабинете необходимо создать интеграцию 2. Рефрешь токен однаразовый и обновляется при каждом получении аксесс токена 3. Токены нужно хранить, для этого есть api и существует 3 типа хранилиша (можно реализовать свой):
MemoryTokensStorage - хранит токены в памяти (если вы перезапускаете приложение то придется стнова создавать refresh_token)
FileStorage - сохраняет токены в файле
RedisTokensStorage - сохраняет токены в редисе (pip install redis) для new-age приложений каторые работают в нескольок инстансов
Example:
from amocrm.v2 import tokens
tokens.default_token_manager(
client_id="xxx-xxx-xxxx-xxxx-xxxxxxx",
client_secret="xxxx",
subdomain="subdomain",
redirect_url="https://xxxx/xx",
storage=tokens.FileTokensStorage(), # by default FileTokensStorage
)
tokens.default_token_manager.init(code="..very long code...", skip_error=True)
Контакт - Contact
Компания - Company
Теги - Tags
Сделка - Lead
Задача - Task
Событие - Note
Работа с сушьностями
У каждой сущности есть менеджер (проперти objects), который имеет следующие методы
<Entity>.objects.get(object_id=1, query="test") # получение обьекта <Entity>.objects.all() # получение всех сущьностей <Entity>.objects.filter(**kwargs) # получение списка сущьностей с фильтром <Entity>.objects.create(**kwargs) # создание сущьности (нет явной сигнатуры поэтому лучше испольщовать метод create самой сушьности) <Entity>.objects.update(**kwargs) # обносление сущьности (нет явной сигнатуры поэтому лучше испольщовать метод update самой сушьности)
В свою очередь сама сушьность имеет несколько методов для более простого создания и обноления
<EntityInstance>.create() <EntityInstance>.update() <EntityInstance>.save() # создаст или обновит в зависимости от того как обьект был инициализирован
Исключение - зоздание звонка происходит через упрошенную сущьность
from amocrm.v2 import Call, CallDirection, CallStatus Call().create(CallDirection.OUTBOUNT, phone="....", source="", duration=timedelta(minutes=10), status=CallStatus.CALL_LATER, created_by=manager)
Рассмотрим полный флоу работы на примере контакта
from amocrm.v2 import Contact, Company
contact = Contact.objects.get(query="Тест")
print(contact.first_name)
print(contact.company.name)
print(contact.created_at)
contact.last_name = "Новое"
contact.tags.append("new")
contact.notes.objects.create(text="Примечание")
contact.save()
contact.company = Company(name="Amocrm") # создаст и приленкует компанию сразу
print(contact.company.id)
len(list(contact.customers)) # lazy list
contact.customers.append(Customer(name="Volta"))
Кастомные поля
Одна из удобных возможностей AmoCrm - кастомные поля
Example:
from amocrm.v2 import Lead as _Lead, custom_field
class Lead(_Lead):
utm = custom_field.UrlCustomField("UTM метка")
delivery_type = custom_field.SelectCustomField("Способ доставки")
address = custom_field.TextCustomField("Адрес")
Однако мапинг всех кастомных полей дело утоминетльное, поэтому для генерации файла с готовым мапингом есть команда:
export AMOCRM_CLIENT_ID=xxx export AMOCRM_SECRET=xxx export AMOCRM_SUBDOMAIN=xxx export AMOCRM_REDIRECT_URL=xxx export AMOCRM_CODE=xxx # optional pyamogen > models.py
Release files for amocrm-api 2.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| amocrm_api-2.3.1.tar.gz | 22.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| amocrm_api-2.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.9 kB
Release files / amocrm_api-2.3.1.tar.gz
| Download URL | amocrm_api-2.3.1.tar.gz |
|---|---|
| Size | 22.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ca324c7f930643584b4c6388ee81fce81f32de04116cbbfae3b24207b2ad9d46
|
|
BLAKE2b-256 checksum How to use checksums |
35d1f606c72fbace08273cd61253df903ace3e333e31d47e7604198a3083f870
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3
|
Release files / amocrm_api-2.3.1-py3-none-any.whl
| Download URL | amocrm_api-2.3.1-py3-none-any.whl |
|---|---|
| Size | 29.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
66f5e0e129fe7ab3ca7be611c85ac6f222b0b9b4910fd209c52dc8e9ff714c79
|
|
BLAKE2b-256 checksum How to use checksums |
cf89c8b1d393ff8911a53154f8d7bf9bd19d5e6bc59bcc09e36c0d23fea34cbe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3
|