Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
f2b9e72
Create keep
harry-peek Jul 14, 2026
baa3c86
Add files via upload
harry-peek Jul 14, 2026
a91145e
Update overview.md
harry-peek Jul 14, 2026
18982de
Update index.md
harry-peek Jul 14, 2026
071ac09
Update delivery-report.md
harry-peek Jul 14, 2026
7b4237d
Update development-libraries.md
harry-peek Jul 14, 2026
4bfa521
Update inbound-messages.md
harry-peek Jul 14, 2026
48c35ec
Update index.md
harry-peek Jul 14, 2026
092856e
Update index.md
harry-peek Jul 14, 2026
bb047f6
Update overview.md
harry-peek Jul 14, 2026
b9ba90c
Update requests-and-authentication.md
harry-peek Jul 14, 2026
104ce46
Update sender-name.md
harry-peek Jul 14, 2026
0cdce27
Update sms-message.md
harry-peek Jul 14, 2026
aa44c6f
Update delivery-report.md
harry-peek Jul 14, 2026
7c5af82
Update development-libraries.md
harry-peek Jul 14, 2026
88a41f2
Update sms-message.md
harry-peek Jul 14, 2026
202c17b
Update delivery-report.md
harry-peek Jul 14, 2026
12cb4df
Update overview.md
harry-peek Jul 14, 2026
95e6bce
Update requests-and-authentication.md
harry-peek Jul 14, 2026
f1af0ad
Merge pull request #1 from harry-peek/harry-peek-patch-1
harry-peek Jul 14, 2026
fda2f96
Update mkdocs.yml
harry-peek Jul 14, 2026
c5b56e2
Update extra.css
harry-peek Jul 14, 2026
7d160bd
Update index.md
harry-peek Jul 14, 2026
02356d7
Update overview.md
harry-peek Jul 14, 2026
e825b89
Update sender-name.md
harry-peek Jul 14, 2026
82cc619
Update requests-and-authentication.md
harry-peek Jul 14, 2026
fc6d8c3
Update mkdocs.yml
harry-peek Jul 14, 2026
bebac74
Update extra.css
harry-peek Jul 14, 2026
4eacdae
Update index.md
harry-peek Jul 14, 2026
19c2c43
Update overview.md
harry-peek Jul 14, 2026
e1fce39
Update sender-name.md
harry-peek Jul 14, 2026
0bc554b
Update requests-and-authentication.md
harry-peek Jul 14, 2026
1f2404a
Update sms-message.md
harry-peek Jul 14, 2026
5a4492e
Update delivery-report.md
harry-peek Jul 14, 2026
56cfde2
Update scheduled-messages.md
harry-peek Jul 14, 2026
7f8a75e
Update inbound-messages.md
harry-peek Jul 14, 2026
9d4f867
Create keep
harry-peek Jul 16, 2026
5067050
Add files via upload
harry-peek Jul 16, 2026
9bb18d4
Update mkdocs.yml
harry-peek Jul 16, 2026
e277f8e
Delete docs/global SMS/Number-lookup/index.md
harry-peek Jul 16, 2026
562f612
Delete docs/global SMS/Number-lookup/keep
harry-peek Jul 16, 2026
8bf0bb4
Add files via upload
harry-peek Jul 16, 2026
12ebca0
Merge branch 'main' into harry-peek-patch-1
harry-peek Jul 16, 2026
2c63f7e
Update mkdocs.yml
harry-peek Jul 16, 2026
925527f
Update number-lookup.md
harry-peek Jul 16, 2026
ac4f595
Update number-lookup.md
harry-peek Jul 21, 2026
187929d
Update number-lookup.md
harry-peek Jul 21, 2026
6ae6a65
Update number-lookup.md
harry-peek Jul 21, 2026
253e0be
Update number-lookup.md
harry-peek Jul 21, 2026
588f02c
Update number-lookup.md
harry-peek Jul 21, 2026
344ba2b
Update number-lookup.md
harry-peek Jul 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions docs/extra.css
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,12 @@
#sidebar-nav #nav-item-sms-and-fax:hover {
background-image: url('https://netstorage.ringcentral.com/dpw/api-reference/icons/group_icon_messaging_hover.svg');
}
#sidebar-nav #nav-item-global-business-sms {
background-image: url('https://netstorage.ringcentral.com/dpw/api-reference/icons/group_icon_messaging.svg?v=2020032620200227-0720');
}
#sidebar-nav #nav-item-global-business-sms:hover {
background-image: url('https://netstorage.ringcentral.com/dpw/api-reference/icons/group_icon_messaging_hover.svg');
}
#sidebar-nav #nav-item-team-messaging {
background-image: url('https://netstorage.ringcentral.com/dpw/api-reference/icons/group_icon_glip.svg?v=2020032620200227-0720');
}
Expand Down
209 changes: 209 additions & 0 deletions docs/global SMS/delivery-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
# Delivery Report

