Have you ever thought about starting a Reminder Service company and getting millions of dollars in funding all from a weekend project?  Tropo is here to help you with your communications needs in this endeavor!

The Reminder Service source code that I am about to share with you was started on the Nerd Bird (good to have in-flight WiFi) from Orlando to Phoenix, on my way back from the HIMSS conference.  It’s written in Ruby on Rails 3.0.4 and the Tropo Scripting API.

This is Tropo application is designed to demonstrate building a Reminder Service application using both Voice and SMS alerts.  The application will place an outbound reminder call to you 1 week in advance and then 1 day in advance and an SMS message 1 hour in advance of your appointment time.

You can demo the Reminder Service running on Heroku now.  It’s a basic Ruby on Rails scaffolding interface with the ability to create, update, and delete reminders.  All reminders are tracked in UTC time to simplify the demo and there is no authentication because IT’S A DEMO.

The source code is on GitHub.  Simply clone this application from GitHub and run the following statements from your command line:

bundle install
rake db:create
rake db:migrate

Setup an account at Tropo and create a new Scripting API application.  Copy and paste the source code from tropo_scripting_api.rb into separate scripts running under the same application. One for placing outbound voice call reminders and one for sending SMS message reminders.

Here is the source code to place the phone call on Tropo.

message($remindermessage, {
  :to => $phonenumber,
  :channel => "VOICE"
})

Here is the source code to send an SMS message on Tropo.

message($remindermessage, {
  :to => $phonenumber,
  :network => "SMS"
})

Add a phone number to your Tropo application.  SMS messages will not work without one.

The rest of the magic happens in the API controller as shown below:

class ApiController < ApplicationController
  def check
    require 'time'

    @reminders = Reminder.where("(appointment > ?) and (appointment < ?) and ( flag1 IS NULL or flag2 IS NULL or flag3 IS NULL)", Time.now.utc, Time.now.utc+1.week )

    @reminders.each do |reminder|

      if reminder.appointment-1.hour < Time.now.utc && reminder.flag3.nil?

        # Send SMS
        RestClient.get 'https://api.tropo.com/1.0/sessions', {:params => {
          :action => 'create',
          :token => '848b6b17c6229844827847b381...58eaa12683b6ea0a8aa5e166ee7bfcc8',
          :phonenumber => formatphone(reminder.phonenumber),
          :remindermessage => 'dont forget ' + reminder.message.to_s + ' at ' + reminder.appointment.to_s}}

        # Write Flag3
        @reminder = Reminder.find(reminder.id)
        @reminder.flag3 = true
        @reminder.save

      elsif reminder.appointment-1.day < Time.now.utc  && reminder.flag2.nil?

        # Place outbound reminder call
        RestClient.get 'https://api.tropo.com/1.0/sessions', {:params => {
          :action => 'create',
          :token => '3d5eed33429706408efcc0e92307b...d04af908e583112195de9ec7b05b9e',
          :phonenumber => formatphone(reminder.phonenumber),
          :remindermessage => 'dont forget ' + reminder.message.to_s + ' at ' + reminder.appointment.to_s}}

        # Write Flag2
        @reminder = Reminder.find(reminder.id)
        @reminder.flag2 = true
        @reminder.save

      elsif reminder.appointment-1.week < Time.now.utc && reminder.flag1.nil?

        # Place outbound reminder call
        RestClient.get 'https://api.tropo.com/1.0/sessions', {:params => {
          :action => 'create',
          :token => '3d5eed33429706408efcc0e92307b04...908e583112195de9ec7b05b9e',
          :phonenumber => formatphone(reminder.phonenumber),
          :remindermessage => 'dont forget ' + reminder.message.to_s + ' at ' + reminder.appointment.to_s}}

        # Write Flag1
        @reminder = Reminder.find(reminder.id)
        @reminder.flag1 = true
        @reminder.save
      end
    end

    if @reminders
      render :text => "sent " + @reminders.length.to_s + " reminders"
    else
      render :text => "no reminders"
    end
  end

  def formatphone(phone)
    @phone = phone.gsub("(", "").gsub(")", "").gsub("-", "").gsub(".", "").gsub(" ", "")
    if @phone[0..0] != '1'
      @phone = '1' + @phone
    end
    return @phone
  end
end

Now for the drum roll! Setup a cron job to call http://localhost:3000/api/check every 5 minutes, run rails server, and open your web browser to http://localhost:3000!  Oh, one last thing…Go ask one of those “super angels” for some cash-money :)

Originally from Voxeo Blogs