# VIBER + SMS API

DecisionTelecom Viber + SMS API позволяет отправлять и получать деловые сообщения Viber в любую страну мира и из нее через API, и если Viber сообщение не было доставлено клиенту, то оно будет переслано и доставлено, как обычное смс сообщение. Каждое сообщение идентифицируется уникальным случайным идентификатором, поэтому пользователи всегда могут проверить статус сообщения, используя заданную конечную точку.

The Viber + SMS API использует HTTPS с ключом доступа, который используется в качестве авторизации API. Полезные данные запросов и ответов форматируются как JSON с использованием кодировки UTF-8.

**API Авторизация** - Базовый ключ доступа Base64.

Чтобы получить ключ API, пожалуйста, свяжитесь с вашим менеджером по работе с клиентами.

## Авторизация

## Базовая авторизация&#x20;

#### Пример:

```
$userHashKey = 'User Hash Key provided by your account manager';
$ch = curl_init('https://web.it-decision.com/v1/api/send-viber');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$userHashKey");
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestParams)); // 
$requestParams - raquest array with correct data 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
$result = curl_exec($ch); 
curl_close($ch);
```

## **Отправить Вайбер сообщение**

{% tabs %}
{% tab title="POST" %}

```
https://web.it-decision.com/v1/api/send-viber
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Request POST" %}

```json
{
	"source_addr": "Custom Company", 						
	"destination_addr": 8882222200,							
	"message_type":106, 									
	"text":"Message content", 								
	"text_sms":"SMS message content", // add this parameter: if, in the event of non-delivery via Viber, it is necessary to resend transactional message via SMS  
	"image":"https://yourdomain.com/images/image.jpg", 		
	"button_caption":"Join Us", 							
	"button_action":"https://yourdomain.com/join-us",   	
	"source_type":2, 										
	"callback_url":"https://yourdomain.com/viber-callback",
	"validity_period":40
}
```

{% endtab %}
{% endtabs %}

## Параметры

**source\_addr:**

<= 20 chars - от кого сообщение

**destination\_addr:**

<= 20 chars - кому сообщение

**message\_type (тип отправленного сообщения):**

106 только текст (удобно для транзакционных сообщений)

108 текст+картинка+кнопка (удобно для рекламных сообщений)

206 только текст (2Way)\*(удобно для рекламных сообщений)

208 текст+изображение+кнопка (двусторонняя)\* (удобно для рекламных сообщений)

**text:**

<= 1000 chars - текст Viber сообщения

**text\_sms:**

<= 70 chars for UCS-2 (16-bit) and <= 160 chars for Latin - альтернативный текст SMS, если сообщение Viber не доставлено (только для транзакционных сообщений)

**image (Правильный URL-адрес с изображением для рекламного сообщения с заголовком кнопки и действием кнопки):**

jpg or jpeg (тип mime — изображение/jpeg), максимальное разрешение 400x400 пикселей

png (тип mime — image/png), максимальное разрешение 400x400 пикселей

**button\_caption:**

<= 30 chars - надпись на кнопке

**button\_action:**

Правильный URL для перехода при нажатии кнопки

**source\_type (Процедура отправки сообщения):**

promotion message (сообщение может быть с текстом, изображением и кнопкой) - 1

transactional message (текстовое сообщение) – 2

**callback\_url:**

Правильный URL для обратного вызова статуса сообщения

**validity\_period:**

TTL (время жизни) позволяет отправителю ограничить время жизни сообщения. В случае, если сообщение не получило статус «доставлено» до истечения времени, сообщение не будет списано и не будет доставлено пользователю. В случае, если TTL не был указан (нет параметра «ttl»), Viber будет пытаться доставить сообщение в течение 1 дня.

promotion message - мин. TTL 40 секунд макс. TTL 21600 секунд (6 часов)

transactional message - мин. TTL 40 секунд макс. TTL 21600 секунд (6 часов)

transactional message + SMS - TTL всего 40 секунд

#### **Response:**

{% tabs %}
{% tab title=" JSON (POST)" %}

```json
{
    "message_id":429	
}
```

{% endtab %}
{% endtabs %}

#### Значение:

<mark style="color:red;">message\_id:</mark>

Идентификатор отправленного сообщения

#### **Получить сообщение от пользователя для двусторонних сообщений:**

Для двусторонних сообщений система DecisionTelecom Viber будет отправлять обратные вызовы с каждым сообщением пользователя. Содержимое данных отслеживания будет отправлено клиентом в соответствии с данными отслеживания в последнем сообщении, которое было получено на стороне клиента Viber.

Ответ подразумевает, что у пользователя API есть URL-адрес обратного вызова для этих сообщений.

#### **Response:**

{% tabs %}
{% tab title="JSON (POST)" %}

```json
{
    "message_token": 44444444444444,
    "phone_number": "972512222222",
    "time": 2121212121,
    "message": 
    {
        "text": "a message to the service",
        "tracking_data": "tracking_id:100035"
    }
}
```

{% endtab %}
{% endtabs %}

## Значения

**message\_token:**

токен сообщения ответа клиента

**phone\_number:**

номер телефона клиента

**time:**

время ответа клиента

**message:**

**text:**

текст ответного сообщения клиента

**tracking\_data:**

tracking\_id: Идентификатор сообщения, на которое отвечает клиент

## **Получить Вайбер сообщение**

{% tabs %}
{% tab title="POST" %}

```
https://web.it-decision.com/v1/api/receive-viber
```

{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Request POST:" %}

```json
{
	"message_id":429	
}
```

{% endtab %}
{% endtabs %}

## Параметры

**message\_id:**

ID сообщения, статус которого вы хотите получить (за последние 5 дней)

{% tabs %}
{% tab title="Response JSON" %}

```json
{
	"message_id":429, 			
	"status":1, 				
	"sms_message_id":36478, 	
	"sms_message_status":2		
}
```

{% endtab %}
{% endtabs %}

## Значения

**message\_id:**

ID сообщения, статус которого вы хотите получить (за последние 5 дней)

**status:**

Текущий статус сообщения Viber

**sms\_message\_id:**

Идентификатор SMS-сообщения (если доступно, только для транзакционных сообщений)

**sms\_message\_status:**

Статус SMS-сообщения (если доступно, только для транзакционных сообщений)

## **Статусы сообщений Вайбер**

| sent        | 0  |
| ----------- | -- |
| delivered   | 1  |
| error       | 2  |
| rejected    | 3  |
| undelivered | 4  |
| pending     | 5  |
| unknown     | 20 |

## **Статусы SMS сообщений**

| delivered     | 2 |
| ------------- | - |
| undeliverable | 5 |
| expired       | 3 |

## Ошибки

| Name    | Слишком много запросов |
| ------- | ---------------------- |
| message | Rate limit превышен    |
| code    | 0                      |
| status  | 429                    |

| Name    | Invalid Parameter: \[param\_name]             |
| ------- | --------------------------------------------- |
| message | Пустой параметр или ошибка проверки параметра |
| code    | 1                                             |
| status  | 400                                           |

| Name    | Внутренняя Ошибка Сервера                                                               |
| ------- | --------------------------------------------------------------------------------------- |
| message | Сервер столкнулся с непредвиденной ситуацией, из-за которой он не смог выполнить запрос |
| code    | 2                                                                                       |
| status  | 500                                                                                     |

| Name    | Требуется пополнение баланса |
| ------- | ---------------------------- |
| message | Баланс пользователя пуст     |
| code    | 3                            |
| status  | 402                          |

## Пример Viber + SMS

{% tabs %}
{% tab title="cUrl" %}

```
curl --location --request POST 'https://web.it-decision.com/v1/api/receive-viber' \
--header 'Authorization: Basic api key' \
--header 'Content-Type: application/json' \
--data-raw '{"source_addr": "Custom Company","destination_addr": 380636111112,"message_type":106,"text":"Message content","text_sms":"SMS message content","image":"https://yourdomain.com/images/image.jpg","button_caption":"Join Us", "button_action":"https://yourdomain.com/join-us","source_type":2,"callback_url":"https://yourdomain.com/viber-callback","validity_period":3600
}'

