-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathweb.rb
More file actions
53 lines (44 loc) · 1.1 KB
/
web.rb
File metadata and controls
53 lines (44 loc) · 1.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
require 'icalendar'
require 'sinatra'
require 'twilio-ruby'
require 'json'
FEED_MAP = JSON.parse(ENV["FEED_MAP"])
FALLBACK = ENV["FALLBACK_NUMBER"]
puts "Loaded feed map: #{FEED_MAP.inspect}"
def find_on_call_number(number)
data = %x{curl -s #{FEED_MAP[number]}}
cal = Icalendar.parse(data)
event = cal.first.events.select { |e|
Date.today >= e.dtstart.value && Date.today < e.dtend.value
}.first
if event
event.location
else
puts "WARNING: No number found, using fallback"
FALLBACK
end
end
def twiml_response(params, type)
puts "#{type} received from #{params[:From]} to #{params[:To]}"
target = find_on_call_number(params[:To])
puts "Target found: #{target}"
response = Twilio::TwiML::Response.new do |r|
yield r, target
end
response.text
end
post '/voice' do
twiml_response(params, "Call") do |r, target|
r.Say "Your call is being redirected"
r.Dial do |d|
d.Number target
end
end
end
post '/sms' do
twiml_response(params, "SMS") do |r, target|
r.Message(to: target, from: params[:To]) do |m|
m.Body params[:Body]
end
end
end