Asterisk Realtime - Ruby on Rails Migrations and Models

Asterisk RealTime - Ruby on Rails Migrations & Models


Using Ruby on Rails Migrations the below will support any combination of database that ActiveRecord and Asterisk Realtime Architecture support, including of course MySQL and Postgres.

Ruby on Rails Models are then provided to be dropped into any Ruby on Rails application that requires the ability to configure Asterisk via the Asterisk Realtime Architecture.

Migrations (db/schema.rb)


ActiveRecord::Schema.define() do

  #Use the same table for IAX2 and SIP configuration
  create_table "devices", :force => true do |t|
    t.column :name,               :string, :limit => 80
    t.column :accountcode,        :string, :limit => 20
    t.column :amaflags,           :string, :limit => 13
    t.column :callgroup,          :string, :limit => 10
    t.column :callerid,           :string, :limit => 80
    t.column :canreinvite,        :string, :limit => 3, :default => 'yes'
    t.column :context,            :string, :limit => 80
    t.column :defaultip,          :string, :limit => 15
    t.column :dtmfmode,           :string, :limit => 7
    t.column :fromuser,           :string, :limit => 80
    t.column :fromdomain,         :string, :limit => 80
    t.column :fullcontact,        :string, :limit => 80
    t.column :host,               :string, :limit => 31, :default => 'dynamic'
    t.column :insecure,           :string, :limit => 4
    t.column :language,           :string, :limit => 2
    t.column :mailbox,            :string, :limit => 50
    t.column :md5secret,          :string, :limit => 80
    t.column :nat,                :string, :limit => 5, :default => 'no'
    t.column :deny,               :string, :limit => 95
    t.column :permit,             :string, :limit => 95
    t.column :mask,               :string, :limit => 95
    t.column :pickupgroup,        :string, :limit => 10
    t.column :port,               :string, :limit => 5, :default => ''
    t.column :qualify,            :string, :limit => 3
    t.column :restrictcid,        :string, :limit => 1
    t.column :rtptimeout,         :string, :limit => 3
    t.column :rtpholdtimeout,     :string, :limit => 3
    t.column :secret,             :string, :limit => 80
    t.column :type,               :string, :limit => 6, :default => 'friend'
    t.column :username,           :string, :limit => 80
    t.column :disallow,           :string, :limit => 100
    t.column :allow,              :string, :limit => 100
    t.column :musiconhold,        :string, :limit => 100
    t.column :regseconds,         :integer, :limit => 11, :default => 0
    t.column :ipaddr,             :string, :limit => 15, :default => '0'
    t.column :regexten,           :string, :limit => 80
    t.column :cancallforward,     :string, :limit => 3, :default => 'yes'
    t.column :setvar,             :string, :limit => 100
    #Additional fields for IAX2
    t.column :dbsecret,           :string, :limit => 100
    t.column :inkeys,             :string, :limit => 100
    t.column :outkey,             :string, :limit => 100
    t.column :auth,               :string, :limit => 100
  end
  
  #Asterisk extensions table
  create_table "extensions", :force => true do |t|
    t.column :context,                :string, :limit => 20, :null => false
    t.column :exten,                  :string, :limit => 20, :null => false
    t.column :priority,               :integer, :limit => 4, :default => 0
    t.column :app,                    :string, :limit => 20, :null => false
    t.column :appdata,                :string, :limit => 128, :null => false
  end
  
  #Asterisk queues table
  create_table "callqueues", :force => true do |t|
    t.column :name,                   :string, :limit => 128
    t.column :musiconhold,            :string, :limit => 128
    t.column :announce,               :string, :limit => 128
    t.column :timeout,                :integer, :limit => 11
    t.column :monitor_join,           :boolean
    t.column :monitor_format,         :string, :limit => 128
    t.column :queue_youarenext,       :string, :limit => 128
    t.column :queue_thereare,         :string, :limit => 128
    t.column :queue_callswaiting,     :string, :limit => 128
    t.column :queue_holdtime,         :string, :limit => 128
    t.column :queue_minutes,          :string, :limit => 128
    t.column :queue_seconds,          :string, :limit => 128
    t.column :queue_lessthan,         :string, :limit => 128
    t.column :queue_thankyou,         :string, :limit => 128
    t.column :queue_reporthold,       :string, :limit => 128
    t.column :announce_frequency,     :integer, :limit => 11
    t.column :announce_round_seconds, :integer, :limit => 11
    t.column :announce_holdtime,      :string, :limit => 128
    t.column :retry,                  :integer, :limit => 11
    t.column :wrapuptime,             :integer, :limit => 11
    t.column :maxlen,                 :integer, :limit => 11
    t.column :servicelevel,           :integer, :limit => 11
    t.column :strategy,               :string, :limit => 128
    t.column :joinempty,              :string, :limit => 128
    t.column :leavewhenempty,         :string, :limit => 128
    t.column :eventmemberstatus,      :boolean
    t.column :eventwhencalled,        :boolean
    t.column :reportholdtime,         :boolean
    t.column :memberdelay,            :integer, :limit => 11
    t.column :weight,                 :integer, :limit => 11
    t.column :timeoutrestart,         :boolean
  end

  #Asterisk voicemail extended table
  create_table "voicemailboxes", :force => true do |t|
    t.column :customer_id,            :string, :limit => 11, :null => false
    t.column :context,                :string, :limit => 50, :default => '0'
    t.column :mailbox,                :string, :limit => 11, :null => false
    t.column :password,               :integer, :limit => 5, :default => '0'
    t.column :fullname,               :string, :limit => 150, :null => false
    t.column :email,                  :string, :limit => 50, :null => false
    t.column :pager,                  :string, :limit => 50, :default => ''
    t.column :tz,                     :string, :limit => 10, :default => 'central'
    t.column :attach,                 :string, :limit => 4, :default => 'yes'
    t.column :saycid,                 :string, :limit => 4, :default => 'yes'
    t.column :dialout,                :string, :limit => 10, :default => ''
    t.column :callback,               :string, :limit => 10, :default => ''
    t.column :review,                 :string, :limit => 4, :default => 'no'
    t.column :operator,               :string, :limit => 4, :default => 'no'
    t.column :envelope,               :string, :limit => 4, :default => 'no'
    t.column :sayduration,            :string, :limit => 4, :default => 'no'
    t.column :saydurationm,           :integer, :limit => 4, :default => 1
    t.column :sendvoicemail,          :string, :limit => 4, :default => 'no'
    t.column :delete,                 :string, :limit => 4, :default => 'no'
    t.column :nextaftercmd,           :integer, :limit => 4, :default => 'yes'
    t.column :forcename,              :integer, :limit => 4, :default => 'no'
    t.column :forcegreetings,         :integer, :limit => 4, :default => 'no'
    t.column :hidefromdir,            :string, :limit => 4, :default => 'yes'
    t.column :stamp,                  :timestamp
  end

  #Asterisk voicemail extended table
  create_table "voicemailmessages", :force => true do |t|
    t.column :msgnum,                 :integer, :limit => 11, :default => 0
    t.column :dir,                    :string, :limit => 80, :default => ''
    t.column :context,                :string, :limit => 80, :default => ''
    t.column :macrocontext,           :string, :limit => 80, :default => ''
    t.column :callerid,               :string, :limit => 40, :default => ''
    t.column :origtime,               :string, :limit => 40, :default => ''
    t.column :duration,               :string, :limit => 20, :default => ''
    t.column :mailboxuser,            :string, :limit => 80, :default => ''
    t.column :mailboxcontext,         :string, :limit => 80, :default => ''
    t.column :recording,              :longblob
  end
    
