Воронки и этапы продаж

Добавление и обновление воронок и этапов продаж

Этапы продаж – это последовательность шагов, которые проходит потенциальный клиент (лид) по воронке продаж перед покупкой. В amoCRM можно создавать несколько воронок продаж в одном аккаунте и задавать свои этапы для отслеживания хода сделки в каждой воронке. В amoCRM можно настроить до 10-и воронок в аккаунте. Каждая воронка может содержать до 100 этапов (включая успешный и неуспешный статусы). Настроить воронки и этапы продаж может администратор аккаунт на странице Настройки->Этапы продаж.

Методы для работы с настройками этапов продаж аккаунта. Эти методы доступны только администратору аккаунта. Метод позволяет добавлять воронки и этапы продаж по одному или пакетно, а также обновлять данные по уже существующим воронкам и этапам. При изменении воронки необходимо передать полный список этапов, включая уже существующие.

URL метода
POST /private/api/v2/json/pipelines/set

Параметры

Параметр Тип Описание
add array Список добавляемых воронок, если возникнет ошибка, то этот ключ будет указан в описании к ошибке
update array Обновление существующей воронки
Все параметры, которые описаны в add действуют также и в update
add/name
require
string Имя воронки
add/sort int Порядковый номер воронки при отображении
add/is_main string Является ли воронка "главной" (необходимо передать значение "on", если является)
add/statuses array Этапы воронки, необходимо передать хотя бы один этап, кроме успешно/неуспешно завершенного.
В качестве ключа необходимо передать идентификатор этапа, если он существует. Для этапов успешно/неуспешно завершенно (id 142/143 соответственно) возможно передать только поле name
add/statuses// array Внутри него будет описание каждого этапа
add/statuses//name string Название этапа
add/statuses//sort int Порядковый номер этапа при отображении (автоматически пересчитывается после добавления)
add/statuses//color string Цвет этапа (подробнее можно узнать здесь)
update/id
require
int Уникальный идентификатор воронки, который указывается с целью её обновления
update/statuses//id
require
int Уникальный идентификатор этапа, который указывается с целью её обновления

Пример запроса

  1. {
  2.   "request" : {
  3.     "pipelines" : {
  4.       "add" : [
  5.         {
  6.           "name" : "Test Pipeline" ,
  7.           "statuses" : {
  8.             "0" : {
  9.               "color" : "#fffeb2" ,
  10.               "name" : "Status #0" ,
  11.               "sort" : 0
  12.             } ,
  13.             "1" : {
  14.               "color" : "#fffeb2" ,
  15.               "name" : "Status #1" ,
  16.               "sort" : 10
  17.             } ,
  18.             "2" : {
  19.               "color" : "#d6eaff" ,
  20.               "name" : "Status #2" ,
  21.               "sort" : 20
  22.             } ,
  23.             "3" : {
  24.               "color" : "#f3beff" ,
  25.               "name" : "Status #3" ,
  26.               "sort" : 30
  27.             } ,
  28.             "142" : {
  29.               "name" : "Success"
  30.             } ,
  31.             "143" : {
  32.               "name" : "Failed"
  33.             }
  34.           } ,
  35.           "is_main" : "false"
  36.         }
  37.       ]
  38.     } ,
  39.     "update" : {
  40.       "2521" : {
  41.         "id" : 2521 ,
  42.         "name" : "Retest Pipeline" ,
  43.         "sort" : 12 ,
  44.         "is_main" : "on" ,
  45.         "statuses" : {
  46.           "10223179" : {
  47.             "id" : 10223179 ,
  48.             "name" : "Status #0" ,
  49.             "sort" : 10 ,
  50.             "color" : "#fffeb2"
  51.           } ,
  52.           "10223183" : {
  53.             "id" : 10223183 ,
  54.             "name" : "Status #4" ,
  55.             "sort" : 50 ,
  56.             "color" : "#deff81"
  57.           } ,
  58.           "10223184" : {
  59.             "id" : 10223184 ,
  60.             "name" : "Status #5" ,
  61.             "sort" : 60 ,
  62.             "color" : "#d6eaff"
  63.           } ,
  64.           "10223185" : {
  65.             "id" : 10223185 ,
  66.             "name" : "Status #6" ,
  67.             "sort" : 70 ,
  68.             "color" : "#fffd7f"
  69.           }
  70.         }
  71.       }
  72.     }
  73.   }
  74. }

