Авторизация приложения и запуск интеграции
Схема взаимодействия
Для предоставления возможности интеграции из интерфейса CRM-системы предусмотрен механизм серверной авторизации на базе протокола OAuth 2.0, позволяющий реализовать безопасную аутентификацию пользователей АТС через API виртуальной АТС и получить доступ к функциям АТС с сервера CRM-системы.
Процесс авторизации состоит из следующих шагов:
Открытие диалогового окна для аутентификации пользователя на API-сервере АТС.
Разрешение пользователем АТС доступа к своим данным.
Передача API-серверу АТС значения code для получения токена доступа с временем жизни.
Получение сервером CRM-системы токена доступа с временем жизни access_token для доступа к API АТС.
Создание постоянного доверенного приложения пользователю АТС.
Схематически данный процесс происходит следующим образом:
Аутентификация пользователя АТС на API-сервере АТС
Провайдер IP-телефонии по запросу интегратора создает приложение уровня дилера/администратора типа public (получение токена доступа возможно после авторизации пользователя на сервере АТС и получения кода авторизации), указывает URI перенаправления и передает интегратору App ID (идентификатор приложения) и App Secret (пароль приложения) этого приложения.
Для авторизации пользователя АТС необходимо перенаправить его во всплывающем окне в CRM-системе (или на отдельной страничке) на URI авторизации https://<hostname>/oauth/authorize, где hostname — hostname API-сервера провайдера IP-телефонии, передавая данные авторизации в качестве параметров GET-запроса в формате URL-encoded:
Параметр | Описание |
response_type | Тип ответа, всегда должен иметь значение code |
redirect_uri | URI, по которому API-сервер АТС будет посылать ответ. Должен совпадать с указанным при создании приложения типа public |
client_id | App ID, сгенерированный при создании приложения типа public |
scope | Сфера разрешений для приложения типа public, должен иметь значение all |
Пример:App ID a80f1e618ddd4d4584e2bd48fd404194
App Secret a2423941f5be408c998d5f7207570990
В качестве redirect_url использован https://your_site.com
Пользователь АТС нажимает в появившемся всплывающем окне на ссылку: https://<hostname>/oauth/authorize?response_type=code&client_id=a80f1e618ddd4d4584e2bd48fd404194&redirect_uri=https%3A%2F%2Fyour_site.com&scope=all
После нажатия на данную ссылку должно появиться всплывающее окно с запросом подтверждения доступа к данным пользователя АТС. Пользователь нажимает "Разрешить".
Получение токена доступа
Передача API-сервером АТС значения code для получения токена доступа с временем жизни
Если пользователь АТС разрешает доступ, API-сервер АТС перенаправляет его на redirect_uri приложения (your_site.com), передавая в качестве параметра запроса значение code (код для получения токена доступа) в виде https://your_site.com/cont/url?code=aIlsm1bCglDGvQKShmJAhHrBhDyshn .
Получение данного значения code (aIlsm1bCglDGvQKShmJAhHrBhDyshn) означает, что разрешен доступ к АТС и теперь возможно получить токен доступа с временем жизни и обновлять его.
Получение сервером CRM-системы токена доступа с временем жизни access_token для доступа к API АТС
Для получения токена доступа необходимо сделать POST-запрос с сервера CRM-системы на адрес https://<hostname>/oauth/token, используя полученный код. Параметры передаются в теле запроса в формате application/x-www-form-urlencoded:
Параметр | Описание |
---|---|
grant_type | Всегда должен иметь значение authorization_code |
code | Параметр code, полученный приложением типа public на предыдущем шаге |
redirect_uri | URI перенаправления. Должен совпадать с одним из указанных при создании приложения типа public |
client_id | App ID, сгенерированный при создании приложения типа public |
client_secret | App Secret, сгенерированный при создании приложения типа public |
Пример:
{
"grant_type": "authorization_code",
"code": "aIlsm1bCglDGvQKShmJAhHrBhDyshn",
"client_id": "a80f1e618ddd4d4584e2bd48fd404194",
"client_secret": "a2423941f5be408c998d5f7207570990",
"redirect_uri": "https://your_site.com"
}
API-сервер АТС отвечает приложению типа public. Параметры ответа:
Параметр | Описание |
---|---|
access_token | Токен доступа. Используется приложением типа public для API-запросов |
expires_in | Период времени в секундах, в течение которого токен действителен. Если в процессе использования токена возникла ошибка авторизации, рекомендуется запросить токен заново, даже если заявленное в поле expires_in время до истечения токена еще не прошло |
token_type | Тип токена. Всегда имеет значение Bearer |
refresh_token | Refresh token, который может быть использован для регенерации токена доступа, когда он стал недействителен |
В ответ на этот запрос сервер CRM-системы получит токен доступа, с которым можно создать на API-сервере АТС постоянное доверенное приложение типа trusted. Это приложение нужно, чтобы не приходилось повторно запрашивать доступ к аккаунту пользователя АТС, как это было описано выше. Приложение типа trusted получает токен доступа без авторизации пользователя на сервере АТС.
Создание постоянного доверенного приложения
Постоянное доверенное приложение типа trusted создается следующим образом. Например, ранее был получен токен доступа pyt4ZUcLWc2FP3t10OJUN2N4Xh2qes . Необходимо отправить запрос POST на адрес https://<hostname>/api/ver1.0/application/ c заголовками:'Content-type': 'application/json',
'Authorization': 'Bearer pyt4ZUcLWc2FP3t10OJUN2N4Xh2qes'
и телом запроса в формате JSON:
{
"name" : 'App_name',
"type": "trusted"
}
Получение токена доступа доверенным приложением
Для получения токена приложение должно сделать POST-запрос на URL https://<hostname>/oauth/token. Параметры передаются в теле запроса в формате application/x-www-form-urlencoded:
Параметр | Описание |
---|---|
grant_type | Всегда должен иметь значение client_credentials |
client_id | App ID, сгенерированный при создании приложения типа public |
client_secret | App Secret, сгенерированный при создании приложения типа public |
API-сервер АТС отвечает приложению. Параметры ответа:
Параметр | Описание |
access_token | Токен доступа. Используется приложением для API-запросов |
expires_in | Период времени в секундах, в течение которого токен действителен |
token_type | Тип токена всегда имеет значение Bearer |
Передача запросов с использованием токена доступа
Полученный токен доступа необходимо передавать в заголовке Authorization в формате "Bearer <access_token>" в каждом запроса к API. Пример заголовка:
Authorization: Bearer pyt4ZUcLWc2FP3t10OJUN2N4Xh2qes
Запросы к API будут выполняться от имени и с разрешениями пользователя АТС, предоставившего доступ приложению. Если в процессе использования токена возникла ошибка авторизации, рекомендуется запросить токен заново, даже если заявленное в поле expires_in время до истечения токена еще не прошло.
Пример запроса на получение информации об авторизованном пользователе АТС:
Ответ системы:
{
"admin": false,
"client_id": 12,
"dealer_id": null,
"extension_group_id": null,
"extension_id": null,
"id": 20,
"login": "client1"
}