Amocrm код ошибки 204

Справочник ошибок и ответов API

При выполнении некорректного запроса к системе наше API может вернуть код ошибки, в случае же верного запроса, API вернёт ответ. Вы, конечно, уже обрабатывали ответ сервера в ходе отладки своих виджетов или написании скриптов, взаимодействующих с нашей системой. Для Вашего удобства, мы решили систематизировать все возможные ответы и ошибки, отдаваемые нашей системой и разместить их на отдельной странице. Надеемся это облегчит и ускорит интеграцию Ваших проектов с amoCRM.

Ошибки при валидации данных

Если переданные данные не совпадают с теми, что доступны для сущности, запрос вернет HTTP-код 400 Bad Request и массив с параметрами, которые не подошли под условия.

Пример ошибки валидации данных


{
    "validation-errors": [
        {
            "request_id": "0",
            "errors": [
                {
                    "code": "NotSupportedChoice",
                    "path": "custom_fields_values.0.field_id",
                    "detail": "The value you selected is not a valid choice."
                }
            ]
        }
    ],
    "title": "Bad Request",
    "type": "https://httpstatus.es/400",
    "status": 400,
    "detail": "Request validation failed"
}

Ответы при авторизации

Подробнее об авторизации читайте здесь

Код HTTP код Описание
110 401 Unauthorized Общая ошибка авторизации. Неправильный логин или пароль.
111 401 Unauthorized Возникает после нескольких неудачных попыток авторизации. В этом случае нужно авторизоваться в аккаунте через браузер, введя код капчи.
112 401 Unauthorized Возникает, когда пользователь выключен в настройках аккаунта “Пользователи и права” или не состоит в аккаунте.
113 403 Forbidden Доступ к данному аккаунту запрещён с Вашего IP адреса. Возникает, когда в настройках безопасности аккаунта включена фильтрация доступа к API по “белому списку IP адресов”.
101 401 Unauthorized Возникает в случае запроса к несуществующему аккаунту (субдомену).

Ответы при работе с контактами

Подробнее о работе с контактами читайте здесь

Код Описание
202 Добавление контактов: нет прав
203 Добавление контактов: системная ошибка при работе с дополнительными полями
205 Добавление контактов: контакт не создан
212 Обновление контактов: контакт не обновлён
219 Список контактов: ошибка поиска, повторите запрос позднее
330 Добавление/Обновление контактов: количество привязанных сделок слишком большое

Ответы при работе со сделками

Подробнее о работе со сделками читайте здесь

Код Описание
330 Добавление/Обновление сделок: количество привязанных контактов слишком большое

Ответы при работе с событиями

Подробнее о работе с событиями читайте здесь

Код Описание
244 Добавление событий: недостаточно прав для добавления события
225 Обновление событий: события не найдены

Ответы при работе с задачами

Подробнее о работе с задачами читайте здесь

Код Описание
231 Обновление задач: задачи не найдены
233 Добавление событий: по данному ID элемента не найдены некоторые контакты
234 Добавление событий: по данному ID элемента не найдены некоторые сделки
235 Добавление задач: не указан тип элемента
236 Добавление задач: по данному ID элемента не найдены некоторые контакты
237 Добавление задач: по данному ID элемента не найдены некоторые сделки
244 Добавление сделок: нет прав.

Ответы при работе со списками

Подробнее о работе со списками читайте здесь

Код Описание
244 Добавление/Обновление/Удаление каталогов: нет прав.
281 Каталог не удален: внутренняя ошибка
282 Каталог не найден в аккаунте.

Ответы при работе с элементами каталога

Подробнее о работе с элементами каталога читайте здесь

Код Описание
203 Добавление/Обновление элементов каталога: системная ошибка при работе с дополнительными полями
204 Добавление/Обновление элементов каталога: дополнительное поле не найдено
244 Добавление/Обновление/Удаление элементов каталога: нет прав.
280 Добавление элементов каталога: элемент создан.
282 Элемент не найден в аккаунте.

