bobot 2.6.2 → 3.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.
data/lib/bobot/version.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  module Bobot
2
2
  class Version
3
- MAJOR = 2
4
- MINOR = 6
5
- PATCH = 2
3
+ MAJOR = 3
4
+ MINOR = 0
5
+ PATCH = 1
6
6
  PRE = nil
7
7
 
8
8
  class << self
@@ -13,13 +13,11 @@ module Bobot
13
13
  desc 'Bobot install'
14
14
 
15
15
  def install
16
+ remove_file 'config/initializers/bobot.rb'
16
17
  namespace = ask_for('Where do you want to mount bobot?', 'bot', _namespace)
17
- create_file 'config/routes.rb'
18
- gsub_file 'config/routes.rb', %r{mount Bobot::Engine => \'\/.+\'(, as: \'bot\')?}, ''
19
18
  route("mount Bobot::Engine => '/#{namespace}', as: 'bot'")
20
19
  template 'config/initializers/bobot.rb', 'config/initializers/bobot.rb'
21
20
  template 'app/bobot/workflow.rb', 'app/bobot/workflow.rb'
22
- copy_file 'config/bobot.yml', 'config/bobot.yml'
23
21
  copy_file 'config/locales/bobot.en.yml', 'config/locales/bobot.en.yml'
24
22
  copy_file 'config/locales/bobot.fr.yml', 'config/locales/bobot.fr.yml'
25
23
  display 'Installation done', :green
@@ -1,5 +1,5 @@
1
- bobot_config_path = Rails.root.join("config", "bobot.yml")
2
- bobot_config = YAML.safe_load(ERB.new(File.read(bobot_config_path)).result, [], [], true)[Rails.env]
1
+ bobot_config_path = Rails.root.join("config", "secrets.yml")
2
+ bobot_config = YAML.safe_load(ERB.new(File.read(bobot_config_path)).result, [], [], true)[Rails.env]["bobot"]
3
3
 
4
4
  if bobot_config.present?
5
5
  unless bobot_config.key?("pages")
@@ -10,14 +10,13 @@ if bobot_config.present?
10
10
  config.app_secret = bobot_config["app_secret"],
11
11
  config.verify_token = bobot_config["verify_token"],
12
12
  config.domains = bobot_config["domains"],
13
- config.debug_log = bobot_config["debug_log"],
14
13
  config.async = bobot_config["async"],
15
14
  bobot_config["pages"].each do |page|
16
- config.pages << Bobot::Configuration::Page.new(
15
+ config.pages << Bobot::Page.new(
17
16
  slug: page["slug"],
18
17
  language: page["language"],
19
- page_access_token: page["page_access_token"],
20
18
  page_id: page["page_id"],
19
+ page_access_token: page["page_access_token"],
21
20
  get_started_payload: page["get_started_payload"],
22
21
  )
23
22
  end
@@ -10,17 +10,17 @@ en:
10
10
  persistent_menu:
11
11
  composer_input_disabled: false
12
12
  call_to_actions:
13
- - title: "My Account"
14
- type: "nested"
13
+ - type: "nested"
14
+ title: "My Account"
15
15
  call_to_actions:
16
- - title: "What is a chatbot?"
17
- type: "postback"
16
+ - type: "postback"
17
+ title: "What is a chatbot?"
18
18
  payload: "WHAT_IS_A_CHATBOT"
19
- - title: "History"
20
- type: "postback"
19
+ - type: "postback"
20
+ title: "History"
21
21
  payload: "HISTORY_PAYLOAD"
22
- - title: "Contact Info"
23
- type: "postback"
22
+ - type: "postback"
23
+ title: "Contact Info"
24
24
  payload: "CONTACT_INFO_PAYLOAD"
25
25
  - type: "web_url"
26
26
  title: "Get some help"
@@ -9,17 +9,17 @@ fr:
9
9
  persistent_menu:
10
10
  composer_input_disabled: false
11
11
  call_to_actions:
12
- - title: "Mon compte"
13
- type: "nested"
12
+ - type: "nested"
13
+ title: "Mon compte"
14
14
  call_to_actions:
15
- - title: "C'est quoi un chatbot ?"
16
- type: "postback"
15
+ - type: "postback"
16
+ title: "C'est quoi un chatbot ?"
17
17
  payload: "WHAT_IS_A_CHATBOT"
18
- - title: "Historique"
19
- type: "postback"
18
+ - type: "postback"
19
+ title: "Historique"
20
20
  payload: "HISTORY_PAYLOAD"
21
- - title: "Contact Info"
22
- type: "postback"
21
+ - type: "postback"
22
+ title: "Contact Info"
23
23
  payload: "CONTACT_INFO_PAYLOAD"
24
24
  - type: "web_url"
25
25
  title: "Obtenir de l'aide"
@@ -15,7 +15,6 @@ module Bobot
15
15
  gsub_file 'config/routes.rb', %r{mount Bobot::Engine => \'\/.+\'(, as: \'bot\')?}, ''
16
16
  remove_file 'config/initializers/bobot.rb'
17
17
  remove_file 'app/bobot/workflow.rb'
18
- remove_file 'config/bobot.yml'
19
18
  remove_file 'config/locales/bobot.en.yml'
20
19
  remove_file 'config/locales/bobot.fr.yml'
21
20
  display 'Done! Bobot has been uninstalled.'
@@ -7,9 +7,9 @@ RSpec.describe Bobot do
7
7
  config.app_id = 'app_id'
8
8
  config.app_secret = 'app_secret'
9
9
  config.verify_token = 'verify_token'
10
- config.debug_log = true
10
+ config.domains = " test.ltd, domain.ltd "
11
11
  config.async = true
12
- config.pages << Bobot::Configuration::Page.new(
12
+ config.pages << Bobot::Page.new(
13
13
  slug: 'slug',
14
14
  language: 'language',
15
15
  page_access_token: 'page_access_token',
@@ -20,7 +20,7 @@ RSpec.describe Bobot do
20
20
  expect(Bobot.config.app_id).to eql('app_id')
21
21
  expect(Bobot.config.app_secret).to eql('app_secret')
22
22
  expect(Bobot.config.verify_token).to eql('verify_token')
23
- expect(Bobot.config.debug_log).to eql(true)
23
+ expect(Bobot.config.domains).to eql(["test.ltd", "domain.ltd"])
24
24
  expect(Bobot.config.async).to eql(true)
25
25
  expect(Bobot.config.pages[0].slug).to eql('slug')
26
26
  expect(Bobot.config.pages[0].language).to eql('language')
@@ -37,7 +37,8 @@ RSpec.describe Bobot::Dummy do
37
37
  let(:access_token) { 'access_token' }
38
38
 
39
39
  before do
40
- Bobot.config.pages << Bobot::Configuration::Page.new(
40
+ Bobot.config.pages << Bobot::Page.new(
41
+ page_id: payload["recipient"]["id"],
41
42
  page_access_token: access_token,
42
43
  )
43
44
  end
@@ -64,14 +65,16 @@ RSpec.describe Bobot::Dummy do
64
65
 
65
66
  describe '.show_typing' do
66
67
  it 'sends a typing on indicator to the sender' do
67
- expect(subject).to receive(:deliver).with(
68
- payload_template: { sender_action: 'typing_on' }
68
+ expect(subject.page).to receive(:deliver).with(
69
+ payload_template: { sender_action: 'typing_on' },
70
+ to: payload['recipient']['id'],
69
71
  )
70
72
  subject.show_typing(state: true)
71
73
  end
72
74
  it 'sends a typing on indicator to the sender' do
73
- expect(subject).to receive(:deliver).with(
74
- payload_template: { sender_action: 'typing_off' }
75
+ expect(subject.page).to receive(:deliver).with(
76
+ payload_template: { sender_action: 'typing_off' },
77
+ to: payload['recipient']['id'],
75
78
  )
76
79
  subject.show_typing(state: false)
77
80
  end
@@ -79,8 +82,9 @@ RSpec.describe Bobot::Dummy do
79
82
 
80
83
  describe '.mark_as_seen' do
81
84
  it 'sends a typing off indicator to the sender' do
82
- expect(subject).to receive(:deliver).with(
83
- payload_template: { sender_action: 'mark_seen' }
85
+ expect(subject.page).to receive(:deliver).with(
86
+ payload_template: { sender_action: 'mark_seen' },
87
+ to: payload['recipient']['id'],
84
88
  )
85
89
  subject.mark_as_seen
86
90
  end
@@ -88,8 +92,9 @@ RSpec.describe Bobot::Dummy do
88
92
 
89
93
  describe '.reply_with_text' do
90
94
  it 'replies to the sender' do
91
- expect(subject).to receive(:deliver).with(
92
- payload_template: { message: { text: 'Hello, human' } }
95
+ expect(subject.page).to receive(:deliver).with(
96
+ payload_template: { message: { text: 'Hello, human' } },
97
+ to: payload['recipient']['id'],
93
98
  )
94
99
  subject.reply_with_text(text: 'Hello, human')
95
100
  end
@@ -97,7 +102,7 @@ RSpec.describe Bobot::Dummy do
97
102
 
98
103
  describe '.reply_with_image' do
99
104
  it 'replies to the sender' do
100
- expect(subject).to receive(:deliver).with(
105
+ expect(subject.page).to receive(:deliver).with(
101
106
  payload_template: {
102
107
  message: {
103
108
  attachment: {
@@ -109,6 +114,7 @@ RSpec.describe Bobot::Dummy do
109
114
  },
110
115
  },
111
116
  },
117
+ to: payload['recipient']['id'],
112
118
  )
113
119
  subject.reply_with_image(url: 'https://www.foo.bar/image.jpg')
114
120
  end
@@ -116,7 +122,7 @@ RSpec.describe Bobot::Dummy do
116
122
 
117
123
  describe '.reply_with_audio' do
118
124
  it 'replies to the sender' do
119
- expect(subject).to receive(:deliver).with(
125
+ expect(subject.page).to receive(:deliver).with(
120
126
  payload_template: {
121
127
  message: {
122
128
  attachment: {
@@ -127,6 +133,7 @@ RSpec.describe Bobot::Dummy do
127
133
  },
128
134
  },
129
135
  },
136
+ to: payload['recipient']['id'],
130
137
  )
131
138
  subject.reply_with_audio(url: 'https://www.foo.bar/audio.mp3')
132
139
  end
@@ -134,7 +141,7 @@ RSpec.describe Bobot::Dummy do
134
141
 
135
142
  describe '.reply_with_video' do
136
143
  it 'replies to the sender' do
137
- expect(subject).to receive(:deliver).with(
144
+ expect(subject.page).to receive(:deliver).with(
138
145
  payload_template: {
139
146
  message: {
140
147
  attachment: {
@@ -145,6 +152,7 @@ RSpec.describe Bobot::Dummy do
145
152
  },
146
153
  },
147
154
  },
155
+ to: payload['recipient']['id'],
148
156
  )
149
157
  subject.reply_with_video(url: 'https://www.foo.bar/video.mp4')
150
158
  end
@@ -152,7 +160,7 @@ RSpec.describe Bobot::Dummy do
152
160
 
153
161
  describe '.reply_with_file' do
154
162
  it 'replies to the sender' do
155
- expect(subject).to receive(:deliver).with(
163
+ expect(subject.page).to receive(:deliver).with(
156
164
  payload_template: {
157
165
  message: {
158
166
  attachment: {
@@ -163,6 +171,7 @@ RSpec.describe Bobot::Dummy do
163
171
  },
164
172
  },
165
173
  },
174
+ to: payload['recipient']['id'],
166
175
  )
167
176
  subject.reply_with_file(url: 'https://www.foo.bar/file.zip')
168
177
  end
@@ -170,7 +179,7 @@ RSpec.describe Bobot::Dummy do
170
179
 
171
180
  describe '.reply_with_quick_replies' do
172
181
  it 'replies to the sender' do
173
- expect(subject).to receive(:deliver).with(
182
+ expect(subject.page).to receive(:deliver).with(
174
183
  payload_template: {
175
184
  message: {
176
185
  text: 'Pick a color:',
@@ -189,6 +198,7 @@ RSpec.describe Bobot::Dummy do
189
198
  ]
190
199
  },
191
200
  },
201
+ to: payload['recipient']['id'],
192
202
  )
193
203
  subject.reply_with_quick_replies(
194
204
  text: 'Pick a color:',
@@ -208,7 +218,7 @@ RSpec.describe Bobot::Dummy do
208
218
  )
209
219
  end
210
220
  it 'asks the location to the sender' do
211
- expect(subject).to receive(:deliver).with(
221
+ expect(subject.page).to receive(:deliver).with(
212
222
  payload_template: {
213
223
  message: {
214
224
  text: 'Where are you',
@@ -220,6 +230,7 @@ RSpec.describe Bobot::Dummy do
220
230
  ]
221
231
  },
222
232
  },
233
+ to: payload['recipient']['id'],
223
234
  )
224
235
  subject.reply_with_quick_replies(
225
236
  text: 'Where are you',
@@ -232,7 +243,7 @@ RSpec.describe Bobot::Dummy do
232
243
 
233
244
  describe '.reply_with_buttons' do
234
245
  it 'replies to the sender' do
235
- expect(subject).to receive(:deliver).with(
246
+ expect(subject.page).to receive(:deliver).with(
236
247
  payload_template: {
237
248
  message: {
238
249
  attachment: {
@@ -248,6 +259,7 @@ RSpec.describe Bobot::Dummy do
248
259
  }
249
260
  },
250
261
  },
262
+ to: payload['recipient']['id'],
251
263
  )
252
264
  subject.reply_with_buttons(
253
265
  text: 'Human, do you like me?',
@@ -0,0 +1,61 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Bobot::Page do
4
+ before do
5
+ Bobot.configure do |config|
6
+ config.pages << Bobot::Page.new(
7
+ slug: 'slug_1',
8
+ language: 'language',
9
+ page_access_token: 'page_access_token',
10
+ page_id: '123',
11
+ get_started_payload: 'get_started_payload',
12
+ )
13
+ config.pages << Bobot::Page.new(
14
+ slug: 'slug_2',
15
+ language: 'language',
16
+ page_access_token: 'page_access_token',
17
+ page_id: '456',
18
+ get_started_payload: 'get_started_payload',
19
+ )
20
+ end
21
+ end
22
+
23
+ describe '#find' do
24
+ it 'find page in the config' do
25
+ expect(Bobot::Page.find("123").page_id).to eq("123")
26
+ expect(Bobot::Page.find(123).page_id).to eq("123")
27
+ expect(Bobot::Page.find("456").page_id).to eq("456")
28
+ expect(Bobot::Page.find(456).page_id).to eq("456")
29
+ end
30
+ it 'not find page in the config' do
31
+ expect(Bobot::Page.find("1664")).to eq(nil)
32
+ expect(Bobot::Page.find(1664)).to eq(nil)
33
+ end
34
+ end
35
+
36
+ describe '#find_by_slug' do
37
+ it 'find page in the config' do
38
+ expect(Bobot::Page.find_by_slug("slug_1").slug).to eq("slug_1")
39
+ expect(Bobot::Page.find_by_slug("slug_2").slug).to eq("slug_2")
40
+ end
41
+ it 'not find page in the config' do
42
+ expect(Bobot::Page.find_by_slug("slug_unknown")).to eq(nil)
43
+ end
44
+ end
45
+
46
+ describe '#[]' do
47
+ it 'find page in the config' do
48
+ expect(Bobot::Page["123"].page_id).to eq("123")
49
+ expect(Bobot::Page[123].page_id).to eq("123")
50
+ expect(Bobot::Page["456"].page_id).to eq("456")
51
+ expect(Bobot::Page[456].page_id).to eq("456")
52
+ expect(Bobot::Page["slug_1"].slug).to eq("slug_1")
53
+ expect(Bobot::Page["slug_2"].slug).to eq("slug_2")
54
+ end
55
+ it 'not find page in the config' do
56
+ expect(Bobot::Page["1664"]).to eq(nil)
57
+ expect(Bobot::Page[1664]).to eq(nil)
58
+ expect(Bobot::Page["slug_unknown"]).to eq(nil)
59
+ end
60
+ end
61
+ end
@@ -13,7 +13,7 @@ RSpec.describe Bobot::Profile do
13
13
  end
14
14
 
15
15
  before do
16
- Bobot.config.pages << Bobot::Configuration::Page.new(
16
+ Bobot.config.pages << Bobot::Page.new(
17
17
  page_access_token: access_token,
18
18
  )
19
19
  end
@@ -15,7 +15,7 @@ RSpec.describe Bobot::Subscription do
15
15
  end
16
16
 
17
17
  before do
18
- Bobot.config.pages << Bobot::Configuration::Page.new(
18
+ Bobot.config.pages << Bobot::Page.new(
19
19
  page_access_token: access_token,
20
20
  page_id: page_id,
21
21
  )
@@ -16,7 +16,7 @@ RSpec.describe Bobot::User do
16
16
  end
17
17
 
18
18
  before do
19
- Bobot.config.pages << Bobot::Configuration::Page.new(
19
+ Bobot.config.pages << Bobot::Page.new(
20
20
  page_access_token: access_token,
21
21
  page_id: page_id,
22
22
  )
@@ -0,0 +1,45 @@
1
+ Started GET "/" for 127.0.0.1 at 2017-11-24 11:59:04 +0100
2
+ Processing by Rails::WelcomeController#index as HTML
3
+ Rendering /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb
4
+ Rendered /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb (4.7ms)
5
+ Completed 200 OK in 15ms (Views: 12.0ms)
6
+
7
+
8
+ Started GET "/favicon.ico" for 127.0.0.1 at 2017-11-24 11:59:04 +0100
9
+
10
+ ActionController::RoutingError (No route matches [GET] "/favicon.ico"):
11
+
12
+ actionpack (5.1.4) lib/action_dispatch/middleware/debug_exceptions.rb:63:in `call'
13
+ actionpack (5.1.4) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
14
+ railties (5.1.4) lib/rails/rack/logger.rb:36:in `call_app'
15
+ railties (5.1.4) lib/rails/rack/logger.rb:24:in `block in call'
16
+ activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `block in tagged'
17
+ activesupport (5.1.4) lib/active_support/tagged_logging.rb:26:in `tagged'
18
+ activesupport (5.1.4) lib/active_support/tagged_logging.rb:69:in `tagged'
19
+ railties (5.1.4) lib/rails/rack/logger.rb:24:in `call'
20
+ actionpack (5.1.4) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
21
+ actionpack (5.1.4) lib/action_dispatch/middleware/request_id.rb:25:in `call'
22
+ rack (2.0.3) lib/rack/runtime.rb:22:in `call'
23
+ activesupport (5.1.4) lib/active_support/cache/strategy/local_cache_middleware.rb:27:in `call'
24
+ actionpack (5.1.4) lib/action_dispatch/middleware/executor.rb:12:in `call'
25
+ actionpack (5.1.4) lib/action_dispatch/middleware/static.rb:125:in `call'
26
+ rack (2.0.3) lib/rack/sendfile.rb:111:in `call'
27
+ railties (5.1.4) lib/rails/engine.rb:522:in `call'
28
+ rack (2.0.3) lib/rack/handler/webrick.rb:86:in `service'
29
+ /Users/navid/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
30
+ /Users/navid/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
31
+ /Users/navid/.rbenv/versions/2.3.1/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'
32
+ Started GET "/" for 127.0.0.1 at 2017-11-24 12:00:32 +0100
33
+ Processing by Rails::WelcomeController#index as HTML
34
+ Rendering /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb
35
+ Rendered /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb (4.7ms)
36
+ Completed 200 OK in 13ms (Views: 10.1ms)
37
+
38
+
39
+ Started GET "/" for 127.0.0.1 at 2017-11-24 12:00:33 +0100
40
+ Processing by Rails::WelcomeController#index as HTML
41
+ Rendering /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb
42
+ Rendered /Users/navid/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/railties-5.1.4/lib/rails/templates/rails/welcome/index.html.erb (3.5ms)
43
+ Completed 200 OK in 8ms (Views: 5.7ms)
44
+
45
+
@@ -2,3 +2,27 @@
2
2
  [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: e295aa69-c9c8-4900-8409-e43a19b6a500) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
3
3
  [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 733fbfda-cfcb-4da4-8a4d-5dcd99bf7ad0) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
4
4
  [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: abbfb628-82bd-4d48-a102-8720e8fbed91) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
5
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 7e146540-8a7e-4822-8d43-ac07d533e5a9) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
6
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: bb8a0a3f-490a-4427-be91-0c005255d863) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
7
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: e6ad52a0-39eb-47cc-9fad-3177e6f08833) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
8
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 45596508-c8d8-4181-97c7-b8466c788043) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
9
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: f47b59b3-4367-4166-b743-2aa15a158ec1) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
10
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 1bb7fe50-e654-4b7c-aeaa-f4065e9a2cd7) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
11
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: f44a9cce-d7eb-4673-86c1-1314c6779dfe) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
12
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: c90b3096-6f7f-4bc8-9002-19106f3b4df5) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
13
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 974e35d5-7956-453d-9872-d932a4efadfa) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
14
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: d04a2166-9022-438f-b0b6-ecfb156421e0) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
15
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: b82a84cf-78a0-4002-8653-997b81ae9eae) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
16
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 8112f073-6061-428b-9a45-bb6c95b78e03) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
17
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 2140517c-8166-4449-96a0-8c1075712bd1) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
18
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 838d432d-13e4-4449-916c-6bd78c2b19b6) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
19
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 91632611-04b4-4939-bfec-226ed9d46b35) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
20
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: bba22f37-1aca-477b-b7b3-bbaa2886be74) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
21
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: b5aa5a5f-acbe-4cdc-a420-754b65fa0514) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
22
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 9dee2915-2aa3-49c0-a163-0fb1babce1ae) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
23
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 031757ed-ca82-4581-869c-810c286de6f0) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
24
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 1c0de02e-7761-480b-a8ac-87d1613a948b) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
25
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: ce0ebceb-aeea-44d1-b425-7cb3e627c9eb) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
26
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: e1b4f1e1-13d8-4243-948c-c2bbdab9f212) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
27
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 1c5e3b4b-4ae4-4213-bafb-4164a16a0a4c) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}
28
+ [ActiveJob] Enqueued Bobot::CommanderJob (Job ID: 56732598-6966-4ce2-b00c-0b7632f4a14b) to Test(default) with arguments: {"sender"=>{"id"=>"2"}, "recipient"=>{"id"=>"3"}, "timestamp"=>1457764197627, "message"=>{"mid"=>"mid.1457764197618:41d102a3e1ae206a38", "seq"=>73, "text"=>"Hello, bot!"}}