VK.COM¶
Отправка¶
Для отправки VK-сообщения необходимо:
- Передать шаблон для отправки сообщений вашему менеджеру или в техническую поддержку.
- Получить ID шаблона (для параметра
templateId). - Вызвать POST /vk/messages, передавая в теле запроса параметры сообщения с указанием данных авторизации в заголовке.
Внимание
Пожалуйста, учтите следующие ограничения на отправку:
○ Не более 50 уведомлений в секунду для одной группы в VK.
○ Не более 5 уведомлений в сутки для одного пользователя от одной группы в VK.
В одном запросе можно отправить не более 1000 сообщений.
Параметры запроса¶
| Параметр | Тип данных | Описание |
|---|---|---|
| phone | string | Номер телефона в международном формате, согласно стандарту E.164. |
| routes | array | Список возможных каналов доставки через запятую ○ Доставка производится до первого получения уведомления на физическое устройство. При указании нескольких каналов доставки в итоге использован и тарифицирован будет только один из каналов. Последовательность и логика выбора маршрутов из данного списка конфигурируется при подключении к системе. Если параметр не задан, по умолчанию используются все возможные способы доставки. Доставка будет происходить только в том случае, если в шаблоне будет указана группа в соответствующей социальной сети. Например в шаблоне может быть указана только группа VK, тогда доставка в Одноклассники по данному шаблону осуществляться не будет. |
| service | string | Согласованное имя отправителя в VK. |
| tmpl | string | Название шаблона сообщения. Далее сообщение формируется через параметр tmpl_data. |
| tmplData | object | JSON-объект, где ключи - имена переменных в шаблоне. Например, для шаблона: |
| text | string | UTF-8 текст, не более 2048 символов. Если текст сообщения не соответствует ни одному шаблону, в ответ на запрос вернется ошибка. В случае использования параметров tmpl и tmpl_data данный параметр использовать не нужно. Если указаны vk_text или ok_text, они имеют больший приоритет, чем text. |
| vkText (optional) |
string | Аналогично text, но используется только для доставки в VK. |
| okText (optional) |
string | Аналогично text, но используется только для доставки в OK. |
| ttl (optional) |
integer | Срок жизни сообщения в секундах. Минимальное значение: 60 Если сообщение не было доставлено за время |
| deliveryPolicy (optional) |
string | Возможные значения: По умолчанию Если указано Если указано |
| statusUrl (optional) |
string | URL, на который система будет отправлять коллбэки при изменении статуса сообщения. Любой валидный URL со схемой |
| callbackData (optional) |
object | Данные, которые будут указаны в коллбэке со статусом сообщения. Любой массив вида |
Пример запроса¶
[
{
"deliveryPolicy": "ANY",
"phone": "79999999999",
"routes": [
"VK", "OK"
],
"service": "Group_name",
"statusUrl": "http://your.website.com/",
"tmpl": "base_template",
"tmplData": {
"name": "Anna",
"pizza": "Margarita",
},
"ttl": 60
}
]
Параметры ответа¶
| Параметр | Тип данных | Описание |
|---|---|---|
| result | array | Результат обработки сообщения. |
| result.code | string | Указывает на результат обработки сообщения. 1. |
| result.messageId | string | ID сообщения. Указывается только при "code": "OK". |
| reasons | array | Массив ошибок, произошедших во время обработки сообщения. Указывается только при "code": "REJECTED". |
| reasons.key | string | Код ошибки. |
| description | string | Сообщение с описанием ошибки. |
Коды ошибок¶
| Код | Описание |
|---|---|
| service.not.found | Отправка сообщений через VK недоступна. |
| billing.error | Ошибка оплаты. |
| is.spam | Сообщение помечено как спам. |
| too.many.messages | Превышен лимит по количеству сообщений в запросе. Один запрос может содержать не более 1000 сообщений. |
| login.must.be.not.null | Не указан логин пользователя. |
Примеры ответов¶
{
"result": [
{
"code": "OK",
"messageId": 2354676865423253
}
]
}
{
"result": null,
"reasons": [
{
"key": "login.must.be.not.null"
}
],
"description": "Ошибка валидации: login must be not null"
}
Коллбэки¶
Как подключить
Для настройки коллбэков со статусами сообщений необходимо обратиться к менеджеру компании или в техническую поддержку.
Возможные статусы¶
| Статус | Код статуса | Описание |
|---|---|---|
| SENT | SENT | Отправлен запрос на доставку сообщения. |
| DELIVERED | DELIVERED | Сообщение доставлено. |
| UNDELIVERABLE | UNDELIVERABLE | Невозможно доставить сообщение. |
| UNSUPPORTED | Сообщение не может быть доставлено, так как пользователя не существует в системе поставщика. | |
| BLOCKED_BY_USER | Пользователь запретил прием сообщений от данного отправителя. | |
| RATELIMIT | Превышен лимит отправки сообщений. | |
| EXPIRED | VP_EXPIRED_AFTER_SEND | Уведомление не доставлено, так как вышло время ttl на доставку до устройства пользователя. |
| REJECTED | FAILED | Провалилась попытка доставить сообщение, ошибка со стороны поставщика. |
| NOT_ENOUGH_DATA | Недостаточно данных в запросе. | |
| INCORRECT_SIGNATURE | Некорректная подпись запроса. | |
| UNSUPPORTED_NUMBER | Не поддерживается номер телефона (страна или оператор). | |
| NUMBER_IN_BLACK_LIST | Номер телефона получателя занесен в черный список. | |
| NUMBER_TYPE_NOT_ALLOWED | Номер телефона получателя виртуальный или замечен в спаме. | |
| ERROR | Ошибка общего характера, подробности указаны в параметре коллбэка detailStatus. |
|
| NOT_ALLOWED_IP | IP адрес, с которого осуществляется запрос, не разрешен в настройках доступа. | |
| UNSUPPORTED_TEMPLATE | Не поддерживается шаблон сообщения. | |
| NOT_VALID_TEMPLATE_DATA | Неправильно сформирован параметр tmpl_data. |
|
| SEEN | READ | Сообщение было прочитано только что. Данный статус не придет, если сообщение было прочитано после истечения ttl + 24 часа (это не значит, что сообщение будет удалено). |
| UNKNOWN | UNKNOWN | Неизвестная ошибка. |
Пример коллбэка¶
[
{
"messageId": "3721115754893245581",
"eventTime": "2023-06-28 13:34:25",
"statusInfo": {
"status": "EXPIRED",
"errorCode": "VP_EXPIRED_AFTER_SEND",
"detailStatus": "EXPIRED: null"
}
}
]
Входящие сообщения¶
Внимание
Devino.Telecom отправляет данные только по первому входящему сообщению в диалоге. Уведомления про последующие сообщения не отправляются, в связи с особенностями получения некоторых параметров от поставщика.
Подключение¶
Для получения входящих сообщений от пользователей необходимо предварительно настроить сообщество VK.
Важно
Перед настройкой сообщества VK обратитесь к менеджеру компании или в техническую поддержку, чтобы настроить данные для получения входящих сообщений.
Для настройки сообщества необходимо:
- Перейти в сообщество VK, для которого вы хотите получать уведомления, и выбрать раздел Управление в правом боковом меню.