Ответы при работе с покупателями

Подробнее о работе с покупателями читайте здесь

Код Описание
288 Недостаточно прав. Доступ запрещен.
402 Необходимо оплатить функционал
425 Функционал недоступен
426 Функционал выключен

Другие ответы

Ошибки и ответы, не относящиеся к какому-либо конкретному разделу

Код Описание Примечание
400 Неверная структура массива передаваемых данных, либо не верные идентификаторы кастомных полей  
422 Входящие данные не мог быть обработаны.  
405 Запрашиваемый HTTP-метод не поддерживается  
402 Подписка закончилась Вместе с этим ответом отдаётся HTTP код №402 “Payment Required”
403 Аккаунт заблокирован, за неоднократное превышение количества запросов в секунду Вместе с этим ответом отдаётся HTTP код №403
429 Превышено допустимое количество запросов в секунду Вместе с этим ответом отдаётся HTTP код №429
2002 По вашему запросу ничего не найдено Вместе с этим ответом отдаётся HTTP код №204 “No Content”

@nomelodic

Здравствуйте. Хочу прояснить один волнующий меня момент:

Делаю запрос
$unsortedFiler = new UnsortedFilter();
$unsortedFiler->setPipelineId($pipeline_id);
$response = $client->unsorted()->get($unsortedFiler);

В передаваемой воронке в неразобранном ничего нет, получаем в ответ код 204.
По логике, описанной в документации на сайте коды 200 и 204 считаются успешными
try
{
/** Если код ответа не успешный - возвращаем сообщение об ошибке */
if ($code < 200 || $code > 204) {
throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undefined error', $code);
}
}
catch(\Exception $e)
{
die('Ошибка: ' . $e->getMessage() . PHP_EOL . 'Код ошибки: ' . $e->getCode());
}

Однако, библиотека отваливает Exception с описанием ошибки «No content». Получается такая ситуация, что вроде как это ошибкой считаться не должно и, соответственно, в ответе нужно вернуть пустой массив или null, или false, или что угодно, но вернуть, а вместо этого мы получаем ошибку, т.е. при работе с библиотекой нужно дополнительно отлавливать код 204 в catch и вместо ошибки возвращать пустой массив.

Отсюда вопрос: так и планировалось? И если да, то может быть стоит как-то согласовать этот момент с документацией

@nomelodic

Собственно, вот код, который отвечает за этот Exception (файл src/AmoCRM/Client/AmoCRMApiRequest.php, строки 443-449):

if ((int)$response->getStatusCode() === StatusCodeInterface::STATUS_NO_CONTENT) {
            throw new AmoCRMApiNoContentException(
                "No content",
                $response->getStatusCode(),
                $this->getLastRequestInfo()
            );
        }