Параметры ответа

Параметр Описание
add/pipelines//id Уникальный идентификатор воронки
add/pipelines//value Уникальный идентификатор воронки
add/pipelines//label Название воронки
add/pipelines//name Название воронки
add/pipelines//sort Порядковый номер воронки при отображении
add/pipelines//is_main Является ли воронка "главной"
add/pipelines//statuses//id Уникальный идентификатор этапа
add/pipelines//statuses//name Название этапа
add/pipelines//statuses//pipeline_id Уникальный идентификатор воронки
add/pipelines//statuses//sort Порядковый номер этапа при отображении
add/pipelines//statuses//color Цвет этапа (подробнее можно узнать здесь)
add/pipelines//statuses//editable Есть ли возможность изменить или удалить этот этап, возможные значения: "Y" или "N"
add/pipelines//leads Количество сделок, находящихся в этой воронке
update// Ассоциативный массив, где ключ - ID воронки, а значение - удалось ли применить изменение к воронке с этим идентификатором
server_time Временная метка текущего серверного времени со смещением на часовой пояс аккаунта (передается в формате timestamp)

Пример ответа

  1. {
  2.   "response" : {
  3.     "pipelines" : {
  4.       "add" : {
  5.         "pipelines" : {
  6.           "2116" : {
  7.             "id" : 2116 ,
  8.             "value" : 2116 ,
  9.             "label" : "Pipeline" ,
  10.             "name" : "Pipeline" ,
  11.             "sort" : 1 ,
  12.             "is_main" : true ,
  13.             "statuses" : {
  14.               "142" : {
  15.                 "id" : 142 ,
  16.                 "name" : "Closed - won" ,
  17.                 "color" : "#CCFF66" ,
  18.                 "sort" : 10000 ,
  19.                 "editable" : "N" ,
  20.                 "pipeline_id" : 2116
  21.               } ,
  22.               "143" : {
  23.                 "id" : 143 ,
  24.                 "name" : "Closed - lost" ,
  25.                 "color" : "#D5D8DB" ,
  26.                 "sort" : 11000 ,
  27.                 "editable" : "N" ,
  28.                 "pipeline_id" : 2116
  29.               } ,
  30.               "10216993" : {
  31.                 "id" : 10216993 ,
  32.                 "name" : "Initial Contact" ,
  33.                 "pipeline_id" : 2116 ,
  34.                 "sort" : 10 ,
  35.                 "color" : "#99ccff" ,
  36.                 "editable" : "Y"
  37.               } ,
  38.               "10216994" : {
  39.                 "id" : 10216994 ,
  40.                 "name" : "Offer made" ,
  41.                 "pipeline_id" : 2116 ,
  42.                 "sort" : 20 ,
  43.                 "color" : "#ffff99" ,
  44.                 "editable" : "Y"
  45.               } ,
  46.               "10216995" : {
  47.                 "id" : 10216995 ,
  48.                 "name" : "Negotiation" ,
  49.                 "pipeline_id" : 2116 ,
  50.                 "sort" : 30 ,
  51.                 "color" : "#ffcc66" ,
  52.                 "editable" : "Y"
  53.               } ,
  54.               "10216996" : {
  55.                 "id" : 10216996 ,
  56.                 "name" : "Contract Negotiation" ,
  57.                 "pipeline_id" : 2116 ,
  58.                 "sort" : 40 ,
  59.                 "color" : "#ffcccc" ,
  60.                 "editable" : "Y"
  61.               }
  62.             } ,
  63.             "leads" : 14
  64.           }
  65.         }
  66.       } ,
  67.     "update" : {
  68.       "2521" : true
  69.     }
  70.     }
  71.   }
  72. }

Добавление воронки

Для добавления воронки необходимо описать массив, содержащий информацию о воронке и поместить его в массив следующего вида: $pipelines['request']['pipelines']['add'] Наше API также поддерживает одновременное добавление сразу нескольких воронок. Для этого мы помещаем в массив $pipelines['request']['pipelines']['add'] несколько массивов, каждый из которых описывает необходимые данные для создания соответствующей воронки.

