Closed itekhi closed 3 years ago
Привет, тяжело конечно сказать что не так в вашем случае. Это только на сохранении происходить? Получить что то из амо удается?
Когда я интегрировал эту либу в джанго проект я делал все эти инициализации с токеном прямо в модуле (файле) где были определены модели Lead с кастомными полями.
# django_project/django_app/amo_integration.py
from amocrm.v2 import Lead as _Lead
tokens.default_token_manager(
client_secret=settings.AMOCRM_CLIENT_SECRET,
client_id=settings.AMOCRM_CLIENT_ID,
subdomain="xxx",
redirect_url="xxx",
storage=tokens.FileTokensStorage(directory_path=str(Path.home())),
)
if ENABLE and settings.AMOCRM_CODE:
tokens.default_token_manager.init(settings.AMOCRM_CODE, skip_error=True)
...
class Lead(_Lead):
utm_source = custom_field.TextCustomField("Источник / utm_source")
utm_medium = custom_field.TextCustomField("Канал / utm_medium")
....
# django_project/django_app/views.py
from .amo_integration import Lead
def view(request):
...
Lead(....).save()
И советую попробовать зафиксировтаь путь для сохранения токенов аля storage=tokens.FileTokensStorage(directory_path=str(Path.home())),
Насчет воронки и отвественного - по идеи вот так должно работать
Lead(name="Форма", responsible_user=6591718, pipeline=36854932).save()
group_id - по доке вроде не передается при созданиии по этому в библиотеке это только редактируемое поле.
Большое спасибо за ответ!
Попробовал Pipeline.objects.all()
и Lead.objects.all()
- возвращает <generator object Manager.filter at 0x0000019224AAEDE0>
(без ошибки! но по-моему это просто сущность, запрос не отправляется...)
А в if ENABLE and settings.AMOCRM_CODE:
откуда берется ENABLE
? Я так понял как только в самый первый раз выполнили init()
дальше уже не надо.
Я поместил всё в models.py
токен создается и все вроде работает нормально:
from django.conf import settings
from amocrm.v2 import tokens
from amocrm.v2 import Lead as _Lead
from amocrm.v2 import custom_field
tokens.default_token_manager(
client_secret=settings.AMOCRM_SECRET,
client_id=settings.AMOCRM_CLIENT_ID,
subdomain=settings.AMOCRM_SUBDOMAIN,
redirect_url=settings.AMOCRM_REDIRECT_URL,
storage=tokens.FileTokensStorage(directory_path=settings.BASE_DIR),
)
print('hello! hello! hello! hello! hello! hello! hello! hello! hello! ')
if False and settings.AMOCRM_CODE:
tokens.default_token_manager.init(settings.AMOCRM_CODE, skip_error=False)
class Lead(_Lead):
utm_source = custom_field.TextCustomField("Источник / utm_source")
utm_medium = custom_field.TextCustomField("Канал / utm_medium")
Потом в views.py
:
from amocrm_api.models import Lead
from amocrm.v2.entity.pipeline import Pipeline
def index(request):
lead = Lead.objects.get(1)
print(lead)
Отправляю форму, print(lead)
выдает None {'with': 'contacts,loss_reason,tags'}
А потом сразу за этим amocrm.v2.exceptions.UnAuthorizedException
(неверный логин или пароль)
Не могу понять, функция tokens.default_token_manager()
должна выполняться при каждом запросе или только в запуск? Потому что print('hello! hello!... ')
выполняется только при перезапуске сервера... Возможно проблема как раз в этом, только не могу понять как сделать чтобы выполнялось каждый раз при запросе.
Поместил from amocrm_api.models import Lead
внутри def index(request)
и теперь print('hello! hello!... ')
показывается при каждом запросе, но все равно выдает error UnAuthorizedException
.....
Возможно это что-то с созданной интеграцией в amocrm, я ни разу не авторизировал интеграцию администратором, но вроде в интеграции во вкладке Granted access всё есть... Может есть вариант вручную указать login и password при авторизации?
ENABLE можно опустить, это просто в качестве примера (у меня это ENABLE = settings.AMO_ENABLE
).
Не суть, по идеи если токены создались то и авторизация прошла нормально.
Инициализация токенов должна происходить один раз tokens.default_token_manager()
utm_source = custom_field.TextCustomField("Источник / utm_source") я в качестве примера указал, у вас должны быть другие кастомыне поля или они вообще не нужны
По-видемому и получение данных не работает тоже
1) Проверьте что в интеграции у вас стоит галочка
2) создайте фаил any_name.py
from amocrm.v2 import tokens
from amocrm.v2 import Lead, Pipeline
tokens.default_token_manager(
client_secret="xxx",
client_id="xxx",
subdomain="xxx",
redirect_url="xxx",
storage=tokens.FileTokensStorage(),
)
tokens.default_token_manager.init("xxx", skip_error=True)
if __name__ == "__main__":
print(list(Pipeline.objects.all()))
print(list(Lead.objects.all()))
и запустите python any_name.py
Все равно amocrm.v2.exceptions.UnAuthorizedException
...... 🤦♂️🤦♂️ Даже уже не знаю что попробовать... В интеграции все стоит. Даже попробовал использовать MemoryTokensStorage()
, не помогло. Удалил файлы access_token.txt
и refresh_token.txt
поставил новый authorization_key
, не работает.....
Может в самом амо есть какая-то настройка, не в интеграции?
Не думаю ) . Ради эксперемента завидите новый аккаунт и создайте там новую интеграцию - попробуйте код, если не работает , то скинте креды и я попробую )
Привет, как успехи? Закрываю задачу?
Добрый день! Не закрывайте пока, жду ответ поддержки по пропаже интеграции из профиля, праздники, не отвечают...
А вот вопрос: REDIRECT_URL
используется для чего-то в библиотеке? В смысле на локалке должно работать или надо в production с нормальным доменом? REDIRECT_URL
такой же как и при создании интеграции.
REDIRECT_URL не влияет на работу библиотеки, но что бы amocrm выдало токен его нужно указывать как в интеграции
@Shaffle1 есть новости? )
Неа, теперь не хочет создаваться интеграция в амо, пропадает и всё... Напишу как будут!
Может таже проблема https://github.com/Krukov/amocrm_api/issues/41 ?
Вроде нет, амо оплаченный и давно. + я еще тестил API через браузер и postman, все работает. Но все равно спасибо!))
Наконец-то! Решилось, не знаю точно в чем была проблема, но я проверил оплату, и создал тестовый субаккаунт amocrm. Попробовал с нуля сделать мини-прогу на python без django. И все заработало!!! Видимо amo забагался и не хотел пускать api нормально работать((
Библиотека отличная! С документацией поработать и вообще супер! Инициализацию я поставил в
apps.py
, потому что если ставить вsettings.py
выдаст ошибку, видимоsettings.py
выполняется 2 раза:Теперь пробую после отправки формы создать
Lead
вот так:lead = Lead(name="Форма")
и потомlead.save()
. На это почему-то возвращаетamocrm.v2.exceptions.UnAuthorizedException
(неверный логин и пароль если быть точным)...Файлы
refresh_token.txt
иaccess_token.txt
создает, и все вроде нормально.Очень нужна помощь, заранее спасибо!
И если не сложно еще вопросик: Как мне создать
Lead
в определенном pipeline и добавить responsible user? Я пытался вот такLead(name="Форма", responsible_user_id=6591718, group_id=0, pipeline_id=36854932)
, но не вышло... Я так понял надо найти пользователя -main_user = User.objects.get(1)
и в аргументы поставитьresponsible_user=main_user
, но чтобы это понять мне сначала надо решить первую проблему, она появляется при любом запросе...