Whether you want to send messages from toll-free numbers, local numbers, or short codes, Bandwidth’s APIs make it easy to enable in your software or platform, while Bandwidth’s relationships with the carriers give you reliable message delivery and insights.
Introduction
In this article, you will see a quick overview of what sending your first message and creating your first call looks like when using Bandwidth’s Voice and Messaging APIs along with Bandwidth’s Ruby SDK.
First, you will see some code examples and then at the end of this article is an explanation of the variables you would need to insert into the code to make the SDK work with your Bandwidth account.
Additional resources:
Packages and client initialization
First you need to install the gems needed for this example like this.
gem install bandwidth-sdk
gem install sinatra
You then need to initialize the configuration for the SDK client.
require 'bandwidth'
include Bandwidth
bandwidth_client = Bandwidth::Client.new(
messaging_basic_auth_user_name: '{username}',
messaging_basic_auth_password: '{password}',
voice_basic_auth_user_name: '{username}',
voice_basic_auth_password: '{password}'
)
$voice_client = bandwidth_client.voice_client.client
$messaging_client = bandwidth_client.messaging_client.client
How to send a text message with Ruby
Sending a SMS Message with Ruby from a Bandwidth number looks like this. This must be in the same file as your initiated client or the client must be imported here.
require 'bandwidth'
include Bandwidth::Messaging
messageBody = MessageRequest.new
messageBody.application_id = '{app_id}'
messageBody.to = ['{to}']
messageBody.from = '{from}'
messageBody.text = 'Hello, I am sending a message! How fun!'
$messaging_client.create_message('{account_id}', body: messageBody)
You will need to set up a server that can receive a callback/webhooks with a JSON body that will tell you if the message was successfully delivered or not. Some simple Ruby server code using sinatra that can process Bandwidth messaging callbacks could look like this.
require 'sinatra'
post '/messaging' do
data = JSON.parse(request.body.read)
if (data[0]['type'] == 'message-delivered')
//successful delivery action
halt 200
end
if (data[0]['type'] == 'message-failed')
failureReason = data["description"]
//failed delivery action
halt 200
end
halt 200
end
How to make a phone call with Ruby
Making a phone call with Ruby from a Bandwidth number looks like this. This must be in the same file as your initiated client or the client must be imported here.
require 'bandwidth'
include Bandwidth::Voice
voiceBody = ApiCreateCallRequest.new
voiceBody.from = '{from}'
voiceBody.to = '{to}'
voiceBody.answer_url = '{url}'
voiceBody.application_id = '{app_id}'
$voice_client.create_call('{account_id}', :body => voiceBody)
When the call is answered by whoever you sent the call to, Bandwidth will send a callback/webhook with a JSON body to the URL you specified when you created the call. You can send BXML verbs back to Bandwidth in response to the callback/webhook in order to create new actions on the call. Some simple server code that would make the call play some text-to-speech audio and then hang up could look like this:
require 'bandwidth'
require 'sinatra'
include Bandwidth::Voice
post '/voice' do
data = JSON.parse(request.body.read)
if (data['eventType'] == 'answer')
response = Response.new()
speak_sentence = SpeakSentence.new({
:sentence => 'I am saying something and now will hang up.',
:voice => 'julie'
})
response = Response.new()
hangup = Hangup.new()
response.push(speak_sentence)
response.push(hangup)
response.to_bxml()
end
halt 200
end