lib/stealth/generators/builder/bot/controllers/bot_controller.rb in stealth-1.1.6 vs lib/stealth/generators/builder/bot/controllers/bot_controller.rb in stealth-2.0.0.beta1
- old
+ new
@@ -1,13 +1,55 @@
+# frozen_string_literal: true
+
class BotController < Stealth::Controller
helper :all
def route
+ if current_message.payload.present?
+ handle_payloads
+ # Clear out the payload to prevent duplicate handling
+ current_message.payload = nil
+ return
+ end
+
+ # Allow devs to jump around flows and states by typing:
+ # /flow_name/state_name or
+ # /flow_name (jumps to first state) or
+ # //state_name (jumps to state in current flow)
+ # (only works for bots in development)
+ return if dev_jump_detected?
+
if current_session.present?
step_to session: current_session
else
step_to flow: 'hello', state: 'say_hello'
end
+ end
+
+private
+
+ # Handle payloads globally since payload buttons remain in the chat
+ # and we cannot guess in which states they will be tapped.
+ def handle_payloads
+ case current_message.payload
+ when 'developer_restart', 'new_user'
+ step_to flow: 'hello', state: 'say_hello'
+ when 'goodbye'
+ step_to flow: 'goodbye'
+ end
+ end
+
+ # Automatically called when clients receive an opt-out error from
+ # the platform. You can write your own steps for handling.
+ def handle_opt_out
+ do_nothing
+ end
+
+ # Automatically called when clients receive an invalid session_id error from
+ # the platform. For example, attempting to text a landline.
+ # You can write your own steps for handling.
+ def handle_invalid_session_id
+ do_nothing
end
end