Пример интеграции

  1. $pipelines [ 'request' ] [ 'pipelines' ] [ 'add' ] = array (
  2.     'name'     => 'Test Pipeline' ,
  3.     'statuses' => array (
  4.       array (
  5.         'color' => '#deff81' ,
  6.         'name'  => 'Status #0' ,
  7.         'sort'  => 0 ,
  8.       ) ,
  9.       array (
  10.         'color' => '#ffeab2' ,
  11.         'name'  => 'Status #1' ,
  12.         'sort'  => 10 ,
  13.       ) ,
  14.       array (
  15.         'color' => '#ffdc7f' ,
  16.         'name'  => 'Status #2' ,
  17.         'sort'  => 20 ,
  18.       ) ,
  19.       array (
  20.         'color' => '#deff81' ,
  21.         'name'  => 'Status #3' ,
  22.         'sort'  => 30 ,
  23.       ) ,
  24.       array (
  25.         'color' => '#ebffb1' ,
  26.         'name'  => 'Status #4' ,
  27.         'sort'  => 40 ,
  28.       ) ,
  29.       array (
  30.         'color' => '#fffeb2' ,
  31.         'name'  => 'Status #5' ,
  32.         'sort'  => 50 ,
  33.       ) ,
  34.       array (
  35.         'color' => '#ffc8c8' ,
  36.         'name'  => 'Status #6' ,
  37.         'sort'  => 60 ,
  38.       ) ,
  39.       array (
  40.         'color' => '#c1e0ff' ,
  41.         'name'  => 'Status #7' ,
  42.         'sort'  => 70 ,
  43.       ) ,
  44.       array (
  45.         'color' => '#f3beff' ,
  46.         'name'  => 'Status #8' ,
  47.         'sort'  => 80 ,
  48.       ) ,
  49.       array (
  50.         'color' => '#ccc8f9' ,
  51.         'name'  => 'Status #9' ,
  52.         'sort'  => 90 ,
  53.       ) ,
  54.     ) ,
  55.     'is_main'  => 'on' ,
  56.   ) ,
  57. ) ;
  58. /* Теперь подготовим данные, необходимые для запроса к серверу */
  59. $subdomain = 'test' ; #Наш аккаунт - поддомен
  60. #Формируем ссылку для запроса
  61. $link = 'https://' . $subdomain . '.amocrm.ru/private/api/v2/json/pipelines/set' ;
  62. /* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о
  63. работе с этой
  64. библиотекой Вы можете прочитать в мануале. */
  65. $curl = curl_init ( ) ; #Сохраняем дескриптор сеанса cURL
  66. #Устанавливаем необходимые опции для сеанса cURL
  67. curl_setopt ( $curl ,CURLOPT_RETURNTRANSFER, true ) ;
  68. curl_setopt ( $curl ,CURLOPT_USERAGENT, 'amoCRM-API-client/1.0' ) ;
  69. curl_setopt ( $curl ,CURLOPT_URL, $link ) ;
  70. curl_setopt ( $curl ,CURLOPT_CUSTOMREQUEST, 'POST' ) ;
  71. curl_setopt ( $curl ,CURLOPT_POSTFIELDS, json_encode ( $pipelines ) ) ;
  72. curl_setopt ( $curl ,CURLOPT_HTTPHEADER, array ( 'Content-Type: application/json' ) ) ;
  73. curl_setopt ( $curl ,CURLOPT_HEADER, false ) ;
  74. curl_setopt ( $curl ,CURLOPT_COOKIEFILE, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  75. curl_setopt ( $curl ,CURLOPT_COOKIEJAR, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  76. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYPEER, 0 ) ;
  77. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYHOST, 0 ) ;
  78. $out = curl_exec ( $curl ) ; #Инициируем запрос к API и сохраняем ответ в переменную
  79. $code = curl_getinfo ( $curl ,CURLINFO_HTTP_CODE) ;
  80. /* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  81. $code = (int) $code ;
  82. $errors = array (
  83.   301 => 'Moved permanently' ,
  84.   400 => 'Bad request' ,
  85.   401 => 'Unauthorized' ,
  86.   403 => 'Forbidden' ,
  87.   404 => 'Not found' ,
  88.   500 => 'Internal server error' ,
  89.   502 => 'Bad gateway' ,
  90.   503 => 'Service unavailable'
  91. ) ;
  92. try
  93. {
  94.   #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
  95.  if ( $code != 200 && $code != 204 )
  96.     throw new Exception( isset ( $errors [ $code ] ) ? $errors [ $code ] : 'Undescribed error' , $code ) ;
  97. }
  98. catch(Exception $E )
  99. {
  100.   die ( 'Ошибка: ' . $E -> getMessage ( ) .PHP_EOL. 'Код ошибки: ' . $E -> getCode ( ) ) ;
  101. }
  102.  
  103. /**
  104.  * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
  105.  * нам придётся перевести ответ в формат, понятный PHP
  106.  */
  107. $Response = json_decode ( $out , true ) ;
  108. $Response = $Response [ 'response' ] [ 'pipelines' ] [ 'add' ] ;
  109. $output = 'ID добавленных воронок:' .PHP_EOL;
  110. $output .= implode (PHP_EOL, array_keys ( $Response ) ) ;
  111. return $output ;