Delivery reports are a way to track if your messages are getting sent properly.

---

## What is a delivery report?

After receiving a message, the handset responds to the operator with Delivery Report (DLR) to indicate if and when the message was delivered.

Each time you send a message, we generate an ID that is unique to this particular message.

!!! note
There are 2 ways you can get the status of the sent messages:

* Add a callback URL to your message. The service will make a POST request with the relevant information to the callback any time the message status changes (suggested option).
* You can request a delivery report by manually making a call to the API.

!!! tip
The easiest way to use the Global Business SMS API is with our [official libraries](development-libraries.md). They will take care of authentication, request validation and response handling automatically.

---

## Option 1. Add a callback URL to the message

A HTTP POST request is made to the URL in dlr_url property for every status update.

### Callback URL

The provided Delivery report URL (dlr_url) endpoint should respond with a HTTP status code within the range 200-399, otherwise the DRL will be considered undelivered.

To validate the authenticity of callback request, you can use the X-Messente-Signature header.

=== "Python"

```python
{!> code-samples/messaging/global-business/get-dlr.py !}
```

=== "Node"

```javascript
{!> code-samples/messaging/global-business/get-dlr.js !}
```

=== "PHP"

```php
{!> code-samples/messaging/global-business/get-dlr.php !}
```

=== "Java"

```java
{!> code-samples/messaging/global-business/get-dlr.java !}
```

=== "Ruby"

```ruby
{!> code-samples/messaging/global-business/get-dlr.rb !}
```

=== ".NET"

```csharp
{!> code-samples/messaging/global-business/get-dlr.cs !}
```

=== "cURL"

```bash
{!> code-samples/messaging/global-business/get-dlr.sh !}
```

### Report structure in callback request

Example of a successful message.

```json
{
"status": "DELIVRD",
"sender": "MySender",
"err": 0,
"message_id": "3e28ec48-d620-4191-a96e-d91ba8ecc949",
"to": "+3725555555",
"channel": "sms",
"error": null,
"omnimessage_id": "d7248cda-6c1a-4436-acf5-aaf249bb67d3",
"timestamp": "2020-02-04T08:09:42.389630",
"price_info": {
"part_price": "0.1",
"parts_count": 2,
"total_price": "0.2"
}
}
```

---

## Option 2. Make an API call

For most cases using dlr_url is a more suitable approach. Sometimes it's useful (usually for debugging purposes) to request the status of a specific message. In that case you can make a request to the API with the Omnimessage ID you need status of.

=== "Python"

```python
{!> code-samples/messaging/global-business/get-sync-dlr.py !}
```

=== "Node"

```javascript
{!> code-samples/messaging/global-business/get-sync-dlr.js !}
```

=== "PHP"

```php
{!> code-samples/messaging/global-business/get-sync-dlr.php !}
```

=== "Java"

```java
{!> code-samples/messaging/global-business/get-sync-dlr.java !}
```

=== "Ruby"

```ruby
{!> code-samples/messaging/global-business/get-sync-dlr.rb !}
```

=== ".NET"

```csharp
{!> code-samples/messaging/global-business/get-sync-dlr.cs !}
```

=== "cURL"

```bash
{!> code-samples/messaging/global-business/get-sync-dlr.sh !}
```

!!! danger "Caution"
Requesting regular updates for every message via API calls is very resource-heavy and costly approach. Before implementing, please consider using Option 1.

### Report structure in API response

Example of a successful message.

```json
{
"omnimessage_id": "6e29aeef-f43d-4dc0-bd12-195374c845fa",
"statuses": [
{
"status": "DELIVRD",
"sender": "MySender",
"err": 0,
"message_id": "3e28ec48-d620-4191-a96e-d91ba8ecc949",
"to": "+3725555555",
"channel": "sms",
"error": null,
"omnimessage_id": "d7248cda-6c1a-4436-acf5-aaf249bb67d3",
"timestamp": "2020-02-04T08:09:42.389630",
"price_info": {
"part_price": "0.1",
"parts_count": 2,
"total_price": "0.2"
}
}
],
"to": "RECIPIENT"
}
```

