Connfu-client is a project mainly written in RUBY and JAVASCRIPT, based on the AGPL-3.0 license.
This gem provides a smooth access to connFu platform, both provisioning and streaming mechanism
== Welcome to connfu-client {}[http://travis-ci.org/bluevialabs/connfu-client]
connFu gem provides an easy way to get access to connFu platform using the defined DSL and the provisioning API.
connFu is a platform of Telefonica delivered by Bluevia Labs.
Please, check out http://www.connfu.com and if you need further information do not hesitate to contact us at support at connfu dot com
=== Why connFu?
Mash voice, data, text and social streams like never before
Develop apps swiftly – connFu does all the heavy lifting
Merge social, voice and text channels into single streams
Global reach – choose phone numbers from around the world
Economy of code – do more with less
=== Use connFu to build...
Apps that turn social signals into calls and voice messages
Group communication apps (voice, text, social)
Real-time collaboration tools
Voice apps controlled by Twitter
CRM applications (including call recording)
== Getting started
You can download the connFu-client gem directly from rubygems:
gem install connfu-client
== Introduction
This gem has two different aims:
== connFu DSL
connFu DSL allows you to create really powerful applications in just a few lines of code.
=== How to create an application
Create an application using the connFu web portal
Get the application token
Create an application scaffold using the connfu-client CLI:
connfu-client scaffold hello-world
Update the code generated in hello-world/application.rb with your valid application token:
token = "YOUR-VALID-CONNFU-TOKEN"
Run the code:
ruby application.rb
You'll get as output something like:
I, [2011-09-26T14:39:24.523208 #43421] INFO -- : Starting application with token 28d540c53b522e162d07baae0809115a D, [2011-09-26T14:39:26.631370 #43421] DEBUG -- : The application devel-juan-1 has these channels: [] D, [2011-09-26T14:39:26.638779 #43421] DEBUG -- : Dispatcher initializer D, [2011-09-26T14:39:26.638870 #43421] DEBUG -- : Dispatcher starts D, [2011-09-26T14:39:26.639365 #43421] DEBUG -- : Dispatcher waiting for a message from the Listener D, [2011-09-26T14:39:26.647047 #43421] DEBUG -- : Listener starts... D, [2011-09-26T14:39:26.647200 #43421] DEBUG -- : Waiting for a message from connFu stream D, [2011-09-26T14:39:26.647437 #43421] DEBUG -- : Connfu::ConnfuStream opening connection to stream.connfu.com:443 D, [2011-09-26T14:39:26.647535 #43421] DEBUG -- : Connfu::ConnfuStream start listening to stream /connfu-stream-devel-juan-1
=== Handling channels
A connFu channel is the way to retrieve inbound events related to the resources mapped to the application.
Actually there are three available channel types:
An application should listen at least one kind of channel.
=== Handling voice channels
A voice channel has four related events:
voice:join: a user joins a conference call
voice:leave: a user leaves a conference call
voice:new_topic: the conference topic was changed
sms:new: a sms sent by an user was received in the number
require 'connfu'
TOKEN = "<app-token>"
Connfu.application(TOKEN) {
listen(:voice) do |conference|
conference.on(:join) do |call|
puts "New inbound call from #{call[:from]} on number #{call[:to]}"
end
conference.on(:leave) do |call|
puts "#{call[:from]} has left the conference #{call[:channel_name]}"
end
conference.on(:new_topic) do |topic|
puts "New topic in the conference #{topic[:channel_name]}: #{topic[:content]}"
end
end
listen(:sms) do |sms|
sms.on(:new) do |message|
puts "New inbound sms"
puts "#{message}"
end
end
}
=== Handling twitter channels
A twitter channel has one related event:
twitter:new: a new tweet sent by an associated twitter account reached the application
require 'connfu'
TOKEN = "
=== Examples
==== Conference room
This application defines two channels, voice and twitter, and handles conference rooms using a predefined whitelist.
Conference attendees can also tweet information regarding the chat room using the hashtag #conference.
require 'connfu'
TOKEN = "<valid-app-token>"
NEW_CALL_MESSAGE = "new call received"
HANG_MESSAGE = "has left the call"
Connfu.application(TOKEN) {
listen(:voice) do
on(:join) do |call|
puts "#{NEW_CALL_MESSAGE} on number #{call[:destination]}"
conf = ConferenceApp::find_by_conference_number(call[:destination])
if conf.is_allowed?(call[:origin])
puts "whitelist number received"
else
puts "not whitelist number"
end
end
on(:hang) do |call|
puts "#{call[:origin]} #{HANG_MESSAGE} #{call[:destination]}"
ConferenceApp::find(call[:destination]).end(call[:origin])
end
end
listen(:twitter) do |channel|
channel.filter = "text has #conference"
on(:new) do |tweet|
puts "A new tweet arrived"
conf = ConferenceApp::find_by_twitter_user(tweet[:origin])
conf.wall.print("#{tweet[:origin]}: has tweeted #{tweet[:destination]}")
end
end
listen(:foo) do |channel|
on(:new) do |message|
puts "This is an unsupported channel"
end
end
}
== Provisioning API
With the provisioning API client you can manage your application channels.
All the requests should be signed using a specific application api_key
require 'connfu'
application = Connfu::Provisioning::Application.new(api_key)
Actually there are three available channel types:
In the next subsections you can find examples about how to manage channels.
Please check the folder examples for deeper information
=== Voice channels
The next sections show information about how to manage voice channels in an application.
==== Create a Voice channel
This snippet of code creates a voice channel and associates a phone number to the application.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.create_voice_channel("my-voice-channel", "UK")
Optionally a third parameter can be used defining the channel privacy settings:
Valid country codes are UK and US
==== Retrieve all Voice channels
This snippet of code retrieves information about the voice channels associated to the application.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) voice_channels = application.get_voice_channel
==== Retrieve a Voice channel
This snippet of code retrieves information about a specific voice channel associated to the application.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) voice_channel = application.get_voice_channel("my-voice-channel")
==== Update Voice channel
This snippet of code updates the topic, privacy setting, welcome_message and rejected_message associated to the voice channel.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.update_voice_channel("my-voice-channel", {:topic =>"new topic", :welcome_message => "Hello!", :rejected_message => "You're not allowed to join the conference.", :privacy => Connfu::Provisioning::Voice::Privacy::PUBLIC})
==== Delete a Voice channel
This snippet of code deletes a voice channel previously created.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.delete_voice_channel("my-voice-channel")
==== Voice Channel Whitelist
Only a predefined set of numbers can join a conference created using a voice channel. Numbers must be included in the conference whitelist before joining the conference.
===== Add a number to the whitelist
This snippet of code adds a new user to the conference whitelist.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.add_whitelist("my-voice-channel", "paul", "0044654332")
===== Retrieve a channel whitelist
This snippet of code retrieves a conference whitelist.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) whitelist = application.get_whitelist("my-voice-channel")
===== Delete the Voice channel whitelist
This snippet of code deletes the whole conference whitelist.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.delete_whitelist("my-voice-channel")
===== Delete a whitelist entry
This snippet of code deletes a specific whitelist item.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.delete_whitelist("my-voice-channel", "0044654332")
==== Voice channel numbers
A voice channel can have more than one mapped phone number. This will enable users from different countries join a conference with local rates.
===== Add a new number to a voice channel
This snippet of code adds a new phone number to the voice channel. The desired country must be supported.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.add_phone("my-voice-channel", "UK")
===== Remove a number from a voice channel
This snippet of code removes a phone number from the voice channel and release the resource.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.delete_phone("my-voice-channel", "0044654332")
===== Retrieve all the voice channel numbers
This snippet of code retrieves a voice channel phone lists.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) phones = application.get_phones("my-voice-channel")
=== Twitter channels
==== Create Twitter channel
This snippet of code creates a twitter channel with two twitter accounts and two hashtags to filter only those messages with a specific hashtag.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.create_twitter_channel("my-twitter-channel", {:origin => "juandebravo", :hashtags => ["ruby", "rails]})
==== Retrieve all Twitter channels
This snippet of code retrieves information about all the twitter channels previously created.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) twitter_channels = application.get_twitter_channel
==== Retrieve a Twitter channel
This snippet of code retrieves information about a specific twitter channel previously created.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) twitter_channel = application.get_twitter_channel("my-twitter_channel")
==== Delete a Twitter channel
This snippet of code deletes a specific twitter channel previously created.
require 'connfu' application = Connfu::Provisioning::Application.new(api_key) application.delete_twitter_channel("my-twitter_channel")
== License
Check the file License.txt with information about GNU AFFERO GENERAL PUBLIC LICENSE Version 3