Krukov / amocrm_api

Python amocrm API wrapper
MIT License
101 stars 54 forks source link

Помогите с кастомными полями #91

Open Korliore opened 1 year ago

Korliore commented 1 year ago

Пытался решить проблему с помощью https://github.com/Krukov/amocrm_api/issues/90, но безуспешно.

Кусок кода: class Lead(_Lead): rasshifrovka = custom_field.UrlCustomField("Расшифровка", field_id=1400397)

( на самом деле кастомных полей больше)

` existing_lead = Lead.objects.get(query=checkbox[0])

Обновляем данные существующей сделки

    existing_lead.rasshifrovka = checkbox[12]
    existing_lead.price = convert_sum(checkbox[2])
    existing_lead.save()` 

Если закомментировать строчки с кастомными полями и оставить только стандартные, то все заработает. Если есть кастомные поля(любые), то выпадет ошибка. Удивительно то, что все работает на моем аккаунте, но не работает на аккаунте заказчика. Создание новых сделок тоже работает отлично.

Ошибка Traceback (most recent call last): File "crmAPI.py", line 193, in <module> upd_lead(check_checkbox()) File "crmAPI.py", line 189, in upd_lead create_a_deal(checkbox) File "crmAPI.py", line 161, in create_a_deal existing_lead.update() File "/root/crm_integration/venv/lib/python3.6/site-packages/amocrm/v2/model.py", line 63, in update self._manager.update(self.id, self._get_updated_data()) File "/root/crm_integration/venv/lib/python3.6/site-packages/amocrm/v2/manager.py", line 19, in update return self._interaction.update(object_id=object_id, data=data or kwargs) File "/root/crm_integration/venv/lib/python3.6/site-packages/amocrm/v2/interaction.py", line 132, in update raise exceptions.ValidationError(response) amocrm.v2.exceptions.ValidationError: {'validation-errors': [{'request_id': '0', 'errors': [{'code': 'FieldNotExpected', 'path': 'custom_fields_values.0.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.1.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.2.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.3.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.4.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.5.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.6.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.7.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.8.is_computed', 'detail': 'This field was not expected.'}, {'code': 'FieldNotExpected', 'path': 'custom_fields_values.9.is_computed', 'detail': 'This field was not expected.'}]}], 'title': 'Bad Request', 'type': 'https://httpstatus.es/400', 'status': 400, 'detail': 'Request validation failed'}

alex-msk commented 1 year ago

Быть может проблема в том, что field_id у заказчика и у Вас отличаются?

Korliore commented 1 year ago

Быть может проблема в том, что field_id у заказчика и у Вас отличаются?

нет, ошибка не в этом т.к я получил все новые поля с помощью

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

Как было выше сказано, создание новых сделок на аккаунте заказчика работает корректно

Korliore commented 1 year ago

Быть может проблема в том, что field_id у заказчика и у Вас отличаются?

ваш тикет я тоже изучил (https://github.com/Krukov/amocrm_api/issues/68) Добавил в код схожий костыль Вот полный код отвечающий за создание/обновление сделки: https://gist.github.com/IriskaID/ecb78e33191793ad6eed83d9e80699bf

Korliore commented 1 year ago

UPD: отписал в техническую поддержку. Код верный, иначе бы он на другом аккаунте не работал. Даже с новым тестовым полем выбивает эту же ошибку

Korliore commented 1 year ago

https://pastebin.pl/view/dd809566 отловил запросы, которые отправляет библиотека. Проблема остается

Korliore commented 1 year ago

Удалось исправить. Библиотека передавала лишний ключ is_computed. Проблема решилась модификацией функции update в файле interaction.py

https://pastebin.com/Y4VN1M1S

Krukov commented 1 year ago

А почему это поле на вашем акаунте не передавалось ?

Видимо в некоторых случаях апи амосрим на получении сушьности добавляет лишнее поля а выдачу апи которы не описаны в документации

Нужно поправить в библиотеке - убрать при формировании обновлении кастомного поле лишние поля ( брать только values, field_name, field_code