end



Models (app/models/)


app/models/callqueue.rb

class Callqueue < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
end


app/models/device.rb

class Device < ActiveRecord::Base
validates_presence_of :name, :context
validates_uniqueness_of :name
end


app/models/extension.rb

class Extension < ActiveRecord::Base
validates_presence_of :context, :exten, :priority, :app, :appdata
end


app/models/voicemailbox.rb

class Voicemailbox < ActiveRecord::Base
validates_presence_of :customer_id
validates_uniqueness_of :customer_id
end


app/models/voicemessage.rb

class Voicemailmessage < ActiveRecord::Base
end




See Also


Asterisk RealTime - Ruby on Rails Migrations & Models


Using Ruby on Rails Migrations the below will support any combination of database that ActiveRecord and Asterisk Realtime Architecture support, including of course MySQL and Postgres.

Ruby on Rails Models are then provided to be dropped into any Ruby on Rails application that requires the ability to configure Asterisk via the Asterisk Realtime Architecture.

Migrations (db/schema.rb)


ActiveRecord::Schema.define() do

  #Use the same table for IAX2 and SIP configuration
  create_table "devices", :force => true do |t|
    t.column :name,               :string, :limit => 80
    t.column :accountcode,        :string, :limit => 20
    t.column :amaflags,           :string, :limit => 13
    t.column :callgroup,          :string, :limit => 10
    t.column :callerid,           :string, :limit => 80
    t.column :canreinvite,        :string, :limit => 3, :default => 'yes'
    t.column :context,            :string, :limit => 80
    t.column :defaultip,          :string, :limit => 15
    t.column :dtmfmode,           :string, :limit => 7
    t.column :fromuser,           :string, :limit => 80
    t.column :fromdomain,         :string, :limit => 80
    t.column :fullcontact,        :string, :limit => 80
    t.column :host,               :string, :limit => 31, :default => 'dynamic'
    t.column :insecure,           :string, :limit => 4
    t.column :language,           :string, :limit => 2
    t.column :mailbox,            :string, :limit => 50
    t.column :md5secret,          :string, :limit => 80
    t.column :nat,                :string, :limit => 5, :default => 'no'
    t.column :deny,               :string, :limit => 95
    t.column :permit,             :string, :limit => 95
    t.column :mask,               :string, :limit => 95
    t.column :pickupgroup,        :string, :limit => 10
    t.column :port,               :string, :limit => 5, :default => ''
    t.column :qualify,            :string, :limit => 3
    t.column :restrictcid,        :string, :limit => 1
    t.column :rtptimeout,         :string, :limit => 3
    t.column :rtpholdtimeout,     :string, :limit => 3
    t.column :secret,             :string, :limit => 80
    t.column :type,               :string, :limit => 6, :default => 'friend'
    t.column :username,           :string, :limit => 80
    t.column :disallow,           :string, :limit => 100
    t.column :allow,              :string, :limit => 100
    t.column :musiconhold,        :string, :limit => 100
    t.column :regseconds,         :integer, :limit => 11, :default => 0
    t.column :ipaddr,             :string, :limit => 15, :default => '0'
    t.column :regexten,           :string, :limit => 80
    t.column :cancallforward,     :string, :limit => 3, :default => 'yes'
    t.column :setvar,             :string, :limit => 100
    #Additional fields for IAX2
    t.column :dbsecret,           :string, :limit => 100
    t.column :inkeys,             :string, :limit => 100
    t.column :outkey,             :string, :limit => 100
    t.column :auth,               :string, :limit => 100
  end
  
  #Asterisk extensions table
  create_table "extensions", :force => true do |t|
    t.column :context,                :string, :limit => 20, :null => false
    t.column :exten,                  :string, :limit => 20, :null => false
    t.column :priority,               :integer, :limit => 4, :default => 0
    t.column :app,                    :string, :limit => 20, :null => false
    t.column :appdata,                :string, :limit => 128, :null => false
  end
  
  #Asterisk queues table
  create_table "callqueues", :force => true do |t|
    t.column :name,                   :string, :limit => 128
    t.column :musiconhold,            :string, :limit => 128
    t.column :announce,               :string, :limit => 128
    t.column :timeout,                :integer, :limit => 11
    t.column :monitor_join,           :boolean
    t.column :monitor_format,         :string, :limit => 128
    t.column :queue_youarenext,       :string, :limit => 128
    t.column :queue_thereare,         :string, :limit => 128
    t.column :queue_callswaiting,     :string, :limit => 128
    t.column :queue_holdtime,         :string, :limit => 128
    t.column :queue_minutes,          :string, :limit => 128
    t.column :queue_seconds,          :string, :limit => 128
    t.column :queue_lessthan,         :string, :limit => 128
    t.column :queue_thankyou,         :string, :limit => 128
    t.column :queue_reporthold,       :string, :limit => 128
    t.column :announce_frequency,     :integer, :limit => 11
    t.column :announce_round_seconds, :integer, :limit => 11
    t.column :announce_holdtime,      :string, :limit => 128
    t.column :retry,                  :integer, :limit => 11
    t.column :wrapuptime,             :integer, :limit => 11
    t.column :maxlen,                 :integer, :limit => 11
    t.column :servicelevel,           :integer, :limit => 11
    t.column :strategy,               :string, :limit => 128
    t.column :joinempty,              :string, :limit => 128
    t.column :leavewhenempty,         :string, :limit => 128
    t.column :eventmemberstatus,      :boolean
    t.column :eventwhencalled,        :boolean
    t.column :reportholdtime,         :boolean
    t.column :memberdelay,            :integer, :limit => 11
    t.column :weight,                 :integer, :limit => 11
    t.column :timeoutrestart,         :boolean
  end

  #Asterisk voicemail extended table
  create_table "voicemailboxes", :force => true do |t|
    t.column :customer_id,            :string, :limit => 11, :null => false
    t.column :context,                :string, :limit => 50, :default => '0'
    t.column :mailbox,                :string, :limit => 11, :null => false
    t.column :password,               :integer, :limit => 5, :default => '0'
    t.column :fullname,               :string, :limit => 150, :null => false
    t.column :email,                  :string, :limit => 50, :null => false
    t.column :pager,                  :string, :limit => 50, :default => ''
    t.column :tz,                     :string, :limit => 10, :default => 'central'
    t.column :attach,                 :string, :limit => 4, :default => 'yes'
    t.column :saycid,                 :string, :limit => 4, :default => 'yes'
    t.column :dialout,                :string, :limit => 10, :default => ''
    t.column :callback,               :string, :limit => 10, :default => ''
    t.column :review,                 :string, :limit => 4, :default => 'no'
    t.column :operator,               :string, :limit => 4, :default => 'no'
    t.column :envelope,               :string, :limit => 4, :default => 'no'
    t.column :sayduration,            :string, :limit => 4, :default => 'no'
    t.column :saydurationm,           :integer, :limit => 4, :default => 1
    t.column :sendvoicemail,          :string, :limit => 4, :default => 'no'
    t.column :delete,                 :string, :limit => 4, :default => 'no'
    t.column :nextaftercmd,           :integer, :limit => 4, :default => 'yes'
    t.column :forcename,              :integer, :limit => 4, :default => 'no'
    t.column :forcegreetings,         :integer, :limit => 4, :default => 'no'
    t.column :hidefromdir,            :string, :limit => 4, :default => 'yes'
    t.column :stamp,                  :timestamp
  end

  #Asterisk voicemail extended table
  create_table "voicemailmessages", :force => true do |t|
    t.column :msgnum,                 :integer, :limit => 11, :default => 0
    t.column :dir,                    :string, :limit => 80, :default => ''
    t.column :context,                :string, :limit => 80, :default => ''
    t.column :macrocontext,           :string, :limit => 80, :default => ''
    t.column :callerid,               :string, :limit => 40, :default => ''
    t.column :origtime,               :string, :limit => 40, :default => ''
    t.column :duration,               :string, :limit => 20, :default => ''
    t.column :mailboxuser,            :string, :limit => 80, :default => ''
    t.column :mailboxcontext,         :string, :limit => 80, :default => ''
    t.column :recording,              :longblob
  end
    
end



Models (app/models/)


app/models/callqueue.rb

class Callqueue < ActiveRecord::Base
validates_presence_of :name
validates_uniqueness_of :name
end


app/models/device.rb

class Device < ActiveRecord::Base
validates_presence_of :name, :context
validates_uniqueness_of :name
end


app/models/extension.rb

class Extension < ActiveRecord::Base
validates_presence_of :context, :exten, :priority, :app, :appdata
end


app/models/voicemailbox.rb

class Voicemailbox < ActiveRecord::Base
validates_presence_of :customer_id
validates_uniqueness_of :customer_id
end


app/models/voicemessage.rb

class Voicemailmessage < ActiveRecord::Base
end




See Also


Created by: muppetmaster, Last modification: Sun 20 of May, 2012 (20:23 UTC) by admin
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+