Обновление воронок

Для обновления информации о воронке необходимо описать массив, содержащий информацию о воронке и поместить его в массив следующего вида: $pipelines['request']['pipelines']['update'] Наше API также поддерживает одновременное обновление сразу нескольких воронок. Для этого мы помещаем в массив $pipelines['request']['pipelines']['update'] несколько массивов, каждый из которых описывает необходимые данные для обновления соответствующей воронки.

Пример интеграции

  1. $pipelines [ 'request' ] [ 'pipelines' ] [ 'update' ] = array (
  2.   2116 => array (
  3.     'id'       => 2116 ,
  4.     'name'     => 'Renamed Pipeline' ,
  5.     'sort'     => 1 ,
  6.     'is_main'  => FALSE ,
  7.     'statuses' => array (
  8.       10216993 => array (
  9.         'id'          => 10216993 ,
  10.         'name'        => 'Initial Contact' ,
  11.         'sort'        => 10 ,
  12.         'color'       => '#99ccff' ,
  13.       ) ,
  14.       10216994 => array (
  15.         'id'          => 10216994 ,
  16.         'name'        => 'Offer made' ,
  17.         'sort'        => 20 ,
  18.         'color'       => '#ffff99' ,
  19.       ) ,
  20.       10216995 => array (
  21.         'id'          => 10216995 ,
  22.         'name'        => 'Negotiation' ,
  23.         'sort'        => 30 ,
  24.         'color'       => '#ffcc66' ,
  25.       ) ,
  26.       array (
  27.         'name'        => 'New status#1' ,
  28.         'sort'        => 40 ,
  29.         'color'       => '#ffff99' ,
  30.       ) ,
  31.       array (
  32.         'name'        => 'New status#2' ,
  33.         'sort'        => 50 ,
  34.         'color'       => '#99ccff' ,
  35.       ) ,
  36.       array (
  37.         'name'        => 'New status#3' ,
  38.         'sort'        => 60 ,
  39.         'color'       => '#ffcccc' ,
  40.       ) ,
  41.       142      => array (
  42.         'name'        => 'Closed_won' ,
  43.       ) ,
  44.       143      => array (
  45.         'name'        => 'Closed_lost' ,
  46.       ) ,
  47.     ) ,
  48.     'leads'    => 14 ,
  49.   ) ,
  50. ) ;
  51. /* Теперь подготовим данные, необходимые для запроса к серверу */
  52. $subdomain = 'test' ; #Наш аккаунт - поддомен
  53. #Формируем ссылку для запроса
  54. $link = 'https://' . $subdomain . '.amocrm.ru/private/api/v2/json/pipelines/set' ;
  55. /* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о
  56. работе с этой
  57. библиотекой Вы можете прочитать в мануале. */
  58. $curl = curl_init ( ) ; #Сохраняем дескриптор сеанса cURL
  59. #Устанавливаем необходимые опции для сеанса cURL
  60. curl_setopt ( $curl ,CURLOPT_RETURNTRANSFER, true ) ;
  61. curl_setopt ( $curl ,CURLOPT_USERAGENT, 'amoCRM-API-client/1.0' ) ;
  62. curl_setopt ( $curl ,CURLOPT_URL, $link ) ;
  63. curl_setopt ( $curl ,CURLOPT_CUSTOMREQUEST, 'POST' ) ;
  64. curl_setopt ( $curl ,CURLOPT_POSTFIELDS, json_encode ( $pipelines ) ) ;
  65. curl_setopt ( $curl ,CURLOPT_HTTPHEADER, array ( 'Content-Type: application/json' ) ) ;
  66. curl_setopt ( $curl ,CURLOPT_HEADER, false ) ;
  67. curl_setopt ( $curl ,CURLOPT_COOKIEFILE, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  68. curl_setopt ( $curl ,CURLOPT_COOKIEJAR, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  69. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYPEER, 0 ) ;
  70. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYHOST, 0 ) ;
  71. $out = curl_exec ( $curl ) ; #Инициируем запрос к API и сохраняем ответ в переменную
  72. $code = curl_getinfo ( $curl ,CURLINFO_HTTP_CODE) ;
  73. /* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  74. $code = (int) $code ;
  75. $errors = array (
  76.   301 => 'Moved permanently' ,
  77.   400 => 'Bad request' ,
  78.   401 => 'Unauthorized' ,
  79.   403 => 'Forbidden' ,
  80.   404 => 'Not found' ,
  81.   500 => 'Internal server error' ,
  82.   502 => 'Bad gateway' ,
  83.   503 => 'Service unavailable'
  84. ) ;
  85. try
  86. {
  87.   #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
  88.  if ( $code != 200 && $code != 204 )
  89.     throw new Exception( isset ( $errors [ $code ] ) ? $errors [ $code ] : 'Undescribed error' , $code ) ;
  90. }
  91. catch(Exception $E )
  92. {
  93.   die ( 'Ошибка: ' . $E -> getMessage ( ) .PHP_EOL. 'Код ошибки: ' . $E -> getCode ( ) ) ;
  94. }

Удаление воронок

Метод позволяет удалять воронки по одной или пакетно.

Удаление одной воронки в аккаунте невозможно, при удалении последней воронки выдается ошибка "Impossible to delete last pipeline"

URL метода
POST /private/api/v2/json/pipelines/delete

Параметры

Параметр Тип Описание
id array ID воронок, которые необходимо удалить. Можно передать как единственное число, так и массив чисел.

Пример запроса

  1. { "request" : { "id" : 123 } }
  2. { "request" : { "id" : [ 123 , 456 ] } }

Параметры ответа

Параметр Описание
response// Ассоциативный массив, где ключом является id воронки, а значением - удалось ли удалить воронку
response//errors Если удалить воронку не удалось, то здесь будет написана причина.
server_time Временная метка текущего серверного времени со смещением на часовой пояс аккаунта (передается в формате timestamp)

Пример ответа

  1. {
  2.   "response" : {
  3.     123 : true ,
  4.     456 : { "errors" : "Impossible to delete last pipeline" }
  5.   }
  6. }

Удаление воронки

Для удаления воронки необходимо описать массив, содержащий идентификатор(ы) удаляемой воронки и поместить его в массив вида: $pipelines['request']['id']

Пример интеграции

  1. $pipelines [ 'request' ] [ 'id' ] = array ( 123 ) ;
  2. /* Теперь подготовим данные, необходимые для запроса к серверу */
  3. $subdomain = 'test' ; #Наш аккаунт - поддомен
  4. #Формируем ссылку для запроса
  5. $link = 'https://' . $subdomain . '.amocrm.ru/private/api/v2/json/pipelines/delete' ;
  6. /* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о
  7. работе с этой
  8. библиотекой Вы можете прочитать в мануале. */
  9. $curl = curl_init ( ) ; #Сохраняем дескриптор сеанса cURL
  10. #Устанавливаем необходимые опции для сеанса cURL
  11. curl_setopt ( $curl ,CURLOPT_RETURNTRANSFER, true ) ;
  12. curl_setopt ( $curl ,CURLOPT_USERAGENT, 'amoCRM-API-client/1.0' ) ;
  13. curl_setopt ( $curl ,CURLOPT_URL, $link ) ;
  14. curl_setopt ( $curl ,CURLOPT_CUSTOMREQUEST, 'POST' ) ;
  15. curl_setopt ( $curl ,CURLOPT_POSTFIELDS, json_encode ( $pipelines ) ) ;
  16. curl_setopt ( $curl ,CURLOPT_HTTPHEADER, array ( 'Content-Type: application/json' ) ) ;
  17. curl_setopt ( $curl ,CURLOPT_HEADER, false ) ;
  18. curl_setopt ( $curl ,CURLOPT_COOKIEFILE, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  19. curl_setopt ( $curl ,CURLOPT_COOKIEJAR, dirname ( __FILE__ ) . '/cookie.txt' ) ; #PHP>5.3.6 dirname(__FILE__) -> __DIR__
  20. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYPEER, 0 ) ;
  21. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYHOST, 0 ) ;
  22. $out = curl_exec ( $curl ) ; #Инициируем запрос к API и сохраняем ответ в переменную
  23. $code = curl_getinfo ( $curl ,CURLINFO_HTTP_CODE) ;
  24. /* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  25. $code = (int) $code ;
  26. $errors = array (
  27.   301 => 'Moved permanently' ,
  28.   400 => 'Bad request' ,
  29.   401 => 'Unauthorized' ,
  30.   403 => 'Forbidden' ,
  31.   404 => 'Not found' ,
  32.   500 => 'Internal server error' ,
  33.   502 => 'Bad gateway' ,
  34.   503 => 'Service unavailable'
  35. ) ;
  36. try
  37. {
  38.   #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
  39.  if ( $code != 200 && $code != 204 )
  40.     throw new Exception( isset ( $errors [ $code ] ) ? $errors [ $code ] : 'Undescribed error' , $code ) ;
  41. }
  42. catch(Exception $E )
  43. {
  44.   die ( 'Ошибка: ' . $E -> getMessage ( ) .PHP_EOL. 'Код ошибки: ' . $E -> getCode ( ) ) ;
  45. }
  46. /**
  47.  * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
  48.  * нам придётся перевести ответ в формат, понятный PHP
  49.  */
  50. $Response = json_decode ( $out , true ) ;
  51. $Response = $Response [ 'response' ] ;
  52. $output = 'Результат запроса:' . PHP_EOL;
  53. foreach ( $Response as $pipeline_id => $result ) {
  54.   if ( isset ( $result [ 'errors' ] ) ) {
  55.     $output .= 'Воронка "' . $pipeline_id . '" не удалена, причина: "' . $result [ 'errors' ] . '"' . PHP_EOL;
  56.   } else {
  57.     $output .= 'Воронка "' . $pipeline_id . '" удалена' . PHP_EOL;
  58.   }
  59. }
  60. return $output ;

