telephony 1.0.3

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.
Files changed (365) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +105 -0
  3. data/Rakefile +39 -0
  4. data/app/assets/fonts/telephony/zest-telephony.eot +0 -0
  5. data/app/assets/fonts/telephony/zest-telephony.svg +73 -0
  6. data/app/assets/fonts/telephony/zest-telephony.ttf +0 -0
  7. data/app/assets/fonts/telephony/zest-telephony.woff +0 -0
  8. data/app/assets/images/telephony/backspace.png +0 -0
  9. data/app/assets/images/telephony/icon-spinner.gif +0 -0
  10. data/app/assets/javascripts/telephony/application.js +12 -0
  11. data/app/assets/javascripts/telephony/collections/agents.js +4 -0
  12. data/app/assets/javascripts/telephony/config.js.erb +11 -0
  13. data/app/assets/javascripts/telephony/models/agent.js +103 -0
  14. data/app/assets/javascripts/telephony/models/conversation.js +226 -0
  15. data/app/assets/javascripts/telephony/models/device.js +30 -0
  16. data/app/assets/javascripts/telephony/models/transfer.js +65 -0
  17. data/app/assets/javascripts/telephony/namespace.js +6 -0
  18. data/app/assets/javascripts/telephony/push.js +80 -0
  19. data/app/assets/javascripts/telephony/vendor/backbone.js +1159 -0
  20. data/app/assets/javascripts/telephony/vendor/chosen.jquery.js +1018 -0
  21. data/app/assets/javascripts/telephony/vendor/jquery.form.js +1117 -0
  22. data/app/assets/javascripts/telephony/vendor/pusher.js +1304 -0
  23. data/app/assets/javascripts/telephony/vendor/test_dependencies.js +18 -0
  24. data/app/assets/javascripts/telephony/vendor/underscore.js +839 -0
  25. data/app/assets/javascripts/telephony/views/agents_view.js +69 -0
  26. data/app/assets/javascripts/telephony/views/application_view.js +78 -0
  27. data/app/assets/javascripts/telephony/views/call_queue_view.js +21 -0
  28. data/app/assets/javascripts/telephony/views/conversation_buttons_view.js +15 -0
  29. data/app/assets/javascripts/telephony/views/conversation_view.js +322 -0
  30. data/app/assets/javascripts/telephony/views/status_view.js +36 -0
  31. data/app/assets/javascripts/telephony/views/transfer_view.js +87 -0
  32. data/app/assets/javascripts/telephony/views/twilio_client_view.js +117 -0
  33. data/app/assets/javascripts/telephony/views/widget_view.js +55 -0
  34. data/app/assets/javascripts/telephony/widget.js +5 -0
  35. data/app/assets/javascripts/templates/telephony/agents_view.jst.ejs +8 -0
  36. data/app/assets/javascripts/templates/telephony/call_queue_view.jst.ejs +2 -0
  37. data/app/assets/javascripts/templates/telephony/conversation_buttons_view.jst.ejs +23 -0
  38. data/app/assets/javascripts/templates/telephony/conversation_view.jst.ejs +10 -0
  39. data/app/assets/javascripts/templates/telephony/status_view.jst.ejs +4 -0
  40. data/app/assets/javascripts/templates/telephony/transfer_view.jst.ejs +38 -0
  41. data/app/assets/javascripts/templates/telephony/twilio_client_view.jst.ejs +10 -0
  42. data/app/assets/stylesheets/telephony/font.css +43 -0
  43. data/app/assets/stylesheets/telephony/reset.css.scss +10 -0
  44. data/app/assets/stylesheets/telephony/widget.css.scss +512 -0
  45. data/app/controllers/telephony/agents_controller.rb +46 -0
  46. data/app/controllers/telephony/application_controller.rb +4 -0
  47. data/app/controllers/telephony/call_centers_controller.rb +9 -0
  48. data/app/controllers/telephony/conversations_controller.rb +74 -0
  49. data/app/controllers/telephony/inbound/conversation_queues_controller.rb +21 -0
  50. data/app/controllers/telephony/playable_listeners_controller.rb +43 -0
  51. data/app/controllers/telephony/providers/twilio/application_controller.rb +26 -0
  52. data/app/controllers/telephony/providers/twilio/calls_controller.rb +130 -0
  53. data/app/controllers/telephony/providers/twilio/inbound_calls_controller.rb +54 -0
  54. data/app/controllers/telephony/providers/twilio/musics_controller.rb +12 -0
  55. data/app/controllers/telephony/providers/twilio/voicemails_controller.rb +29 -0
  56. data/app/controllers/telephony/signals/agents/presences_controller.rb +64 -0
  57. data/app/controllers/telephony/transfers_controller.rb +18 -0
  58. data/app/controllers/telephony/twilio_client_controller.rb +37 -0
  59. data/app/controllers/telephony/voicemails_controller.rb +13 -0
  60. data/app/controllers/telephony/widget_controller.rb +10 -0
  61. data/app/helpers/telephony/application_helper.rb +4 -0
  62. data/app/helpers/telephony/calls_helper.rb +13 -0
  63. data/app/models/telephony/agent.rb +186 -0
  64. data/app/models/telephony/agent_state_machine.rb +54 -0
  65. data/app/models/telephony/base.rb +7 -0
  66. data/app/models/telephony/blacklisted_number.rb +5 -0
  67. data/app/models/telephony/call.rb +94 -0
  68. data/app/models/telephony/call_center.rb +26 -0
  69. data/app/models/telephony/call_state_machine.rb +98 -0
  70. data/app/models/telephony/conversation.rb +273 -0
  71. data/app/models/telephony/conversation_state_machine.rb +109 -0
  72. data/app/models/telephony/conversations_presenter.rb +83 -0
  73. data/app/models/telephony/events.rb +6 -0
  74. data/app/models/telephony/events/answer.rb +6 -0
  75. data/app/models/telephony/events/base.rb +118 -0
  76. data/app/models/telephony/events/busy.rb +6 -0
  77. data/app/models/telephony/events/call_answered.rb +22 -0
  78. data/app/models/telephony/events/call_fail.rb +6 -0
  79. data/app/models/telephony/events/complete_hold.rb +28 -0
  80. data/app/models/telephony/events/complete_one_step_transfer.rb +17 -0
  81. data/app/models/telephony/events/complete_resume.rb +28 -0
  82. data/app/models/telephony/events/complete_two_step_transfer.rb +6 -0
  83. data/app/models/telephony/events/conference.rb +6 -0
  84. data/app/models/telephony/events/connect.rb +22 -0
  85. data/app/models/telephony/events/customer_left_two_step_transfer.rb +6 -0
  86. data/app/models/telephony/events/dial_agent.rb +6 -0
  87. data/app/models/telephony/events/ended.rb +19 -0
  88. data/app/models/telephony/events/enqueue.rb +6 -0
  89. data/app/models/telephony/events/fail_one_step_transfer.rb +9 -0
  90. data/app/models/telephony/events/fail_two_step_transfer.rb +6 -0
  91. data/app/models/telephony/events/initialize_widget.rb +15 -0
  92. data/app/models/telephony/events/initiate_hold.rb +6 -0
  93. data/app/models/telephony/events/initiate_one_step_transfer.rb +6 -0
  94. data/app/models/telephony/events/initiate_resume.rb +6 -0
  95. data/app/models/telephony/events/initiate_two_step_transfer.rb +6 -0
  96. data/app/models/telephony/events/leave_two_step_transfer.rb +17 -0
  97. data/app/models/telephony/events/leave_voicemail.rb +22 -0
  98. data/app/models/telephony/events/no_answer.rb +6 -0
  99. data/app/models/telephony/events/play_closed_greeting.rb +6 -0
  100. data/app/models/telephony/events/play_message.rb +6 -0
  101. data/app/models/telephony/events/reject.rb +6 -0
  102. data/app/models/telephony/events/rona.rb +6 -0
  103. data/app/models/telephony/events/start.rb +17 -0
  104. data/app/models/telephony/events/straight_to_voicemail.rb +6 -0
  105. data/app/models/telephony/events/terminate.rb +6 -0
  106. data/app/models/telephony/events/transfer.rb +35 -0
  107. data/app/models/telephony/inbound_conversation_queue.rb +101 -0
  108. data/app/models/telephony/playable.rb +7 -0
  109. data/app/models/telephony/playable_listener.rb +42 -0
  110. data/app/models/telephony/pusher_event_publisher.rb +26 -0
  111. data/app/models/telephony/recording.rb +4 -0
  112. data/app/models/telephony/voicemail.rb +36 -0
  113. data/app/observers/telephony/agent_observer.rb +8 -0
  114. data/app/observers/telephony/call_observer.rb +15 -0
  115. data/app/observers/telephony/conversation_observer.rb +9 -0
  116. data/app/observers/telephony/event_observer.rb +9 -0
  117. data/app/views/layouts/telephony/application.html.erb +14 -0
  118. data/app/views/telephony/providers/twilio/calls/child_detached.builder +5 -0
  119. data/app/views/telephony/providers/twilio/calls/complete_hold.builder +6 -0
  120. data/app/views/telephony/providers/twilio/calls/connect.builder +13 -0
  121. data/app/views/telephony/providers/twilio/calls/dial.builder +14 -0
  122. data/app/views/telephony/providers/twilio/calls/done.builder +5 -0
  123. data/app/views/telephony/providers/twilio/calls/join_conference.builder +7 -0
  124. data/app/views/telephony/providers/twilio/calls/whisper_tone.builder +3 -0
  125. data/app/views/telephony/providers/twilio/inbound_calls/closed_hours.builder +7 -0
  126. data/app/views/telephony/providers/twilio/inbound_calls/create.builder +8 -0
  127. data/app/views/telephony/providers/twilio/inbound_calls/enqueue.builder +8 -0
  128. data/app/views/telephony/providers/twilio/inbound_calls/reject.builder +5 -0
  129. data/app/views/telephony/providers/twilio/inbound_calls/wait_music.builder +5 -0
  130. data/app/views/telephony/providers/twilio/musics/hold.builder +5 -0
  131. data/app/views/telephony/providers/twilio/voicemails/new.builder +6 -0
  132. data/app/views/telephony/twilio_client/index.html.erb +74 -0
  133. data/app/views/telephony/widget/index.erb +3 -0
  134. data/config/cucumber.yml +8 -0
  135. data/config/database.yml +57 -0
  136. data/config/environment.rb +67 -0
  137. data/config/initializers/pusher.rb +21 -0
  138. data/config/initializers/telephony.rb +44 -0
  139. data/config/routes.rb +94 -0
  140. data/config/wopr.yml.example +38 -0
  141. data/db/migrate/20130806213053_bootstrap_db.rb +105 -0
  142. data/db/migrate/20131009204026_create_telephony_blacklisted_numbers.rb +11 -0
  143. data/lib/agent_generator.rb +24 -0
  144. data/lib/tasks/cucumber.rake +65 -0
  145. data/lib/tasks/jasmine.rake +8 -0
  146. data/lib/tasks/telephony_tasks.rake +4 -0
  147. data/lib/telephony.rb +34 -0
  148. data/lib/telephony/concerns/controllers/twilio_request_verifier.rb +39 -0
  149. data/lib/telephony/conversation_data.rb +67 -0
  150. data/lib/telephony/engine.rb +19 -0
  151. data/lib/telephony/error.rb +8 -0
  152. data/lib/telephony/error/agent_on_a_call.rb +2 -0
  153. data/lib/telephony/error/base.rb +3 -0
  154. data/lib/telephony/error/connection.rb +2 -0
  155. data/lib/telephony/error/not_in_progress.rb +2 -0
  156. data/lib/telephony/error/queue_empty.rb +2 -0
  157. data/lib/telephony/helper.rb +11 -0
  158. data/lib/telephony/jobs/agent_offline.rb +28 -0
  159. data/lib/telephony/jobs/pusher_event.rb +21 -0
  160. data/lib/telephony/providers/twilio_provider.rb +162 -0
  161. data/lib/telephony/version.rb +3 -0
  162. data/spec/controllers/telephony/agents_controller_spec.rb +117 -0
  163. data/spec/controllers/telephony/call_centers_controller_spec.rb +25 -0
  164. data/spec/controllers/telephony/conversations_controller_spec.rb +229 -0
  165. data/spec/controllers/telephony/playable_listeners_controller_spec.rb +138 -0
  166. data/spec/controllers/telephony/providers/twilio/calls_controller_spec.rb +33 -0
  167. data/spec/controllers/telephony/providers/twilio/musics_controller_spec.rb +20 -0
  168. data/spec/controllers/telephony/signals/agents/presences_controller_spec.rb +154 -0
  169. data/spec/controllers/telephony/twilio_client_controller_spec.rb +58 -0
  170. data/spec/controllers/telephony/widget_controller_spec.rb +25 -0
  171. data/spec/dummy/Rakefile +7 -0
  172. data/spec/dummy/app/assets/javascripts/application.js +6 -0
  173. data/spec/dummy/app/assets/javascripts/lib/event_logger.js +82 -0
  174. data/spec/dummy/app/assets/javascripts/vendor/backbone.js +1159 -0
  175. data/spec/dummy/app/assets/javascripts/vendor/chosen.jquery.js +1018 -0
  176. data/spec/dummy/app/assets/javascripts/vendor/jquery.form.js +1117 -0
  177. data/spec/dummy/app/assets/javascripts/vendor/underscore.js +839 -0
  178. data/spec/dummy/app/assets/stylesheets/application.css +23 -0
  179. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  180. data/spec/dummy/app/controllers/widget_host_controller.rb +2 -0
  181. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  182. data/spec/dummy/app/views/layouts/application.html.erb +12 -0
  183. data/spec/dummy/app/views/widget_host/index.html.erb +53 -0
  184. data/spec/dummy/config.ru +4 -0
  185. data/spec/dummy/config/application.rb +61 -0
  186. data/spec/dummy/config/boot.rb +10 -0
  187. data/spec/dummy/config/call_centers.yml +35 -0
  188. data/spec/dummy/config/call_centers.yml.example +35 -0
  189. data/spec/dummy/config/database.yml +56 -0
  190. data/spec/dummy/config/environment.rb +5 -0
  191. data/spec/dummy/config/environments/cucumber.rb +39 -0
  192. data/spec/dummy/config/environments/development.rb +39 -0
  193. data/spec/dummy/config/environments/production.rb +67 -0
  194. data/spec/dummy/config/environments/test.rb +39 -0
  195. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  196. data/spec/dummy/config/initializers/inflections.rb +15 -0
  197. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  198. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  199. data/spec/dummy/config/initializers/session_store.rb +8 -0
  200. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  201. data/spec/dummy/config/locales/en.yml +5 -0
  202. data/spec/dummy/config/pusher.yml +14 -0
  203. data/spec/dummy/config/pusher.yml.example +14 -0
  204. data/spec/dummy/config/routes.rb +5 -0
  205. data/spec/dummy/config/sms_whitelist.json.example +4 -0
  206. data/spec/dummy/config/twilio.yml +57 -0
  207. data/spec/dummy/config/twilio.yml.example +57 -0
  208. data/spec/dummy/db/schema.rb +122 -0
  209. data/spec/dummy/db/seeds.rb +6 -0
  210. data/spec/dummy/log/production.log +156 -0
  211. data/spec/dummy/log/test.log +13812 -0
  212. data/spec/dummy/public/404.html +26 -0
  213. data/spec/dummy/public/422.html +26 -0
  214. data/spec/dummy/public/500.html +25 -0
  215. data/spec/dummy/public/assets/application-628309db7ce8c0abdd91f8f796881599.js +32 -0
  216. data/spec/dummy/public/assets/application-628309db7ce8c0abdd91f8f796881599.js.gz +0 -0
  217. data/spec/dummy/public/assets/application-6c551430f3bdd32ba57c9c41e5f91846.css +24 -0
  218. data/spec/dummy/public/assets/application-6c551430f3bdd32ba57c9c41e5f91846.css.gz +0 -0
  219. data/spec/dummy/public/assets/telephony/backspace-9f5b195e049ed90eb20ecdda6e264b0a.png +0 -0
  220. data/spec/dummy/public/assets/telephony/icon-spinner-ddbae473a70c5425810aeee31d4a8ad7.gif +0 -0
  221. data/spec/dummy/public/assets/telephony/zest-telephony-0e6b13673634da80de9ae09bcca253e3.eot +0 -0
  222. data/spec/dummy/public/assets/telephony/zest-telephony-37f394757ccb11b978f16d9fd32cb3b5.ttf +0 -0
  223. data/spec/dummy/public/assets/telephony/zest-telephony-e7efdbc60c0a1c8404951bc79c7fb3a8.woff +0 -0
  224. data/spec/dummy/public/assets/telephony/zest-telephony-f34287df626936908408f53a33db9e83.svg +73 -0
  225. data/spec/dummy/public/favicon.ico +0 -0
  226. data/spec/dummy/script/rails +6 -0
  227. data/spec/dummy/tmp/cache/assets/C98/020/sprockets%2Fa83f8254d688334ff179984e423f502f +0 -0
  228. data/spec/dummy/tmp/cache/assets/CA4/550/sprockets%2F407f9191fe573f2435c55c017cb0d022 +0 -0
  229. data/spec/dummy/tmp/cache/assets/CAA/6A0/sprockets%2F3265550e2d2c7f5a864ca85d255504c2 +0 -0
  230. data/spec/dummy/tmp/cache/assets/CB0/F60/sprockets%2F462f9efed31e6710732376ae06c27208 +0 -0
  231. data/spec/dummy/tmp/cache/assets/CB6/E20/sprockets%2Fa7092cd9f16917099d754f1380af13e1 +0 -0
  232. data/spec/dummy/tmp/cache/assets/CC7/9F0/sprockets%2F0517100815cd45c43fec1d8510fcb630 +0 -0
  233. data/spec/dummy/tmp/cache/assets/CCA/BF0/sprockets%2F16ea15e0b5d367c34b812612a4207e3e +0 -0
  234. data/spec/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  235. data/spec/dummy/tmp/cache/assets/CF1/960/sprockets%2F36ef26985821ec702c74dae4af789903 +0 -0
  236. data/spec/dummy/tmp/cache/assets/D07/F30/sprockets%2Fd12862f20df0c9ef7aa2b4216d247079 +0 -0
  237. data/spec/dummy/tmp/cache/assets/D09/BF0/sprockets%2F5c8595efaa8cc5235a09801c60e25a16 +0 -0
  238. data/spec/dummy/tmp/cache/assets/D0D/250/sprockets%2F5e759d66e374910dae5a51b221e6e3a4 +0 -0
  239. data/spec/dummy/tmp/cache/assets/D0D/E30/sprockets%2Fa282879e0788ba133f5bdc211cf134e8 +0 -0
  240. data/spec/dummy/tmp/cache/assets/D11/8E0/sprockets%2F2a193a8af29963f1113bef05788e02ff +0 -0
  241. data/spec/dummy/tmp/cache/assets/D14/270/sprockets%2F7f95a752910ed33d728532f8fabd340d +0 -0
  242. data/spec/dummy/tmp/cache/assets/D17/BE0/sprockets%2F58749d7aea4ca766c2520801f0f96b9b +0 -0
  243. data/spec/dummy/tmp/cache/assets/D18/270/sprockets%2Fbb2d88813b1795a97e9a7c14100eef77 +0 -0
  244. data/spec/dummy/tmp/cache/assets/D22/310/sprockets%2Fbae9148ce1229214dfbb0c425b0054d0 +0 -0
  245. data/spec/dummy/tmp/cache/assets/D30/EB0/sprockets%2F2c668b88beb4c9805d91ed4587f549e7 +0 -0
  246. data/spec/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  247. data/spec/dummy/tmp/cache/assets/D3C/690/sprockets%2F681ba175fdd2da8d590b7e624b6135a6 +0 -0
  248. data/spec/dummy/tmp/cache/assets/D44/BC0/sprockets%2F7214f66dd91fdd51f00c3882293f5eea +0 -0
  249. data/spec/dummy/tmp/cache/assets/D46/FA0/sprockets%2F4f9543cd9e68ba3141fd488afb13681b +0 -0
  250. data/spec/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  251. data/spec/dummy/tmp/cache/assets/D51/9A0/sprockets%2Fb6e4cbcf30f6f611671695f79ea846d5 +0 -0
  252. data/spec/dummy/tmp/cache/assets/D55/920/sprockets%2F0a02242aa4c4febcc796419aba103c69 +0 -0
  253. data/spec/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  254. data/spec/dummy/tmp/cache/assets/D5F/6F0/sprockets%2F155e7bc44f326371cce0ca8bc5b2414e +0 -0
  255. data/spec/dummy/tmp/cache/assets/D6B/250/sprockets%2Fe4eecce7a3371b11038c92f07cb28e67 +0 -0
  256. data/spec/dummy/tmp/cache/assets/D6B/E70/sprockets%2F103a456ae3692e3cca20b7696fdee8f0 +0 -0
  257. data/spec/dummy/tmp/cache/assets/D7F/AD0/sprockets%2Fb1c02d12303b1fe2f981771cbb0c4cbd +0 -0
  258. data/spec/dummy/tmp/cache/assets/D81/D00/sprockets%2F0c68b6d9dce98681a2a710d9fc3f7e39 +0 -0
  259. data/spec/dummy/tmp/cache/assets/D94/4D0/sprockets%2F4608a5bdf27ddf11bcaed1375911e9a2 +0 -0
  260. data/spec/dummy/tmp/cache/assets/D9A/580/sprockets%2F433005b19aaf7ed5cba9c7f8cd30b775 +0 -0
  261. data/spec/dummy/tmp/cache/assets/DA4/270/sprockets%2F860ab3bd30204e02c0a5d82bd4bbabe1 +0 -0
  262. data/spec/dummy/tmp/cache/assets/DA4/480/sprockets%2F53e39285bb57a2ddb6ff856b2eb491da +0 -0
  263. data/spec/dummy/tmp/cache/assets/DA6/3C0/sprockets%2F587c7e35f47442eadaa530acc5e9f5e6 +0 -0
  264. data/spec/dummy/tmp/cache/assets/DAB/DA0/sprockets%2Fb8fb5e8518ed3d38a7f6a8f18a9208aa +0 -0
  265. data/spec/dummy/tmp/cache/assets/DB2/700/sprockets%2Ffa85cb79b94fce1b8344d983ea863d2e +0 -0
  266. data/spec/dummy/tmp/cache/assets/DCC/4F0/sprockets%2Fbc0f3c61e16afb5a285ba8b39846ed8b +0 -0
  267. data/spec/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  268. data/spec/dummy/tmp/cache/assets/DDC/BE0/sprockets%2F2c0a4d4675a61b014aedbbabb3f071fc +0 -0
  269. data/spec/dummy/tmp/cache/assets/E04/640/sprockets%2F3c5ddf2bbefd9d70f1b506b519cf856e +0 -0
  270. data/spec/dummy/tmp/cache/assets/E04/7F0/sprockets%2F35f1b2ff729a5ec21f6dc5f7d6faa67b +0 -0
  271. data/spec/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  272. data/spec/dummy/tmp/cache/assets/E07/230/sprockets%2Febd4f2dd708879d593aff008ccb75acc +0 -0
  273. data/spec/dummy/tmp/cache/assets/E17/9D0/sprockets%2F8db2b79f6c4eabe7a9ebe7a7898ec066 +0 -0
  274. data/spec/dummy/tmp/cache/assets/E31/F10/sprockets%2Fcebacf56667da1cc2961b59fd922eafb +0 -0
  275. data/spec/factories/agent.rb +26 -0
  276. data/spec/factories/calls.rb +106 -0
  277. data/spec/factories/conversations.rb +171 -0
  278. data/spec/factories/events.rb +250 -0
  279. data/spec/factories/playable_listeners.rb +6 -0
  280. data/spec/factories/recordings.rb +6 -0
  281. data/spec/factories/voicemails.rb +8 -0
  282. data/spec/fixtures/vcr_cassettes/Authenticating_an_online_user.yml +90 -0
  283. data/spec/fixtures/vcr_cassettes/Creating_a_conversation/creates_a_new_call.yml +42 -0
  284. data/spec/fixtures/vcr_cassettes/Creating_a_conversation/creates_a_new_conversation.yml +42 -0
  285. data/spec/fixtures/vcr_cassettes/Creating_a_conversation/returns_the_conversation_as_JSON.yml +42 -0
  286. data/spec/fixtures/vcr_cassettes/Pusher_channel_as_JSON.yml +90 -0
  287. data/spec/fixtures/vcr_cassettes/Pusher_to_publish_the_event.yml +32 -0
  288. data/spec/fixtures/vcr_cassettes/Reloading_the_widget_during_a_call/_create/during_a_call/after_a_failed_transfer/pushes_the_event_for_the_active_call.yml +1110 -0
  289. data/spec/fixtures/vcr_cassettes/Telephony_ConversationsController/_create/by_default/creates_a_new_call.yml +45 -0
  290. data/spec/fixtures/vcr_cassettes/Telephony_ConversationsController/_create/by_default/creates_a_new_conversation.yml +43 -0
  291. data/spec/fixtures/vcr_cassettes/Telephony_ConversationsController/_create/by_default/returns_the_conversation_as_JSON.yml +44 -0
  292. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_call/allows_the_phone_to_ring_for_60_seconds.yml +42 -0
  293. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_call/includes_a_status_change_callback_url.yml +42 -0
  294. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_call/places_a_call.yml +42 -0
  295. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_dial_into_conference/allows_the_phone_to_ring_for_15_seconds.yml +42 -0
  296. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_dial_into_conference/places_a_call_to_redirect_the_participant_to_a_conference.yml +42 -0
  297. data/spec/fixtures/vcr_cassettes/Telephony_Providers_TwilioProvider/_hangup/by_default/hangs_up_the_call.yml +42 -0
  298. data/spec/fixtures/vcr_cassettes/buying_number_for_an_area_code.yml +42 -0
  299. data/spec/fixtures/vcr_cassettes/returns_success.yml +90 -0
  300. data/spec/javascripts/helpers/jasmine-jquery.js +546 -0
  301. data/spec/javascripts/helpers/mock-ajax.js +207 -0
  302. data/spec/javascripts/support/jasmine.yml +80 -0
  303. data/spec/javascripts/telephony/models/agent_spec.js +40 -0
  304. data/spec/javascripts/telephony/models/conversation_spec.js +515 -0
  305. data/spec/javascripts/telephony/models/device_spec.js +80 -0
  306. data/spec/javascripts/telephony/models/transfer_spec.js +22 -0
  307. data/spec/javascripts/telephony/push_spec.js +427 -0
  308. data/spec/javascripts/telephony/views/agents_view_spec.js +101 -0
  309. data/spec/javascripts/telephony/views/application_view_spec.js +74 -0
  310. data/spec/javascripts/telephony/views/conversation_view_spec.js +626 -0
  311. data/spec/javascripts/telephony/views/status_view_spec.js +30 -0
  312. data/spec/javascripts/telephony/views/transfer_view_spec.js +187 -0
  313. data/spec/javascripts/telephony/views/twilio_client_view_spec.js +77 -0
  314. data/spec/javascripts/telephony/views/widget_view_spec.js +20 -0
  315. data/spec/lib/telephony/concerns/controllers/twilio_request_verifier_spec.rb +77 -0
  316. data/spec/lib/telephony/conversation_data_spec.rb +342 -0
  317. data/spec/lib/telephony/helper_spec.rb +24 -0
  318. data/spec/lib/telephony/jobs/agent_offline_spec.rb +37 -0
  319. data/spec/lib/telephony/jobs/pusher_event_spec.rb +39 -0
  320. data/spec/lib/telephony/providers/twilio_provider_spec.rb +439 -0
  321. data/spec/lib/telephony_spec.rb +104 -0
  322. data/spec/models/telephony/agent_spec.rb +479 -0
  323. data/spec/models/telephony/agent_state_machine_spec.rb +131 -0
  324. data/spec/models/telephony/call_center_spec.rb +32 -0
  325. data/spec/models/telephony/call_spec.rb +597 -0
  326. data/spec/models/telephony/call_state_machine_spec.rb +472 -0
  327. data/spec/models/telephony/conversation_spec.rb +751 -0
  328. data/spec/models/telephony/conversation_state_machine_spec.rb +387 -0
  329. data/spec/models/telephony/conversations_presenter_spec.rb +40 -0
  330. data/spec/models/telephony/event_spec.rb +716 -0
  331. data/spec/models/telephony/inbound_conversation_queue_spec.rb +243 -0
  332. data/spec/models/telephony/playable_listener_spec.rb +43 -0
  333. data/spec/models/telephony/pusher_event_publisher_spec.rb +36 -0
  334. data/spec/models/telephony/recording_spec.rb +6 -0
  335. data/spec/models/telephony/voicemail_spec.rb +96 -0
  336. data/spec/observers/telephony/agent_observer_spec.rb +21 -0
  337. data/spec/observers/telephony/event_observer_spec.rb +19 -0
  338. data/spec/requests/create_conversation_spec.rb +39 -0
  339. data/spec/requests/dequeue_call_spec.rb +42 -0
  340. data/spec/requests/list_conversations_spec.rb +33 -0
  341. data/spec/requests/presences_spec.rb +51 -0
  342. data/spec/requests/providers/twilio/calls/child_answered_spec.rb +24 -0
  343. data/spec/requests/providers/twilio/calls/child_detached_spec.rb +249 -0
  344. data/spec/requests/providers/twilio/calls/dial_spec.rb +132 -0
  345. data/spec/requests/providers/twilio/calls/done_spec.rb +69 -0
  346. data/spec/requests/providers/twilio/calls/join_conference_spec.rb +56 -0
  347. data/spec/requests/providers/twilio/calls/leave_queue_spec.rb +44 -0
  348. data/spec/requests/providers/twilio/calls/parent_answered_spec.rb +59 -0
  349. data/spec/requests/providers/twilio/inbound/connect_dequeued_call_spec.rb +124 -0
  350. data/spec/requests/providers/twilio/inbound/enqueue_inbound_call_spec.rb +108 -0
  351. data/spec/requests/providers/twilio/inbound/enqueued_call_wait_music_spec.rb +13 -0
  352. data/spec/requests/providers/twilio/voicemails/leave_voicemail_spec.rb +78 -0
  353. data/spec/requests/search_conversations_spec.rb +101 -0
  354. data/spec/requests/transfer_spec.rb +65 -0
  355. data/spec/requests/voicemail_api_spec.rb +58 -0
  356. data/spec/spec_helper.rb +27 -0
  357. data/spec/support/factory_girl.rb +5 -0
  358. data/spec/support/matchers/be_complete_hold.rb +20 -0
  359. data/spec/support/matchers/be_whisper_tone.rb +35 -0
  360. data/spec/support/matchers/join_conference.rb +23 -0
  361. data/spec/support/nokogiri.rb +1 -0
  362. data/spec/support/pusher_helper.rb +24 -0
  363. data/spec/support/vcr.rb +12 -0
  364. data/spec/support/webmock.rb +1 -0
  365. metadata +692 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://AC8ab65d320fc5ca22b757d937ef013a31:c63af64b012e06a4fa4bf6223823c834@api.twilio.com/2010-04-01/Accounts/AC8ab65d320fc5ca22b757d937ef013a31/Calls.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: From=500-555-0006&To=310-456-7890&Url=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1965%2Fconnect&StatusCallback=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1965%2Fdone&Timeout=60
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - twilio-ruby/3.9.0
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ response:
19
+ status:
20
+ code: 201
21
+ message: Created
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Thu, 14 Feb 2013 22:17:46 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '978'
31
+ Connection:
32
+ - close
33
+ Etag:
34
+ - ''
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! '{"sid":"CA860d6bf8eb644ddf32e17830e1db6bed","date_created":"Thu,
38
+ 14 Feb 2013 22:17:46 +0000","date_updated":"Thu, 14 Feb 2013 22:17:46 +0000","parent_call_sid":null,"account_sid":"AC8ab65d320fc5ca22b757d937ef013a31","to":"+13104567890","to_formatted":"(310)
39
+ 456-7890","from":"+15005550006","from_formatted":"(500) 555-0006","phone_number_sid":null,"status":"queued","start_time":null,"end_time":null,"duration":null,"price":null,"direction":null,"answered_by":null,"api_version":"2010-04-01","annotation":null,"forwarded_from":null,"group_sid":null,"caller_name":null,"uri":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA860d6bf8eb644ddf32e17830e1db6bed.json","subresource_uris":{"notifications":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA860d6bf8eb644ddf32e17830e1db6bed\/Notifications.json","recordings":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA860d6bf8eb644ddf32e17830e1db6bed\/Recordings.json"}}'
40
+ http_version:
41
+ recorded_at: Thu, 14 Feb 2013 22:17:46 GMT
42
+ recorded_with: VCR 2.0.0
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://AC8ab65d320fc5ca22b757d937ef013a31:c63af64b012e06a4fa4bf6223823c834@api.twilio.com/2010-04-01/Accounts/AC8ab65d320fc5ca22b757d937ef013a31/Calls.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: From=500-555-0006&To=310-456-7890&Url=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1963%2Fconnect&StatusCallback=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1963%2Fdone&Timeout=60
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - twilio-ruby/3.9.0
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ response:
19
+ status:
20
+ code: 201
21
+ message: Created
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Thu, 14 Feb 2013 22:17:45 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '978'
31
+ Connection:
32
+ - close
33
+ Etag:
34
+ - ''
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! '{"sid":"CA079e92ef0e260449cf1e58a645b2207b","date_created":"Thu,
38
+ 14 Feb 2013 22:17:45 +0000","date_updated":"Thu, 14 Feb 2013 22:17:45 +0000","parent_call_sid":null,"account_sid":"AC8ab65d320fc5ca22b757d937ef013a31","to":"+13104567890","to_formatted":"(310)
39
+ 456-7890","from":"+15005550006","from_formatted":"(500) 555-0006","phone_number_sid":null,"status":"queued","start_time":null,"end_time":null,"duration":null,"price":null,"direction":null,"answered_by":null,"api_version":"2010-04-01","annotation":null,"forwarded_from":null,"group_sid":null,"caller_name":null,"uri":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA079e92ef0e260449cf1e58a645b2207b.json","subresource_uris":{"notifications":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA079e92ef0e260449cf1e58a645b2207b\/Notifications.json","recordings":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA079e92ef0e260449cf1e58a645b2207b\/Recordings.json"}}'
40
+ http_version:
41
+ recorded_at: Thu, 14 Feb 2013 22:17:45 GMT
42
+ recorded_with: VCR 2.0.0
@@ -0,0 +1,42 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://AC8ab65d320fc5ca22b757d937ef013a31:c63af64b012e06a4fa4bf6223823c834@api.twilio.com/2010-04-01/Accounts/AC8ab65d320fc5ca22b757d937ef013a31/Calls.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: From=500-555-0006&To=310-456-7890&Url=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1967%2Fconnect&StatusCallback=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F1967%2Fdone&Timeout=60
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - twilio-ruby/3.9.0
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ response:
19
+ status:
20
+ code: 201
21
+ message: Created
22
+ headers:
23
+ Server:
24
+ - nginx
25
+ Date:
26
+ - Thu, 14 Feb 2013 22:17:47 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Content-Length:
30
+ - '978'
31
+ Connection:
32
+ - close
33
+ Etag:
34
+ - ''
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! '{"sid":"CA82a249c5e139dfaa08aa489a712853e8","date_created":"Thu,
38
+ 14 Feb 2013 22:17:47 +0000","date_updated":"Thu, 14 Feb 2013 22:17:47 +0000","parent_call_sid":null,"account_sid":"AC8ab65d320fc5ca22b757d937ef013a31","to":"+13104567890","to_formatted":"(310)
39
+ 456-7890","from":"+15005550006","from_formatted":"(500) 555-0006","phone_number_sid":null,"status":"queued","start_time":null,"end_time":null,"duration":null,"price":null,"direction":null,"answered_by":null,"api_version":"2010-04-01","annotation":null,"forwarded_from":null,"group_sid":null,"caller_name":null,"uri":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA82a249c5e139dfaa08aa489a712853e8.json","subresource_uris":{"notifications":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA82a249c5e139dfaa08aa489a712853e8\/Notifications.json","recordings":"\/2010-04-01\/Accounts\/AC8ab65d320fc5ca22b757d937ef013a31\/Calls\/CA82a249c5e139dfaa08aa489a712853e8\/Recordings.json"}}'
40
+ http_version:
41
+ recorded_at: Thu, 14 Feb 2013 22:17:47 GMT
42
+ recorded_with: VCR 2.0.0
@@ -0,0 +1,90 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=ae408fb17a4bf672a2f2b6ad8271142ec46b915d9951643861963c3795246847&auth_timestamp=1360880252&auth_version=1.0&body_md5=0be55a65827d0d2684e0d65e149d1276
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ! '{"name":"InitializeWidget","channels":["csrs-0"],"data":"{}"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - ! '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - thin 1.5.0 codename Knife
23
+ Content-Length:
24
+ - '17'
25
+ Connection:
26
+ - keep-alive
27
+ body:
28
+ encoding: US-ASCII
29
+ string: ! '{}'
30
+ http_version:
31
+ recorded_at: Thu, 14 Feb 2013 22:17:32 GMT
32
+ - request:
33
+ method: post
34
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=e20e72419e69fa7a1c20ffb33aea10499aebb125219dc955f26325abb6b4c9c9&auth_timestamp=1360880252&auth_version=1.0&body_md5=2dfb16ebf87e71b3d1253bcd7ecc2e74
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ! '{"name":"statusChange","channels":["csrs-0"],"data":"{\"status\":\"available\",\"timestamp\":1360880252609}"}'
38
+ headers:
39
+ Content-Type:
40
+ - application/json
41
+ Accept:
42
+ - ! '*/*'
43
+ User-Agent:
44
+ - Ruby
45
+ response:
46
+ status:
47
+ code: 200
48
+ message: OK
49
+ headers:
50
+ Server:
51
+ - thin 1.5.0 codename Knife
52
+ Transfer-Encoding:
53
+ - chunked
54
+ Connection:
55
+ - keep-alive
56
+ body:
57
+ encoding: US-ASCII
58
+ string: ! '{}'
59
+ http_version:
60
+ recorded_at: Thu, 14 Feb 2013 22:17:32 GMT
61
+ - request:
62
+ method: post
63
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=30571e765d1b167d1ee81621a2ad1298ff3d6373b439b4d006b368b1a13595ee&auth_timestamp=1365025794&auth_version=1.0&body_md5=29c25e917cd86611b7eccf6819fd6e20
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ! '{"name":"statusChange","channels":["csrs-0"],"data":"{\"status\":\"available\",\"timestamp\":1365025794926}"}'
67
+ headers:
68
+ Content-Type:
69
+ - application/json
70
+ Accept:
71
+ - ! '*/*'
72
+ User-Agent:
73
+ - Ruby
74
+ response:
75
+ status:
76
+ code: 200
77
+ message: OK
78
+ headers:
79
+ Server:
80
+ - thin 1.5.0 codename Knife
81
+ Content-Length:
82
+ - '17'
83
+ Connection:
84
+ - keep-alive
85
+ body:
86
+ encoding: US-ASCII
87
+ string: ! '{}'
88
+ http_version:
89
+ recorded_at: Wed, 03 Apr 2013 21:49:55 GMT
90
+ recorded_with: VCR 2.0.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=b1edd32b26fba69801af5cd6a62564296be1aa90937a516243be250adba2826c&auth_timestamp=1360880264&auth_version=1.0&body_md5=49a2e4fc9c914cb63506815a12b6410a
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ! '{"name":"test_event","channels":["test"],"data":"{\"key1\":\"value\"}"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - ! '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Server:
22
+ - thin 1.5.0 codename Knife
23
+ Transfer-Encoding:
24
+ - chunked
25
+ Connection:
26
+ - keep-alive
27
+ body:
28
+ encoding: US-ASCII
29
+ string: ! '{}'
30
+ http_version:
31
+ recorded_at: Thu, 14 Feb 2013 22:17:44 GMT
32
+ recorded_with: VCR 2.0.0
@@ -0,0 +1,1110 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://AC8ab65d320fc5ca22b757d937ef013a31:c63af64b012e06a4fa4bf6223823c834@api.twilio.com/2010-04-01/Accounts/AC8ab65d320fc5ca22b757d937ef013a31/Calls/sid-4.json
6
+ body:
7
+ encoding: US-ASCII
8
+ string: Url=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F2285%2Fdial
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Charset:
13
+ - utf-8
14
+ User-Agent:
15
+ - twilio-ruby/3.9.0
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ response:
19
+ status:
20
+ code: 403
21
+ message: Forbidden
22
+ headers:
23
+ Date:
24
+ - Fri, 17 Jan 2014 19:01:16 GMT
25
+ Content-Type:
26
+ - application/json; charset=utf-8
27
+ Content-Length:
28
+ - '157'
29
+ Connection:
30
+ - close
31
+ Etag:
32
+ - ''
33
+ Last-Modified:
34
+ - ''
35
+ X-Powered-By:
36
+ - AT-5000
37
+ X-Shenanigans:
38
+ - none
39
+ body:
40
+ encoding: US-ASCII
41
+ string: ! '{"code":20008,"message":"Resource not yet accessible with Test Account
42
+ credentials","more_info":"https:\/\/www.twilio.com\/docs\/errors\/20008","status":403}'
43
+ http_version:
44
+ recorded_at: Fri, 17 Jan 2014 18:53:15 GMT
45
+ - request:
46
+ method: post
47
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=37a94ea0a6d0c82e08dbb5e4197f3dace304794b4588370940f13fc8ebc58974&auth_timestamp=1389985506&auth_version=1.0&body_md5=20b0222ec4dd6e06111dbf84718666cf
48
+ body:
49
+ encoding: US-ASCII
50
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1389985506226}"}'
51
+ headers:
52
+ Content-Type:
53
+ - application/json
54
+ Accept:
55
+ - ! '*/*'
56
+ User-Agent:
57
+ - Ruby
58
+ response:
59
+ status:
60
+ code: 401
61
+ message: Unauthorized
62
+ headers:
63
+ Content-Type:
64
+ - text/html;charset=utf-8
65
+ Server:
66
+ - thin 1.5.0 codename Knife
67
+ Content-Length:
68
+ - '17'
69
+ Connection:
70
+ - keep-alive
71
+ body:
72
+ encoding: US-ASCII
73
+ string: ! 'Unknown auth_key
74
+
75
+ '
76
+ http_version:
77
+ recorded_at: Fri, 17 Jan 2014 19:05:06 GMT
78
+ - request:
79
+ method: post
80
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=7e0b86dbea90f8da30ecca1f302dd802d99f0ce7ebebd5ebbdca1389b8dd46f1&auth_timestamp=1389985506&auth_version=1.0&body_md5=8940e33c53ef8be8e62fd754cfa58262
81
+ body:
82
+ encoding: US-ASCII
83
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1535}"}'
84
+ headers:
85
+ Content-Type:
86
+ - application/json
87
+ Accept:
88
+ - ! '*/*'
89
+ User-Agent:
90
+ - Ruby
91
+ response:
92
+ status:
93
+ code: 401
94
+ message: Unauthorized
95
+ headers:
96
+ Content-Type:
97
+ - text/html;charset=utf-8
98
+ Server:
99
+ - thin 1.5.0 codename Knife
100
+ Content-Length:
101
+ - '17'
102
+ Connection:
103
+ - keep-alive
104
+ body:
105
+ encoding: US-ASCII
106
+ string: ! 'Unknown auth_key
107
+
108
+ '
109
+ http_version:
110
+ recorded_at: Fri, 17 Jan 2014 19:05:06 GMT
111
+ - request:
112
+ method: post
113
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=33b73085a3cfc8c3673059b08092af5270aeaaa93024868a57e1d35f149277a0&auth_timestamp=1389985542&auth_version=1.0&body_md5=4cc5bdf2645b08256ebe487887ef14f6
114
+ body:
115
+ encoding: US-ASCII
116
+ string: ! '{"name":"InitializeWidget","channels":["csrs-1"],"data":"{}"}'
117
+ headers:
118
+ Content-Type:
119
+ - application/json
120
+ Accept:
121
+ - ! '*/*'
122
+ User-Agent:
123
+ - Ruby
124
+ response:
125
+ status:
126
+ code: 401
127
+ message: Unauthorized
128
+ headers:
129
+ Content-Type:
130
+ - text/html;charset=utf-8
131
+ Server:
132
+ - thin 1.5.0 codename Knife
133
+ Content-Length:
134
+ - '17'
135
+ Connection:
136
+ - keep-alive
137
+ body:
138
+ encoding: US-ASCII
139
+ string: ! 'Unknown auth_key
140
+
141
+ '
142
+ http_version:
143
+ recorded_at: Fri, 17 Jan 2014 19:05:42 GMT
144
+ - request:
145
+ method: post
146
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=e7387669e3c15b959eac0d46740ae0c963aa049339e5aa25c55261b51c66fdb6&auth_timestamp=1389985542&auth_version=1.0&body_md5=ff67e40a49616dd44e05586e94d59c82
147
+ body:
148
+ encoding: US-ASCII
149
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1389985542537}"}'
150
+ headers:
151
+ Content-Type:
152
+ - application/json
153
+ Accept:
154
+ - ! '*/*'
155
+ User-Agent:
156
+ - Ruby
157
+ response:
158
+ status:
159
+ code: 401
160
+ message: Unauthorized
161
+ headers:
162
+ Content-Type:
163
+ - text/html;charset=utf-8
164
+ Server:
165
+ - thin 1.5.0 codename Knife
166
+ Content-Length:
167
+ - '17'
168
+ Connection:
169
+ - keep-alive
170
+ body:
171
+ encoding: US-ASCII
172
+ string: ! 'Unknown auth_key
173
+
174
+ '
175
+ http_version:
176
+ recorded_at: Fri, 17 Jan 2014 19:05:42 GMT
177
+ - request:
178
+ method: post
179
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=9a55603df055ebcdd1340f0239e18b2e281eec53c38d40dc7c428d6be25eab44&auth_timestamp=1389985542&auth_version=1.0&body_md5=2e2667aeae0da71dc876085bc92bb750
180
+ body:
181
+ encoding: US-ASCII
182
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1}"}'
183
+ headers:
184
+ Content-Type:
185
+ - application/json
186
+ Accept:
187
+ - ! '*/*'
188
+ User-Agent:
189
+ - Ruby
190
+ response:
191
+ status:
192
+ code: 401
193
+ message: Unauthorized
194
+ headers:
195
+ Content-Type:
196
+ - text/html;charset=utf-8
197
+ Server:
198
+ - thin 1.5.0 codename Knife
199
+ Content-Length:
200
+ - '17'
201
+ Connection:
202
+ - keep-alive
203
+ body:
204
+ encoding: US-ASCII
205
+ string: ! 'Unknown auth_key
206
+
207
+ '
208
+ http_version:
209
+ recorded_at: Fri, 17 Jan 2014 19:05:43 GMT
210
+ - request:
211
+ method: post
212
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=f7bac08a94a3cb56698b7c2a9e1f80eae6729e4c5411f4df22959dd748a31176&auth_timestamp=1389987058&auth_version=1.0&body_md5=7cc28741f1d93c2ca833dd284a922d61
213
+ body:
214
+ encoding: US-ASCII
215
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1389987058278}"}'
216
+ headers:
217
+ Content-Type:
218
+ - application/json
219
+ Accept:
220
+ - ! '*/*'
221
+ User-Agent:
222
+ - Ruby
223
+ response:
224
+ status:
225
+ code: 401
226
+ message: Unauthorized
227
+ headers:
228
+ Content-Type:
229
+ - text/html;charset=utf-8
230
+ Server:
231
+ - thin 1.5.0 codename Knife
232
+ Content-Length:
233
+ - '17'
234
+ Connection:
235
+ - keep-alive
236
+ body:
237
+ encoding: US-ASCII
238
+ string: ! 'Unknown auth_key
239
+
240
+ '
241
+ http_version:
242
+ recorded_at: Fri, 17 Jan 2014 19:30:58 GMT
243
+ - request:
244
+ method: post
245
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=eef1b8cef2bf5304e5b4706c6c09ae67eda03e5b88166a14ebdead4f562a8026&auth_timestamp=1389987058&auth_version=1.0&body_md5=b5643b9f79656242b810f4a2d14218f3
246
+ body:
247
+ encoding: US-ASCII
248
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1545}"}'
249
+ headers:
250
+ Content-Type:
251
+ - application/json
252
+ Accept:
253
+ - ! '*/*'
254
+ User-Agent:
255
+ - Ruby
256
+ response:
257
+ status:
258
+ code: 401
259
+ message: Unauthorized
260
+ headers:
261
+ Content-Type:
262
+ - text/html;charset=utf-8
263
+ Server:
264
+ - thin 1.5.0 codename Knife
265
+ Content-Length:
266
+ - '17'
267
+ Connection:
268
+ - keep-alive
269
+ body:
270
+ encoding: US-ASCII
271
+ string: ! 'Unknown auth_key
272
+
273
+ '
274
+ http_version:
275
+ recorded_at: Fri, 17 Jan 2014 19:30:58 GMT
276
+ - request:
277
+ method: post
278
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=f051c451f8c2817ab617aff60a6e048fc551cc9d72b02fd11e86873653c57387&auth_timestamp=1390330660&auth_version=1.0&body_md5=957573fffdae8e6d4a8d7f0eebd2418d
279
+ body:
280
+ encoding: US-ASCII
281
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330660147}"}'
282
+ headers:
283
+ Content-Type:
284
+ - application/json
285
+ Accept:
286
+ - ! '*/*'
287
+ User-Agent:
288
+ - Ruby
289
+ response:
290
+ status:
291
+ code: 401
292
+ message: Unauthorized
293
+ headers:
294
+ Content-Type:
295
+ - text/html;charset=utf-8
296
+ Server:
297
+ - thin 1.5.0 codename Knife
298
+ Content-Length:
299
+ - '17'
300
+ Connection:
301
+ - keep-alive
302
+ body:
303
+ encoding: US-ASCII
304
+ string: ! 'Unknown auth_key
305
+
306
+ '
307
+ http_version:
308
+ recorded_at: Tue, 21 Jan 2014 18:57:40 GMT
309
+ - request:
310
+ method: post
311
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=a50498ade4524ae2264bc36daaaf9178a9154cb195720290fa251264e83b6c06&auth_timestamp=1390330660&auth_version=1.0&body_md5=1b749137903f511660ce09ab8d1046aa
312
+ body:
313
+ encoding: US-ASCII
314
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1570}"}'
315
+ headers:
316
+ Content-Type:
317
+ - application/json
318
+ Accept:
319
+ - ! '*/*'
320
+ User-Agent:
321
+ - Ruby
322
+ response:
323
+ status:
324
+ code: 401
325
+ message: Unauthorized
326
+ headers:
327
+ Content-Type:
328
+ - text/html;charset=utf-8
329
+ Server:
330
+ - thin 1.5.0 codename Knife
331
+ Content-Length:
332
+ - '17'
333
+ Connection:
334
+ - keep-alive
335
+ body:
336
+ encoding: US-ASCII
337
+ string: ! 'Unknown auth_key
338
+
339
+ '
340
+ http_version:
341
+ recorded_at: Tue, 21 Jan 2014 18:57:40 GMT
342
+ - request:
343
+ method: post
344
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=9f47bf7964723205b55b4d48c40c1696a9f8440e78be8b8f173e7c7699f17a6d&auth_timestamp=1390330766&auth_version=1.0&body_md5=c8664020c3f89c1c237d1c9df8bbe758
345
+ body:
346
+ encoding: US-ASCII
347
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330766428}"}'
348
+ headers:
349
+ Content-Type:
350
+ - application/json
351
+ Accept:
352
+ - ! '*/*'
353
+ User-Agent:
354
+ - Ruby
355
+ response:
356
+ status:
357
+ code: 401
358
+ message: Unauthorized
359
+ headers:
360
+ Content-Type:
361
+ - text/html;charset=utf-8
362
+ Server:
363
+ - thin 1.5.0 codename Knife
364
+ Content-Length:
365
+ - '17'
366
+ Connection:
367
+ - keep-alive
368
+ body:
369
+ encoding: US-ASCII
370
+ string: ! 'Unknown auth_key
371
+
372
+ '
373
+ http_version:
374
+ recorded_at: Tue, 21 Jan 2014 18:59:26 GMT
375
+ - request:
376
+ method: post
377
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=858684a4ef4e10f5d7ee906c65fd0a47f674dfb3cefcf800786c2a8589d13b8e&auth_timestamp=1390330766&auth_version=1.0&body_md5=9a64021027e22213b684a1b87a6176e7
378
+ body:
379
+ encoding: US-ASCII
380
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1580}"}'
381
+ headers:
382
+ Content-Type:
383
+ - application/json
384
+ Accept:
385
+ - ! '*/*'
386
+ User-Agent:
387
+ - Ruby
388
+ response:
389
+ status:
390
+ code: 401
391
+ message: Unauthorized
392
+ headers:
393
+ Content-Type:
394
+ - text/html;charset=utf-8
395
+ Server:
396
+ - thin 1.5.0 codename Knife
397
+ Content-Length:
398
+ - '17'
399
+ Connection:
400
+ - keep-alive
401
+ body:
402
+ encoding: US-ASCII
403
+ string: ! 'Unknown auth_key
404
+
405
+ '
406
+ http_version:
407
+ recorded_at: Tue, 21 Jan 2014 18:59:27 GMT
408
+ - request:
409
+ method: post
410
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=06e9ef129536062500a7d70f767701f0927e44bb97c677b031c1fe538940f5fe&auth_timestamp=1390330805&auth_version=1.0&body_md5=3011187e36e684fb00cedcc1f2d8fa1c
411
+ body:
412
+ encoding: US-ASCII
413
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330805836}"}'
414
+ headers:
415
+ Content-Type:
416
+ - application/json
417
+ Accept:
418
+ - ! '*/*'
419
+ User-Agent:
420
+ - Ruby
421
+ response:
422
+ status:
423
+ code: 401
424
+ message: Unauthorized
425
+ headers:
426
+ Content-Type:
427
+ - text/html;charset=utf-8
428
+ Server:
429
+ - thin 1.5.0 codename Knife
430
+ Content-Length:
431
+ - '17'
432
+ Connection:
433
+ - keep-alive
434
+ body:
435
+ encoding: US-ASCII
436
+ string: ! 'Unknown auth_key
437
+
438
+ '
439
+ http_version:
440
+ recorded_at: Tue, 21 Jan 2014 19:00:06 GMT
441
+ - request:
442
+ method: post
443
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=dcdae86a4d4cd4e1936a6bbe46f4036a74e0f4a99b2b61b809c564e95c2fb3a3&auth_timestamp=1390330806&auth_version=1.0&body_md5=82439fdaab7b2c96475693faf65ce90e
444
+ body:
445
+ encoding: US-ASCII
446
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1585}"}'
447
+ headers:
448
+ Content-Type:
449
+ - application/json
450
+ Accept:
451
+ - ! '*/*'
452
+ User-Agent:
453
+ - Ruby
454
+ response:
455
+ status:
456
+ code: 401
457
+ message: Unauthorized
458
+ headers:
459
+ Content-Type:
460
+ - text/html;charset=utf-8
461
+ Server:
462
+ - thin 1.5.0 codename Knife
463
+ Content-Length:
464
+ - '17'
465
+ Connection:
466
+ - keep-alive
467
+ body:
468
+ encoding: US-ASCII
469
+ string: ! 'Unknown auth_key
470
+
471
+ '
472
+ http_version:
473
+ recorded_at: Tue, 21 Jan 2014 19:00:06 GMT
474
+ - request:
475
+ method: post
476
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=a8f49c76221d0f6e16c54f73bed5cb276560417f9907fdf4327a4ee2d09e4cd1&auth_timestamp=1390330833&auth_version=1.0&body_md5=4cc5bdf2645b08256ebe487887ef14f6
477
+ body:
478
+ encoding: US-ASCII
479
+ string: ! '{"name":"InitializeWidget","channels":["csrs-1"],"data":"{}"}'
480
+ headers:
481
+ Content-Type:
482
+ - application/json
483
+ Accept:
484
+ - ! '*/*'
485
+ User-Agent:
486
+ - Ruby
487
+ response:
488
+ status:
489
+ code: 401
490
+ message: Unauthorized
491
+ headers:
492
+ Content-Type:
493
+ - text/html;charset=utf-8
494
+ Server:
495
+ - thin 1.5.0 codename Knife
496
+ Content-Length:
497
+ - '17'
498
+ Connection:
499
+ - keep-alive
500
+ body:
501
+ encoding: US-ASCII
502
+ string: ! 'Unknown auth_key
503
+
504
+ '
505
+ http_version:
506
+ recorded_at: Tue, 21 Jan 2014 19:00:34 GMT
507
+ - request:
508
+ method: post
509
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=7b81c89b7105521c91b6280acf710c889cb61e0d0d468d237338b8a9074fd38d&auth_timestamp=1390330834&auth_version=1.0&body_md5=a33bcdc949f13701a26c7d01fd1d4271
510
+ body:
511
+ encoding: US-ASCII
512
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330834174}"}'
513
+ headers:
514
+ Content-Type:
515
+ - application/json
516
+ Accept:
517
+ - ! '*/*'
518
+ User-Agent:
519
+ - Ruby
520
+ response:
521
+ status:
522
+ code: 401
523
+ message: Unauthorized
524
+ headers:
525
+ Content-Type:
526
+ - text/html;charset=utf-8
527
+ Server:
528
+ - thin 1.5.0 codename Knife
529
+ Content-Length:
530
+ - '17'
531
+ Connection:
532
+ - keep-alive
533
+ body:
534
+ encoding: US-ASCII
535
+ string: ! 'Unknown auth_key
536
+
537
+ '
538
+ http_version:
539
+ recorded_at: Tue, 21 Jan 2014 19:00:34 GMT
540
+ - request:
541
+ method: post
542
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=ad6e14fe21d83effc12d09119bf31a915a97da032d0e97b786b6744cc3e00018&auth_timestamp=1390330834&auth_version=1.0&body_md5=2e2667aeae0da71dc876085bc92bb750
543
+ body:
544
+ encoding: US-ASCII
545
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1}"}'
546
+ headers:
547
+ Content-Type:
548
+ - application/json
549
+ Accept:
550
+ - ! '*/*'
551
+ User-Agent:
552
+ - Ruby
553
+ response:
554
+ status:
555
+ code: 401
556
+ message: Unauthorized
557
+ headers:
558
+ Content-Type:
559
+ - text/html;charset=utf-8
560
+ Server:
561
+ - thin 1.5.0 codename Knife
562
+ Content-Length:
563
+ - '17'
564
+ Connection:
565
+ - keep-alive
566
+ body:
567
+ encoding: US-ASCII
568
+ string: ! 'Unknown auth_key
569
+
570
+ '
571
+ http_version:
572
+ recorded_at: Tue, 21 Jan 2014 19:00:34 GMT
573
+ - request:
574
+ method: post
575
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=23b8cef2b616d6c20aba92e63ca145ac671dc3a7f793c5fc7722aefdf0092d95&auth_timestamp=1390330854&auth_version=1.0&body_md5=6610fd3d2e29df820c27f54b9a51897d
576
+ body:
577
+ encoding: US-ASCII
578
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330854352}"}'
579
+ headers:
580
+ Content-Type:
581
+ - application/json
582
+ Accept:
583
+ - ! '*/*'
584
+ User-Agent:
585
+ - Ruby
586
+ response:
587
+ status:
588
+ code: 401
589
+ message: Unauthorized
590
+ headers:
591
+ Content-Type:
592
+ - text/html;charset=utf-8
593
+ Server:
594
+ - thin 1.5.0 codename Knife
595
+ Content-Length:
596
+ - '17'
597
+ Connection:
598
+ - keep-alive
599
+ body:
600
+ encoding: US-ASCII
601
+ string: ! 'Unknown auth_key
602
+
603
+ '
604
+ http_version:
605
+ recorded_at: Tue, 21 Jan 2014 19:00:54 GMT
606
+ - request:
607
+ method: post
608
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=47070ead8d22c36cd786343d614ce7165c3dc64e7e00c69e0605104665857d2f&auth_timestamp=1390330854&auth_version=1.0&body_md5=fb70aa6d7b3f546e9c1db2cfae816f9a
609
+ body:
610
+ encoding: US-ASCII
611
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1595}"}'
612
+ headers:
613
+ Content-Type:
614
+ - application/json
615
+ Accept:
616
+ - ! '*/*'
617
+ User-Agent:
618
+ - Ruby
619
+ response:
620
+ status:
621
+ code: 401
622
+ message: Unauthorized
623
+ headers:
624
+ Content-Type:
625
+ - text/html;charset=utf-8
626
+ Server:
627
+ - thin 1.5.0 codename Knife
628
+ Content-Length:
629
+ - '17'
630
+ Connection:
631
+ - keep-alive
632
+ body:
633
+ encoding: US-ASCII
634
+ string: ! 'Unknown auth_key
635
+
636
+ '
637
+ http_version:
638
+ recorded_at: Tue, 21 Jan 2014 19:00:55 GMT
639
+ - request:
640
+ method: post
641
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=41df72c47171118bad1ecd318d2edd6c382ab4cd99e04b5eb212c03a02915cec&auth_timestamp=1390330905&auth_version=1.0&body_md5=8d0c87c0f6861ba2d044a261624a23ac
642
+ body:
643
+ encoding: US-ASCII
644
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390330905131}"}'
645
+ headers:
646
+ Content-Type:
647
+ - application/json
648
+ Accept:
649
+ - ! '*/*'
650
+ User-Agent:
651
+ - Ruby
652
+ response:
653
+ status:
654
+ code: 401
655
+ message: Unauthorized
656
+ headers:
657
+ Content-Type:
658
+ - text/html;charset=utf-8
659
+ Server:
660
+ - thin 1.5.0 codename Knife
661
+ Content-Length:
662
+ - '17'
663
+ Connection:
664
+ - keep-alive
665
+ body:
666
+ encoding: US-ASCII
667
+ string: ! 'Unknown auth_key
668
+
669
+ '
670
+ http_version:
671
+ recorded_at: Tue, 21 Jan 2014 19:01:45 GMT
672
+ - request:
673
+ method: post
674
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=2293d45fa7b9bbb6f8a8202a2f87dca70815b33947c4113fb8e4905483eefaca&auth_timestamp=1390330905&auth_version=1.0&body_md5=3d926bcd9b98f0bd1e18f189ab82956b
675
+ body:
676
+ encoding: US-ASCII
677
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1600}"}'
678
+ headers:
679
+ Content-Type:
680
+ - application/json
681
+ Accept:
682
+ - ! '*/*'
683
+ User-Agent:
684
+ - Ruby
685
+ response:
686
+ status:
687
+ code: 401
688
+ message: Unauthorized
689
+ headers:
690
+ Content-Type:
691
+ - text/html;charset=utf-8
692
+ Server:
693
+ - thin 1.5.0 codename Knife
694
+ Content-Length:
695
+ - '17'
696
+ Connection:
697
+ - keep-alive
698
+ body:
699
+ encoding: US-ASCII
700
+ string: ! 'Unknown auth_key
701
+
702
+ '
703
+ http_version:
704
+ recorded_at: Tue, 21 Jan 2014 19:01:45 GMT
705
+ - request:
706
+ method: post
707
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=e8e8b887c9121b7dd4451433ad865be6d74a61434f5b7a7694ea3a05a1afbd2d&auth_timestamp=1390331043&auth_version=1.0&body_md5=cbe51d950ed901e5758ecc2835db86f5
708
+ body:
709
+ encoding: US-ASCII
710
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390331043958}"}'
711
+ headers:
712
+ Content-Type:
713
+ - application/json
714
+ Accept:
715
+ - ! '*/*'
716
+ User-Agent:
717
+ - Ruby
718
+ response:
719
+ status:
720
+ code: 401
721
+ message: Unauthorized
722
+ headers:
723
+ Content-Type:
724
+ - text/html;charset=utf-8
725
+ Server:
726
+ - thin 1.5.0 codename Knife
727
+ Content-Length:
728
+ - '17'
729
+ Connection:
730
+ - keep-alive
731
+ body:
732
+ encoding: US-ASCII
733
+ string: ! 'Unknown auth_key
734
+
735
+ '
736
+ http_version:
737
+ recorded_at: Tue, 21 Jan 2014 19:04:04 GMT
738
+ - request:
739
+ method: post
740
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=cf88aa8eb12207ae4706c806e41235ad0ee9db26bedc6f729360ba05c2ecca9c&auth_timestamp=1390331044&auth_version=1.0&body_md5=4d435c668be98aee4c9af01f96334672
741
+ body:
742
+ encoding: US-ASCII
743
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1605}"}'
744
+ headers:
745
+ Content-Type:
746
+ - application/json
747
+ Accept:
748
+ - ! '*/*'
749
+ User-Agent:
750
+ - Ruby
751
+ response:
752
+ status:
753
+ code: 401
754
+ message: Unauthorized
755
+ headers:
756
+ Content-Type:
757
+ - text/html;charset=utf-8
758
+ Server:
759
+ - thin 1.5.0 codename Knife
760
+ Content-Length:
761
+ - '17'
762
+ Connection:
763
+ - keep-alive
764
+ body:
765
+ encoding: US-ASCII
766
+ string: ! 'Unknown auth_key
767
+
768
+ '
769
+ http_version:
770
+ recorded_at: Tue, 21 Jan 2014 19:04:04 GMT
771
+ - request:
772
+ method: post
773
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=f66722aa8e36fafc79577f7a0685829231756ed9007d98f56e596482a641928c&auth_timestamp=1390331156&auth_version=1.0&body_md5=4cc5bdf2645b08256ebe487887ef14f6
774
+ body:
775
+ encoding: US-ASCII
776
+ string: ! '{"name":"InitializeWidget","channels":["csrs-1"],"data":"{}"}'
777
+ headers:
778
+ Content-Type:
779
+ - application/json
780
+ Accept:
781
+ - ! '*/*'
782
+ User-Agent:
783
+ - Ruby
784
+ response:
785
+ status:
786
+ code: 401
787
+ message: Unauthorized
788
+ headers:
789
+ Content-Type:
790
+ - text/html;charset=utf-8
791
+ Server:
792
+ - thin 1.5.0 codename Knife
793
+ Content-Length:
794
+ - '17'
795
+ Connection:
796
+ - keep-alive
797
+ body:
798
+ encoding: US-ASCII
799
+ string: ! 'Unknown auth_key
800
+
801
+ '
802
+ http_version:
803
+ recorded_at: Tue, 21 Jan 2014 19:05:56 GMT
804
+ - request:
805
+ method: post
806
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=99348ddf61883b3b246ac4aad45a62c30d10417e7e199505802d89799254dcf4&auth_timestamp=1390331156&auth_version=1.0&body_md5=b796e2c37371bfec11e818cc50960f89
807
+ body:
808
+ encoding: US-ASCII
809
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390331156359}"}'
810
+ headers:
811
+ Content-Type:
812
+ - application/json
813
+ Accept:
814
+ - ! '*/*'
815
+ User-Agent:
816
+ - Ruby
817
+ response:
818
+ status:
819
+ code: 401
820
+ message: Unauthorized
821
+ headers:
822
+ Content-Type:
823
+ - text/html;charset=utf-8
824
+ Server:
825
+ - thin 1.5.0 codename Knife
826
+ Content-Length:
827
+ - '17'
828
+ Connection:
829
+ - keep-alive
830
+ body:
831
+ encoding: US-ASCII
832
+ string: ! 'Unknown auth_key
833
+
834
+ '
835
+ http_version:
836
+ recorded_at: Tue, 21 Jan 2014 19:05:56 GMT
837
+ - request:
838
+ method: post
839
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=c2250dfb7e693c71138fd194cc64b721ef0e0a6fb9eebf8c13bc0399f253d8c1&auth_timestamp=1390331156&auth_version=1.0&body_md5=2e2667aeae0da71dc876085bc92bb750
840
+ body:
841
+ encoding: US-ASCII
842
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":1}"}'
843
+ headers:
844
+ Content-Type:
845
+ - application/json
846
+ Accept:
847
+ - ! '*/*'
848
+ User-Agent:
849
+ - Ruby
850
+ response:
851
+ status:
852
+ code: 401
853
+ message: Unauthorized
854
+ headers:
855
+ Content-Type:
856
+ - text/html;charset=utf-8
857
+ Server:
858
+ - thin 1.5.0 codename Knife
859
+ Content-Length:
860
+ - '17'
861
+ Connection:
862
+ - keep-alive
863
+ body:
864
+ encoding: US-ASCII
865
+ string: ! 'Unknown auth_key
866
+
867
+ '
868
+ http_version:
869
+ recorded_at: Tue, 21 Jan 2014 19:05:56 GMT
870
+ - request:
871
+ method: post
872
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=38133f1b6aec912ef75fa208a52769a1988085708bdd1a0af7931c261bbdb62f&auth_timestamp=1390331219&auth_version=1.0&body_md5=1e2a52f0eef71561346570e64929e8d8
873
+ body:
874
+ encoding: US-ASCII
875
+ string: ! '{"name":"statusChange","channels":["csrs-1"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390331219241}"}'
876
+ headers:
877
+ Content-Type:
878
+ - application/json
879
+ Accept:
880
+ - ! '*/*'
881
+ User-Agent:
882
+ - Ruby
883
+ response:
884
+ status:
885
+ code: 401
886
+ message: Unauthorized
887
+ headers:
888
+ Content-Type:
889
+ - text/html;charset=utf-8
890
+ Server:
891
+ - thin 1.5.0 codename Knife
892
+ Content-Length:
893
+ - '17'
894
+ Connection:
895
+ - keep-alive
896
+ body:
897
+ encoding: US-ASCII
898
+ string: ! 'Unknown auth_key
899
+
900
+ '
901
+ http_version:
902
+ recorded_at: Tue, 21 Jan 2014 19:06:59 GMT
903
+ - request:
904
+ method: post
905
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=b4b6a061037cb953b6405865703f47b4dfee430068f5151f539b8d0b336a05e5&auth_timestamp=1390331219&auth_version=1.0&body_md5=00a33ee01ba33c0fcd75ca44f5dd30e3
906
+ body:
907
+ encoding: US-ASCII
908
+ string: ! '{"name":"QueueChange","channels":["csrs-1"],"data":"{\"size\":0,\"event_id\":2511}"}'
909
+ headers:
910
+ Content-Type:
911
+ - application/json
912
+ Accept:
913
+ - ! '*/*'
914
+ User-Agent:
915
+ - Ruby
916
+ response:
917
+ status:
918
+ code: 401
919
+ message: Unauthorized
920
+ headers:
921
+ Content-Type:
922
+ - text/html;charset=utf-8
923
+ Server:
924
+ - thin 1.5.0 codename Knife
925
+ Content-Length:
926
+ - '17'
927
+ Connection:
928
+ - keep-alive
929
+ body:
930
+ encoding: US-ASCII
931
+ string: ! 'Unknown auth_key
932
+
933
+ '
934
+ http_version:
935
+ recorded_at: Tue, 21 Jan 2014 19:06:59 GMT
936
+ - request:
937
+ method: post
938
+ uri: https://AC8ab65d320fc5ca22b757d937ef013a31:c63af64b012e06a4fa4bf6223823c834@api.twilio.com/2010-04-01/Accounts/AC8ab65d320fc5ca22b757d937ef013a31/Calls/sid-474.json
939
+ body:
940
+ encoding: US-ASCII
941
+ string: Url=http%3A%2F%2Fexample.com%3A8080%2Fzestphone%2Fproviders%2Ftwilio%2Fcalls%2F5589%2Fdial
942
+ headers:
943
+ Accept:
944
+ - application/json
945
+ Accept-Charset:
946
+ - utf-8
947
+ User-Agent:
948
+ - twilio-ruby/3.9.0
949
+ Content-Type:
950
+ - application/x-www-form-urlencoded
951
+ response:
952
+ status:
953
+ code: 403
954
+ message: Forbidden
955
+ headers:
956
+ Date:
957
+ - Tue, 21 Jan 2014 22:06:06 GMT
958
+ Content-Type:
959
+ - application/json; charset=utf-8
960
+ Content-Length:
961
+ - '157'
962
+ Connection:
963
+ - close
964
+ Etag:
965
+ - ''
966
+ Last-Modified:
967
+ - ''
968
+ X-Powered-By:
969
+ - AT-5000
970
+ X-Shenanigans:
971
+ - none
972
+ body:
973
+ encoding: US-ASCII
974
+ string: ! '{"code":20008,"message":"Resource not yet accessible with Test Account
975
+ credentials","more_info":"https:\/\/www.twilio.com\/docs\/errors\/20008","status":403}'
976
+ http_version:
977
+ recorded_at: Tue, 21 Jan 2014 22:06:06 GMT
978
+ - request:
979
+ method: post
980
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=3a7839bc819c6df3470c0792518e85d1a4a68271e252723412e802424c0d7c6b&auth_timestamp=1390341966&auth_version=1.0&body_md5=ec141b93d250f735cc437e9d53cd30a6
981
+ body:
982
+ encoding: US-ASCII
983
+ string: ! '{"name":"statusChange","channels":["csrs-291"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1390341966156}"}'
984
+ headers:
985
+ Content-Type:
986
+ - application/json
987
+ Accept:
988
+ - ! '*/*'
989
+ User-Agent:
990
+ - Ruby
991
+ response:
992
+ status:
993
+ code: 401
994
+ message: Unauthorized
995
+ headers:
996
+ Content-Type:
997
+ - text/html;charset=utf-8
998
+ Server:
999
+ - thin 1.5.0 codename Knife
1000
+ Content-Length:
1001
+ - '17'
1002
+ Connection:
1003
+ - keep-alive
1004
+ body:
1005
+ encoding: US-ASCII
1006
+ string: ! 'Unknown auth_key
1007
+
1008
+ '
1009
+ http_version:
1010
+ recorded_at: Tue, 21 Jan 2014 22:06:06 GMT
1011
+ - request:
1012
+ method: post
1013
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=8f166da1656e834a3e45d61c88c0471740457f21f2fd9262c10beb9a2bcf068c&auth_timestamp=1390341966&auth_version=1.0&body_md5=eef4721435376f4f62b8916aa08ebc71
1014
+ body:
1015
+ encoding: US-ASCII
1016
+ string: ! '{"name":"QueueChange","channels":["csrs-291"],"data":"{\"size\":0,\"event_id\":3741}"}'
1017
+ headers:
1018
+ Content-Type:
1019
+ - application/json
1020
+ Accept:
1021
+ - ! '*/*'
1022
+ User-Agent:
1023
+ - Ruby
1024
+ response:
1025
+ status:
1026
+ code: 401
1027
+ message: Unauthorized
1028
+ headers:
1029
+ Content-Type:
1030
+ - text/html;charset=utf-8
1031
+ Server:
1032
+ - thin 1.5.0 codename Knife
1033
+ Content-Length:
1034
+ - '17'
1035
+ Connection:
1036
+ - keep-alive
1037
+ body:
1038
+ encoding: US-ASCII
1039
+ string: ! 'Unknown auth_key
1040
+
1041
+ '
1042
+ http_version:
1043
+ recorded_at: Tue, 21 Jan 2014 22:06:06 GMT
1044
+ - request:
1045
+ method: post
1046
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=9833e93cb9e3f61fbe80e03532e993336e73faa23efe820b3752b4b34e93cf35&auth_timestamp=1392058791&auth_version=1.0&body_md5=e735085e732254d1f8718c085dd68329
1047
+ body:
1048
+ encoding: US-ASCII
1049
+ string: ! '{"name":"statusChange","channels":["csrs-291"],"data":"{\"status\":\"on_a_call\",\"timestamp\":1392058791639}"}'
1050
+ headers:
1051
+ Content-Type:
1052
+ - application/json
1053
+ Accept:
1054
+ - ! '*/*'
1055
+ User-Agent:
1056
+ - Ruby
1057
+ response:
1058
+ status:
1059
+ code: 401
1060
+ message: Unauthorized
1061
+ headers:
1062
+ Content-Type:
1063
+ - text/html;charset=utf-8
1064
+ Server:
1065
+ - thin 1.5.0 codename Knife
1066
+ Content-Length:
1067
+ - '17'
1068
+ Connection:
1069
+ - keep-alive
1070
+ body:
1071
+ encoding: US-ASCII
1072
+ string: ! 'Unknown auth_key
1073
+
1074
+ '
1075
+ http_version:
1076
+ recorded_at: Mon, 10 Feb 2014 18:59:51 GMT
1077
+ - request:
1078
+ method: post
1079
+ uri: http://api.pusherapp.com/apps/xxx/events?auth_key=xxx&auth_signature=99ff58e1afbcf48a3681dc73bfeb5c782688449dd7c4fcf3e21646c7a8748b12&auth_timestamp=1392058791&auth_version=1.0&body_md5=91b0fcfbdd2e0d0f74c83f4001e1c8b4
1080
+ body:
1081
+ encoding: US-ASCII
1082
+ string: ! '{"name":"QueueChange","channels":["csrs-291"],"data":"{\"size\":0,\"event_id\":326}"}'
1083
+ headers:
1084
+ Content-Type:
1085
+ - application/json
1086
+ Accept:
1087
+ - ! '*/*'
1088
+ User-Agent:
1089
+ - Ruby
1090
+ response:
1091
+ status:
1092
+ code: 401
1093
+ message: Unauthorized
1094
+ headers:
1095
+ Content-Type:
1096
+ - text/html;charset=utf-8
1097
+ Server:
1098
+ - thin 1.5.0 codename Knife
1099
+ Content-Length:
1100
+ - '17'
1101
+ Connection:
1102
+ - keep-alive
1103
+ body:
1104
+ encoding: US-ASCII
1105
+ string: ! 'Unknown auth_key
1106
+
1107
+ '
1108
+ http_version:
1109
+ recorded_at: Mon, 10 Feb 2014 18:59:52 GMT
1110
+ recorded_with: VCR 2.0.0