Новое апи AmoCRM
Доброго времени суток.
Все началось с того, что я столкнулся с проблемой обновления поля бюджет.
$lead = $this->amoCRMConnection->lead; $lead['price'] = '200'; $lead->apiUpdate((int)$this->attachLeadId, 'now');
В новой документации за поле бюджет отвечает не price, а sale. Но запрос
$lead = $this->amoCRMConnection->lead; $lead['sale'] = '200'; $lead->apiUpdate((int)$this->attachLeadId, 'now');
НЕ обновит поле бюджет. Связано это с тем, что он общается со старым апи amocrm Покажу на примере apiList модели Lead
$response = $this->getRequest('/private/api/v2/json/leads/list', $parameters, $modified);
А в новой документации ( и в новом апи соответственно ) запросы должны идти по другому url
$response = $this->getRequest('/api/v2/leads', $parameters, $modified);
И ответ с сервера тоже выглядит по другому. Так что это затрагивает и метод parseResponse($response, $info).
И эта проблема тянет за собой и все остальные ссылки, которые тоже ссылаются на устаревшее апи.
Спасибо за информацию. Об обратной совместимости они конечно не думают и никак не сообщают о том что ломают апи.
После нового года займусь плавной миграцией на новое api.
Отлично. Большое спасибо)
Сейчас начал знакомиться с амо црм(впервые) и вижу, что сейчас авторизация происходит через пост запрос и в ответ приходит 15-минутный куки. В коде как я понимаю,авторизация через гет параметры?
Это с новым апи пришло? или просто двумя способами можно авторизоваться?
@EvgenyKu так было всего, авторизация через get это недокументированные возможности api. Авторизация через куки для rest api это полный бред, и я не хочу городить огород с хранением этой куки где-то во временном файле.
@dotzero Понятно, даже не знал о такой возможности. Как узнать о других незадокументированных методах, если есть такая возможность?
@dotzero в какую ветку вы планируете плавно вносить изменения?
@tkachev-o Пока не могу сказать. Сначала я хочу понять насколько новое апи отличается от старого, если они просто добавили пару полей в разных сущностях и поменяли формат ответа, то я скорее всего буду это делать прям в master и выпущу как версию 0.4. А если новое апи существенно отличается, то мне сложно сказать когда дойдут руки перепроверять все существующие методы.
Ответ саппорта AmoCRM
Официальный ответ для партнеров от нашего руководства: Ответ Сергея Голованевского для партнеров:
Я хотел бы еще раз публично и более подробно рассказать о принципах внесения изменений в REST API. Принцип внесения изменений следующий - не менять ничего, что было публично заявлено, работало и может быть использовано партнерами. Чтобы закрепить этот принцип мы сами используем свое же АПИ в своем же аккаунте в amoCRM, завязали на него мобильные клиенты и еще целая банда разработчиков внутри компании также используют его для внутренней автоматизации. Каждая ошибка в API вызывает ошибки и в работе наших систем и мы также испытываем проблемы как и вы. Но при всем при этом мы хотим оставаться в тренде, хотим улучшать инструмент, как мы сделали это в осеннем релизе. Но мы не изменили ни одного старого метода. Мы сделали новые эндпоинты и дорабатывали там. И пройдет много времени, прежде чем мы решимся не закрыть, а хотя бы просто объявить даже о закрытии старого АПИ, потому что мы понимаем сколько ваших усилий было инвестировано в разработку на его основе и сколько наших общих клиентов могут пострадать. И поверьте, решение будет приниматься не за одну встречу и на уровне владельцев компании.
@trofimovm спасибо, это очень ценная информация.
Я посмотрел и оказалось, что новые API методы /api/v2/account в отличии от старых /private/api/v2/json/accounts/current отдают информацию в совершенно новом виде. Во всех ответах теперь теперь могут быть поля _embedded (а могут и не быть) где данные очень похожи на то что отдавали раньше, но появилось и другое верхнеуровневое поле _links, но пропало поле server_time. Отсюда возникает резенной вопрос как ступить с этими ответами.
- Перестать их парсить и отдавать в том виде в котором их возвращает амо (если нет ошибки)
- Пытаться парсить
_embeddedи возвращаться также ID элементов, как сейчас, а на_linksзабить.
Мое мнение: первый вариант - пусть каждый сам для себя решает как ему работать с этими данными (так как одному могут понадобится все данные, другому - часть). Максимум что можно сделать, чтобы всем было комфортно - это каким то образом разделить способ ответа, чтобы можно было получать данные как в том виде, который передает амо, так и в удобном формате, в зависимости от переданного параметра.
Либо выделить ответ сервера в отдельный объект и уже работать с ним как заблагорассудится (вопрос сложный, я даже не представляю как это можно реализовать)
Товарищи, пожалуйста, не надо следовать принципам "слышал звон, да не знаю где он".
Старое апи прекрасно работает. Проверено десятками внедрений.
Проверил и сейчас: // Обновление сделок $lead->debug(true); // Режим отладки $lead['name'] = 'Тестовая сделка 3'; $lead['price'] = 3000; $lead->apiUpdate(15762058, 'now');
всё отлично обновилось. багрепорт изначально или некорректный, или какая то частная проблема. просьба к тем, кто сдаёт багрепорты не делать скоропостижных выводов раз, прикладывать дебаг (что по факту ушло на амо и что по факту вернулось) - два. есть предположение, что запрос был некорректно сформирован.
теперь по переходу на новый API. огромная просьба к автору ничего не менять в текущей ветке. хочется переехать на новую версию апи? надо делать новую версию библиотеки.
старая версия апи будет жить еще годы.
@dmitry4m если у меня хватит сил перейти на новую версию api, то я в любом случае не буду трогать ветку 3.x.x. Другое дело, что новые люди не могут пользоваться старой документацией и смотря на новую не знают как раньше назывались поля, большинство полей в новой версии поменяли названия.
@dotzero измените ссылки на https://web.archive.org/web/20170801033744/https://developers.amocrm.ru/rest_api/
Добавил соответствующее предупреждение в README
Tак же доступна документация первой версии на английском https://developers.amocrm.com/rest_api/unsorted/add.php
@dotzero Какой прогресс с переходом на новый api? Если какие-то сущности уже готовы, я бы хотел помочь с напиливанием остальных ендпоинтов.
@dotzero какой статус перехода на новую версию апи? Есть какие-либо куски кода? Плюсую коммент https://github.com/dotzero/amocrm-php/issues/55#issuecomment-425632971 и также хочу поучаствовать
Нужная ли поддержка PHP 5 или можно делать новую версию сразу на PHP 7.1+ ?
Добрый день
Контакт не обновляется
$contact = $amo->contact->apiList([ 'query' => '+xxxxxxxxxx', ])[0];
$contact['name'] = 'Test!'; //новое имя $id = $contact['id']; $contact->apiUpdate((int)$id, 'now');
Не подскажете, что надо сделать, чтобы обновить контакт?