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.
@@ -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,4 @@
1
+ require 'huginn_agent'
2
+
3
+ #HuginnAgent.load 'huginn_elks46_mms_agent/concerns/my_agent_concern'
4
+ HuginnAgent.register 'huginn_elks46_mms_agent/elks46_mms_agent'
@@ -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