51 lines
1.3 KiB
Ruby
51 lines
1.3 KiB
Ruby
class Api::V1::Accounts::Channels::TwilioChannelsController < Api::BaseController
|
|
before_action :authorize_request
|
|
|
|
def create
|
|
authenticate_twilio
|
|
build_inbox
|
|
setup_webhooks
|
|
rescue Twilio::REST::TwilioError => e
|
|
render_could_not_create_error(e.message)
|
|
rescue StandardError => e
|
|
render_could_not_create_error(e.message)
|
|
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 build_inbox
|
|
ActiveRecord::Base.transaction do
|
|
twilio_sms = current_account.twilio_sms.create(
|
|
account_sid: permitted_params[:account_sid],
|
|
auth_token: permitted_params[:auth_token],
|
|
phone_number: permitted_params[:phone_number]
|
|
)
|
|
@inbox = current_account.inboxes.create(
|
|
name: permitted_params[:name],
|
|
channel: twilio_sms
|
|
)
|
|
rescue StandardError => e
|
|
render_could_not_create_error(e.message)
|
|
end
|
|
end
|
|
|
|
def permitted_params
|
|
params.require(:twilio_channel).permit(
|
|
:account_id, :phone_number, :account_sid, :auth_token, :name
|
|
)
|
|
end
|
|
end
|