|
module Agents
class BoxcarAgent < Agent
cannot_be_scheduled!
cannot_create_events!
API_URL = 'https://new.boxcar.io/api/notifications'
description <<-MD
The Boxcar agent sends push notifications to iPhone.
To be able to use the Boxcar end-user API, you need your `Access Token`.
The access token is available on general "Settings" screen of Boxcar iOS
app or from Boxcar Web Inbox settings page.
Please provide your access token in the `user_credentials` option. If
you'd like to use a credential, set the `user_credentials` option to `{%
credential CREDENTIAL_NAME %}`.
Options:
* `user_credentials` - Boxcar access token.
* `title` - Title of the message.
* `body` - Body of the message.
* `source_name` - Name of the source of the message. Set to `Huginn` by default.
* `icon_url` - URL to the icon.
* `sound` - Sound to be played for the notification. Set to 'bird-1' by default.
MD
def default_options
{
'user_credentials' => '',
'title' => "{{title}}",
'body' => "{{body}}",
'source_name' => "Huginn",
'icon_url' => "",
'sound' => "bird-1"
}
end
def working?
received_event_without_error?
end
def strip(string)
(string || '').strip
end
def validate_options
errors.add(:base, "you need to specify a boxcar api key") if options['user_credentials'].blank?
end
def receive(incoming_events)
incoming_events.each do |event|
payload_interpolated = interpolated(event)
user_credentials = payload_interpolated['user_credentials']
post_params = {
'user_credentials' => user_credentials,
'notification' => {
'title' => strip(payload_interpolated['title']),
'long_message' => strip(payload_interpolated['body']),
'source_name' => payload_interpolated['source_name'],
'sound' => payload_interpolated['sound'],
'icon_url' => payload_interpolated['icon_url']
}
}
send_notification(post_params)
end
end
def send_notification(post_params)
response = HTTParty.post(API_URL, :query => post_params)
raise StandardError, response['error']['message'] if response['error'].present?
if response['Response'].present? && response['Response'] == "Not authorized"
raise StandardError, response['Response']
end
if !response['id'].present?
raise StandardError, "Invalid response from Boxcar: #{response}"
end
end
end
end
|