wavix-sdk-ruby 1.0.0

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 (84) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +124 -0
  4. data/lib/middleware/follow_redirects_middleware.rb +15 -0
  5. data/lib/services/fields_validator.rb +26 -0
  6. data/lib/wavix-sdk-ruby.rb +5 -0
  7. data/lib/wavix_api/base_methods.rb +180 -0
  8. data/lib/wavix_api/v1/base_destroy.rb +31 -0
  9. data/lib/wavix_api/v1/base_find.rb +31 -0
  10. data/lib/wavix_api/v1/base_search.rb +31 -0
  11. data/lib/wavix_api/v1/billing/invoices/find.rb +44 -0
  12. data/lib/wavix_api/v1/billing/invoices/search.rb +21 -0
  13. data/lib/wavix_api/v1/billing/transactions/search.rb +39 -0
  14. data/lib/wavix_api/v1/buy/carts/checkout.rb +23 -0
  15. data/lib/wavix_api/v1/buy/carts/find.rb +23 -0
  16. data/lib/wavix_api/v1/buy/carts/update.rb +34 -0
  17. data/lib/wavix_api/v1/buy/cities/search.rb +47 -0
  18. data/lib/wavix_api/v1/buy/countries/search.rb +31 -0
  19. data/lib/wavix_api/v1/buy/dids/search.rb +41 -0
  20. data/lib/wavix_api/v1/buy/regions/search.rb +33 -0
  21. data/lib/wavix_api/v1/call/recordings/destroy.rb +23 -0
  22. data/lib/wavix_api/v1/call/recordings/month_statistics/details.rb +35 -0
  23. data/lib/wavix_api/v1/call/recordings/month_statistics/search.rb +35 -0
  24. data/lib/wavix_api/v1/call/recordings/recording_settings.rb +40 -0
  25. data/lib/wavix_api/v1/call/recordings/retention_policy.rb +23 -0
  26. data/lib/wavix_api/v1/call/recordings/search.rb +55 -0
  27. data/lib/wavix_api/v1/call/recordings/update_recording_settings.rb +48 -0
  28. data/lib/wavix_api/v1/call/recordings/update_retention_policy.rb +37 -0
  29. data/lib/wavix_api/v1/call/transcriptions/find.rb +31 -0
  30. data/lib/wavix_api/v1/call/transcriptions/retranscribe.rb +35 -0
  31. data/lib/wavix_api/v1/cdrs/advanced_search.rb +67 -0
  32. data/lib/wavix_api/v1/cdrs/common_vars.rb +22 -0
  33. data/lib/wavix_api/v1/cdrs/metrics.rb +29 -0
  34. data/lib/wavix_api/v1/cdrs/search.rb +35 -0
  35. data/lib/wavix_api/v1/e911_records/create.rb +47 -0
  36. data/lib/wavix_api/v1/e911_records/destroy.rb +31 -0
  37. data/lib/wavix_api/v1/e911_records/search.rb +33 -0
  38. data/lib/wavix_api/v1/e911_records/validate_address.rb +44 -0
  39. data/lib/wavix_api/v1/mydids/cities.rb +32 -0
  40. data/lib/wavix_api/v1/mydids/destroy.rb +55 -0
  41. data/lib/wavix_api/v1/mydids/find.rb +21 -0
  42. data/lib/wavix_api/v1/mydids/search.rb +35 -0
  43. data/lib/wavix_api/v1/mydids/update.rb +40 -0
  44. data/lib/wavix_api/v1/mydids/update_destinations.rb +73 -0
  45. data/lib/wavix_api/v1/mydids/update_sms_enabled.rb +32 -0
  46. data/lib/wavix_api/v1/papers/create.rb +65 -0
  47. data/lib/wavix_api/v1/papers/find.rb +42 -0
  48. data/lib/wavix_api/v1/profile/account_config.rb +21 -0
  49. data/lib/wavix_api/v1/profile/find.rb +21 -0
  50. data/lib/wavix_api/v1/profile/update.rb +58 -0
  51. data/lib/wavix_api/v1/sub_organizations/create.rb +36 -0
  52. data/lib/wavix_api/v1/sub_organizations/find.rb +19 -0
  53. data/lib/wavix_api/v1/sub_organizations/search.rb +31 -0
  54. data/lib/wavix_api/v1/sub_organizations/transactions.rb +39 -0
  55. data/lib/wavix_api/v1/sub_organizations/update.rb +40 -0
  56. data/lib/wavix_api/v1/trunks/create.rb +76 -0
  57. data/lib/wavix_api/v1/trunks/destroy.rb +19 -0
  58. data/lib/wavix_api/v1/trunks/find.rb +19 -0
  59. data/lib/wavix_api/v1/trunks/search.rb +30 -0
  60. data/lib/wavix_api/v1/trunks/update.rb +85 -0
  61. data/lib/wavix_api/v1/voice_campaigns/create.rb +39 -0
  62. data/lib/wavix_api/v1/voice_campaigns/find.rb +21 -0
  63. data/lib/wavix_api/v2/base_destroy.rb +10 -0
  64. data/lib/wavix_api/v2/base_find.rb +10 -0
  65. data/lib/wavix_api/v2/base_search.rb +10 -0
  66. data/lib/wavix_api/v2/messages/all.rb +23 -0
  67. data/lib/wavix_api/v2/messages/async_create.rb +23 -0
  68. data/lib/wavix_api/v2/messages/attachments/find.rb +59 -0
  69. data/lib/wavix_api/v2/messages/common_vars.rb +50 -0
  70. data/lib/wavix_api/v2/messages/create.rb +24 -0
  71. data/lib/wavix_api/v2/messages/find.rb +19 -0
  72. data/lib/wavix_api/v2/messages/opt_outs/create.rb +34 -0
  73. data/lib/wavix_api/v2/messages/search.rb +23 -0
  74. data/lib/wavix_api/v2/messages/sender_ids/create.rb +40 -0
  75. data/lib/wavix_api/v2/messages/sender_ids/destroy.rb +21 -0
  76. data/lib/wavix_api/v2/messages/sender_ids/find.rb +21 -0
  77. data/lib/wavix_api/v2/messages/sender_ids/restrictions.rb +32 -0
  78. data/lib/wavix_api/v2/messages/sender_ids/search.rb +21 -0
  79. data/lib/wavix_api/v3/messages/sender_ids/create.rb +51 -0
  80. data/lib/wavix_api/v3/messages/sender_ids/find.rb +21 -0
  81. data/lib/wavix_api/v3/messages/sender_ids/search.rb +21 -0
  82. data/lib/wavix_api.rb +155 -0
  83. data/wavix-sdk-ruby.gemspec +40 -0
  84. metadata +204 -0
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module SubOrganizations
6
+ class Create
7
+ include WavixApi::BaseMethods
8
+
9
+ @params_schema = {
10
+ type: 'object',
11
+ properties: {
12
+ name: { type: 'string' }.freeze,
13
+ default_destinations: {
14
+ type: 'object',
15
+ properties: {
16
+ sms_endpoint: { type: 'string' }.freeze,
17
+ dlr_endpoint: { type: 'string' }.freeze
18
+ }.freeze
19
+ }.freeze
20
+ }.freeze,
21
+ required: %i[name].freeze
22
+ }.freeze
23
+
24
+ class << self
25
+ def call(params = {})
26
+ instance = new(params)
27
+
28
+ instance.validate!
29
+
30
+ instance.post('v1/sub-organizations')
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module SubOrganizations
6
+ class Find < ::WavixApi::V1::BaseFind
7
+ @params_schema = ::WavixApi::BaseMethods::ONLY_ID_SCHEMA
8
+
9
+ class << self
10
+ private
11
+
12
+ def path
13
+ 'v1/sub-organizations'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module SubOrganizations
8
+ class Search
9
+ include WavixApi::BaseMethods
10
+
11
+ @params_schema = {
12
+ type: 'object',
13
+ properties: {
14
+ status: { enum: %w[enabled disabled].freeze }.freeze,
15
+ **::WavixApi::BaseMethods::PAGINATION_SCHEMA
16
+ }.freeze
17
+ }.freeze
18
+
19
+ class << self
20
+ def call(params = {})
21
+ instance = new(params)
22
+
23
+ instance.validate!
24
+
25
+ instance.get('v1/sub-organizations')
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module SubOrganizations
8
+ class Transactions
9
+ include WavixApi::BaseMethods
10
+
11
+ @params_schema = {
12
+ type: 'object',
13
+ properties: {
14
+ type: { type: 'string' }.freeze,
15
+ id: { type: 'integer' }.freeze,
16
+ **::WavixApi::BaseMethods::PAGINATION_SCHEMA
17
+ }.freeze,
18
+ required: %i[id].freeze
19
+ }.freeze
20
+
21
+ class << self
22
+ def call(params = {})
23
+ instance = new(params)
24
+
25
+ instance.validate!
26
+ instance.validate_dates!(::WavixApi::V1::Cdrs::CommonVars::DATE_FIELDS)
27
+
28
+ instance.stringify_dates!(
29
+ instance.params, fields: ::WavixApi::V1::Cdrs::CommonVars::DATE_FIELDS
30
+ )
31
+ instance.get(
32
+ ['v1/sub-organizations', instance.id, 'billing', 'transactions'].join('/')
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module SubOrganizations
8
+ class Update
9
+ include WavixApi::BaseMethods
10
+
11
+ @params_schema = {
12
+ type: 'object',
13
+ properties: {
14
+ name: { type: 'string' }.freeze,
15
+ status: { enum: %w[active disabled].freeze }.freeze,
16
+ default_destinations: {
17
+ type: 'object',
18
+ properties: {
19
+ sms_endpoint: { type: 'string' }.freeze,
20
+ dlr_endpoint: { type: 'string' }.freeze
21
+ }.freeze
22
+ }.freeze,
23
+ id: { type: 'integer' }.freeze
24
+ }.freeze,
25
+ required: %i[name id].freeze
26
+ }.freeze
27
+
28
+ class << self
29
+ def call(params = {})
30
+ instance = new(params)
31
+
32
+ instance.validate!
33
+
34
+ instance.patch(['v1/sub-organizations', instance.id].join('/'))
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module Trunks
6
+ class Create
7
+ include WavixApi::BaseMethods
8
+
9
+ @params_schema = {
10
+ type: 'object',
11
+ properties: {
12
+ label: { type: 'string' }.freeze,
13
+ password: { type: 'string' }.freeze,
14
+ callerid: { type: 'string' }.freeze,
15
+ ip_restrict: { type: 'boolean' }.freeze,
16
+ didinfo_enabled: { type: 'boolean' }.freeze,
17
+ call_restrict: { type: 'boolean' }.freeze,
18
+ call_limit: { type: 'integer' }.freeze,
19
+ cost_limit: { type: 'boolean' }.freeze,
20
+ max_call_cost: { type: 'number' }.freeze,
21
+ channels_restrict: { type: 'boolean' }.freeze,
22
+ max_channels: { type: 'integer' }.freeze,
23
+ rewrite_enabled: { type: 'boolean' }.freeze,
24
+ rewrite_prefix: { type: 'string' }.freeze,
25
+ rewrite_cond: { type: 'string' }.freeze,
26
+ multiple_numbers: { type: 'boolean' }.freeze,
27
+ allowed_ips: {
28
+ type: 'array',
29
+ items: {
30
+ type: 'object',
31
+ properties: {
32
+ ip: { type: 'string' }.freeze
33
+ }.freeze,
34
+ required: %i[ip].freeze
35
+ }
36
+ }.freeze,
37
+ host_request: {
38
+ type: 'object',
39
+ properties: {
40
+ host: { type: 'string' }.freeze,
41
+ status: { enum: %w[pending approved].freeze }.freeze
42
+ }.freeze
43
+ }.freeze,
44
+ call_recording_enabled: { type: 'boolean' }.freeze,
45
+ transcription_enabled: { type: 'boolean' }.freeze,
46
+ transcription_threshold: { type: 'integer' }.freeze,
47
+ machine_detection_enabled: { type: 'boolean' }.freeze
48
+ }.freeze,
49
+ required: %i[
50
+ label
51
+ password
52
+ callerid
53
+ ip_restrict
54
+ didinfo_enabled
55
+ call_restrict
56
+ cost_limit
57
+ channels_restrict
58
+ rewrite_enabled
59
+ transcription_enabled
60
+ transcription_threshold
61
+ ].freeze
62
+ }.freeze
63
+
64
+ class << self
65
+ def call(params = {})
66
+ instance = new(params)
67
+
68
+ instance.validate!
69
+
70
+ instance.post('v1/trunks')
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module Trunks
6
+ class Destroy < ::WavixApi::V1::BaseDestroy
7
+ @params_schema = ::WavixApi::BaseMethods::ONLY_ID_SCHEMA
8
+
9
+ class << self
10
+ private
11
+
12
+ def path
13
+ 'v1/trunks'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module Trunks
6
+ class Find < ::WavixApi::V1::BaseFind
7
+ @params_schema = ::WavixApi::BaseMethods::ONLY_ID_SCHEMA
8
+
9
+ class << self
10
+ private
11
+
12
+ def path
13
+ 'v1/trunks'
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module Trunks
8
+ class Search
9
+ include WavixApi::BaseMethods
10
+
11
+ @params_schema = {
12
+ type: 'object',
13
+ properties: {
14
+ **::WavixApi::BaseMethods::PAGINATION_SCHEMA
15
+ }
16
+ }.freeze
17
+
18
+ class << self
19
+ def call(params = {})
20
+ instance = new(params)
21
+
22
+ instance.validate!
23
+
24
+ instance.get('v1/trunks')
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module Trunks
6
+ class Update
7
+ include WavixApi::BaseMethods
8
+
9
+ @params_schema = {
10
+ type: 'object',
11
+ properties: {
12
+ id: { type: 'integer' }.freeze,
13
+ label: { type: 'string' }.freeze,
14
+ password: { type: 'string' }.freeze,
15
+ callerid: { type: 'string' }.freeze,
16
+ ip_restrict: { type: 'boolean' }.freeze,
17
+ didinfo_enabled: { type: 'boolean' }.freeze,
18
+ call_restrict: { type: 'boolean' }.freeze,
19
+ call_limit: { type: 'integer' }.freeze,
20
+ cost_limit: { type: 'boolean' }.freeze,
21
+ max_call_cost: { type: 'number' }.freeze,
22
+ channels_restrict: { type: 'boolean' }.freeze,
23
+ max_channels: { type: 'integer' }.freeze,
24
+ rewrite_enabled: { type: 'boolean' }.freeze,
25
+ rewrite_prefix: { type: 'string' }.freeze,
26
+ rewrite_cond: { type: 'string' }.freeze,
27
+ multiple_numbers: { type: 'boolean' }.freeze,
28
+ allowed_ips: {
29
+ type: 'array',
30
+ items: {
31
+ type: 'object',
32
+ properties: {
33
+ id: { type: 'integer' }.freeze,
34
+ ip: {
35
+ type: 'string',
36
+ pattern: ::WavixApi::BaseMethods::IP_REGEXP
37
+ }.freeze,
38
+ _destroy: { type: 'boolean' }.freeze,
39
+ transcription_enabled: { type: 'boolean' }.freeze,
40
+ transcription_threshold: { type: 'integer' }.freeze
41
+ }.freeze,
42
+ required: %i[ip].freeze
43
+ }
44
+ }.freeze,
45
+ host_request: {
46
+ type: 'object',
47
+ properties: {
48
+ host: { type: 'string' }.freeze,
49
+ status: { enum: %w[pending approved].freeze }.freeze
50
+ }.freeze
51
+ }.freeze,
52
+ call_recording_enabled: { type: 'boolean' }.freeze,
53
+ transcription_enabled: { type: 'boolean' }.freeze,
54
+ transcription_threshold: { type: 'integer' }.freeze,
55
+ machine_detection_enabled: { type: 'boolean' }.freeze
56
+ }.freeze,
57
+ required: %i[
58
+ id
59
+ label
60
+ password
61
+ callerid
62
+ ip_restrict
63
+ didinfo_enabled
64
+ call_restrict
65
+ cost_limit
66
+ channels_restrict
67
+ rewrite_enabled
68
+ transcription_enabled
69
+ transcription_threshold
70
+ ].freeze
71
+ }.freeze
72
+
73
+ class << self
74
+ def call(params = {})
75
+ instance = new(params)
76
+
77
+ instance.validate!
78
+
79
+ instance.put(['v1/trunks', instance.id].join('/'))
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module VoiceCampaigns
8
+ class Create
9
+ include WavixApi::BaseMethods
10
+
11
+ @params_schema = {
12
+ type: 'object',
13
+ properties: {
14
+ voice_campaign: {
15
+ type: 'object',
16
+ properties: {
17
+ callflow_id: { type: 'integer' }.freeze,
18
+ contact: { type: 'string' }.freeze,
19
+ caller_id: { type: 'string' }.freeze
20
+ }.freeze,
21
+ required: %i[callflow_id contact caller_id].freeze
22
+ }.freeze
23
+ }.freeze,
24
+ required: %i[voice_campaign].freeze
25
+ }.freeze
26
+
27
+ class << self
28
+ def call(params = {})
29
+ instance = new(params)
30
+
31
+ instance.validate!
32
+
33
+ instance.post('v1/voice-campaigns')
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V1
7
+ module VoiceCampaigns
8
+ class Find < ::WavixApi::V1::BaseFind
9
+ @params_schema = ::WavixApi::BaseMethods::ONLY_ID_SCHEMA
10
+
11
+ class << self
12
+ private
13
+
14
+ def path
15
+ 'v1/voice-campaigns'
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V2
7
+ class BaseDestroy < ::WavixApi::V1::BaseDestroy
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V2
7
+ class BaseFind < ::WavixApi::V1::BaseFind
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V2
7
+ class BaseSearch < ::WavixApi::V1::BaseSearch
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'common_vars'
4
+
5
+ module WavixApi
6
+ module V2
7
+ module Messages
8
+ class All < ::WavixApi::V2::BaseSearch
9
+ include ::WavixApi::V1::Messages::CommonVars
10
+
11
+ @params_schema = ::WavixApi::V1::Messages::CommonVars::SEARCH_PARAMS_SCHEMA
12
+
13
+ class << self
14
+ private
15
+
16
+ def path
17
+ 'v2/messages/all'
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V2
5
+ module Messages
6
+ class AsyncCreate
7
+ include WavixApi::BaseMethods
8
+ include ::WavixApi::V1::Messages::CommonVars
9
+
10
+ @params_schema = ::WavixApi::V1::Messages::CommonVars::CREATE_PARAMS_SCHEMA
11
+ class << self
12
+ def call(params = {})
13
+ instance = new(params)
14
+
15
+ instance.validate!
16
+
17
+ instance.post('v2/messages/async')
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'wavix_api'
4
+
5
+ module WavixApi
6
+ module V2
7
+ module Messages
8
+ module Attachments
9
+ class Find
10
+ include WavixApi::BaseMethods
11
+
12
+ @params_schema = {
13
+ type: 'object',
14
+ properties: {
15
+ id: { type: 'string' }.freeze,
16
+ sms_id: { type: 'string' }.freeze,
17
+ format: { type: 'string' }.freeze
18
+ }.freeze,
19
+ required: %i[id sms_id format].freeze
20
+ }.freeze
21
+
22
+ def initialize(params = {})
23
+ super(params)
24
+ @id = nil
25
+ end
26
+
27
+ class << self
28
+ def call(params = {}, save_path: nil)
29
+ instance = new(params)
30
+ instance.validate!
31
+ id = instance.params[:id]
32
+ format = instance.params[:format]
33
+
34
+ instance.download(
35
+ path(instance.params[:sms_id], id, format),
36
+ headers:
37
+ {
38
+ 'Content-Disposition' => "attachment; filename='#{id}.#{format}}'",
39
+ 'Content-Type' => 'application/octet-stream',
40
+ 'Content-Transfer-Encoding' => 'binary'
41
+ },
42
+ save_path: save_path
43
+ )
44
+ end
45
+
46
+ def path(sms_id, id, format)
47
+ ['v2/messages/attachments', sms_id, "#{id}.#{format}"]
48
+ .join('/')
49
+ end
50
+ end
51
+
52
+ def call(save_path: nil)
53
+ self.class.call(params, save_path: save_path)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V1
5
+ module Messages
6
+ module CommonVars
7
+ SEARCH_PARAMS_SCHEMA = {
8
+ type: 'object',
9
+ properties: {
10
+ type: { string: 'string' }.freeze,
11
+ sent_after: { string: 'string' }.freeze,
12
+ sent_before: { string: 'string' }.freeze,
13
+ from: { string: 'string' }.freeze,
14
+ to: { string: 'string' }.freeze,
15
+ message_type: { string: 'string' }.freeze,
16
+ status: { string: 'string' }.freeze,
17
+ tag: { string: 'string' }.freeze,
18
+ **::WavixApi::BaseMethods::PAGINATION_SCHEMA
19
+ }.freeze,
20
+ required: %i[type sent_after sent_before].freeze
21
+ }.freeze
22
+ CREATE_PARAMS_SCHEMA = {
23
+ type: 'object',
24
+ properties: {
25
+ from: { string: 'string' }.freeze,
26
+ to: { string: 'string' }.freeze,
27
+ message_body: {
28
+ type: 'object',
29
+ properties: {
30
+ text: { type: 'string' }.freeze,
31
+ media: {
32
+ anyOf: [
33
+ { type: 'array',
34
+ items: { type: 'string' }.freeze }.freeze,
35
+ { type: 'string' }.freeze
36
+ ]
37
+ }.freeze,
38
+ required: %i[text].freeze
39
+ }.freeze
40
+ },
41
+ callback_url: { string: 'string' },
42
+ validity: { integer: 'integer' },
43
+ tag: { string: 'string' }
44
+ }.freeze,
45
+ required: %i[from to message_body].freeze
46
+ }.freeze
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WavixApi
4
+ module V2
5
+ module Messages
6
+ class Create
7
+ include WavixApi::BaseMethods
8
+ include ::WavixApi::V1::Messages::CommonVars
9
+
10
+ @params_schema = ::WavixApi::V1::Messages::CommonVars::CREATE_PARAMS_SCHEMA
11
+
12
+ class << self
13
+ def call(params = {})
14
+ instance = new(params)
15
+
16
+ instance.validate!
17
+
18
+ instance.post('v2/messages')
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end