mirror of
https://github.com/Fishwaldo/huginn.git
synced 2025-03-16 11:51:43 +00:00
82 lines
2.6 KiB
Ruby
82 lines
2.6 KiB
Ruby
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
|