@@ 5,6 5,6 @@ Response
PlayAudio= "/beep.mp3"
Record{
transcribe=transcription_enabled.to_s
- recordingAvailableUrl="/inbound/calls/#{pseudo_call_id}/voicemail/audio"
- transcriptionAvailableUrl="/inbound/calls/#{pseudo_call_id}/voicemail/transcription"
+ recordingAvailableUrl="/inbound/calls/#{params['callId']}/voicemail/audio"
+ transcriptionAvailableUrl="/inbound/calls/#{params['callId']}/voicemail/transcription"
fileFormat="mp3"} /
@@ 55,11 55,10 @@ class Web < Roda
plugin RodaEMPromise # Must go last!
class << self
- attr_reader :customer_repo, :log, :true_inbound_call, :outbound_transfers
+ attr_reader :customer_repo, :log, :outbound_transfers
def run(log, *listen_on)
plugin :common_logger, log, method: :info
- @true_inbound_call = {}
@outbound_transfers = {}
Thin::Logging.logger = log
Thin::Server.start(
@@ 71,7 70,7 @@ class Web < Roda
end
extend Forwardable
- def_delegators :'self.class', :true_inbound_call, :outbound_transfers
+ def_delegators :'self.class', :outbound_transfers
def_delegators :request, :params
def log
@@ 98,11 97,6 @@ class Web < Roda
end
end
- def pseudo_call_id
- request.captures_hash[:pseudo_call_id] ||
- Digest::SHA256.hexdigest("#{params['from']},#{params['to']}")
- end
-
TEL_CANDIDATES = {
"Restricted" => "14",
"anonymous" => "15",
@@ 130,7 124,7 @@ class Web < Roda
end
def inbound_calls_path(suffix)
- ["/inbound/calls/#{pseudo_call_id}", suffix].compact.join("/")
+ ["/inbound/calls/#{params['callId']}", suffix].compact.join("/")
end
def url(path)
@@ 152,38 146,29 @@ class Web < Roda
r.on "calls" do
r.post "status" do
if params["eventType"] == "disconnect"
- p_call_id = pseudo_call_id
- call_id = params["callId"]
- EM.promise_timer(2).then {
- next unless true_inbound_call[p_call_id] == call_id
-
- true_inbound_call.delete(p_call_id)
-
- if (outbound_leg = outbound_transfers.delete(p_call_id))
- modify_call(outbound_leg) do |call|
- call.state = "completed"
- end
+ if (outbound_leg = outbound_transfers.delete(params["callId"]))
+ modify_call(outbound_leg) do |call|
+ call.state = "completed"
end
+ end
- CustomerRepo.new.find_by_tel(params["to"]).then do |customer|
- CDR.for_inbound(customer.customer_id, params).save
- end
- }.catch(&method(:log_error))
+ CustomerRepo.new.find_by_tel(params["to"]).then do |customer|
+ CDR.for_inbound(customer.customer_id, params).save
+ end
end
"OK"
end
- r.on :pseudo_call_id do |pseudo_call_id|
+ r.on :call_id do |call_id|
r.post "transfer_complete" do
- outbound_leg = outbound_transfers.delete(pseudo_call_id)
+ outbound_leg = outbound_transfers.delete(call_id)
if params["cause"] == "hangup"
log.debug "Normal hangup", loggable_params
elsif !outbound_leg
log.debug "Inbound disconnected", loggable_params
else
log.debug "Go to voicemail", loggable_params
- true_call_id = true_inbound_call[pseudo_call_id]
- modify_call(true_call_id) do |call|
+ modify_call(call_id) do |call|
call.redirect_url = url inbound_calls_path(:voicemail)
end
end
@@ 245,22 230,15 @@ class Web < Roda
end
r.post do
- true_call_id = true_inbound_call[pseudo_call_id]
- render :bridge, locals: { call_id: true_call_id }
+ render :bridge, locals: { call_id: call_id }
end
end
r.post do
- if true_inbound_call[pseudo_call_id]
- true_inbound_call[pseudo_call_id] = params["callId"]
- return render :pause, locals: { duration: 300 }
- end
-
CustomerRepo.new(
sgx_repo: Bwmsgsv2Repo.new
).find_by_tel(params["to"]).then(&:fwd).then do |fwd|
call = fwd.create_call(CONFIG[:creds][:account]) { |cc|
- true_inbound_call[pseudo_call_id] = params["callId"]
cc.from = params["from"]
cc.application_id = params["applicationId"]
cc.answer_url = url inbound_calls_path(nil)
@@ 268,8 246,8 @@ class Web < Roda
}
if call
- outbound_transfers[pseudo_call_id] = call
- render :pause, locals: { duration: 300 }
+ outbound_transfers[params["callId"]] = call
+ render :ring, locals: { duration: 300 }
else
render :redirect, locals: { to: inbound_calls_path(:voicemail) }
end