huginn_elks46_mms_agent 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/huginn_elks46_mms_agent.rb +4 -0
- data/lib/huginn_elks46_mms_agent/elks46_mms_agent.rb +90 -0
- data/spec/elks46_mms_agent_spec.rb +91 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bacb90895ee3229f7e187be5e92c7af424b581ea68b5f1a3dbbf2cde2c0be8e0
|
4
|
+
data.tar.gz: c93ae24c541d1011822989138dbb8cde6ba38126bdabcea52889bdf619909f08
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aa9abab11053bcb55b41b8a64dfa414321bc352109acf90eb2c4e066b0c7d54d903777d8799fae58c7368b4636558922537fda68c7b64809d3064aaeacb43f97
|
7
|
+
data.tar.gz: 455471a6adb25022bc7616c46ffe7ba2a7b3d8a350a8d135afd68d4c1e226b2168b2731c20e5e1750dd443a9eaf3645c1f3d3b52ce2aba7e18bace47ec33b83b
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module Agents
|
4
|
+
class Elks46MmsAgent < Agent
|
5
|
+
no_bulk_receive!
|
6
|
+
cannot_create_events!
|
7
|
+
cannot_be_scheduled!
|
8
|
+
description <<-MD
|
9
|
+
Integration that enables you to **send** MMS from Huginn.
|
10
|
+
|
11
|
+
Define your API credentials (`api_username` and `api_password`) which you can find at your [46elks account](https://46elks.com).
|
12
|
+
|
13
|
+
Options:
|
14
|
+
|
15
|
+
* `from` - The phone number to send from. Must be an MMS-enabled [Virtual Phone Number](https://46elks.com/products/virtual-numbers) or the text "noreply". We will replace the sender id with a random phone number if "noreply" is used.
|
16
|
+
|
17
|
+
* `to` - The phone number of the recipient in [E.164 format](https://46elks.com/kb/e164).
|
18
|
+
|
19
|
+
* `message` - A message to be sent with the MMS. Either message or image must be present in the API request.
|
20
|
+
|
21
|
+
* `image` - Either a data URL or a publicly accessible URL that points to an image. GIF, PNG and JPEG images are supported. Either image or message must be present in the API request.
|
22
|
+
MD
|
23
|
+
|
24
|
+
def default_options
|
25
|
+
{
|
26
|
+
'api_username' => 'u6xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
27
|
+
'api_password' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
28
|
+
'from' => 'noreply',
|
29
|
+
'to' => ['+46700000000'],
|
30
|
+
'image' => 'https://46elks.com/press/46elks-blue-png',
|
31
|
+
'message' => 'Hello this is Huginn using 46elks.',
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def validate_options
|
36
|
+
unless options['api_username'].present?
|
37
|
+
errors.add(:base, '`api_username` is required.')
|
38
|
+
end
|
39
|
+
unless options['api_password'].present?
|
40
|
+
errors.add(:base, '`api_password` is required.')
|
41
|
+
end
|
42
|
+
unless interpolated['from'].present?
|
43
|
+
errors.add(:base, '`from` is required.')
|
44
|
+
end
|
45
|
+
unless interpolated['to'].present?
|
46
|
+
errors.add(:base, '`to` is required.')
|
47
|
+
end
|
48
|
+
unless interpolated['message'].present? || interpolated['image'].present?
|
49
|
+
errors.add(:base, 'At least one of `image` or `message` must be present.')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def working?
|
54
|
+
!recent_error_logs?
|
55
|
+
end
|
56
|
+
|
57
|
+
def receive(incoming_events)
|
58
|
+
incoming_events.each do |event|
|
59
|
+
interpolate_with event do
|
60
|
+
send_mms(interpolated)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def send_mms(payload)
|
66
|
+
payload['to'].each do |to_recipient|
|
67
|
+
uri = URI('https://api.46elks.com/a1/mms')
|
68
|
+
req = Net::HTTP::Post.new(uri)
|
69
|
+
req.basic_auth options['api_username'], options['api_password']
|
70
|
+
req.set_form_data(
|
71
|
+
:from => payload['from'],
|
72
|
+
:to => to_recipient,
|
73
|
+
:image => payload['image'],
|
74
|
+
:message => payload['message']
|
75
|
+
)
|
76
|
+
|
77
|
+
res = Net::HTTP.start(
|
78
|
+
uri.host,
|
79
|
+
uri.port,
|
80
|
+
:use_ssl => uri.scheme == 'https') do |http|
|
81
|
+
http.request req
|
82
|
+
end
|
83
|
+
|
84
|
+
unless res.is_a?(Net::HTTPSuccess)
|
85
|
+
error("Error: #{res.body}")
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
require 'huginn_agent/spec_helper'
|
3
|
+
|
4
|
+
describe Agents::Elks46MmsAgent do
|
5
|
+
before do
|
6
|
+
default_options = {
|
7
|
+
'api_username' => 'u6xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
8
|
+
'api_password' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
9
|
+
'from' => 'noreply',
|
10
|
+
'to' => ['+46700000000'],
|
11
|
+
'image' => 'https://46elks.com/press/46elks-blue-png',
|
12
|
+
'message' => 'Hello this is Huginn using 46elks.',
|
13
|
+
}
|
14
|
+
|
15
|
+
@checker = Agents::Elks46MmsAgent.new name: 'elks46 MMS Tester', options: default_options
|
16
|
+
@checker.user = users(:bob)
|
17
|
+
@checker.save!
|
18
|
+
end
|
19
|
+
|
20
|
+
def event_with_payload(payload)
|
21
|
+
event = Event.new
|
22
|
+
event.agent = agents(:bob_manual_event_agent)
|
23
|
+
event.payload = payload
|
24
|
+
event.save!
|
25
|
+
event
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def stub_methods
|
30
|
+
stub.any_instance_of(Agents::Elks46MmsAgent).send_mms do |params|
|
31
|
+
@sent_messages << params
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'validation' do
|
36
|
+
before do
|
37
|
+
expect(@checker).to be_valid
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should validate the presence of api_username" do
|
41
|
+
@checker.options[:api_username] = ''
|
42
|
+
expect(@checker).not_to be_valid
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should validate the presence of api_password" do
|
46
|
+
@checker.options[:api_password] = ''
|
47
|
+
expect(@checker).not_to be_valid
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should validate the presence of from" do
|
51
|
+
@checker.options[:from] = ''
|
52
|
+
expect(@checker).not_to be_valid
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should validate the presence of to" do
|
56
|
+
@checker.options[:to] = ''
|
57
|
+
expect(@checker).not_to be_valid
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should validate the presence of message or image" do
|
61
|
+
@checker.options[:message] = ''
|
62
|
+
@checker.options[:image] = ''
|
63
|
+
expect(@checker).not_to be_valid
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '#receive' do
|
68
|
+
before do
|
69
|
+
stub_methods
|
70
|
+
@sent_messages = []
|
71
|
+
|
72
|
+
expect(@checker).to be_valid
|
73
|
+
end
|
74
|
+
it "should receive event" do
|
75
|
+
event = event_with_payload from: "noreply", to: ["+46700000000"], image: "https://46elks.com/press/46elks-blue-png", message: "Hello this is Huginn using 46elks."
|
76
|
+
@checker.receive [event]
|
77
|
+
|
78
|
+
expect(@sent_messages).to eq([
|
79
|
+
{
|
80
|
+
"api_username": 'u6xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
81
|
+
"api_password": 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
|
82
|
+
"from": 'noreply',
|
83
|
+
"to": ["+46700000000"],
|
84
|
+
"image": 'https://46elks.com/press/46elks-blue-png',
|
85
|
+
"message": 'Hello this is Huginn using 46elks.',
|
86
|
+
}.stringify_keys
|
87
|
+
])
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: huginn_elks46_mms_agent
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- antonmyr
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-07-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: huginn_agent
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description:
|
56
|
+
email:
|
57
|
+
- anton@46elks.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- lib/huginn_elks46_mms_agent.rb
|
63
|
+
- lib/huginn_elks46_mms_agent/elks46_mms_agent.rb
|
64
|
+
- spec/elks46_mms_agent_spec.rb
|
65
|
+
homepage: https://github.com/antonmyr/huginn_elks46_mms_agent
|
66
|
+
licenses: []
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubygems_version: 3.0.3
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: Send MMS from Huginn using 46elks.
|
87
|
+
test_files:
|
88
|
+
- spec/elks46_mms_agent_spec.rb
|