This is the Ruby client library for Nexmo's API. To use it you'll need a Nexmo account. Sign up for free at nexmo.com.
- Requirements
- Installation
- Usage
- SMS API
- 2FA API
- Voice API
- Verify API
- Conversation API
- Number Insight API
- Application API
- Numbers API
- Secret Management API
- Redact API
- Logging
- JWT authentication
- Webhook signatures
- API coverage
- License
Nexmo Ruby supports CRuby 2.1.0+ and JRuby 9k.
To install the Ruby client library using Rubygems:
gem install nexmo
Alternatively you can clone the repository:
git clone [email protected]:Nexmo/nexmo-ruby.git
Begin by requiring the nexmo library:
require 'nexmo'
Then construct a client object with your key and secret:
client = Nexmo::Client.new(api_key: 'YOUR-API-KEY', api_secret: 'YOUR-API-SECRET')
You can now use the client object to send an SMS, start a verification, or create an application.
For production you can specify the NEXMO_API_KEY
and NEXMO_API_SECRET
environment variables instead of specifying the key and secret explicitly,
keeping your credentials out of source control.
To check signatures for incoming webhook requests you'll also need to specify
the signature_secret
argument:
client = Nexmo::Client.new(signature_secret: 'secret')
Alternatively you can set the NEXMO_SIGNATURE_SECRET
environment variable.
To call newer endpoints that support JWT authentication such as the Voice API you'll
also need to specify the application_id
and private_key
arguments. For example:
client = Nexmo::Client.new(application_id: application_id, private_key: private_key)
Both arguments should have string values corresponding to the id
and private_key
values returned in a "create an application" response. These
credentials can be stored in a datastore, in environment variables, on disk outside
of source control, or in some kind of key management infrastructure.
response = client.sms.send(from: 'Ruby', to: 'YOUR NUMBER', text: 'Hello world')
if response.messages.first.status == '0'
puts "Sent message id=#{response.messages.first.message_id}"
else
puts "Error: #{response.messages.first.error_text}"
end
Docs: https://developer.nexmo.com/api/sms#send-an-sms
response = client.tfa.send(to: 'YOUR NUMBER', pin: '12345')
if response.messages.first.status == '0'
puts "Sent message id=#{response.messages.first.message_id}"
else
puts "Error: #{response.messages.first.error_text}"
end
Docs: https://developer.nexmo.com/api/sms/us-short-codes/2fa
response = client.calls.create({
to: [{type: 'phone', number: '14843331234'}],
from: {type: 'phone', number: '14843335555'},
answer_url: ['https://example.com/answer']
})
Docs: https://developer.nexmo.com/api/voice#createCall
response = client.calls.list
Docs: https://developer.nexmo.com/api/voice#getCalls
response = client.calls.get(uuid)
Docs: https://developer.nexmo.com/api/voice#getCall
response = client.calls.hangup(uuid)
Docs: https://developer.nexmo.com/api/voice#updateCall
stream_url = 'https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3'
response = client.calls.stream.start(uuid, stream_url: [stream_url])
Docs: https://developer.nexmo.com/api/voice#startStream
response = client.calls.stream.stop(uuid)
Docs: https://developer.nexmo.com/api/voice#stopStream
response = client.calls.talk.start(uuid, text: 'Hello')
Docs: https://developer.nexmo.com/api/voice#startTalk
response = client.calls.talk.stop(uuid)
Docs: https://developer.nexmo.com/api/voice#stopTalk
response = client.calls.dtmf.send(uuid, digits: '1234')
Docs: https://developer.nexmo.com/api/voice#startDTMF
response = client.verify.request(number: '441632960960', brand: 'MyApp')
if response.status == '0'
puts "Started verification request_id=#{response.request_id}"
else
puts "Error: #{response.error_text}"
end
Docs: https://developer.nexmo.com/api/verify#verify-request
The response contains a verification request id which you will need to store temporarily.
response = client.verify.check(request_id: '00e6c3377e5348cdaf567e1417c707a5', code: '1234')
if response.status == '0'
puts "Verification complete, event_id=#{response.event_id}"
else
puts "Error: #{response.error_text}"
end
Docs: https://developer.nexmo.com/api/verify#verify-check
The verification request id comes from the call to client.verify.request
.
The PIN code is entered into your application by the user.
client.verify.cancel('00e6c3377e5348cdaf567e1417c707a5')
Docs: https://developer.nexmo.com/api/verify#verify-control
client.verify.trigger_next_event('00e6c3377e5348cdaf567e1417c707a5')
Docs: https://developer.nexmo.com/api/verify#verify-control
response = client.conversations.create(name: 'Example Conversation', display_name: 'Example Display Name')
Docs: https://developer.nexmo.com/api/conversation#createConversation
response = client.conversations.list
Docs: https://developer.nexmo.com/api/conversation#listConversations
response = client.conversations.get(conversation_id)
Docs: https://developer.nexmo.com/api/conversation#retrieveConversation
response = client.conversations.update(conversation_id, answer_method: 'PUT')
Docs: https://developer.nexmo.com/api/conversation#replaceConversation
response = client.conversations.delete(conversation_id)
Docs: https://developer.nexmo.com/api/conversation#deleteConversation
client.number_insight.basic(number: '447700900000')
Docs: https://developer.nexmo.com/api/number-insight#request
client.number_insight.standard(number: '447700900000')
Docs: https://developer.nexmo.com/api/number-insight#request
client.number_insight.advanced(number: '447700900000')
Docs: https://developer.nexmo.com/api/number-insight#request
client.number_insight.advanced_async(number: '447700900000', callback: webhook_url)
The results of the API call will be sent via HTTP POST to the webhook URL specified in the callback parameter.
Docs: https://developer.nexmo.com/api/number-insight#request
response = client.applications.create(name: 'Example App', type: 'voice', answer_url: answer_url, event_url: event_url)
Docs: https://developer.nexmo.com/api/application#create-an-application
response = client.applications.list
Docs: https://developer.nexmo.com/api/application#retrieve-your-applications
response = client.applications.get(uuid)
Docs: https://developer.nexmo.com/api/application#retrieve-an-application
response = client.applications.update(uuid, answer_method: 'POST')
Docs: https://developer.nexmo.com/api/application#update-an-application
response = client.applications.delete(uuid)
Docs: https://developer.nexmo.com/api/application#destroy-an-application
client.numbers.list
Docs: https://developer.nexmo.com/api/developer/numbers#list-owned-numbers
client.numbers.search(country: 'GB')
Docs: https://developer.nexmo.com/api/developer/numbers#search-available-numbers
client.numbers.buy(country: 'GB', msisdn: '447700900000')
Docs: https://developer.nexmo.com/api/developer/numbers#buy-a-number
client.numbers.cancel(country: 'GB', msisdn: '447700900000')
Docs: https://developer.nexmo.com/api/developer/numbers#cancel-a-number
client.numbers.update(country: 'GB', msisdn: '447700900000', voice_callback_type: 'app', voice_callback_value: application_id)
Docs: https://developer.nexmo.com/api/developer/numbers#update-a-number
client.secrets.list
Docs: https://developer.nexmo.com/api/account/secret-management#retrieveSecrets
client.secrets.create(secret: 't0ps3cr3t')
Docs: https://developer.nexmo.com/api/account/secret-management#createSecret
client.secrets.get(secret_id)
Docs: https://developer.nexmo.com/api/account/secret-management#retrieveSecret
client.secrets.revoke(secret_id)
Docs: https://developer.nexmo.com/api/account/secret-management#revokeSecret
client.redact.transaction(id: '00A0B0C0', product: 'sms')
Docs: https://developer.nexmo.com/api/redact#transaction
Use the logger option or attribute writer method to specify a logger. For example:
require 'logger'
logger = Logger.new(STDOUT)
client = Nexmo::Client.new(logger: logger)
By default the library sets the logger to Rails.logger
if it is defined.
To disable logging set the logger to nil
.
By default the library generates a short lived JWT per request.
To generate a long lived JWT for multiple requests or to specify JWT claims
directly call Nexmo::JWT.generate
to generate a token, and set the token
attribute on the client object. For example:
claims = {
application_id: application_id,
nbf: 1483315200,
exp: 1514764800,
iat: 1483228800
}
private_key = File.read('path/to/private.key')
client.token = Nexmo::JWT.generate(claims, private_key)
client = Nexmo::Client.new(signature_secret: 'secret')
if client.signature.check(request.GET)
# valid signature
else
# invalid signature
end
Docs: https://developer.nexmo.com/concepts/guides/signing-messages
Note: you'll need to contact [email protected] to enable message signing on your account.
- Account
- Balance
- Pricing
- Settings
- Top Up
- Numbers
- Search
- Buy
- Cancel
- Update
- Number Insight
- Basic
- Standard
- Advanced
- Webhook Notification
- Verify
- Verify
- Check
- Search
- Control
- Messaging
- Send
- Delivery Receipt
- Inbound Messages
- Search
- Message
- Messages
- Rejections
- US Short Codes
- Two-Factor Authentication
- Event Based Alerts
- Sending Alerts
- Campaign Subscription Management
- Voice
- Outbound Calls
- Inbound Call
- Text-To-Speech Call
- Text-To-Speech Prompt
This library is released under the MIT License