VK API¶
Общие сведения¶
Сервис позволяет отправлять сообщения VK через платформу Devino Telecom с возможностью переотправки по Viber и SMS в случае недоcтавки, а также для получения отчетов о статусах доставки сообщений.
API поддерживает базовую авторизацию через заголовок Authorization.
В заголовке запроса необходимо передать логин и пароль из личного кабинета в формате login:password в base64 кодировке, например:
Authorization: Basic dGVzdGVyOjExMTExMQ==
Подключение услуги¶
Для подключения услуги необходимо предоставить менеджеру компании:
- Название и адрес группы VK
- Описание вашей компании и вида ее деятельности
- Ссылку на ваш сайт или мобильное приложение
- Шаблоны, которые будут использоваться для отправки сообщений
Внимание
На стороне VK имеются ограничения на отправку:
- не более 50 уведомлений в секунду для одного service (для одной группы в VK)
- не более 5 уведомлений в сутки для одного пользователя от одного service (одной группы в VK)
Отправка сообщения¶
https://im.devinotele.com/send/vk
В одном запросе может быть информация об отправке только одного сообщения.
Параметры запроса отправки сообщения¶
Параметры объекта VK¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| subject обязательный |
string | Строка от 1 до 11 символов | Имя отправителя |
| priority обязательный |
string | Варианты: 1. low2. medium2. high4. realtime |
Приоритет сообщения |
| routes обязательный |
array[string] | Варианты: 1. vk2. ok2. ok, vk4. vk, ok |
Массив маршрутов VK в порядке использования, например "routes":["ok","vk"] |
| validityPeriod обязательный |
Long | Целое число от 15 до 86400 | Время жизни сообщения в секундах |
| deliveryPolicy обязательный |
string | Варианты: 1. any2. mobile_device_required |
По умолчанию any. Если указано mobile_device_required, то доставка производится только в случае наличия у пользователя мобильного приложения и его использования в течение последних 7 дней. Доставка при этом производится во все имеющиеся устройства, а не только мобильные. |
| phone обязательный |
string | Номер телефона в соответствии со стандартом E.164, возможен + в начале |
Номер телефона получателя сообщения |
| templateId обязательный |
Long | Целое число | ID шаблона сообщения |
| templateData обязательный |
Object | Значения параметров шаблона - например, если шаблон:
"templateData": |
Параметры объекта Viber¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| subject обязательный |
string | Имя отправителя Viber-сообщения | |
| priority обязательный |
string | Варианты: 1. low2. medium2. high4. realtime |
Приоритет сообщения |
| validityPeriod обязательный |
Long | Целое число от 15 до 86400 | Время жизни сообщения в секундах |
| comment | string | Произвольный текстовый комментарий | |
| type обязательный |
string | viber |
Тип отправляемого сообщения. Определяет канал, который используется для доставки сообщения на мобильный телефон получателя |
| contentType обязательный |
string | text – текстовое сообщениеimage – изображениеbutton – гиперссылка в виде кнопки |
Тип содержимого сообщения. |
| dstAddress обязательный |
string | Номер телефона в соответствии со стандартом E.164, возможен + в начале |
Номер телефона получателя сообщения |
| text обязательный |
string | Текст Viber-сообщения | |
| caption | string | Зависит от значения contentType | Текст кнопки |
| action | string | Зависит от значения contentType | URL для перехода при нажатии на кнопку |
| imageUrl | string | Зависит от значения contentType | URL изображения, которое размещено на сервере клиента |
Параметры объекта SMS¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| srcAddress обязательный |
string | Имя отправителя SMS-сообщения | |
| text обязательный |
string | Текст сообщения | |
| validityPeriod обязательный |
Long | Число от 60 до 86400 | Время жизни сообщения в секундах |
| dstAddress обязательный |
string | Номер телефона в соответствии со стандартом E.164, возможен + в начале |
Номер телефона получателя сообщения |
Пример запроса отправки сообщения¶
{
"vk":{
"subject":"TEST",
"priority":"high",
"routes":[
"vk"
],
"validityPeriod":180,
"phone":"79999999999",
"templateId":"123456",
"templateData":{
"param1":"value1",
"param2":"value2"
}
},
"viber":{
"subject":"TEST",
"priority":"high",
"validityPeriodSec":30,
"type":"viber",
"comment":"comment",
"contentType":"button",
"text":"text",
"caption":"caption",
"action":"http://company.com/resource",
"imageUrl":"http://company.com/image.jpg",
"dstAddress":"79999999999"
},
"sms":{
"srcAddress":"TESTSMS",
"text":"тест сообщения",
"validityPeriod":60,
"dstAddress":"79999999999"
}
}
Параметры ответа на запрос отправки сообщения¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| code | string | Возможные значения перечислены в таблице кодов | Код ответа на запрос отправки сообщения |
| description | string | Возможные значения перечислены в таблице кодов | Описание ошибки отправки сообщения |
| result | Object | Информация о коде валидации и ID сообщения |
Параметры объекта result¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| code | string | Возможные значения перечислены в таблице кодов валидации | Код валидации сообщения |
| messageId | Long | Уникальный ID сообщения |
Пример ответа на запрос отправки сообщения¶
{
"code": "ok",
"description": "",
"result": {
"code": "ok",
"messageId": 3222269333010907000
}
}
Коды ответа на запрос отправки сообщения¶
| code | description |
|---|---|
| ok | |
| validation_error | login_not_specified |
| validation_error | messages_not_specified |
| validation_error | invalid_json |
| queue_full | login_send_queue_overflow |
| system_error | Описание внутренней ошибки сервера |
Коды валидации сообщения¶
| code | Описание |
|---|---|
| ok | Сообщение добавлено в очередь на отправку |
| subject_not_specified | Не указан адрес отправителя |
| subject_invalid | Недопустимый адрес отправителя |
| priority_not_specified | Не указан приоритет сообщения |
| priority_invalid | Недопустимый приоритет сообщения |
| routes_not_specified | Не указаны маршруты доставки |
| routes_invalid | Недопустимый набор маршрутов доставки |
| vp_invalid | Недопустимый validityPeriod |
| phone_not_specified | Не указан номер телефона |
| phone_invalid | Недопустимый номер телефона |
| text_not_specified | Не указан текст сообщения |
| text_invalid | Недопустимый текст сообщения |
| sms_text_not_specified | Не указан текст SMS-сообщения |
| sms_subject_not_specified | Не указан номер отправителя SMS-сообщения |
| sms_validity_period_not_specified | Не указано время жизни SMS-сообщения |
| invalid_sms_validity_period | Недопустимое время жизни SMS-сообщения |
| not-enough-credits | Недостаточно средств на лицевом счете |
Получение статуса сообщения¶
Платформа Devino Telecom возвращает статус доставки ранее отправленного сообщения VK, messageId которого был ранее передан в теле GET-запроса.
Параметры запроса статусов¶
| Поле | Тип данных | Описание |
|---|---|---|
| message обязательный |
Long | ID сообщения |
Пример запроса¶
https:/im.devinotele.com/status/vk?message=<ID Вашего сообщения>
Параметры ответа на запрос статусов¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| code | string | Возможные значения перечислены в таблице кодов ответа | Код ответа на запрос отправки сообщения |
| description | string | Возможные значения перечислены в таблице кодов ответа | Описание ошибки обработки запроса отправки сообщения |
| result | Object | Каждому объекту из массива messages запроса соответствует объект в массиве result ответа |
Параметры объекта result¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| providerId | Long | ID сообщения | |
| code | string | Возможные значения перечислены в таблице кодов валидации ID сообщений | Код валидации ID |
| status | string | enqueued – сообщение добавлено в очередь на отправкуsent – сообщение отправленоdelivered – сообщение доставленоundelivered – сообщение отправлено, но не доставленоfailed – сообщение не доставлено в результате сбояvp_expired – сообщение не доставлено в течение validityPeriodread – сообщение просмотрено получателем |
Статус доставки сообщения VK |
| statusAt | DateTime | Время обновления статуса доставки сообщения VK | |
| error | string | Информация об ошибке, произошедшей при отправке сообщения | |
| viberStatus | Object | Информация о статусе Viber-сообщения | |
| smsStates | Object | Статусы доставки SMS-сообщения |
Параметры объекта viberStatus¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| id | Long | Уникальный ID сообщения на платформе | |
| statusAt | timestamp | Дата и время получения статуса | |
| Status | string | enqueued – сообщение находится в очереди на отправкуsent – сообщение отправлено получателюdelivered – сообщение доставлено получателюread – сообщение просмотрено получателемvisited - получатель перешел по ссылке в сообщенииundelivered – сообщение отправлено, но не доставлено получателюfailed – сообщение не было отправлено в результате сбояcancelled – отправка сообщения отмененаvp_expired – сообщение просрочено. финальный статус не получен в рамках заданного validityPeriod |
Код статуса доставки Viber-сообщения |
| Code | string | user-blocked – получатель заблокированnot-viber-user – получатель не является пользователем Viber |
Причина, по которой сообщение не было доставлено получателю при status=undelivered |
Параметры объекта smsStates¶
| Поле | Тип данных | Допустимые значения | Описание |
|---|---|---|---|
| id | Long | ID SMS-сообщения | |
| status | string | enqueued – сообщение находится в очереди на отправкуsent – сообщение отправлено получателюdelivered – сообщение доставлено получателюundelivered – сообщение отправлено, но не доставлено получателю |
Статус SMS-сообщения |
Пример ответа¶
{
"code": "ok",
"description": "",
"result": {
"providerId": 3287014702114144256,
"code": "ok",
"status": "failed",
"statusAt": "2018-07-03 16:31:40",
"smsStates": [
{
"id": 711869146186383364,
"status": "delivered"
}
],
"viberStatus": {
"id": 3287014702114144256,
"status": "undelivered",
"statusAt": "2018-07-03 16:31:41",
"code": "not-viber-user"
}
}
}
Коды ответа на запрос статусов¶
| code | description |
|---|---|
| ok | |
| validation_error | message_not_specified |
| system_error | Описание внутренней ошибки сервера |
Коды валидации ID сообщений¶
| code | description |
|---|---|
| ok | |
| unknown_message_id | Неизвестный ID сообщения |
Коды возврата обработки Viber-сообщения в рамках запроса (code)¶
| Код | Описание |
|---|---|
| ok | Сообщение принято на отправку |
| error-system | Системная ошибка |
| error-instant-message-client-id-not-unique | Клиентский ID сообщения не уникален в рамках взаимодействия между клиентом и провайдером |
| error-subject-format | Неправильный формат подписи |
| error-subject-unknown | Указанная подпись не разрешена клиенту в конфигурации платформы провайдера |
| error-subject-not-specified | Подпись не указана |
| error-address-format | Неправильный формат номера получателя |
| error-address-unknown | Отправка на номерную емкость, к которой относится номер получателя, не разрешена клиенту в конфигурации платформы провайдера |
| error-address-not-specified | Номер получателя не указан |
| error-priority-format | Неправильный формат значения приоритета |
| error-comment-format | Неправильный формат значения комментария |
| error-instant-message-type-format | Неправильный формат типа сообщения |
| error-instant-message-type-not-specified | Неправильный формат типа содержимого сообщения |
| error-content-type-format | Неправильный формат содержимого сообщения |
| error-content-not-specified | Содержимое сообщения не указано |
| error-validity-period-seconds-format | Неправильно указано значение времени ожидания доставки |
| error-instant-message-provider-id-format | Неправильный формат ID провайдера |
| error-instant-message-provider-id-duplicate | ID провайдера исходящего сообщения неуникален в рамках запроса проверки статуса |
| error-instant-message-provider-id-unknown | Исходящее сообщение с данным ID провайдера не найдено на платформе провайдера |
| error-resend-sms-error | Указаны поля для переотправки SMS, но переотправка не включена |
| error-resend-sms-validity-period-error | Неверное время жизни для SMS |
Получение статуса сообщения с помощью Callback-запросов¶
Для получения статуса сообщения могут использоваться callback-запросы. В таком случае платформа Devino Telecom будет отправлять POST-запрос на выбранный URL каждый раз, когда у отправленного вами сообщения будет меняться статус.
Запрос считается доставленным, если в ответ на него был получен статус HTTP 200. В противном случае будут совершаться повторные попытки доставки в течение 24 часов. По истечению этого срока статус сообщения можно будет получить только с помощью GET-запроса, описанного выше.
Важно
Обратите внимание, что информация о переотправке по SMS в callback-запросе не предоставляется.
Внимание
Для получения callback-запросов от сервиса необходимо передать менеджеру компании либо в техническую поддержку информацию об URL, на который будут отправляться запросы.
Параметры callback-запроса¶
| Поле | Тип данных | Описание |
|---|---|---|
| id | Long | Уникальный ID сообщения в Devino Telecom |
| status | string | Статус доставки сообщения VK |
| time | DateTime | Время получения статуса по часовому поясу UTC+3 |
| error | string | Ошибка доставки сообщения VK |
Пример callback-запроса¶
[
{
"messageId":1343343,
"status": "DELIVERED",
"receivedAt": "2017-05-31 14:51:12",
"error":"Доставлено"
}
]