A Ruby gem for interacting with the Phaxio API.
Installation
Add to your application's Gemfile:
And then execute:
Or install it yourself as:
Usage
Set up your API Key, API Secret, and, optionally, Webhook Token.
require 'phaxio' Phaxio.api_key = '11111' Phaxio.api_secret = '22222' Phaxio.webhook_token = '33333'
Try sending a fax:
fax_file = File.open 'test.pdf', 'rb' Phaxio::Fax.create to: '+15558675309', file: fax_file
You can include Phaxio::Resources to pull in the resource classes for convenience:
include Phaxio::Resources fax_file = File.open 'test.pdf', 'rb' Fax.create to: '+15558675309', file: fax_file
Currently Supported API Calls
Faxes
Fax.create
Create and send a fax.
fax_file = File.open 'test.pdf', 'rb' ref = Fax.create to: '+15558675309', file: fax_file # => Fax::Reference(id: 1234) fax = ref.get # => Fax(id: 1234, num_pages: 1, ...)
Fax.list
List faxes in date range.
start = 2.weeks.ago stop = 1.week.ago faxes = Fax.list created_after: start, created_before: stop # => Phaxio::Resource::Collection([Fax(id: 1234, ...), ...]) faxes.length # => 5 faxes.map(&:cost).inject(&:+) # => 35
Fax.get
Get information about a specific fax.
fax = Fax.get 1234 # => Fax(id: 1234, ...)
Fax.cancel
Cancel a fax.
Fax.cancel 1234 # => Fax::Reference(id: 1234)
Fax.resend
Resend a fax.
Fax.resend 1234 # => Fax::Reference(id: 5678)
Fax.delete
Delete a fax. Only test faxes are allowed to be deleted.
Fax.delete 1234 # => true
Fax.delete_file
Delete fax file.
Fax.delete_file 1234 # => true
Fax.file
Fax.test_receive
Test receiving a fax.
fax_file = File.open 'test.pdf', 'rb' Fax.test_receive file: fax_file # => true
Countries
Public::Country.list
Get a list of supported countries.
Public::Country.list # => Phaxio::Resource::Collection([Public::Country(alpha2: 'US', ...), ...])
Phone Numbers
PhoneNumber.create
Provision a new phone number.
PhoneNumber.create country_code: 1, area_code: 555 # => PhoneNumber(phone_number: '+15558675309', ...)
PhoneNumber.list
List phone numbers that you own on Phaxio.
PhoneNumber.list # => Phaxio::Resource::Collection([PhoneNumber(phone_number: '+15558675309', ...), ...])
PhoneNumber.get
Get information about a specific phone number.
PhoneNumber.get '+15558675309' # => PhoneNumber(phone_number: '+15558675309', ...)
PhoneNumber.delete
Release a phone number.
PhoneNumber.delete '+15558675309' # => true
Area Codes
Public::AreaCode.list
Lists available area codes for purchasing Phaxio numbers.
area_codes = Public::AreaCode.list toll_free: true # => Phaxio::Resource::Collection([Public::AreaCode(city: 'Toll Free Service', ...), ...], page: 1)
PhaxCodes
PhaxCode.create
Creates a PhaxCode. Returns data about the PhaxCode by default, or a .png file if type: 'png' is
passed.
PhaxCode.create metadata: 'test_phax_code' # => PhaxCode(identifier: 'phax-code-identifier') PhaxCode.create type: 'png' # => File
PhaxCode.get
Gets a PhaxCode. Returns data about the PhaxCode by default, or a .png file if type: 'png' is
passed.
PhaxCode.get 'phax-code-identifier' # => PhaxCode(identifier: 'phax-code-identifier', metadata: 'phax-code-metadata') PhaxCode.get 'phax-code-identifier', type: 'png' # => File
Account
Account.get
Get information about your Phaxio account.
Account.get # => Account(balance: 1000, faxes_today: 0, faxes_this_month: 100)
Webhook
Webhook.valid_signature?
Validate the webhook signature sent with a Phaxio webhook. Requires that Phaxio.webhook_token be set.
Webhook.valid_signature? received_signature, webhook_url, received_params, received_files # => true
Webhook Validation Example with Sinatra
require 'sinatra/base' require 'phaxio' class PhaxioWebhookExample < Sinatra::Base Phaxio.webhook_token = 'YOUR WEBHOOK TOKEN HERE' post '/webhook' do signature = request.env['HTTP_X_PHAXIO_SIGNATURE'] url = request.url file_params = params[:file] if Phaxio::Webhook.valid_signature? signature, url, webhook_params, file_params 'Success' else 'Invalid webhook signature' end end def webhook_params params.select do |key, _value| %w(success is_test direction fax metadata message event_type).include?(key) end end end
Webhook Validation Example with Rails Controller
class WebhookController < ApplicationController skip_before_action :verify_authenticity_token def index signature = request.headers['X-Phaxio-Signature'] Phaxio.webhook_token = 'YOUR WEBHOOK TOKEN HERE' url = request.original_url Rails.logger.debug "URL: " + url Rails.logger.debug "Signature: " + signature Rails.logger.debug "params: " + params.inspect Rails.logger.debug "webhook_params: " + webhook_params.to_h.inspect if Phaxio::Webhook.valid_signature? signature, url, webhook_params.to_h, file_params Rails.logger.debug "Success" render plain: 'Success' else Rails.logger.debug "Invalid webhook signature" render plain: 'Invalid webhook signature' end end def webhook_params params.permit(:success, :is_test, :direction, :fax, :metadata, :event_type, :message) end def file_params if params[:file] [{ :name => 'file', :tempfile => params[:file].tempfile }] end end end
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Added some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request