Главное Авторские колонки Вакансии Образование
Выбор редакции:
189 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

API RingCloud, всё только начинается

Ранее RingCloud анонсировал запуск REST API, которое позволит нашему продукту интегрироваться с различными CRM-системами. И хотя его разработка еще продолжается, мы рады представить Вашему вниманию первую версию. Под катом мы рассмотрим общую архитектуру данного сервиса, его принцип работы, а так же разберём примеры использования.
Мнение автора может не совпадать с мнением редакции

Когда мы только планировали свой сервис, мы ставили перед собой цели сделать его максимально удобным для интеграции, а такие задачи без достойного API не решить. По этому решили уделить данном сервису как можно больше внимания, построив его максимально надёжным и удобным.

Управление ключами API

Для использования API Вам потребуется уникальный API Key и пароль к нему, для этого идём в свой личный кабинет и в соответствующем разделе создаём ключик

ecd9366059f64696adb91e60409fe3ff.PNG

Ключ генерируется автоматически, он состоит из префикса с номером вашего аккаунта и телом самого ключа, для того чтобы скопировать ключ необходимо просто кликнуть ЛКМ на строку с ключём. Пароль так же генерируется автоматически и для его изменения, если он вам покажется слишком простым, нужно нажать на иконку справа. Для каждого ключа необходимо указать права доступа, это сделано для разграничения полномочий между вашими приложениями. Уровни доступа работают по принципу "RO/RW" и позволяют разграничить разрешённые действия.

Описание функций RingCloud API, доступных на данный момент, вы сможете получить на странице документации

Архитектура

Данный сервис построен по принципу кластера, с балансировкой нагрузки между нодами обрабатывающими запросы. Так как сервис использует HTTPS, то было решено сместить эту задачу на балансировщик. Ноды, обработав запросы, обращаются к ядру системы включающему в себя сервера VoIP, БД, и cache основанный на Redis.

Надо сказать, что Redis у нас очень широко используется во всех узлах RingCloud, мы им очень довольны в плане удобства и быстродействия.

В качестве балансировщика и серверов WEB интерфейса мы используем Nginx так как он нас полностью устроил по функционалу и производительности, на нём прекрасно реализован функционал балансировки, он отлично работает с HTTPS, обладает очень удобной конфигурацией.

d609dbebb7e047bf9c5c1c9b4202877c.png

Примеры использования

Наше 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. В таблице ниже приведены наиболее часто используемые из них.

Наиболее часто используемые коды состояния b_555b505d30c4b.jpg

На данный момент возможна работа с двумя объектами (ресурсами в терминологии REST): «Пользователи» и «Вызовы». С помощью первого можно создавать пользователей, получать о них информацию и изменять их данные. Второй объект предназначен для работы со звонками. С его помощью можно совершить звонок, а также получить информацию об активных и совершенных вызовах. Далее, существуют определенные ограничения на частоту обращений к нашему API. Давайте поясним используемую нами модель. Во-первых, ограничения считаются отдельно для каждого ключа. Во-вторых, в рамках одного ключа существуют ограничения на однотипные запросы, т.е. запросы с полностью одинаковыми URL-адресами. Например, если у Вас есть только один ключ API, и Вы отправляете в минуту два запроса на изменение внутреннего номера у одного и того же пользователя, то успешно отработает только первый запрос. А вот изменить внутренние номера у двух разных пользователей вполне возможно.

Функции объекта «Пользователи» и временные ограничения b_555b507d8756a.jpg

Функции объекта «Вызовы» и временные ограничения b_555b508dcf436.jpg

Как работает оригинация вызова

Для того чтобы сделать звонок на потребуется сотрудник который подключился по SIP к серверу RingCloud с помощью "софтфона" или стационарного SIP телефона, и номер на который будем звонить. При отправке запроса в API система сначала вызывает сотрудника (назовём его абонент А), а затем, только когда сотрудник ответил, набирает номер на который мы планируем совершить звонок, таким образом мы оригинируем вызов между абонентом А и абонентом Б

44948696827d4def97ec301678a08dda.jpg

Рассмотрим небольшой пример обращения на Python к нашему API. Вот как можно позвонить с внутреннего номера, закрепленного за сотрудником с именем 1679728441 на номер 7910123456: b_555b515b81509.jpg

И то же самое на PHP:

b_555b5178ee9c6.jpg

Так же параллельно с проектом разработки RingCloud API мы разрабатываем библиотеки позволяющие максимально быстро начать использование его в своих приложениях и сервисах. Пока готова только первая версия библиотеки на PHP она находится здесь

Ну вот вроде бы и всё чем мы хотели с вами поделиться. Актуальную версию документации по нашему API можно найти здесь. В ближайших планах – создание полноценного пакета для Python для работы с нашим API и, конечно же, расширение функционала. Спасибо за внимание.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.