```

{% endtab %}

{% tab title="C#" %}

```
var client = new RestClient("https://web.it-decision.com/v1/api/receive-viber");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Basic api key");
request.AddHeader("Content-Type", "application/json");
var body = @"{""source_addr"": ""Custom Company"",""destination_addr"": 380636111112,""message_type"":106,""text"":""Message content"",""text_sms"":""SMS message content"",""image"":""https://yourdomain.com/images/image.jpg"",""button_caption"":""Join Us"", ""button_action"":""https://yourdomain.com/join-us"",""source_type"":2,""callback_url"":""https://yourdomain.com/viber-callback"",""validity_period"":3600
" + "\n" +
@"}";
request.AddParameter("application/json", body,  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

```

{% endtab %}

{% tab title=" Java" %}

```
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"source_addr\": \"Custom Company\",\"destination_addr\": 380636111112,\"message_type\":106,\"text\":\"Message content\",\"text_sms\":\"SMS message content\",\"image\":\"https://yourdomain.com/images/image.jpg\",\"button_caption\":\"Join Us\", \"button_action\":\"https://yourdomain.com/join-us\",\"source_type\":2,\"callback_url\":\"https://yourdomain.com/viber-callback\",\"validity_period\":3600\r\n}");
Request request = new Request.Builder()
  .url("https://web.it-decision.com/v1/api/receive-viber")
  .method("POST", body)
  .addHeader("Authorization", "Basic api key")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

