RU API
Search
K
Links
Comment on page

VIBER + SMS API

DecisionTelecom Viber + SMS API позволяет отправлять и получать деловые сообщения Viber в любую страну мира и из нее через API, и если Viber сообщение не было доставлено клиенту, то оно будет переслано и доставлено, как обычное смс сообщение. Каждое сообщение идентифицируется уникальным случайным идентификатором, поэтому пользователи всегда могут проверить статус сообщения, используя заданную конечную точку.
The Viber + SMS API использует HTTPS с ключом доступа, который используется в качестве авторизации API. Полезные данные запросов и ответов форматируются как JSON с использованием кодировки UTF-8.
API Авторизация - Базовый ключ доступа Base64.
Чтобы получить ключ API, пожалуйста, свяжитесь с вашим менеджером по работе с клиентами.

Авторизация

Базовая авторизация

Пример:

$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);

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

POST
https://web.it-decision.com/v1/api/send-viber
Request POST
{
"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
}

Параметры

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:

JSON (POST)
{
"message_id":429
}

Значение:

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

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

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

Response:

JSON (POST)
{
"message_token": 44444444444444,
"phone_number": "972512222222",
"time": 2121212121,
"message":
{
"text": "a message to the service",
"tracking_data": "tracking_id:100035"
}
}

Значения

message_token:
токен сообщения ответа клиента
phone_number:
номер телефона клиента
time:
время ответа клиента
message:
text:
текст ответного сообщения клиента
tracking_data:
tracking_id: Идентификатор сообщения, на которое отвечает клиент

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

POST
https://web.it-decision.com/v1/api/receive-viber
Request POST:
{
"message_id":429
}

Параметры

message_id:
ID сообщения, статус которого вы хотите получить (за последние 5 дней)
Response JSON
{
"message_id":429,
"status":1,
"sms_message_id":36478,
"sms_message_status":2
}

Значения

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

cUrl
C#
Java
JavaScript
C – libCurl
NodeJs
PHP
Python
Ruby
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
}'
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);
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();
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));
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);
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();
$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;
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"))
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