grokify/lita-ringcentral

View on GitHub
lib/lita/adapters/ringcentral/connector.rb

Summary

Maintainability
A
1 hr
Test Coverage
require 'lita/adapters/ringcentral/callback'
require 'ringcentral_sdk'

module Lita
  module Adapters
    class RingCentral < Adapter
      class Connector
        attr_reader :robot, :client

        def initialize(robot, app_key, app_secret, server, username, extension, password, token, sms_number)
          @robot = robot
          @client = RingCentralSdk::REST::Client.new do |config|
            config.server_url = server
            config.app_key = app_key
            config.app_secret = app_secret
            config.logger = Lita.logger
          end
          @username = username
          @extension = extension
          @password = password
          @token = token
          @sms_number = sms_number
          @logger_prefix = " -- #{self.class.name}: "
        end

        def connect
          client_connect
        end

        def client_connect
          Lita.logger.info("#{@logger_prefix}Authenticating with RingCentral.")
          if @token.nil?
            @client.authorize_password @username, @extension, @password
          else
            @client.set_token @token
          end

          @subscription = @client.create_subscription
          @subscription.subscribe([
            '/restapi/v1.0/account/~/extension/~/message-store/instant?type=SMS'
          ])

          observer = Lita::Adapters::RingCentral::Callback.new @robot
          @subscription.add_observer observer
        end

        def message(to_number, strings)
          Lita.logger.info("#{@logger_prefix}Sending message to #{to_number}")
          Lita.logger.info MultiJson.encode(strings)
          strings.each do |s|
            @client.messages.sms.create(
              from: @sms_number,
              to: to_number,
              text: s
            )
          end
        end
      end
    end
  end
end