/action_messenger

Framework for delivering messages to Messenger tools.

Primary LanguageRubyMIT LicenseMIT

ActionMessenger

Framework for delivering messages to Messenger. Currently only slack is supported.

Installation

Add this line to your application's Gemfile:

gem 'action_messenger'

And then execute:

$ bundle

Or install it yourself as:

$ gem install action_messenger

Configuration

 ActionMessenger.configure do |config|
   config.slack_api_token = ENV['SLACK_API_TOKEN']  # for slack
   config.views_path = "/app/views" #default: Rails.root.join("app","views")
   config.logger = Logger.new("your_log_path") # default: Rails.logger
end

Generation

Rails

bundle exec rails generate messenger account registerd_notify removed_notify

# create  app/messengers/account_messenger.rb
# create  app/messengers/application_messenger.rb
# create  app/views/account_messengers/registerd_notify.text.erb
# create  app/views/account_messengers/removed_notify.text.erb 

Usage

class AccountMessenger < ApplicationMessenger 

  def registered_notify(registered_accout_id)
    @account = Account.find(registered_account)
    message_to_slack(channel: "#account-registerd-notice")
  end

end

AccountMessenger.registerd_notify(@account.id).deliver_now!
# or
AccountMessenger.registerd_notify(@account.id).deliver_later! # for active job

Handle exception

class AccountMessenger < ApplicationMessenger

  rescue_from Exception, with: -> { }
  rescue_from HogeError, with: -> { }

end

Send messages

In the instance method of the class inheriting ActionMessenger::Base, the following methods can be used.

Message to Slack

# When the text option is specified, it becomes a message, and if not specified, the contents of the corresponding View template becomes a message.
message_to_slack(channel: '#sample', options: {text: 'hogehoge'})
# You can also specify attachments.
message_to_slack(channel: '#sample', options: {attachments: [{"pretext": "pre-hello", "text": "text-world"}]})
# And other options.
# -> https://api.slack.com/methods/chat.postMessage

File upload to Slack

upload_file_to_slack(channels: '#general',file: Faraday::UploadIO.new('/path/to/sample.jpg', 'image/jpg'), options: {})
# And other options.
# -> https://api.slack.com/methods/files.upload

Get delivery logs

class AccouyntMessenger < ApplicationMessenger
  def notify
    message_to_slack(channel: '#sample', options: {text: 'hoge'})
  end
end
message_delivery = AccountMessenger.notify
notify.deliver_now!
p message_delivery.messenger.deliveries
# => [#<struct ActionMessenger::Base::DeliveryLog method=:message_to_slack, channels="#sample", result=#<Slack::Messages::Message channel="xxxxx" message=#<Slack::Messages::Message bot_id="xxxxx" subtype="bot_message" text="hoge" ts="xxxxx" type="message" username="Slack API Tester"> ok=true ts="xxxxx">>]

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/shunhikita/action_messenger.

License

The gem is available as open source under the terms of the MIT License.