Module: Twilio::Rails::Models::Response
- Extended by:
- ActiveSupport::Concern
- Included in:
- Response
- Defined in:
- lib/twilio/rails/models/response.rb
Overview
A response object is created for every prompt in a phone call. It is associated to a PhoneCall in order, and contains transcriptions, digits, recordings, timestamps, and all other metadata.
Instance Method Summary collapse
-
#answer_no? ⇒ true, false
Returns true if the transcription matches any of the configured "no".
-
#answer_yes? ⇒ true, false
Returns true if the transcription matches any of the configured "yes".
-
#first_for_phone_call?(include_timeouts: true) ⇒ true, false
Returns true if this response is the first time the caller has encountered the given prompt for this phone call.
-
#first_for_phone_caller?(include_timeouts: true) ⇒ true, false
Returns true if this response is the first time the caller has encountered the given prompt across any phone call.
-
#from?(tree:) ⇒ true, false
Checks if the response is for a given tree or trees or tree names.
-
#integer_digits ⇒ Integer?
Returns the digits as an
Integer
entered through the keypad during a phone call asgather:
. -
#is?(tree:, prompt:) ⇒ true, false
Checks if the response is for a given prompt or promts, and given tree or trees or tree names.
-
#pound_star? ⇒ true, false
(also: #star_pound?)
Returns true if the digits entered through the keypad during a phone call as
gather:
contain only*
or#
. -
#transcription_matches?(*patterns) ⇒ true, false
Checks if any of the passed in patterns match the transcription.
Instance Method Details
#answer_no? ⇒ true, false
Returns true if the transcription matches any of the configured "no". Will return false if the transcription is blank. See Configuration#yes_responses for the default values. It is possible for #answer_yes? and #answer_no? to both be false.
114 115 116 |
# File 'lib/twilio/rails/models/response.rb', line 114 def answer_no? transcription_matches?(Twilio::Rails.config.no_responses) end |
#answer_yes? ⇒ true, false
Returns true if the transcription matches any of the configured "yes". Will return false if the transcription is blank. See Configuration#yes_responses for the default values. It is possible for #answer_yes? and #answer_no? to both be false.
105 106 107 |
# File 'lib/twilio/rails/models/response.rb', line 105 def answer_yes? transcription_matches?(Twilio::Rails.config.yes_responses) end |
#first_for_phone_call?(include_timeouts: true) ⇒ true, false
Returns true if this response is the first time the caller has encountered the given prompt for this phone
call. The parameter include_timeouts
defaults to true and flags whether or not to include responses that
are timeouts. If the response is unsaved it will always return false.
124 125 126 127 128 129 |
# File 'lib/twilio/rails/models/response.rb', line 124 def first_for_phone_call?(include_timeouts: true) return false unless id finder = phone_call.responses.prompt(prompt_handle).order(id: :asc) finder = finder.where(timeout: false) if !include_timeouts finder.first&.id == id end |
#first_for_phone_caller?(include_timeouts: true) ⇒ true, false
Returns true if this response is the first time the caller has encountered the given prompt across any phone
call. The parameter include_timeouts
defaults to true and flags whether or not to include responses that
are timeouts. If the response is unsaved it will always return false.
137 138 139 140 141 142 |
# File 'lib/twilio/rails/models/response.rb', line 137 def first_for_phone_caller?(include_timeouts: true) return false unless id finder = phone_caller.responses.prompt(prompt_handle).tree(phone_call.tree_name).order(id: :asc) finder = finder.where(timeout: false) if !include_timeouts finder.first&.id == id end |
#from?(tree:) ⇒ true, false
Checks if the response is for a given tree or trees or tree names.
49 50 51 52 53 |
# File 'lib/twilio/rails/models/response.rb', line 49 def from?(tree:) trees = Array(tree).map { |t| t.is_a?(Twilio::Rails::Phone::Tree) ? t.name : t.to_s } trees.include?(self.phone_call.tree_name) end |
#integer_digits ⇒ Integer?
Returns the digits as an Integer
entered through the keypad during a phone call as gather:
. Returns nil
if the response has no digits, or if the response contains *
or #
characters. Useful for doing branching
logic within a phone tree, such as "Press 2 for sales..." etc..
60 61 62 63 64 |
# File 'lib/twilio/rails/models/response.rb', line 60 def integer_digits return nil unless digits.present? return nil unless digits =~ /\A[0-9]+\Z/ digits.to_i end |
#is?(tree:, prompt:) ⇒ true, false
Checks if the response is for a given prompt or promts, and given tree or trees or tree names.
39 40 41 42 43 |
# File 'lib/twilio/rails/models/response.rb', line 39 def is?(tree:, prompt:) trees = Array(tree).map { |t| t.is_a?(Twilio::Rails::Phone::Tree) ? t.name : t.to_s } from?(tree: tree) && Array(prompt).map(&:to_s).reject(&:blank?).include?(self.prompt_handle) end |
#pound_star? ⇒ true, false Also known as: star_pound?
Returns true if the digits entered through the keypad during a phone call as gather:
contain only *
or #
69 70 71 |
# File 'lib/twilio/rails/models/response.rb', line 69 def pound_star? !!(digits =~ /\A[#*]+\Z/) end |
#transcription_matches?(*patterns) ⇒ true, false
Checks if any of the passed in patterns match the transcription. Will always return false if the
transcription is blank. Patterns can be a String
, Symbol
, Regexp
, or an Array
of any of those. Will
raise ArgumentError
if no transcriptions are passed in.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/twilio/rails/models/response.rb', line 80 def transcription_matches?(*patterns) patterns = Array(patterns).flatten raise ArgumentError, "transcription must match against at least one pattern" if patterns.blank? return false if transcription.blank? patterns.each do |pattern| case pattern when Regexp return true if pattern.match?(transcription) when String, Symbol return true if transcription.downcase.include?(pattern.to_s.downcase) else raise ArgumentError, "can only match a String or Regexp" end end false end |