Список воронок и этапов продаж

Метод для получения списка воронок и этапов продаж.

URL метода
GET /api/v2/pipelines

Параметры GET

Параметр Описание
id Выбрать воронку с заданным ID

Параметры ответа

Параметр Тип Описание
id int Уникальный идентификатор воронки
name string Название воронки
sort int Порядковый номер воронки при отображении
is_main bool Является ли воронка "главной"
statuses array Массив содержащий информацию о этапах продаж
statuses//id int Уникальный идентификатор этапа
statuses//name string Название этапа
statuses//color string Цвет этапа
statuses//sort int Порядковый номер этапа при отображении
statuses//is_editable bool Есть ли возможность изменить или удалить этот этап
_links array Массив содержащий информацию о запросе
_links/self array Массив содержащий информацию о текущем запросе
_links/self/href string Относительный URL текущего запроса
_links/self/method string Метод текущего запроса
_embedded array Массив содержащий информацию прилегающую к запросу
_embedded/items array Массив содержащий информацию по каждому отдельному элементу

Цвета этапов продаж

Код Пример
#fffeb2 color example
#fffd7f color example
#fff000 color example
#ffeab2 color example
#ffdc7f color example
#ffce5a color example
#ffdbdb color example
#ffc8c8 color example
#ff8f92 color example
#d6eaff color example
#c1e0ff color example
#98cbff color example
#ebffb1 color example
#deff81 color example
#87f2c0 color example
#f9deff color example
#f3beff color example
#ccc8f9 color example
#eb93ff color example
#f2f3f4 color example
#e6e8ea color example