Но вот что интересно, следом, в строке 451 идёт такая проверка:
if (!in_array((int)$response->getStatusCode(), self::SUCCESS_STATUSES, true)) {

И если заглянуть в константу self::SUCCESS_STATUSES, то можно увидеть, что StatusCodeInterface::STATUS_NO_CONTENT входит в список «успешных» статусов:

public const SUCCESS_STATUSES = [
        StatusCodeInterface::STATUS_OK,
        StatusCodeInterface::STATUS_CREATED,
        StatusCodeInterface::STATUS_ACCEPTED,
        StatusCodeInterface::STATUS_NO_CONTENT,
    ];

@bessudnov

Согласен, что не супер логично, на самом начальном этапе так и планировалось, после начала использования в массах, стало понятно, что это не очень удобно, но без мажорного релиза этот момент мы точно менять не будем, в ближайшее время он не планируется

List of API error and API responses

When an incorrect request to the system is executed, our API can return an error code, in the case of the correct query, the API will return a response. You, of course, have already processed the server’s response while debugging your widgets or writing scripts interacting with our system. For your convenience, we decided to systematize all possible answers and errors, given by our system and place them on a separate page. We hope this will facilitate and accelerate the integration of your projects with Kommo.

Responses during authorization

Read more about authorization here

Error code HTTP code Description
110 401 Unauthorized General authorization error. Incorrect login or password.
111 401 Unauthorized Occurs after several unsuccessful authorization attempts. In this case, you need to log in to your account through the browser by entering the captcha code.
112 401 Unauthorized Occurs when the user is turned off in the “Users and Rights” account settings or is not in the account.
113 403 Forbidden Access to this account is prohibited from your IP address. Occurs when the filtering of access to the API by the “whitelist of IP addresses” is enabled in the account security settings.
101 401 Unauthorized Occurs in the case of a request to a non-existent account (subdomain).
401 401 Unauthorized Not Authorized. There is no account information on the server. You need to make a request to another server on the transmitted IP.

Responses while working with your account

For more information about working with your account, click here

Code Description
101 No account found
102 POST parameters must be sent in JSON format
103 Parameters not passed
104 The requested API method was not found

Responses when working with contacts

For more information about working with contacts, click here.

Code Description
201 Adding Contacts: An Empty Array
202 Adding contacts: no rights
203 Adding contacts: system error when working with additional fields
204 Adding contacts: additional field not found
205 Adding contacts: no contact created
206 Add / Update contacts: empty query
207 Adding / Updating contacts: invalid method requested
208 Updating contacts: an empty array
209 Updating contacts: “id” and “updated_at” parameters are required
210 Updating contacts: system error when working with additional fields
211 Updating contacts: additional field not found
212 Updating contacts: contact not updated
219 Contact list: Search error, retry the request later

Response when dealing with lead

More information about dealing with lead read here

Code Description
213 Adding Leads: An Empty Array
214 Adding / Updating deals: empty request
215 Adding / Updating leads: invalid method requested
216 Updating leads: empty array
217 Updating leads: the parameters “id”, “updated_at”, “status_id”, “name” ‘are required
240 Adding / Updating leads: invalid parameter “id” of an additional field

Responses when working with events

Read more about working with events here

Code Description
218 Adding events: empty array
221 Event list: type required
226 Adding events: an event element of this entity could not be found
244 Adding events: insufficient rights to add an event
222 Adding / Updating Events: Empty request
223 Add / Update events: invalid method requested (GET instead of POST)
224 Event update: empty array
225 Event updates: no events found

Responses when working with tasks

Read more about working with tasks here

Code Description
227 Adding Tasks: An Empty Array
228 Add / Update tasks: empty query
229 Adding / Updating Tasks: Invalid Method Requested
230 Updating tasks: an empty array
231 Update tasks: No tasks found
232 Adding events: The item ID or item type is empty or not valid
233 Adding events: some contacts have not been found for this item ID
234 Adding events: some transactions have not been found for this item ID
235 Adding Tasks: no element type specified
236 Adding Tasks: No contacts found for this Item ID
237 Adding Tasks: Some transactions were not found for this Item ID
238 Adding contacts: Missing value for additional field
244 Adding transactions: no rights.

Responses when working with directories

Read more about working with directories here.

Code Description
405 Request Transfer Method Invalid
222 Adding / Updating / Deleting directories: an empty query
244 Adding / Updating / Deleting directories: No permissions.
281 Directory not deleted: internal error
282 The directory was not found in the account.
283 Invalid request, data not sent.
284 Invalid request, no array sent.
285 Required field not passed.

Responses when working with directory elements

For more information about working with directory elements, see here

Code Description
405 Request Transfer Method is Invalid
203 Adding / Updating Directory Items: System Error with Custom Fields
204 Adding / Updating Directory Items: An additional field was not found
222 Adding / Updating / Deleting directory items: an empty request
244 Adding / Updating / Deleting directory items: insufficient rights
280 Adding directory items: element created.
282 Item not found in account.
283 Invalid request, data not sent.
284 Invalid request, no array passed.
285 Required field not submitted.

Responses when working with customers

For more information about working with customers, see here

Code Description
288 Insufficient rights. Access is denied.
402 It is necessary to pay for the functional.
425 Functionality is not available.
426 Functionality is disabled.

Other Responses

Errors and responses that do not relate to any particular section

Code Description Note
400 Wrong structure of the array of transmitted data, or invalid identifiers of custom fields
402 Subscription has ended With this reply, you receive a HTTP code #402 “Payment Required”
403 The account is blocked, for repeatedly exceeding the number of requests per second. Together with this response, HTTP code #403
429 The number of requests per second exceeded With the response, the HTTP code #429 is sent
2002 There are no results for your search At the same time HTTP code #204 “No Content” is given with this response.

При выполнении некорректного запроса к системе наше API может вернуть код ошибки, в случае же верного запроса, API вернёт ответ.
Вы, конечно, уже обрабатывали ответ сервера в ходе отладки своих виджетов или написании скриптов, взаимодействующих с нашей системой.
Для Вашего удобства, мы решили систематизировать все возможные ответы и ошибки, отдаваемые нашей системой и разместить их на отдельной странице.
Надеемся это облегчит и ускорит интеграцию Ваших проектов с amoCRM.

Ответы при авторизации

Подробнее об авторизации читайте здесь

CODE HTTP CODE ERROR DESCRIPTION
110 401 Unauthorized Неправильный логин или пароль Общая ошибка авторизации.
111 401 Unauthorized Неправильный код капчи Возникает после нескольких неудачных попыток авторизации. В этом случае нужно авторизоваться в аккаунте
через браузер, введя код капчи.
112 401 Unauthorized Пользователь не состоит в данном аккаунте Возникает, когда пользователь выключен в настройках аккаунта «Пользователи и права» или не состоит в
аккаунте.
113 403 Forbidden Доступ к данному аккаунту запрещён с Вашего IP адреса Возникает, когда в настройках безопасности аккаунта включена фильтрация доступа к API по «белому списку
IP адресов».
101 401 Unauthorized Account not found Возникает в случае запроса к несуществующему аккаунту (субдомену).
401 401 Not Authorized 401 Unauthorized На сервере нет данных аккаунта. Нужно сделать запрос на другой сервер по переданному IP.

Ответы при работе с аккаунтом

Подробнее о работе с аккаунтом читайте здесь

CODE DESCRIPTION
101 Аккаунт не найден
102 POST-параметры должны передаваться в формате JSON
103 Параметры не переданы
104 Запрашиваемый метод API не найден

Ответы при работе с контактами

Подробнее о работе с контактами читайте здесь

CODE DESCRIPTION
201 Добавление контактов: пустой массив
202 Добавление контактов: нет прав
203 Добавление контактов: системная ошибка при работе с дополнительными полями
204 Добавление контактов: дополнительное поле не найдено
205 Добавление контактов: контакт не создан
206 Добавление/Обновление контактов: пустой запрос
207 Добавление/Обновление контактов: неверный запрашиваемый метод
208 Обновление контактов: пустой массив
209 Обновление контактов: требуются параметры «id» и «last_modified»
210 Обновление контактов: системная ошибка при работе с дополнительными полями
211 Обновление контактов: дополнительное поле не найдено
212 Обновление контактов: контакт не обновлён
219 Список контактов: ошибка поиска, повторите запрос позднее

Ответы при работе со сделками

Подробнее о работе со сделками читайте здесь

CODE DESCRIPTION
213 Добавление сделок: пустой массив
214 Добавление/Обновление сделок: пустой запрос
215 Добавление/Обновление сделок: неверный запрашиваемый метод
216 Обновление сделок: пустой массив
217 Обновление сделок: требуются параметры «id», «last_modified», «status_id», «name»
240 Добавление/Обновление сделок: неверный параметр «id» дополнительного поля

Ответы при работе с событиями

Подробнее о работе с событиями читайте здесь

CODE DESCRIPTION
218 Добавление событий: пустой массив
221 Список событий: требуется тип
222 Добавление/Обновление событий: пустой запрос
223 Добавление/Обновление событий: неверный запрашиваемый метод (GET вместо POST)
224 Обновление событий: пустой массив
225 Обновление событий: события не найдены

Ответы при работе с задачами

Подробнее о работе с задачами читайте здесь

CODE DESCRIPTION
227 Добавление задач: пустой массив
228 Добавление/Обновление задач: пустой запрос
229 Добавление/Обновление задач: неверный запрашиваемый метод
230 Обновление задач: пустой массив
231 Обновление задач: задачи не найдены
232 Добавление событий: ID элемента или тип элемента пустые либо неккоректные
233 Добавление событий: по данному ID элемента не найдены некоторые контакты
234 Добавление событий: по данному ID элемента не найдены некоторые сделки
235 Добавление задач: не указан тип элемента
236 Добавление задач: по данному ID элемента не найдены некоторые контакты
237 Добавление задач: по данному ID элемента не найдены некоторые сделки
238 Добавление контактов: отсутствует значение для дополнительного поля
244 Добавление сделок: нет прав.

Другие ответы

Ошибки и ответы, не относящиеся к какому-либо конкретному разделу

CODE DESCRIPTION NOTE
400 Неверная структура массива передаваемых данных, либо не верные идентификаторы кастомных полей
403 Аккаунт заблокирован, за неоднократное превышение количества запросов в секунду Вместе с этим ответом отдаётся HTTP код №403
429 Превышено допустимое количество запросов в секунду Вместе с этим ответом отдаётся HTTP код №429
2002 По вашему запросу ничего не найдено Вместе с этим ответом отдаётся HTTP код №204 «No Content»

По вебхукам от амоСРМ версия api v2 получаю данные по изменениям в сделке

$data = $_POST['leads']['update'][0];

        $id = $data['id'];	
	$date_it = new DateTime();
	$date_new = strtotime($date_it->format('Y-m-d H:i:s'));	
	
	$predoplata = 1;
	$postoplata = 2;
	$oplata_poluchena = 1;
	$sale = 0;
	
			 
	$name = $data["name"]; 	
	$responsible_user_id = $data['responsible_user_id'];
	$pipeline_id = $data['pipeline_id'];
	$status_id = $data['status_id'];
 
	foreach ($data['custom_fields'] as $key => $value) { 
		foreach ($value as $sub_key => $sub_val) { 
			if (is_array($sub_val)) { 
				foreach ($sub_val as $sek_sub_key => $sek_sub_val) { 	
				  if (is_array($sek_sub_val)) { 
							foreach ($sek_sub_val as $k => $v) { 
							 
							   if($data['custom_fields'][$key]['id'] == 440965){
								   global $oplata_poluchena;
								   $oplata_poluchena = intval($v);
							   }
							   if($data['custom_fields'][$key]['id'] == 514667){
								   global $predoplata;
								   $predoplata = intval($v);
							   }
							   if($data['custom_fields'][$key]['id'] == 514669){
								   global $postoplata;
								   $postoplata = intval($v);
							   } 
							} 
						}
				} 
			}
		} 
	} 
	
		
    
    

	if ($oplata_poluchena == 1 && $predoplata != 0 && $postoplata != 0){
		global $sale;
		$sale = $predoplata + $postoplata;
		CostUpdate($id, $date_new, $name, $sale, $predoplata, $postoplata, $oplata_poluchena);
	    
	}

    #Функция CostUpdate выглядит так
    function CostUpdate($id, $date, $name, $sale, $pred, $post, $paid){
			//$this->echor("CostLead", $date.", ID: ".$id, "Name " .$name);
						
			$lead = array(
							'update' => 
									  array (
										    array(
												'id' => $id,
												'updated_at' => $date,											
												'name' => $name,
												'custom_fields' => array(
														array(
															'id'=> 440965,
															'values' => array(
															 array(
																	'value' => $paid
																),
															),
														),
														array(
															'id'=> 514667,
															'values' => array(
															 array(
																	'value' => $pred
																),
															),
														),
														array(
															'id'=> 514669,
															'values' => array(
															 array(
																	'value' => $post
																),
															),
														),	
														array(
															'id'=> 514689,
															'values' => array(
															 array(
																	'value' => $sale
																),
															),
														),	
												),
											   ), 
											),
			);
			/* Теперь подготовим данные, необходимые для запроса к серверу */
			// $subdomain='test'; #Наш аккаунт - поддомен
			#Формируем ссылку для запроса
			$link='https://'.$this->subdomain.'.amocrm.ru/api/v2/leads';
			/* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о
			работе с этой библиотекой Вы можете прочитать в мануале.*/
			$curl=curl_init(); #Сохраняем дескриптор сеанса cURL 
			#Устанавливаем необходимые опции для сеанса cURL
			curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
			curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-API-client/1.0');
			curl_setopt($curl,CURLOPT_URL,$link);
			curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
			curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($lead));
			curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));
			curl_setopt($curl,CURLOPT_HEADER,false);
			curl_setopt($curl,CURLOPT_COOKIEFILE, dirname(__FILE__)."/cookie_".$this->USER_LOGIN.".txt"); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
			curl_setopt($curl,CURLOPT_COOKIEJAR, dirname(__FILE__)."/cookie_".$this->USER_LOGIN.".txt"); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
			curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
			curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0);
			$out=curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
			$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);
			/* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
			$code=(int)$code;
			$errors=array(
			  301=>'Moved permanently',
			  400=>'Bad request',
			  401=>'Unauthorized',
			  403=>'Forbidden',
			  404=>'Not found',
			  500=>'Internal server error',
			  502=>'Bad gateway',
			  503=>'Service unavailable'
			);
			try
			{
			  #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
			 if($code!=200 && $code!=204) {
				throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undescribed error',$code);
			  }
			}
			catch(Exception $E)
			{
			  die('Ошибка: '.$E->getMessage().PHP_EOL.'Код ошибки: '.$E->getCode());
			}
			/*
			 Данные получаем в формате JSON, поэтому, для получения читаемых данных,
			 нам придётся перевести ответ в формат, понятный PHP
			 */
			$Response=json_decode($out,true);
			$Response=$Response['_embedded']['items'];
			return $Response;
		}

