Короткие ссылки

API для сокращения ссылок, которые отправляются контактам. Когда человек перейдет по ссылке в контакт добавиться примечание, о переходе на сайт. Так же, человеку прикрепится пиксель, по которому в дальнейшем может произойти автоматическое объединение чатов.

Для каждого контакта генерируется отдельная ссылка. То есть, если одну и ту же ссылку нужно отправить нескольким контактам, для каждого контакта нужно сгенерировать отдельную ссылку.

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

Генерация ссылок

Метод позволяет генерировать короткие ссылки по одной или пакетно (не более 500 за один запрос) Обязательно с каждым запросом передавать GET параметры USER_LOGIN и USER_HASH с логином и api ключем соответственно

URL метода
POST /api/v2/url_shortener/

Параметры

Параметр Тип Описание
url
require
string Ссылка для сокращения
properties array Свойства по которым формируется ссылка
properties/type
require
integer Тип свойства, на данный момент значение может быть только 1 - по id контакту
properties/contact_id
require
integer Id контакта, которому будет отправлена ссылка.

Приведём пример запроса на сокращение ссылок.

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

  1. [
  2.   {
  3.     "url" : "https:\/ \/www.yandex.ru" ,
  4.     "properties" : [
  5.       {
  6.         "type" : 1 ,
  7.         "contact_id" : 123
  8.       }
  9.     ]
  10.   } ,
  11.   {
  12.     "url" : "http:\/ \/www.google.ru" ,
  13.     "properties" : [
  14.       {
  15.         "type" : 1 ,
  16.         "contact_id" : 456
  17.       }
  18.     ]
  19.   }
  20. ]

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

Параметр Описание
_links Массив, содержащий информацию о запросе
_links/self Массив, содержащий информацию о текущем запросе
_links/self/href Относительный URL текущего запроса
_embedded Массив, содержащий информацию прилегающую к запросу
_embedded/items Массив, содержащий информацию по каждому отдельному элементу
_embedded/items/base_url Базовая ссылка, которая не связана с контактом, может использоваться просто для редиректа
_embedded/properties_url/url Ссылка, связанная с контактом, при переходе по которой, добавится примечание в карточку контакта
_embedded/properties_url/contact_id id контакта, к которому привязана ссылка
_embedded/properties_url/account_id id аккаунта

Response Headeres содержит следующие заголовки:

  • Content-Type:application/hal+json

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

  1. {
  2.     "_links" : {
  3.     "self" : {
  4.         "href" : "/api/v2/url_shortener"
  5.         }
  6.     } ,
  7.     "_embedded" : {
  8.     "items" : [
  9.             {
  10.                 "base_url" : "https://amo.sh/1" ,
  11.                 "properties_url" : [
  12.                     {
  13.                         "account_id" : 111 ,
  14.                         "contact_id" : 123 ,
  15.                         "url" : "https://amo.sh/1/2"
  16.                     }
  17.                 ]
  18.             } ,
  19.             {
  20.                 "base_url" : "https://amo.sh/2" ,
  21.                 "properties_url" : [
  22.                     {
  23.                         "account_id" : 111 ,
  24.                         "contact_id" : 456 ,
  25.                         "url" : "https://amo.sh/2/3"
  26.                     }
  27.                 ]
  28.             }
  29.         ]
  30.     }
  31. }

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

Для сокращения ссылки необходимо описать массив, содержащий информацию о id контакта и ссылки которую наждо сократить.

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