Пример ответа

  1. {
  2.    _links: {
  3.       self: {
  4.          href: "/api/v2/pipelines" ,
  5.          method: "get"
  6.       }
  7.    } ,
  8.    _embedded: {
  9.       items: {
  10.          10104 : {
  11.             id: 10104 ,
  12.             name: "Воронка" ,
  13.             sort: 1 ,
  14.             is_main: true ,
  15.             statuses: {
  16.                142 : {
  17.                   id: 142 ,
  18.                   name: "Успешно реализовано" ,
  19.                   color: "#CCFF66" ,
  20.                   sort: 10000 ,
  21.                   is_editable: false
  22.                } ,
  23.                143 : {
  24.                   id: 143 ,
  25.                   name: "Закрыто и не реализовано" ,
  26.                   color: "#D5D8DB" ,
  27.                   sort: 11000 ,
  28.                   is_editable: false
  29.                } ,
  30.                13667501 : {
  31.                   id: 13667501 ,
  32.                   name: "Первичный контакт" ,
  33.                   color: "#99ccff" ,
  34.                   sort: 10 ,
  35.                   is_editable: true
  36.                } ,
  37.                13667502 : {
  38.                   id: 13667502 ,
  39.                   name: "Переговоры" ,
  40.                   color: "#ffff99" ,
  41.                   sort: 20 ,
  42.                   is_editable: true
  43.                } ,
  44.                13667503 : {
  45.                   id: 13667503 ,
  46.                   name: "Принимают решение" ,
  47.                   color: "#ffcc66" ,
  48.                   sort: 30 ,
  49.                   is_editable: true
  50.                } ,
  51.                13667504 : {
  52.                   id: 13667504 ,
  53.                   name: "Согласование договора" ,
  54.                   color: "#ffcccc" ,
  55.                   sort: 40 ,
  56.                   is_editable: true
  57.                }
  58.             }
  59.          }
  60.       }
  61.    }
  62. }