При таком подходе, который описал выше в сделке амоСРМ запускается процесс рекурсии постоянно прилетают обновления этих полей, но если делаю такой подход ниже

/* используя статичные данные для обновления custom_fields и отключив цикл foreach ниже, обновление происходит успешно без проблем */
        $predoplata = 1;
	$postoplata = 2;
	$oplata_poluchena = 1;
	$sale = 0;

      /* комментирую переборку ассоц.массива
       foreach ($data['custom_fields'] as $key => $value) { 
		foreach ($value as $sub_key => $sub_val) { 
			if (is_array($sub_val)) { 
				foreach ($sub_val as $sek_sub_key => $sek_sub_val) { 	
				  if (is_array($sek_sub_val)) { 
							foreach ($sek_sub_val as $k => $v) { 
							 
							   if($data['custom_fields'][$key]['id'] == 440965){
								   global $oplata_poluchena;
								   $oplata_poluchena = intval($v);
							   }
							   if($data['custom_fields'][$key]['id'] == 514667){
								   global $predoplata;
								   $predoplata = intval($v);
							   }
							   if($data['custom_fields'][$key]['id'] == 514669){
								   global $postoplata;
								   $postoplata = intval($v);
							   } 
							} 
						}
				} 
			}
		} 
	}  */

может кто сталкивался с этим, с чем связана такая работа или что делаю не так ?

Понравилась статья? Поделить с друзьями:
  • Altstore ошибка installation failed
  • Amd radeon hd 7670m код ошибки 43
  • Amocrm ошибка подключения перенастройте почтовый ящик
  • Altstore ошибка could not
  • Amocrm ошибка инициализации виджета