### Difference between `omnimessage_id` and `message_id`
`message_id` is a unique identifier for a single message and `omnimessage_id` groups messages that are sent with multi-channel fallback.

Although the API can easily be used to send single messages we've built it with multi-channel capabilities in mind. To allow easy migration between the two we add `omnimessage_id` to every message.

---

## List of Message Statuses

There can be various reasons why a message wasn't delivered or hasn't been delivered yet.

| Status Constant | Description |
| --- | --- |
| ACK | Operator has accepted the message for delivery |
| DELIVRD | The message has been successfully delivered to the handset |
| UNDELIV | Unable to deliver message to the handset |
| FAILED | Failed to deliver message to the handset |
| UNKNOWN | Unknown status has been reported by the operator |
| ACCEPTD | Message has been accepted for the delivery and is in the operators's delivery queue |
| REJECTD | The message was rejected by the operator |
| EXPIRED | Delivery of the message expired |
| NACK | The message delivery has been rejected |
| SEEN | The message has been seen by the recipient |


## Our IP Addresses

For security reasons, you might want to restrict access to your callback URL. Here is the list of IP addresses we use to send requests from, which you can whitelist:

* 95.216.221.43
* 159.69.33.20
156 changes: 156 additions & 0 deletions docs/global SMS/development-libraries.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# Development Libraries

Develop with our API libraries to get the fastest integration experience.

---

!!! warning
To get started contact [Developer Relations](https://developers.ringcentral.com/sms-api#requestinfo).

## Install a library

We have API libraries for various programming languages. Select your preferred programming language and follow the instructions.

=== "Python"

### With PIP

To install the API client library, simply execute:

```bash
pip install messente-api
```

### Or with Setuptools

To install the API client library, simply execute:

```bash
python setup.py install --user
```

then import the package:

```python
import messente_api
```

Take a look at the library's [GitHub](https://github.com/messente/messente-api-python) and [PyPI](https://pypi.org/project/messente-api) pages.

=== "Node"

### Install with npm

```bash
npm i messente_api
```

Take a look at the library's [GitHub](https://github.com/messente/messente-api-node) and [npm](https://www.npmjs.com/package/messente_api) pages.

=== "PHP"

### Install with composer

```bash
composer require messente/messente-api-php
```

Take a look at the library's [GitHub](https://github.com/messente/messente-api-php) and [packagist](https://packagist.org/packages/messente/messente-api-php) pages.

=== "Java"

### Maven users

Allow fetching messente-api from jcenter by placing a settings.xml file to ~/.m2 maven folder containing the following:

```xml
<?xml version="1.0" encoding="UTF-8" ?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<profiles>
<profile>
<id>bintray</id>
<repositories>
<repository>
<id>central</id>
<name>bintray</name>
<url>https://jcenter.bintray.com</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>bintray</activeProfile>
</activeProfiles>
</settings>
```

To install the API client library to your local Maven repository, add the dependency to your project's POM:

```xml
<dependency>
<groupId>com.messente.api</groupId>
<artifactId>messente-api</artifactId>
<version>4.2.0</version>
</dependency>
```

Now, you can install the library by running:

```bash
mvn clean install
```

### Gradle users

Add jcenter repository to your project's build file:

```groovy
repositories { jcenter() }
```

Also add the dependency to your project's build file:

```groovy
dependencies { implementation 'com.messente.api:messente-api' }
```

### Others

Firstly, generate the JAR by executing:

```bash
mvn package -Dmaven.javadoc.skip=true
```

Then manually install the following JARs:

* target/messente-api-$VERSION_NUMBER.jar
* target/messente-api-$VERSION_NUMBER-sources.jar
* target/lib/*.jar

Take a look at the library's [GitHub](https://github.com/messente/messente-api-java) and [Bintray](https://bintray.com/messente/messente-api/messente-api) pages.

=== "Ruby"

### Install using gem

```bash
gem install messente_api
```

Take a look at the library's [GitHub](https://github.com/messente/messente-api-ruby) page and [RubyGems](https://rubygems.org/gems/messente_api) pages.

=== ".NET"

### Install using NuGet

```powershell
Install-Package com.Messente.Api
```

Take a look at the library's [GitHub](https://github.com/messente/messente-api-csharp) and [NuGet](https://www.nuget.org/packages/com.Messente.Api) pages.
Loading