Пример интеграции

  1. $subdomain = 'test' ; #Наш аккаунт - поддомен
  2. #Формируем ссылку для запроса
  3. $link = 'https://' . $subdomain . '.amocrm.ru/api/v2/pipelines' ;
  4. /* Нам необходимо инициировать запрос к серверу. Воспользуемся библиотекой cURL (поставляется в составе PHP). Подробнее о
  5. работе с этой
  6. библиотекой Вы можете прочитать в мануале. */
  7. $curl = curl_init ( ) ; #Сохраняем дескриптор сеанса cURL
  8. #Устанавливаем необходимые опции для сеанса cURL
  9. curl_setopt ( $curl ,CURLOPT_RETURNTRANSFER, true ) ;
  10. curl_setopt ( $curl ,CURLOPT_USERAGENT, 'amoCRM-API-client/1.0' ) ;
  11. curl_setopt ( $curl ,CURLOPT_HTTPHEADER, [ 'Accept: application/json' ] ) ;
  12. curl_setopt ( $curl ,CURLOPT_URL, $link ) ;
  13. curl_setopt ( $curl ,CURLOPT_HEADER, false ) ;
  14. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYPEER, 0 ) ;
  15. curl_setopt ( $curl ,CURLOPT_SSL_VERIFYHOST, 0 ) ;
  16. $out = curl_exec ( $curl ) ; #Инициируем запрос к API и сохраняем ответ в переменную
  17. $code = curl_getinfo ( $curl ,CURLINFO_HTTP_CODE) ;
  18. curl_close ( $curl ) ;
  19. /* Теперь мы можем обработать ответ, полученный от сервера. Это пример. Вы можете обработать данные своим способом. */
  20. $code = (int) $code ;
  21. $errors = array (
  22.   301 => 'Moved permanently' ,
  23.   400 => 'Bad request' ,
  24.   401 => 'Unauthorized' ,
  25.   403 => 'Forbidden' ,
  26.   404 => 'Not found' ,
  27.   500 => 'Internal server error' ,
  28.   502 => 'Bad gateway' ,
  29.   503 => 'Service unavailable'
  30. ) ;
  31. try
  32. {
  33.   #Если код ответа не равен 200 или 204 - возвращаем сообщение об ошибке
  34.  if ( $code != 200 && $code != 204 )
  35.     throw new Exception( isset ( $errors [ $code ] ) ? $errors [ $code ] : 'Undescribed error' , $code ) ;
  36. }
  37. catch(Exception $E )
  38. {
  39.   die ( 'Ошибка: ' . $E -> getMessage ( ) .PHP_EOL. 'Код ошибки: ' . $E -> getCode ( ) ) ;
  40. }
  41. /**
  42.  * Данные получаем в формате JSON, поэтому, для получения читаемых данных,
  43.  * нам придётся перевести ответ в формат, понятный PHP
  44.  */
  45. $Response = json_decode ( $out , true ) ;
  46. $Response = $Response [ '_embedded' ] [ 'items' ] ;