Запросы PUT и POST API Pipedrive для конечной точки фильтров не работают

Я пытаюсь получить предложения от API Pipedrive для определенного диапазона дат. Я выполняю это путем редактирования (или создания / удаления) фильтра через API с желаемым диапазоном дат, а затем передаю этот фильтр в последующем запросе, чтобы получить все сделки.

Конечная точка «сделок» работает отлично. Моя проблема в том, что API, похоже, не нравится параметр «условий», который я передаю для конечной точки «фильтров», — но только если я использую cURL (в своем собственном коде) или Postman. Если я проверяю конечные точки «edit filter» или «create filter» в документах API, они оба работают точно так, как предполагалось, когда я копирую и вставляю объект JSON из своего кода в параметр «rules». Однако, если я использую cURL или Postman, конечная точка PUT просто возвращает фильтр, который я редактирую, без редактирования, а конечная точка POST создает новый фильтр с пустыми условиями.

Вот код PHP, который я использую для конечной точки POST:

$data = [
'name' => 'Custom date range',
'type' => 'deals',
'conditions' => '{
"glue": "and",
"conditions": [
{
"glue": "and",
"conditions": [
{
"object": "deal",
"field_id": "12449",
"operator": "=",
"value": "won",
"extra_value": "null"},
{
"object": "deal",
"field_id": "12455",
"operator": ">=",
"value": "2017-03-01",
"extra_value": "null"},
{
"object": "deal",
"field_id": "12455",
"operator": "<=",
"value": "2017-03-10",
"extra_value": "null"}
]
},
{
"glue": "or",
"conditions": []
}
]
}'
];

$ch = curl_init("https://api.pipedrive.com/v1/filters?api_token=$apiKey");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json;"));
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($data));
$response = curl_exec($ch);

И это описание параметра «условиям» для конечной точки «создания фильтра»:

«Фильтровать условия как объект JSON. Требуется минимальная структура, как указано ниже:

{"glue":"and","conditions":[{"glue":"and","conditions": [CONDITION_OBJECTS]},{"glue":"or","conditions":[CONDITION_OBJECTS]}]}

Замените CONDITION_OBJECTS объектами JSON следующей структуры:

{"object":"","field_id":"", "operator":"","value":"", "extra_value":""} or leave the array empty.

В зависимости от типа объекта вы должны использовать другую конечную точку API для получения field_id. Вы можете выбрать один из пяти типов объектов:

"person", "deal", "organization", "product", "activity"

и вы можете использовать эти типы операторов в зависимости от того, какой тип поля у вас есть:

"IS NOT NULL", "IS NULL", "<=", ">=", "<", ">", "!=", "=", "LIKE '%$%'", "NOT LIKE '%$%'", "LIKE '$%'", "NOT LIKE '$%'", "LIKE '%$'", "NOT LIKE '%$'".

Чтобы лучше понять, как работают фильтры, попробуйте создать их прямо из приложения Pipedrive ».

Параметр «условия» конечной точки POST одинаков. Опять же, когда я вставляю этот большой объект JSON в тест API API, обе конечные точки работают отлично, но не в моем собственном коде. Любая помощь будет оценена.

Изменить: это ответ, который я получаю от cURL для конечной точки «создать фильтр»:

{#233 ▼
+"id": 60
+"name": "Custom date range"+"active_flag": true
+"type": "deals"+"temporary_flag": null
+"user_id": 504569
+"add_time": "2017-04-19 11:18:10"+"update_time": "2017-04-19 11:18:10"+"visible_to": "7"+"custom_view_id": null
+"conditions": {#219 ▼
+"glue": "and"+"conditions": array:2 [▼
0 => {#230 ▼
+"glue": "and"+"conditions": []
}
1 => {#223 ▼
+"glue": "or"+"conditions": []
}
]
}
}

Ошибок нет, но, как видите, условия пусты. Я также попробовал PHP-оболочку, созданную для Pipedrive API, и получаю тот же результат.

0

Решение

Инженер Pipedrive здесь. Вот пример, который я проверял ..

<?php
$data = '
{
"name":"Custom filter less than 1000",
"type":"deals",
"visible_to":1,
"conditions":{
"glue": "and",
"conditions":[
{
"glue": "and",
"conditions": [
{
"object": "deal",
"field_id": "12452",
"operator": "<",
"value": 1000,
"extra_value": null
}
]
},
{
"glue": "or",
"conditions": []
}
]
}
}
';

$ch = curl_init("https://api.pipedrive.com/v1/filters?api_token=xxx");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json;', 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST,           1 );
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);

echo $response;

Заметить, что

  1. Весь JSON необработан
  2. Я добавил заголовок Content-Type
  3. Я добавил visible_to param

API фильтрации довольно сложен, и мы работаем над улучшением документации. Надеюсь это поможет

2

Другие решения

Чтобы вытащить предложения, вы должны использовать GET метод. POST используется для добавления сделок.

+ Изменить CURL от POST в GET метод, и это должно работать.

0

По вопросам рекламы [email protected]