messagemedia_messages_sdk 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.
- checksums.yaml +7 -0
- data/LICENSE +201 -0
- data/README.md +608 -0
- data/lib/message_media_messages.rb +50 -0
- data/lib/message_media_messages/api_helper.rb +209 -0
- data/lib/message_media_messages/configuration.rb +29 -0
- data/lib/message_media_messages/controllers/base_controller.rb +57 -0
- data/lib/message_media_messages/controllers/delivery_reports_controller.rb +208 -0
- data/lib/message_media_messages/controllers/messages_controller.rb +336 -0
- data/lib/message_media_messages/controllers/replies_controller.rb +208 -0
- data/lib/message_media_messages/exceptions/api_exception.rb +18 -0
- data/lib/message_media_messages/http/auth/basic_auth.rb +20 -0
- data/lib/message_media_messages/http/faraday_client.rb +55 -0
- data/lib/message_media_messages/http/http_call_back.rb +22 -0
- data/lib/message_media_messages/http/http_client.rb +92 -0
- data/lib/message_media_messages/http/http_context.rb +18 -0
- data/lib/message_media_messages/http/http_method_enum.rb +11 -0
- data/lib/message_media_messages/http/http_request.rb +48 -0
- data/lib/message_media_messages/http/http_response.rb +21 -0
- data/lib/message_media_messages/message_media_messages_client.rb +39 -0
- data/lib/message_media_messages/models/base_model.rb +34 -0
- data/lib/message_media_messages/models/cancel_scheduled_message_request.rb +35 -0
- data/lib/message_media_messages/models/check_delivery_reports_response.rb +35 -0
- data/lib/message_media_messages/models/check_replies_response.rb +35 -0
- data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request.rb +35 -0
- data/lib/message_media_messages/models/confirm_delivery_reports_as_received_request_11.rb +35 -0
- data/lib/message_media_messages/models/confirm_replies_as_received_request.rb +35 -0
- data/lib/message_media_messages/models/confirm_replies_as_received_request_8.rb +35 -0
- data/lib/message_media_messages/models/send_messages_request.rb +35 -0
- data/lib/message_media_messages/models/send_messages_response.rb +35 -0
- data/test/controllers/controller_test_base.rb +30 -0
- data/test/controllers/test_delivery_reports_controller.rb +131 -0
- data/test/controllers/test_messages_controller.rb +105 -0
- data/test/controllers/test_replies_controller.rb +132 -0
- data/test/http_response_catcher.rb +16 -0
- data/test/test_helper.rb +91 -0
- metadata +168 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: aef2e715371702201b6a82045b12fe6236a4abed
|
4
|
+
data.tar.gz: d5e0e979766af4f86e67837289fc5877ccbc3445
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f6485aee0b4ab324ee4c587194f7fabdafba9d88b2a803b9b6bb86aa7088dc1a2c1996d6596ef1d3e40953d8178db60e585079efdc3b73610135692f3b5fc3d6
|
7
|
+
data.tar.gz: 17b11c77f4a7958c87c79f7d41254376cd3073368f761104b62319d17f043cc6f48382cc8ac00c48806967b0aee5e7dc1debbbcea17bc16036531e357110871e
|
data/LICENSE
ADDED
@@ -0,0 +1,201 @@
|
|
1
|
+
Apache License
|
2
|
+
Version 2.0, January 2004
|
3
|
+
http://www.apache.org/licenses/
|
4
|
+
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6
|
+
|
7
|
+
1. Definitions.
|
8
|
+
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
11
|
+
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
13
|
+
the copyright owner that is granting the License.
|
14
|
+
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
16
|
+
other entities that control, are controlled by, or are under common
|
17
|
+
control with that entity. For the purposes of this definition,
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
19
|
+
direction or management of such entity, whether by contract or
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
22
|
+
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
24
|
+
exercising permissions granted by this License.
|
25
|
+
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
27
|
+
including but not limited to software source code, documentation
|
28
|
+
source, and configuration files.
|
29
|
+
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
31
|
+
transformation or translation of a Source form, including but
|
32
|
+
not limited to compiled object code, generated documentation,
|
33
|
+
and conversions to other media types.
|
34
|
+
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
36
|
+
Object form, made available under the License, as indicated by a
|
37
|
+
copyright notice that is included in or attached to the work
|
38
|
+
(an example is provided in the Appendix below).
|
39
|
+
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
46
|
+
the Work and Derivative Works thereof.
|
47
|
+
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
49
|
+
the original version of the Work and any modifications or additions
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
61
|
+
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
64
|
+
subsequently incorporated within the Work.
|
65
|
+
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
72
|
+
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78
|
+
where such license applies only to those patent claims licensable
|
79
|
+
by such Contributor that are necessarily infringed by their
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
82
|
+
institute patent litigation against any entity (including a
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
85
|
+
or contributory patent infringement, then any patent licenses
|
86
|
+
granted to You under this License for that Work shall terminate
|
87
|
+
as of the date such litigation is filed.
|
88
|
+
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
91
|
+
modifications, and in Source or Object form, provided that You
|
92
|
+
meet the following conditions:
|
93
|
+
|
94
|
+
(a) You must give any other recipients of the Work or
|
95
|
+
Derivative Works a copy of this License; and
|
96
|
+
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
98
|
+
stating that You changed the files; and
|
99
|
+
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
102
|
+
attribution notices from the Source form of the Work,
|
103
|
+
excluding those notices that do not pertain to any part of
|
104
|
+
the Derivative Works; and
|
105
|
+
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
108
|
+
include a readable copy of the attribution notices contained
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
111
|
+
of the following places: within a NOTICE text file distributed
|
112
|
+
as part of the Derivative Works; within the Source form or
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
114
|
+
within a display generated by the Derivative Works, if and
|
115
|
+
wherever such third-party notices normally appear. The contents
|
116
|
+
of the NOTICE file are for informational purposes only and
|
117
|
+
do not modify the License. You may add Your own attribution
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
120
|
+
that such additional attribution notices cannot be construed
|
121
|
+
as modifying the License.
|
122
|
+
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
124
|
+
may provide additional or different license terms and conditions
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
128
|
+
the conditions stated in this License.
|
129
|
+
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
133
|
+
this License, without any additional terms or conditions.
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
135
|
+
the terms of any separate license agreement you may have executed
|
136
|
+
with Licensor regarding such Contributions.
|
137
|
+
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
140
|
+
except as required for reasonable and customary use in describing the
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
142
|
+
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
152
|
+
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
158
|
+
incidental, or consequential damages of any character arising as a
|
159
|
+
result of this License or out of the use or inability to use the
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
162
|
+
other commercial damages or losses), even if such Contributor
|
163
|
+
has been advised of the possibility of such damages.
|
164
|
+
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
168
|
+
or other liability obligations and/or rights consistent with this
|
169
|
+
License. However, in accepting such obligations, You may act only
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
174
|
+
of your accepting any such warranty or additional liability.
|
175
|
+
|
176
|
+
END OF TERMS AND CONDITIONS
|
177
|
+
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
179
|
+
|
180
|
+
To apply the Apache License to your work, attach the following
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
182
|
+
replaced with your own identifying information. (Don't include
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
184
|
+
comment syntax for the file format. We also recommend that a
|
185
|
+
file or class name and description of purpose be included on the
|
186
|
+
same "printed page" as the copyright notice for easier
|
187
|
+
identification within third-party archives.
|
188
|
+
|
189
|
+
Copyright [yyyy] [name of copyright owner]
|
190
|
+
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
192
|
+
you may not use this file except in compliance with the License.
|
193
|
+
You may obtain a copy of the License at
|
194
|
+
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
196
|
+
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200
|
+
See the License for the specific language governing permissions and
|
201
|
+
limitations under the License.
|
data/README.md
ADDED
@@ -0,0 +1,608 @@
|
|
1
|
+
# Getting started
|
2
|
+
|
3
|
+
The MessageMedia Messages API provides a number of endpoints for building powerful two-way messaging applications.
|
4
|
+
|
5
|
+
## How to Build
|
6
|
+
|
7
|
+
This client library is a Ruby gem which can be compiled and used in your Ruby and Ruby on Rails project. This library requires a few gems from the RubyGems repository.
|
8
|
+
|
9
|
+
1. Open the command line interface or the terminal and navigate to the folder containing the source code.
|
10
|
+
2. Run ``` gem build message_media_messages.gemspec ``` to build the gem.
|
11
|
+
3. Once built, the gem can be installed on the current work environment using ``` gem install message_media_messages-1.0.0.gem ```
|
12
|
+
|
13
|
+

|
14
|
+
|
15
|
+
## How to Use
|
16
|
+
|
17
|
+
The following section explains how to use the MessageMediaMessages Ruby Gem in a new Rails project using RubyMine™. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.
|
18
|
+
|
19
|
+
### 1. Starting a new project
|
20
|
+
|
21
|
+
Close any existing projects in RubyMine™ by selecting ``` File -> Close Project ```. Next, click on ``` Create New Project ``` to create a new project from scratch.
|
22
|
+
|
23
|
+

|
24
|
+
|
25
|
+
Next, provide ``` TestApp ``` as the project name, choose ``` Rails Application ``` as the project type, and click ``` OK ```.
|
26
|
+
|
27
|
+

|
28
|
+
|
29
|
+
In the next dialog make sure that correct *Ruby SDK* is being used (minimum 2.0.0) and click ``` OK ```.
|
30
|
+
|
31
|
+

|
32
|
+
|
33
|
+
This will create a new Rails Application project with an existing set of files and folder.
|
34
|
+
|
35
|
+
### 2. Add reference of the gem
|
36
|
+
|
37
|
+
In order to use the MessageMediaMessages gem in the new project we must add a gem reference. Locate the ```Gemfile``` in the *Project Explorer* window under the ``` TestApp ``` project node. The file contains references to all gems being used in the project. Here, add the reference to the library gem by adding the following line: ``` gem 'message_media_messages', '~> 1.0.0' ```
|
38
|
+
|
39
|
+

|
40
|
+
|
41
|
+
### 3. Adding a new Rails Controller
|
42
|
+
|
43
|
+
Once the ``` TestApp ``` project is created, a folder named ``` controllers ``` will be visible in the *Project Explorer* under the following path: ``` TestApp > app > controllers ```. Right click on this folder and select ``` New -> Run Rails Generator... ```.
|
44
|
+
|
45
|
+

|
46
|
+
|
47
|
+
Selecting the said option will popup a small window where the generator names are displayed. Here, select the ``` controller ``` template.
|
48
|
+
|
49
|
+

|
50
|
+
|
51
|
+
Next, a popup window will ask you for a Controller name and included Actions. For controller name provide ``` Hello ``` and include an action named ``` Index ``` and click ``` OK ```.
|
52
|
+
|
53
|
+

|
54
|
+
|
55
|
+
A new controller class anmed ``` HelloController ``` will be created in a file named ``` hello_controller.rb ``` containing a method named ``` Index ```. In this method, add code for initialization and a sample for its usage.
|
56
|
+
|
57
|
+

|
58
|
+
|
59
|
+
## How to Test
|
60
|
+
|
61
|
+
You can test the generated SDK and the server with automatically generated test
|
62
|
+
cases as follows:
|
63
|
+
|
64
|
+
1. From terminal/cmd navigate to the root directory of the SDK.
|
65
|
+
2. Invoke: `bundle exec rake`
|
66
|
+
|
67
|
+
## Initialization
|
68
|
+
|
69
|
+
### Authentication
|
70
|
+
In order to setup authentication and initialization of the API client, you need the following information.
|
71
|
+
|
72
|
+
| Parameter | Description |
|
73
|
+
|-----------|-------------|
|
74
|
+
| basic_auth_user_name | The username to use with basic authentication |
|
75
|
+
| basic_auth_password | The password to use with basic authentication |
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
API client can be initialized as following.
|
80
|
+
|
81
|
+
```ruby
|
82
|
+
# Configuration parameters and credentials
|
83
|
+
basic_auth_user_name = 'basic_auth_user_name' # The username to use with basic authentication
|
84
|
+
basic_auth_password = 'basic_auth_password' # The password to use with basic authentication
|
85
|
+
|
86
|
+
client = MessageMediaMessages::MessageMediaMessagesClient.new(
|
87
|
+
basic_auth_user_name: basic_auth_user_name,
|
88
|
+
basic_auth_password: basic_auth_password
|
89
|
+
)
|
90
|
+
```
|
91
|
+
|
92
|
+
The added initlization code can be debugged by putting a breakpoint in the ``` Index ``` method and running the project in debug mode by selecting ``` Run -> Debug 'Development: TestApp' ```.
|
93
|
+
|
94
|
+

|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
# Class Reference
|
99
|
+
|
100
|
+
## <a name="list_of_controllers"></a>List of Controllers
|
101
|
+
|
102
|
+
* [MessagesController](#messages_controller)
|
103
|
+
* [DeliveryReportsController](#delivery_reports_controller)
|
104
|
+
* [RepliesController](#replies_controller)
|
105
|
+
|
106
|
+
## <a name="messages_controller"></a> MessagesController
|
107
|
+
|
108
|
+
### Get singleton instance
|
109
|
+
|
110
|
+
The singleton instance of the ``` MessagesController ``` class can be accessed from the API Client.
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
messages = client.messages
|
114
|
+
```
|
115
|
+
|
116
|
+
### <a name="update_cancel_scheduled_message"></a> update_cancel_scheduled_message
|
117
|
+
|
118
|
+
> Cancel a scheduled message that has not yet been delivered.
|
119
|
+
> A scheduled message can be cancelled by updating the status of a message from ```scheduled```
|
120
|
+
> to ```cancelled```. This is done by submitting a PUT request to the messages endpoint using
|
121
|
+
> the message ID as a parameter (the same endpoint used above to retrieve the status of a message).
|
122
|
+
> The body of the request simply needs to contain a ```status``` property with the value set
|
123
|
+
> to ```cancelled```.
|
124
|
+
> ```json
|
125
|
+
> {
|
126
|
+
> "status": "cancelled"
|
127
|
+
> }
|
128
|
+
> ```
|
129
|
+
> *Note: Only messages with a status of scheduled can be cancelled. If an invalid or non existent
|
130
|
+
> message ID parameter is specified in the request, then a HTTP 404 Not Found response will be
|
131
|
+
> returned*
|
132
|
+
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
def update_cancel_scheduled_message(message_id,
|
136
|
+
body); end
|
137
|
+
```
|
138
|
+
|
139
|
+
#### Parameters
|
140
|
+
|
141
|
+
| Parameter | Tags | Description |
|
142
|
+
|-----------|------|-------------|
|
143
|
+
| message_id | ``` Required ``` | TODO: Add a parameter description |
|
144
|
+
| body | ``` Required ``` | TODO: Add a parameter description |
|
145
|
+
|
146
|
+
|
147
|
+
#### Example Usage
|
148
|
+
|
149
|
+
```ruby
|
150
|
+
message_id = 'messageId'
|
151
|
+
body = CancelScheduledMessageRequest.new
|
152
|
+
|
153
|
+
result = messages.update_cancel_scheduled_message(message_id, body)
|
154
|
+
|
155
|
+
```
|
156
|
+
|
157
|
+
#### Errors
|
158
|
+
|
159
|
+
| Error Code | Error Description |
|
160
|
+
|------------|-------------------|
|
161
|
+
| 400 | TODO: Add an error description |
|
162
|
+
| 404 | TODO: Add an error description |
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
### <a name="get_message_status"></a> get_message_status
|
167
|
+
|
168
|
+
> Retrieve the current status of a message using the message ID returned in the send messages end point.
|
169
|
+
> A successful request to the get message status endpoint will return a response body as follows:
|
170
|
+
> ```json
|
171
|
+
> {
|
172
|
+
> "format": "SMS",
|
173
|
+
> "content": "My first message!",
|
174
|
+
> "metadata": {
|
175
|
+
> "key1": "value1",
|
176
|
+
> "key2": "value2"
|
177
|
+
> },
|
178
|
+
> "message_id": "877c19ef-fa2e-4cec-827a-e1df9b5509f7",
|
179
|
+
> "callback_url": "https://my.callback.url.com",
|
180
|
+
> "delivery_report": true,
|
181
|
+
> "destination_number": "+61401760575",
|
182
|
+
> "scheduled": "2016-11-03T11:49:02.807Z",
|
183
|
+
> "source_number": "+61491570157",
|
184
|
+
> "source_number_type": "INTERNATIONAL"
|
185
|
+
> "message_expiry_timestamp": "2016-11-03T11:49:02.807Z",
|
186
|
+
> "status": "enroute"
|
187
|
+
> }
|
188
|
+
> ```
|
189
|
+
> The status property of the response indicates the current status of the message. See the Delivery
|
190
|
+
> Reports section of this documentation for more information on message statues.
|
191
|
+
> *Note: If an invalid or non existent message ID parameter is specified in the request, then
|
192
|
+
> a HTTP 404 Not Found response will be returned*
|
193
|
+
|
194
|
+
|
195
|
+
```ruby
|
196
|
+
def get_message_status(message_id); end
|
197
|
+
```
|
198
|
+
|
199
|
+
#### Parameters
|
200
|
+
|
201
|
+
| Parameter | Tags | Description |
|
202
|
+
|-----------|------|-------------|
|
203
|
+
| message_id | ``` Required ``` | TODO: Add a parameter description |
|
204
|
+
|
205
|
+
|
206
|
+
#### Example Usage
|
207
|
+
|
208
|
+
```ruby
|
209
|
+
message_id = 'messageId'
|
210
|
+
|
211
|
+
result = messages.get_message_status(message_id)
|
212
|
+
|
213
|
+
```
|
214
|
+
|
215
|
+
#### Errors
|
216
|
+
|
217
|
+
| Error Code | Error Description |
|
218
|
+
|------------|-------------------|
|
219
|
+
| 404 | TODO: Add an error description |
|
220
|
+
|
221
|
+
|
222
|
+
|
223
|
+
### <a name="create_send_messages"></a> create_send_messages
|
224
|
+
|
225
|
+
> Submit one or more (up to 100 per request) SMS or text to voice messages for delivery.
|
226
|
+
> The most basic message has the following structure:
|
227
|
+
> ```json
|
228
|
+
> {
|
229
|
+
> "messages": [
|
230
|
+
> {
|
231
|
+
> "content": "My first message!",
|
232
|
+
> "destination_number": "+61491570156"
|
233
|
+
> }
|
234
|
+
> ]
|
235
|
+
> }
|
236
|
+
> ```
|
237
|
+
> More advanced delivery features can be specified by setting the following properties in a message:
|
238
|
+
> - ```callback_url``` A URL can be included with each message to which Webhooks will be pushed to
|
239
|
+
> via a HTTP POST request. Webhooks will be sent if and when the status of the message changes as
|
240
|
+
> it is processed (if the delivery report property of the request is set to ```true```) and when replies
|
241
|
+
> are received. Specifying a callback URL is optional.
|
242
|
+
> - ```content``` The content of the message. This can be a Unicode string, up to 5,000 characters long.
|
243
|
+
> Message content is required.
|
244
|
+
> - ```delivery_report``` Delivery reports can be requested with each message. If delivery reports are requested, a webhook
|
245
|
+
> will be submitted to the ```callback_url``` property specified for the message (or to the webhooks)
|
246
|
+
> specified for the account every time the status of the message changes as it is processed. The
|
247
|
+
> current status of the message can also be retrieved via the Delivery Reports endpoint of the
|
248
|
+
> Messages API. Delivery reports are optional and by default will not be requested.
|
249
|
+
> - ```destination_number``` The destination number the message should be delivered to. This should be specified in E.164
|
250
|
+
> international format. For information on E.164, please refer to http://en.wikipedia.org/wiki/E.164.
|
251
|
+
> A destination number is required.
|
252
|
+
> - ```format``` The format specifies which format the message will be sent as, ```SMS``` (text message)
|
253
|
+
> or ```TTS``` (text to speech). With ```TTS``` format, we will call the destination number and read out the
|
254
|
+
> message using a computer generated voice. Specifying a format is optional, by default ```SMS``` will be used.
|
255
|
+
> - ```source_number``` A source number may be specified for the message, this will be the number that
|
256
|
+
> the message appears from on the handset. By default this feature is _not_ available and will be ignored
|
257
|
+
> in the request. Please contact <support@messagemeda.com> for more information. Specifying a source
|
258
|
+
> number is optional and a by default a source number will be assigned to the message.
|
259
|
+
> - ```source_number_type``` If a source number is specified, the type of source number may also be
|
260
|
+
> specified. This is recommended when using a source address type that is not an internationally
|
261
|
+
> formatted number, available options are ```INTERNATIONAL```, ```ALPHANUMERIC``` or ```SHORTCODE```. Specifying a
|
262
|
+
> source number type is only valid when the ```source_number``` parameter is specified and is optional.
|
263
|
+
> If a source number is specified and no source number type is specified, the source number type will be
|
264
|
+
> inferred from the source number, however this may be inaccurate.
|
265
|
+
> - ```scheduled``` A message can be scheduled for delivery in the future by setting the scheduled property.
|
266
|
+
> The scheduled property expects a date time specified in ISO 8601 format. The scheduled time must be
|
267
|
+
> provided in UTC and is optional. If no scheduled property is set, the message will be delivered immediately.
|
268
|
+
> - ```message_expiry_timestamp``` A message expiry timestamp can be provided to specify the latest time
|
269
|
+
> at which the message should be delivered. If the message cannot be delivered before the specified
|
270
|
+
> message expiry timestamp elapses, the message will be discarded. Specifying a message expiry
|
271
|
+
> timestamp is optional.
|
272
|
+
> - ```metadata``` Metadata can be included with the message which will then be included with any delivery
|
273
|
+
> reports or replies matched to the message. This can be used to create powerful two-way messaging
|
274
|
+
> applications without having to store persistent data in the application. Up to 10 key / value metadata data
|
275
|
+
> pairs can be specified in a message. Each key can be up to 100 characters long, and each value up to
|
276
|
+
> 256 characters long. Specifying metadata for a message is optional.
|
277
|
+
> The response body of a successful POST request to the messages endpoint will include a ```messages```
|
278
|
+
> property which contains a list of all messages submitted. The list of messages submitted will
|
279
|
+
> reflect the list of messages included in the request, but each message will also contain two new
|
280
|
+
> properties, ```message_id``` and ```status```. The returned message ID will be a 36 character UUID
|
281
|
+
> which can be used to check the status of the message via the Get Message Status endpoint. The status
|
282
|
+
> of the message which reflect the status of the message at submission time which will always be
|
283
|
+
> ```queued```. See the Delivery Reports section of this documentation for more information on message
|
284
|
+
> statues.
|
285
|
+
> *Note: when sending multiple messages in a request, all messages must be valid for the request to be successful.
|
286
|
+
> If any messages in the request are invalid, no messages will be sent.*
|
287
|
+
|
288
|
+
|
289
|
+
```ruby
|
290
|
+
def create_send_messages(body); end
|
291
|
+
```
|
292
|
+
|
293
|
+
#### Parameters
|
294
|
+
|
295
|
+
| Parameter | Tags | Description |
|
296
|
+
|-----------|------|-------------|
|
297
|
+
| body | ``` Required ``` | TODO: Add a parameter description |
|
298
|
+
|
299
|
+
|
300
|
+
#### Example Usage
|
301
|
+
|
302
|
+
```ruby
|
303
|
+
body_value = "{ \"messages\": [ { \"callback_url\": \"https://my.callback.url.com\", \"content\": \"My first message\", \"destination_number\": \"+61491570156\", \"delivery_report\": true, \"format\": \"SMS\", \"message_expiry_timestamp\": \"2016-11-03T11:49:02.807Z\", \"metadata\": { \"key1\": \"value1\", \"key2\": \"value2\" }, \"scheduled\": \"2016-11-03T11:49:02.807Z\", \"source_number\": \"+61491570157\", \"source_number_type\": \"INTERNATIONAL\" }, { \"callback_url\": \"https://my.callback.url.com\", \"content\": \"My second message\", \"destination_number\": \"+61491570158\", \"delivery_report\": true, \"format\": \"SMS\", \"message_expiry_timestamp\": \"2016-11-03T11:49:02.807Z\", \"metadata\": { \"key1\": \"value1\", \"key2\": \"value2\" }, \"scheduled\": \"2016-11-03T11:49:02.807Z\", \"source_number\": \"+61491570159\", \"source_number_type\": \"INTERNATIONAL\" } ]}";
|
304
|
+
body = JSON.parse(body_value);
|
305
|
+
|
306
|
+
result = messages.create_send_messages(body)
|
307
|
+
|
308
|
+
```
|
309
|
+
|
310
|
+
#### Errors
|
311
|
+
|
312
|
+
| Error Code | Error Description |
|
313
|
+
|------------|-------------------|
|
314
|
+
| 400 | TODO: Add an error description |
|
315
|
+
|
316
|
+
|
317
|
+
|
318
|
+
[Back to List of Controllers](#list_of_controllers)
|
319
|
+
|
320
|
+
## <a name="delivery_reports_controller"></a> DeliveryReportsController
|
321
|
+
|
322
|
+
### Get singleton instance
|
323
|
+
|
324
|
+
The singleton instance of the ``` DeliveryReportsController ``` class can be accessed from the API Client.
|
325
|
+
|
326
|
+
```ruby
|
327
|
+
deliveryReports = client.delivery_reports
|
328
|
+
```
|
329
|
+
|
330
|
+
### <a name="get_check_delivery_reports"></a> get_check_delivery_reports
|
331
|
+
|
332
|
+
> Check for any delivery reports that have been received.
|
333
|
+
> Delivery reports are a notification of the change in status of a message as it is being processed.
|
334
|
+
> Each request to the check delivery reports endpoint will return any delivery reports received that
|
335
|
+
> have not yet been confirmed using the confirm delivery reports endpoint. A response from the check
|
336
|
+
> delivery reports endpoint will have the following structure:
|
337
|
+
> ```json
|
338
|
+
> {
|
339
|
+
> "delivery_reports": [
|
340
|
+
> {
|
341
|
+
> "callback_url": "https://my.callback.url.com",
|
342
|
+
> "delivery_report_id": "01e1fa0a-6e27-4945-9cdb-18644b4de043",
|
343
|
+
> "source_number": "+61491570157",
|
344
|
+
> "date_received": "2017-05-20T06:30:37.642Z",
|
345
|
+
> "status": "enroute",
|
346
|
+
> "delay": 0,
|
347
|
+
> "submitted_date": "2017-05-20T06:30:37.639Z",
|
348
|
+
> "original_text": "My first message!",
|
349
|
+
> "message_id": "d781dcab-d9d8-4fb2-9e03-872f07ae94ba",
|
350
|
+
> "vendor_account_id": {
|
351
|
+
> "vendor_id": "MessageMedia",
|
352
|
+
> "account_id": "MyAccount"
|
353
|
+
> },
|
354
|
+
> "metadata": {
|
355
|
+
> "key1": "value1",
|
356
|
+
> "key2": "value2"
|
357
|
+
> }
|
358
|
+
> },
|
359
|
+
> {
|
360
|
+
> "callback_url": "https://my.callback.url.com",
|
361
|
+
> "delivery_report_id": "0edf9022-7ccc-43e6-acab-480e93e98c1b",
|
362
|
+
> "source_number": "+61491570158",
|
363
|
+
> "date_received": "2017-05-21T01:46:42.579Z",
|
364
|
+
> "status": "enroute",
|
365
|
+
> "delay": 0,
|
366
|
+
> "submitted_date": "2017-05-21T01:46:42.574Z",
|
367
|
+
> "original_text": "My second message!",
|
368
|
+
> "message_id": "fbb3b3f5-b702-4d8b-ab44-65b2ee39a281",
|
369
|
+
> "vendor_account_id": {
|
370
|
+
> "vendor_id": "MessageMedia",
|
371
|
+
> "account_id": "MyAccount"
|
372
|
+
> },
|
373
|
+
> "metadata": {
|
374
|
+
> "key1": "value1",
|
375
|
+
> "key2": "value2"
|
376
|
+
> }
|
377
|
+
> }
|
378
|
+
> ]
|
379
|
+
> }
|
380
|
+
> ```
|
381
|
+
> Each delivery report will contain details about the message, including any metadata specified
|
382
|
+
> and the new status of the message (as each delivery report indicates a change in status of a
|
383
|
+
> message) and the timestamp at which the status changed. Every delivery report will have a
|
384
|
+
> unique delivery report ID for use with the confirm delivery reports endpoint.
|
385
|
+
> *Note: The source number and destination number properties in a delivery report are the inverse of
|
386
|
+
> those specified in the message that the delivery report relates to. The source number of the
|
387
|
+
> delivery report is the destination number of the original message.*
|
388
|
+
> Subsequent requests to the check delivery reports endpoint will return the same delivery reports
|
389
|
+
> and a maximum of 100 delivery reports will be returned in each request. Applications should use the
|
390
|
+
> confirm delivery reports endpoint in the following pattern so that delivery reports that have been
|
391
|
+
> processed are no longer returned in subsequent check delivery reports requests.
|
392
|
+
> 1. Call check delivery reports endpoint
|
393
|
+
> 2. Process each delivery report
|
394
|
+
> 3. Confirm all processed delivery reports using the confirm delivery reports endpoint
|
395
|
+
> *Note: It is recommended to use the Webhooks feature to receive reply messages rather than
|
396
|
+
> polling the check delivery reports endpoint.*
|
397
|
+
|
398
|
+
|
399
|
+
```ruby
|
400
|
+
def get_check_delivery_reports; end
|
401
|
+
```
|
402
|
+
|
403
|
+
#### Example Usage
|
404
|
+
|
405
|
+
```ruby
|
406
|
+
|
407
|
+
result = deliveryReports.get_check_delivery_reports()
|
408
|
+
|
409
|
+
```
|
410
|
+
|
411
|
+
|
412
|
+
### <a name="create_confirm_delivery_reports_as_received"></a> create_confirm_delivery_reports_as_received
|
413
|
+
|
414
|
+
> Mark a delivery report as confirmed so it is no longer return in check delivery reports requests.
|
415
|
+
> The confirm delivery reports endpoint is intended to be used in conjunction with the check delivery
|
416
|
+
> reports endpoint to allow for robust processing of delivery reports. Once one or more delivery
|
417
|
+
> reports have been processed, they can then be confirmed using the confirm delivery reports endpoint so they
|
418
|
+
> are no longer returned in subsequent check delivery reports requests.
|
419
|
+
> The confirm delivery reports endpoint takes a list of delivery report IDs as follows:
|
420
|
+
> ```json
|
421
|
+
> {
|
422
|
+
> "delivery_report_ids": [
|
423
|
+
> "011dcead-6988-4ad6-a1c7-6b6c68ea628d",
|
424
|
+
> "3487b3fa-6586-4979-a233-2d1b095c7718",
|
425
|
+
> "ba28e94b-c83d-4759-98e7-ff9c7edb87a1"
|
426
|
+
> ]
|
427
|
+
> }
|
428
|
+
> ```
|
429
|
+
> Up to 100 delivery reports can be confirmed in a single confirm delivery reports request.
|
430
|
+
|
431
|
+
|
432
|
+
```ruby
|
433
|
+
def create_confirm_delivery_reports_as_received(body); end
|
434
|
+
```
|
435
|
+
|
436
|
+
#### Parameters
|
437
|
+
|
438
|
+
| Parameter | Tags | Description |
|
439
|
+
|-----------|------|-------------|
|
440
|
+
| body | ``` Required ``` | TODO: Add a parameter description |
|
441
|
+
|
442
|
+
|
443
|
+
#### Example Usage
|
444
|
+
|
445
|
+
```ruby
|
446
|
+
body_value = "{ \"delivery_report_ids\": [ \"011dcead-6988-4ad6-a1c7-6b6c68ea628d\", \"3487b3fa-6586-4979-a233-2d1b095c7718\", \"ba28e94b-c83d-4759-98e7-ff9c7edb87a1\" ]}";
|
447
|
+
body = JSON.parse(body_value);
|
448
|
+
|
449
|
+
result = deliveryReports.create_confirm_delivery_reports_as_received(body)
|
450
|
+
|
451
|
+
```
|
452
|
+
|
453
|
+
#### Errors
|
454
|
+
|
455
|
+
| Error Code | Error Description |
|
456
|
+
|------------|-------------------|
|
457
|
+
| 400 | TODO: Add an error description |
|
458
|
+
|
459
|
+
|
460
|
+
|
461
|
+
[Back to List of Controllers](#list_of_controllers)
|
462
|
+
|
463
|
+
## <a name="replies_controller"></a> RepliesController
|
464
|
+
|
465
|
+
### Get singleton instance
|
466
|
+
|
467
|
+
The singleton instance of the ``` RepliesController ``` class can be accessed from the API Client.
|
468
|
+
|
469
|
+
```ruby
|
470
|
+
replies = client.replies
|
471
|
+
```
|
472
|
+
|
473
|
+
### <a name="create_confirm_replies_as_received"></a> create_confirm_replies_as_received
|
474
|
+
|
475
|
+
> Mark a reply message as confirmed so it is no longer returned in check replies requests.
|
476
|
+
> The confirm replies endpoint is intended to be used in conjunction with the check replies endpoint
|
477
|
+
> to allow for robust processing of reply messages. Once one or more reply messages have been processed
|
478
|
+
> they can then be confirmed using the confirm replies endpoint so they are no longer returned in
|
479
|
+
> subsequent check replies requests.
|
480
|
+
> The confirm replies endpoint takes a list of reply IDs as follows:
|
481
|
+
> ```json
|
482
|
+
> {
|
483
|
+
> "reply_ids": [
|
484
|
+
> "011dcead-6988-4ad6-a1c7-6b6c68ea628d",
|
485
|
+
> "3487b3fa-6586-4979-a233-2d1b095c7718",
|
486
|
+
> "ba28e94b-c83d-4759-98e7-ff9c7edb87a1"
|
487
|
+
> ]
|
488
|
+
> }
|
489
|
+
> ```
|
490
|
+
> Up to 100 replies can be confirmed in a single confirm replies request.
|
491
|
+
|
492
|
+
|
493
|
+
```ruby
|
494
|
+
def create_confirm_replies_as_received(body); end
|
495
|
+
```
|
496
|
+
|
497
|
+
#### Parameters
|
498
|
+
|
499
|
+
| Parameter | Tags | Description |
|
500
|
+
|-----------|------|-------------|
|
501
|
+
| body | ``` Required ``` | TODO: Add a parameter description |
|
502
|
+
|
503
|
+
|
504
|
+
#### Example Usage
|
505
|
+
|
506
|
+
```ruby
|
507
|
+
body_value = "{ \"reply_ids\": [ \"011dcead-6988-4ad6-a1c7-6b6c68ea628d\", \"3487b3fa-6586-4979-a233-2d1b095c7718\", \"ba28e94b-c83d-4759-98e7-ff9c7edb87a1\" ]}";
|
508
|
+
body = JSON.parse(body_value);
|
509
|
+
|
510
|
+
result = replies.create_confirm_replies_as_received(body)
|
511
|
+
|
512
|
+
```
|
513
|
+
|
514
|
+
#### Errors
|
515
|
+
|
516
|
+
| Error Code | Error Description |
|
517
|
+
|------------|-------------------|
|
518
|
+
| 400 | TODO: Add an error description |
|
519
|
+
|
520
|
+
|
521
|
+
|
522
|
+
### <a name="get_check_replies"></a> get_check_replies
|
523
|
+
|
524
|
+
> Check for any replies that have been received.
|
525
|
+
> Replies are messages that have been sent from a handset in response to a message sent by an
|
526
|
+
> application or messages that have been sent from a handset to a inbound number associated with
|
527
|
+
> an account, known as a dedicated inbound number (contact <support@messagemedia.com> for more
|
528
|
+
> information on dedicated inbound numbers).
|
529
|
+
> Each request to the check replies endpoint will return any replies received that have not yet
|
530
|
+
> been confirmed using the confirm replies endpoint. A response from the check replies endpoint
|
531
|
+
> will have the following structure:
|
532
|
+
> ```json
|
533
|
+
> {
|
534
|
+
> "replies": [
|
535
|
+
> {
|
536
|
+
> "metadata": {
|
537
|
+
> "key1": "value1",
|
538
|
+
> "key2": "value2"
|
539
|
+
> },
|
540
|
+
> "message_id": "877c19ef-fa2e-4cec-827a-e1df9b5509f7",
|
541
|
+
> "reply_id": "a175e797-2b54-468b-9850-41a3eab32f74",
|
542
|
+
> "date_received": "2016-12-07T08:43:00.850Z",
|
543
|
+
> "callback_url": "https://my.callback.url.com",
|
544
|
+
> "destination_number": "+61491570156",
|
545
|
+
> "source_number": "+61491570157",
|
546
|
+
> "vendor_account_id": {
|
547
|
+
> "vendor_id": "MessageMedia",
|
548
|
+
> "account_id": "MyAccount"
|
549
|
+
> },
|
550
|
+
> "content": "My first reply!"
|
551
|
+
> },
|
552
|
+
> {
|
553
|
+
> "metadata": {
|
554
|
+
> "key1": "value1",
|
555
|
+
> "key2": "value2"
|
556
|
+
> },
|
557
|
+
> "message_id": "8f2f5927-2e16-4f1c-bd43-47dbe2a77ae4",
|
558
|
+
> "reply_id": "3d8d53d8-01d3-45dd-8cfa-4dfc81600f7f",
|
559
|
+
> "date_received": "2016-12-07T08:43:00.850Z",
|
560
|
+
> "callback_url": "https://my.callback.url.com",
|
561
|
+
> "destination_number": "+61491570157",
|
562
|
+
> "source_number": "+61491570158",
|
563
|
+
> "vendor_account_id": {
|
564
|
+
> "vendor_id": "MessageMedia",
|
565
|
+
> "account_id": "MyAccount"
|
566
|
+
> },
|
567
|
+
> "content": "My second reply!"
|
568
|
+
> }
|
569
|
+
> ]
|
570
|
+
> }
|
571
|
+
> ```
|
572
|
+
> Each reply will contain details about the reply message, as well as details of the message the reply was sent
|
573
|
+
> in response to, including any metadata specified. Every reply will have a reply ID to be used with the
|
574
|
+
> confirm replies endpoint.
|
575
|
+
> *Note: The source number and destination number properties in a reply are the inverse of those
|
576
|
+
> specified in the message the reply is in response to. The source number of the reply message is the
|
577
|
+
> same as the destination number of the original message, and the destination number of the reply
|
578
|
+
> message is the same as the source number of the original message. If a source number
|
579
|
+
> wasn't specified in the original message, then the destination number property will not be present
|
580
|
+
> in the reply message.*
|
581
|
+
> Subsequent requests to the check replies endpoint will return the same reply messages and a maximum
|
582
|
+
> of 100 replies will be returned in each request. Applications should use the confirm replies endpoint
|
583
|
+
> in the following pattern so that replies that have been processed are no longer returned in
|
584
|
+
> subsequent check replies requests.
|
585
|
+
> 1. Call check replies endpoint
|
586
|
+
> 2. Process each reply message
|
587
|
+
> 3. Confirm all processed reply messages using the confirm replies endpoint
|
588
|
+
> *Note: It is recommended to use the Webhooks feature to receive reply messages rather than polling
|
589
|
+
> the check replies endpoint.*
|
590
|
+
|
591
|
+
|
592
|
+
```ruby
|
593
|
+
def get_check_replies; end
|
594
|
+
```
|
595
|
+
|
596
|
+
#### Example Usage
|
597
|
+
|
598
|
+
```ruby
|
599
|
+
|
600
|
+
result = replies.get_check_replies()
|
601
|
+
|
602
|
+
```
|
603
|
+
|
604
|
+
|
605
|
+
[Back to List of Controllers](#list_of_controllers)
|
606
|
+
|
607
|
+
|
608
|
+
|