ab54d9c629
ruby version: 3.0.2 rails version: 6.1.4
56 lines
1.4 KiB
Ruby
56 lines
1.4 KiB
Ruby
class Api::V1::Accounts::Channels::TwilioChannelsController < Api::V1::Accounts::BaseController
|
|
before_action :authorize_request
|
|
|
|
def create
|
|
ActiveRecord::Base.transaction do
|
|
authenticate_twilio
|
|
build_inbox
|
|
setup_webhooks if @twilio_channel.sms?
|
|
rescue StandardError => e
|
|
Sentry.capture_exception(e)
|
|
render_could_not_create_error(e.message)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def authorize_request
|
|
authorize ::Inbox
|
|
end
|
|
|
|
def authenticate_twilio
|
|
client = Twilio::REST::Client.new(permitted_params[:account_sid], permitted_params[:auth_token])
|
|
client.messages.list(limit: 1)
|
|
end
|
|
|
|
def setup_webhooks
|
|
::Twilio::WebhookSetupService.new(inbox: @inbox).perform
|
|
end
|
|
|
|
def phone_number
|
|
medium == 'sms' ? permitted_params[:phone_number] : "whatsapp:#{permitted_params[:phone_number]}"
|
|
end
|
|
|
|
def medium
|
|
permitted_params[:medium]
|
|
end
|
|
|
|
def build_inbox
|
|
@twilio_channel = Current.account.twilio_sms.create!(
|
|
account_sid: permitted_params[:account_sid],
|
|
auth_token: permitted_params[:auth_token],
|
|
phone_number: phone_number,
|
|
medium: medium
|
|
)
|
|
@inbox = Current.account.inboxes.create(
|
|
name: permitted_params[:name],
|
|
channel: @twilio_channel
|
|
)
|
|
end
|
|
|
|
def permitted_params
|
|
params.require(:twilio_channel).permit(
|
|
:account_id, :phone_number, :account_sid, :auth_token, :name, :medium
|
|
)
|
|
end
|
|
end
|