```

{% endtab %}

{% tab title="JavaScript" %}

```
var myHeaders = new Headers();
myHeaders.append("Authorization", "Basic api key");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("https://web.it-decision.com/v1/api/receive-viber", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

```

{% endtab %}

{% tab title="C – libCurl" %}

```
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
  curl_easy_setopt(curl, CURLOPT_URL, "https://web.it-decision.com/v1/api/receive-viber");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
  struct curl_slist *headers = NULL;
  headers = curl_slist_append(headers, "Authorization: Basic api key");
  headers = curl_slist_append(headers, "Content-Type: application/json");
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  const char *data = "{\"source_addr\": \"Custom Company\",\"destination_addr\": 380636111112,\"message_type\":106,\"text\":\"Message content\",\"text_sms\":\"SMS message content\",\"image\":\"https://yourdomain.com/images/image.jpg\",\"button_caption\":\"Join Us\", \"button_action\":\"https://yourdomain.com/join-us\",\"source_type\":2,\"callback_url\":\"https://yourdomain.com/viber-callback\",\"validity_period\":3600\r\n}";
  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
  res = curl_easy_perform(curl);
}
curl_easy_cleanup(curl);

```

{% endtab %}

{% tab title="NodeJs" %}

```
var https = require('follow-redirects').https;
var fs = require('fs');

var options = {
  'method': 'POST',
  'hostname': 'web.it-decision.com',
  'path': '/v1/api/receive-viber',
  'headers': {
    'Authorization': 'Basic api key',
    'Content-Type': 'application/json'
  },
  'maxRedirects': 20
};

var req = https.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function (chunk) {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });

  res.on("error", function (error) {
    console.error(error);
  });
});

var postData = JSON.stringify({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
});

req.write(postData);

req.end();



```

{% endtab %}

{% tab title="PHP" %}

```
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://web.it-decision.com/v1/api/receive-viber',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{"source_addr": "Custom Company","destination_addr": 380636111112,"message_type":106,"text":"Message content","text_sms":"SMS message content","image":"https://yourdomain.com/images/image.jpg","button_caption":"Join Us", "button_action":"https://yourdomain.com/join-us","source_type":2,"callback_url":"https://yourdomain.com/viber-callback","validity_period":3600
}',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Basic api key',
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}

{% tab title=" Python" %}

```
import http.client
import json

conn = http.client.HTTPSConnection("web.it-decision.com")
payload = json.dumps({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
})
headers = {
  'Authorization': 'Basic api key',
  'Content-Type': 'application/json'
}
conn.request("POST", "/v1/api/receive-viber", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

```

{% endtab %}

{% tab title=" Ruby" %}

```
require "uri"
require "json"
require "net/http"

url = URI("https://web.it-decision.com/v1/api/receive-viber")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Basic api key"
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "source_addr": "Custom Company",
  "destination_addr": 380636111112,
  "message_type": 106,
  "text": "Message content",
  "text_sms": "SMS message content",
  "image": "https://yourdomain.com/images/image.jpg",
  "button_caption": "Join Us",
  "button_action": "https://yourdomain.com/join-us",
  "source_type": 2,
  "callback_url": "https://yourdomain.com/viber-callback",
  "validity_period": 3600
})

response = https.request(request)
puts response.read_body


```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ru-api.decisiontele.com/viber-+-sms-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
