API RingCloud, всё только начинается
Когда мы только планировали свой сервис, мы ставили перед собой цели сделать его максимально удобным для интеграции, а такие задачи без достойного API не решить. По этому решили уделить данном сервису как можно больше внимания, построив его максимально надёжным и удобным.
Управление ключами API
Для использования API Вам потребуется уникальный API Key и пароль к нему, для этого идём в свой личный кабинет и в соответствующем разделе создаём ключик
Ключ генерируется автоматически, он состоит из префикса с номером вашего аккаунта и телом самого ключа, для того чтобы скопировать ключ необходимо просто кликнуть ЛКМ на строку с ключём. Пароль так же генерируется автоматически и для его изменения, если он вам покажется слишком простым, нужно нажать на иконку справа. Для каждого ключа необходимо указать права доступа, это сделано для разграничения полномочий между вашими приложениями. Уровни доступа работают по принципу "RO/RW" и позволяют разграничить разрешённые действия.
Описание функций RingCloud API, доступных на данный момент, вы сможете получить на странице документации
Архитектура
Данный сервис построен по принципу кластера, с балансировкой нагрузки между нодами обрабатывающими запросы. Так как сервис использует HTTPS, то было решено сместить эту задачу на балансировщик. Ноды, обработав запросы, обращаются к ядру системы включающему в себя сервера VoIP, БД, и cache основанный на Redis.
Надо сказать, что Redis у нас очень широко используется во всех узлах RingCloud, мы им очень довольны в плане удобства и быстродействия.
В качестве балансировщика и серверов WEB интерфейса мы используем Nginx так как он нас полностью устроил по функционалу и производительности, на нём прекрасно реализован функционал балансировки, он отлично работает с HTTPS, обладает очень удобной конфигурацией.
Примеры использования
Наше API мы разрабатываем опираясь на REST методологию, чтобы максимально упростить использование.
Давайте рассмотрим принцип формирования запроса. Все url-адреса API имеют вид:
https://api.ringcloud.ru/<>?api_key=API_KEY&hash=H...
здесь:
- url – адрес, соответствующий вызываемой функции API
- api_key – ключ API
- hash – хэш - вычисляется как md5 от ключа API и пароля
В случае успешного выполнения любого запроса (за исключением загрузки файла записи разговора – в этом случае будет возвращен непосредственно сам файл) ответ от сервера имеет вид:
{"status": "success", "message": null, "data": "some_data"}
В случае возникновения ошибки (кроме ошибки при загрузке файла записи разговора – в этом случае будет возвращена пустая строка) ответ от сервера имеет вид:
{"status": "error", "message": "some_error", "data": null}
Каждый ответ от сервера содержит код состояния HTTP. В таблице ниже приведены наиболее часто используемые из них.
Наиболее часто используемые коды состояния
На данный момент возможна работа с двумя объектами (ресурсами в терминологии REST): «Пользователи» и «Вызовы». С помощью первого можно создавать пользователей, получать о них информацию и изменять их данные. Второй объект предназначен для работы со звонками. С его помощью можно совершить звонок, а также получить информацию об активных и совершенных вызовах. Далее, существуют определенные ограничения на частоту обращений к нашему API. Давайте поясним используемую нами модель. Во-первых, ограничения считаются отдельно для каждого ключа. Во-вторых, в рамках одного ключа существуют ограничения на однотипные запросы, т.е. запросы с полностью одинаковыми URL-адресами. Например, если у Вас есть только один ключ API, и Вы отправляете в минуту два запроса на изменение внутреннего номера у одного и того же пользователя, то успешно отработает только первый запрос. А вот изменить внутренние номера у двух разных пользователей вполне возможно.
Функции объекта «Пользователи» и временные ограничения
Функции объекта «Вызовы» и временные ограничения
Как работает оригинация вызова
Для того чтобы сделать звонок на потребуется сотрудник который подключился по SIP к серверу RingCloud с помощью "софтфона" или стационарного SIP телефона, и номер на который будем звонить. При отправке запроса в API система сначала вызывает сотрудника (назовём его абонент А), а затем, только когда сотрудник ответил, набирает номер на который мы планируем совершить звонок, таким образом мы оригинируем вызов между абонентом А и абонентом Б
Рассмотрим небольшой пример обращения на Python к нашему API. Вот как можно позвонить с внутреннего номера, закрепленного за сотрудником с именем 1679728441 на номер 7910123456:
И то же самое на PHP:
Так же параллельно с проектом разработки RingCloud API мы разрабатываем библиотеки позволяющие максимально быстро начать использование его в своих приложениях и сервисах. Пока готова только первая версия библиотеки на PHP она находится здесь
Ну вот вроде бы и всё чем мы хотели с вами поделиться. Актуальную версию документации по нашему API можно найти здесь. В ближайших планах – создание полноценного пакета для Python для работы с нашим API и, конечно же, расширение функционала. Спасибо за внимание.