- В разделе Настройки перейти во вкладку Работа с API в правом боковом меню.
-
Перейти во вторую вкладку Callback API и заполнить поля:
- В поле Версия API выбрать последнюю версию.
- В поле Адрес ввести
https://integrationapi.net/vk/incoming.
-
Далее необходимо сообщить код подтверждения VK (из подсказки
Строка, которую должен вернуть сервер: ...над кнопкой Подтвердить) персональному менеджеру или технической поддержке для регистрации вашего сообщества. - После того, как Devino.Telecom зарегистрирует код, который он должен отдать VK, у себя в системе, вы можете нажать Подтвердить в той же вкладке. У подтвержденного сервера рядом с полем Адрес появится зеленая иконка с галочкой.

- Также нужно перейти во вторую вкладку Типы событий раздела Callback API и отметить первый чекбокс
Входящее сообщение. Настройка обновится автоматически.

Параметры¶
| Параметр | Тип данных | Описание |
|---|---|---|
| event_id | string | ID события отправки сообщения. |
| group_id | string | ID сообщества, в котором произошло событие. |
| object | IncomingMessageObject | Объект с параметрами клиента и входящего сообщения. |
| type | string | Тип события. |
| v | string | Версия API, для которой сформировано событие. |
IncomingMessageObject¶
| Параметр | Тип данных | Описание |
|---|---|---|
| client_info | ObjectClientInfo | Объект с параметрами клиента. |
| message | ObjectMessage | Объект с параметрами сообщения. |
Важно
Параметр message_tag во входящем сообщении будет соответствовать ID отправленного сообщения в Devino. Данный ID возвращается в ответе на запрос POST /vk/messages, в параметре result.id.
Пример¶
{
"group_id": 213243638,
"type": "message_new",
"event_id": "07c0da23123148715ab13e97823adc1bb0eadcf9",
"v": "5.131",
"object": {
"message": {
"id": 1,
"date": 1657543344,
"peer_id": 37119444,
"from_id": 666666,
"text": "text",
"random_id": 123,
"ref": "ref",
"ref_source": "ref_source",
"attachments": [
{
"type": "photo",
"photo": {
"id": 1,
"album_id": 2,
"owner_id": 3,
"user_id": 4,
"text": "phooto_text",
"width": 100,
"height": 100
}
}
],
"important": true,
"out": 0,
"conversation_message_id": 1,
"fwd_messages": [],
"is_hidden": false,
"message_tag": "3690837110063289472"
},
"client_info": {
"button_actions": [
"text",
"vkpay",
"open_app",
"location",
"open_link",
"callback",
"intent_subscribe",
"intent_unsubscribe"
],
"keyboard": true,
"inline_keyboard": true,
"carousel": true,
"lang_id": 0
}
}
}
Детализация¶
Для получения детальных сведений об отправленных сообщениях необходимо вызвать GET /vk-stat/detail, передавая параметры фильтров и данные авторизации в заголовке.
Параметры запроса¶
| Параметр | Тип данных | Описание |
|---|---|---|
| limit | integer | Количество сообщений в результатах поиска. |
| offset | integer | Смещение результатов поиска. То есть, к примеру, если в параметре будет указано число 5, полученный массив сообщений будет отображаться, начиная с 5 позиции. |
| taskId (optional) |
integer | ID рассылки, по которой нужно получить детализацию. Можно узнать при создании сценария рассылки. Используется в обязательной комбинации параметров. |
| triggerId (optional) |
integer | ID триггера рассылки. Можно узнать при получении сценария рассылки. Используется в обязательной комбинации параметров. |
| dateTimeFrom (optional) |
datetime | Дата начала поиска сообщений. Используется в обязательной комбинации параметров. Формат - YYYY-MM-DDThh%3Amm%3Ass. |
| dateTimeTo (optional) |
datetime | Дата окончания поиска сообщений. Используется в обязательной комбинации параметров. Формат - YYYY-MM-DDThh%3Amm%3Ass. |
| messageIds (optional) |
array[integer] | ID сообщений, по которым нужно получить детализацию. Используется в обязательной комбинации параметров. |
| companyId (optional) |
integer | ID компании. К данной компании принадлежит пользователь, который совершал рассылку. |
| order (optional) |
string | В каком порядке выводить результаты запроса. Возможные значения: |
| orderField (optional) |
string | Поле, по которому будут отсортированы результаты запроса. |
| outFields (optional) |
array[string] | Поля в результатах поиска. Неуказанные в этом параметре поля будут исключены. |
| recipient (optional) |
string | Номер телефона получателя. |
| searchText (optional) |
string | Поиск ключевого слова в текстах сообщений. Доступен поиск одного слова на английском языке. |
| status (optional) |
string | Статус сообщений в результатах поиска. Возможные значения: |
| timeOffset (optional) |
integer | Часовой пояс получателя. Формат - смещение в минутах, например, 180 для Москвы (GMT+3). |
Комбинации параметров¶
Для корректной работы метода в запросе необходимо использовать одну из этих комбинаций параметров в соответствии со списком:
- ID рассылки:
taskId - ID рассылки и триггера:
taskId,triggerId - Даты начала и окончания поиска сообщений:
dateTimeFrom,dateTimeTo - ID рассылки, триггера; даты начала и окончания поиска сообщений:
taskId,triggerId,dateTimeFrom,dateTimeTo - ID сообщений:
messageIds
Поля для параметров orderField и outFields¶
Используются в параметрах orderField для сортировки результатов поиска и outFields для отбора полей.
| Название поля | Описание |
|---|---|
| DELIVERY_POLICY | Возможные значения: По умолчанию Если указано Если указано |
| ERROR_CODE | Код ошибки. |
| EVENT_DATE_TIME | Дата и время последнего обновления статуса сообщения. |
| MESSAGE_ID | ID сообщения. |
| RECIPIENT | Номер телефона получателя. |
| ROUTE | Маршрут, по которому было отправлено сообщение. |
| SENT_DATE_TIME | Дата и время отправки. |
| SERVICE | Согласованное имя отправителя VK. |
| STATUS | Статус сообщения. |
| TASK_ID | ID рассылки. |
| TASK_NAME | Название рассылки. |
| TASK_TYPE | Тип рассылки. |
| TEMPLATE_ID | ID шаблона сообщения. |
| TEMPLATE_NAME | Название шаблона сообщения. |
| TEXT | Текст сообщения. |
| TEXT_OK | Текст сообщения, отправленного VK. |
| TEXT_VK | Текст сообщения, отправленного в Одноклассниках. |
| TRIGGER_ID | ID триггера рассылки. |
| USER_LOGIN | Логин пользователя, отправившего сообщения. |
| VALIDITY | Срок жизни сообщения в секундах. |
Примеры запросов¶
curl -X GET https://api.devino.online/vk-stat/detail?dateTimeFrom=2022-10-06T13%3A45%3A30&dateTimeTo=2023-02-06T13%3A45%3A30&limit=20&offset=1
-H 'Authorization: Key QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
curl -X GET https://api.devino.online/vk-stat/detail?taskId=8742&triggerId=2312&limit=20&offset=1
-H 'Authorization: Key QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
Параметры ответа¶
| Параметр | Тип данных | Описание |
|---|---|---|
| data | array[object] | Массив объектов с детальной информацией по каждому сообщению. Параметры определяются полями, которые были заданы в изначальном запросе. |
| size | integer | Количество элементов на странице и сообщений в результатах поиска. Задается параметром limit. |
| offset | integer | Смещение результатов поиска. То есть, к примеру, если в параметре будет указано число 5, полученный массив сообщений будет отображаться, начиная с 5 позиции. |
| number | integer | Номер полученной страницы. Определяется параметром ○ Если значение параметра ○ Если ○ Если |
| pageExists | boolean | Существует ли отображаемая страница. |
| total | integer | Общее количество сообщений, по которым можно получить детализацию. |
| pages | integer | Общее количество страниц, по которым можно получить детализацию. Определяется целочисленным делением параметра total на limit (total / limit). |
| more | boolean | Индикатор: существуют ли страницы после текущей, указанной в параметре number. |
Пример ответа¶
{
"result": {
"offset": 1000,
"number": 21,
"size": 50,
"pageExists": true,
"data": [
{
"messageId":"23452453412344",
"userLogin":"vk_user",
"service":"vk_group_name",
"sentDateTime":"2023-08-01 00:00:03",
"recipient":"79112223344",
"status":"DELIVERED",
"eventDateTime":"2023-08-01 00:00:03",
"templateId":"123432445234",
"templateName":"vk_template_name",
"validity":602,
"errorCode":9
},
{
"messageId":"23452453412345",
"userLogin":"vk_user",
"service":"vk_group_name",
"sentDateTime":"2023-08-01 00:00:08",
"recipient":"79112223344",
"status":"UNDELIVERED",
"eventDateTime":"2023-08-01 00:00:09",
"text":"Ваш заказ прибыл на пункт выдачи.",
"validity":86400,
"errorCode":12
},
...
],
"more": true,
"pages": 100,
"total": 1000
}
}
Статистика сообщений¶
Для получения общей статистики по статусам сообщений необходимо вызвать GET /vk-stat/statistics/of-group, передавая параметры фильтров и данные авторизации в заголовке.
Параметры запроса¶
| Параметр | Тип данных | Описание |
|---|---|---|
| groupBy | string | Группировка результатов: |
| startDate | datetime | Дата начала периода сбора статистики. Формат - YYYY-MM-DDThh%3Amm%3Ass. |
| endDate | datetime | Дата окончания периода сбора статистики. Формат - YYYY-MM-DDThh%3Amm%3Ass. |
| taskId (optional) |
integer | ID рассылки, по которой нужно получить статистику. |
| triggerId (optional) |
integer | ID триггера рассылки, по которому нужно получить статистику. |
| timeOffset (optional) |
integer | Часовой пояс получателя. Формат - смещение в минутах, например, 180 для Москвы (GMT +3). |
Пример запроса¶
curl -X GET https://api.devino.online/vk-stat/statistics/of-group?startDate=2022-10-06T13%3A45%3A30&endDate=2023-02-06T13%3A45%3A30&groupBy=MONTH
-H 'Authorization: Key QWxhZGRpbjpvcGVuIHNlc2FtZQ==' \
Параметры ответа¶
| Параметр | Тип данных | Описание |
|---|---|---|
| messages | array[MessageStatusObject] | Количество сообщений по выбранному периоду, сгруппированных по статусам. |
| segments | array[MessageStatusObject] | Количество сегментов сообщений по выбранному периоду, сгруппированных по статусам. |
MessageStatusObject¶
Объект содержит информацию о количестве сообщений со статусами:
| Код | Описание |
|---|---|
| accepted | Сообщение было принято. |
| scheduled | Сообщение запланировано к отправке. |
| enrouted | Сообщение находится в процессе отправки оператору. |
| sent | Сообщение было отправлено в сеть оператора. |
| deleted | Сообщение было удалено. |
| delivered | Сообщение доставлено абоненту. |
| expired | Истек срок жизни сообщения. |
| seen | Сообщение было прочитано получателем. |
| clicked | Получатель перешел по ссылке в сообщении. |
| rejected | Сообщение было отклонено оператором или Devino. |
| undeliverable | Сообщение невозможно доставить. |
| unknown | Произошла неизвестная ошибка. |
Каждый статус включает в себя параметры:
| Параметр | Тип данных | Описание |
|---|---|---|
| date | string | Дата сбора статистики в зависимости от значения параметра groupBy. |
| amount | integer | Количество сообщений. |
Пример ответа¶
{
"result": {
"messages": {
"accepted": [
{
"date": "2023-01-01 00:00:00",
"amount": 100
}
],
"sent": [
{
"date": "2022-12-01 00:00:00",
"amount": 2
}
],
"deleted": [],
"delivered": [
{
"date": "2023-01-01 00:00:00",
"amount": 67
},
{
"date": "2022-10-01 00:00:00",
"amount": 1
},
{
"date": "2022-12-01 00:00:00",
"amount": 72
},
{
"date": "2023-02-01 00:00:00",
"amount": 3
}
],
"enrouted": [],
"expired": [],
"seen": [],
"clicked": [],
"rejected": [],
"scheduled": [],
"undeliverable": [],
"unknown": []
},
"segments": {
"accepted": [
{
"date": "2023-01-01 00:00:00",
"amount": 2
},
{
"date": "2023-02-01 00:00:00",
"amount": 4
}
]
...
}
}
}