telphin_api

telphin_api — ruby-адаптер для Телфин. Он позволяет вызывать методы API, а также поддерживает получение токена для работы с API.
Установка
# Gemfile
gem 'telphin_api'
или просто
$ gem install telphin_api
Использование
Вызов методов
# создаем клиент
@tph = TelphinApi::Client.new
# и вызываем методы API
@tph.extensions.phone_call_events(:user_id => '@me', :extension_number => '00000*101', :method => :get)
# в ruby принято использовать snake_case в названиях методов,
# поэтому extensions.phoneCallEvents становится extensions.phone_call_events
@tph.extensions.phone_call_events
# большинство методов возвращает структуры Hashie::Mash
# и массивы из них
call_events.first.id # => bMf0iCJneuA0YWawjUOjVTzAGn
call_events.first.url # => https://site/api/telphin/call/out
call_events.first.method # => 0
call_events.first.status # => 1
call_events.first.type # => 1
# если метод, возвращающий массив, вызывается с блоком,
# то блок будет выполнен для каждого элемента,
# и метод вернет обработанный массив
@tph.extensions.phone_call_events(:user_id => '@me', :extension_number => '00000*101', :method => :get) do |event|
"#{event.id} '#{event.url}' #{event.method}"
end
# => ["bMf0iCJneuA0YWawjUOjVTzAGn 'https://site/api/telphin/call/out' 0"]
Авторизация
Для авторизации необходимо задать параметры app_key (Ключ клиента), app_secret (Секрет клиента) и site (адрес вашего API сервера, полученного при заключении договора) в настройках TelphinApi.configure. Более подробно о конфигурировании telphin_api см. далее в соответствующем разделе.
telphin_api предоставляет метод TelphinApi.authorize, который делает запрос к Телфин, получает токен и создает клиент:
@tph = TelphinApi.
# и теперь можно вызывать методы API на объекте @tph
@tph.token
Клиент будет содержать token пользователя, авторизовавшего приложение Также в этот момент полезно сохранить полученный токен в БД либо в сессии, чтобы использовать их повторно:
current_user.token = @vk.token
current_user.save
# позже
@tph = TelphinApi::Client.new(current_user.token)
Прочее
Если клиент API (объект класса TelphinApi::Client) был создан с помощью метода TelphinApi.authorize, он будет содержать информацию о времени истечения токена (expires_at). Получить их можно с помощью соответствующих методов:
@tph = TelphinApi.
# => #<TelphinApi::Client:0x007fa578f00ad0>
tph.expires_at # => 2015-12-18 23:22:55 +0400
# можно проверить, истекло ли время жизни токена
tph.expired? # => false
Чтобы создать короткий синоним TPH для модуля TelphinApi, достаточно вызвать метод TelphinApi.register_alias:
TelphinApi.register_alias
TPH::Client.new # => #<TelphinApi::Client:0x007fa578d6d948>
При необходимости можно удалить синоним методом TelphinApi.unregister_alias:
TPH.unregister_alias
TPH # => NameError: uninitialized constant VK
Обработка ошибок
Если Телфин API возвращает ошибку, выбрасывается исключение класса TelphinApi::Error.
tph = TPH::Client.new
@tph.extensions.phone_call_events
# TelphinApi::Error: Telphin returned an error extension_invalid: 'Value supplied in the URI-Fragment as extension is invalid. The parameter must reference the number of an existing extension and cannot be set to @self.'
Логгирование
telphin_api логгирует служебную информацию о запросах при вызове методов.
По умолчанию все пишется в STDOUT, но в настройке можно указать
любой другой совместимый логгер, например Rails.logger.
Есть возможность логгирования 3 типов информации, каждому соответствует ключ в глобальных настройках.
| ключ настройки | по умолчанию | уровень логгирования | |
|---|---|---|---|
| URL запроса | log_requests |
true |
debug |
| JSON ответа при ошибке | log_errors |
true |
warn |
| JSON удачного ответа | log_responses |
false |
debug |
Таким образом, в rails-приложении с настройками по умолчанию в production записываются только ответы сервера при ошибках; в development также логгируются URL-ы запросов.
Настройка
Глобальные параметры telphin_api задаются в блоке TelphinApi.configure следующим образом:
TelphinApi.configure do |config|
# параметры, необходимые для авторизации средствами telphin_api
# (не нужны при использовании сторонней авторизации)
config.app_key = '123'
config.app_secret = 'AbCdE654'
config.site = 'https://pbx.telphin.ru/uapi' # По умолчанию https://pbx.telphin.ru/uapi
# faraday-адаптер для сетевых запросов
config.adapter = :net_http
# параметры для faraday-соединения
config. = {
ssl: {
ca_path: '/usr/lib/ssl/certs'
},
proxy: {
uri: 'http://proxy.example.com',
user: 'foo',
password: 'bar'
}
}
# максимальное количество повторов запроса при ошибках
config.max_retries = 2
# логгер
config.logger = Rails.logger
config.log_requests = true # URL-ы запросов
config.log_errors = true # ошибки
config.log_responses = false # удачные ответы
end
По умолчанию для HTTP-запросов используется Net::HTTP; можно выбрать
любой другой адаптер,
поддерживаемый faraday.
При необходимости можно указать параметры для faraday-соединения — например, параметры прокси-сервера или путь к SSL-сертификатам.
Чтобы сгенерировать файл с настройками по умолчанию в rails-приложении,
можно воспользоваться генератором telphin_api:install:
$ cd /path/to/app
$ rails generate telphin_api:install
JSON-парсер
telphin_api использует парсер Oj
Также в библиотеке multi_json (обертка для различных JSON-парсеров,
которая выбирает самый быстрый из установленных в системе и парсит им)
Oj поддерживается и имеет наивысший приоритет; поэтому если он установлен
в системе, multi_json будет использовать именно его.
Участие в разработке
Если вы хотите поучаствовать в разработке проекта, форкните репозиторий, положите свои изменения в отдельную ветку, покройте их спеками и отправьте мне pull request.
telphin_api тестируется под MRI 2.1.2.
Если что-то работает неправильно, либо вообще не работает,
то это следует считать багом, и написать об этом
в issues на Github.