Получение обновлений: polling

Метод позволяет получить информацию обо всех сообщениях, которые были доставлены боту с момента последнего обновления.

HTTP метод: GET или POST

URL: https://botapi.messenger.yandex.net/bot/v1/messages/getUpdates/

Заголовки

Authorization: OAuth <токен>
Content-Type: application/json (только для POST-запросов)

Тело запроса (JSON или URL Query)

Имя параметра Обязательный Тип Описание Ограничения, значение по умолчанию
limit Нет integer Максимальное количество обновлений в ответе Не более 1000. Значение по умолчанию: 100
offset Нет integer ID первого запрашиваемого обновления Положительное число. Значение по умолчанию: 0

Схема работы

Работа с getUpdates начинается с запроса со значением limit, равным желаемому количеству сообщений в ответе, и значением offset, равным 0. Такой запрос вернет в ответе самые первые из доступных боту обновлений. После обработки ответа запрос следующей пачки обновлений необходимо сделать с offset, равным max(updates.update_id) + 1.

Запрос getUpdates стирает все обновления с update_id < offset, делая их недоступными для получения ботом.

Бот получает все сообщения из чатов, где он является подписчиком, участником или администратором. Если бот покидает чат, он может получить обновления, которые были сделаны до его выхода.

Результат

Результатом успешного запроса является ответ с кодом 200 и телом с JSON, где содержится информация обо всех сообщениях, которые были доставлены боту с момента последнего обновления.

Имя параметра Обязательный Тип Описание
ok Да boolean Флаг успешности выполнения
updates Да Update[] Полученные сообщения

В случае ошибки возвращается соответствующий статус HTTP. Описание ошибки приходит в поле description.

Имя параметра Обязательный Тип Описание
ok Да boolean Флаг успешности выполнения
description Да string Описание ошибки

Пример запроса (GET)

curl -H 'Authorization: OAuth AtXXXXXXXXXXX' \
    'https://botapi.messenger.yandex.net/bot/v1/messages/getUpdates?limit=1&offset=1569302'

Пример запроса (POST)

curl -H 'Authorization: OAuth AtXXXXXXXXXXX' \
     -H "Content-Type: application/json" \
     -d '{"limit": 1, "offset": 1569302}' \
     'https://botapi.messenger.yandex.net/bot/v1/messages/getUpdates/'

Примеры успешных ответов

Каждый пример является ответом на запрос:

curl https://botapi.messenger.yandex.net/bot/v1/messages/getUpdates/ \
    -H "Authorization: OAuth AXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Прием сообщения в приватный чат

{
  "updates": [
    {
      "message_id": 1702323240544005,
      "timestamp": 1702323240,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571239,
      "text": "Oh hi Mark"
    }
  ],
  "ok": true
}

Прием сообщения в групповой чат

{
  "updates": [
    {
      "message_id": 1702325004369005,
      "timestamp": 1702325004,
      "chat": {
        "type": "group",
        "id": "0/0/<chat_guid>"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571241,
      "text": "Howdy"
    }
  ],
  "ok": true
}

Прием сообщения в канал

{
  "updates": [
    {
      "message_id": 1702332164147004,
      "timestamp": 1702332164,
      "chat": {
        "type": "channel",
        "id": "1/0/<guid>"
      },
      "from": {
        "id": "<guid>"
      },
      "update_id": 1571269,
      "text": "Probably something important"
    }
  ],
  "ok": true
}

Прием пересланного сообщения в приватный чат

{
  "updates": [
    {
      "message_id": 1702329071098005,
      "timestamp": 1702329071,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571249,
      "forwarded_messages": [
        {
          "message_id": 1702323240544005,
          "timestamp": 1702323240,
          "chat": {
            "type": "private"
          },
          "from": {
            "id": "<guid2>",
            "display_name": "Petr Petrov",
            "login": "petr_petrov",
            "robot": false
          },
          "text": "Something idk"
        }
      ]
    }
  ],
  "ok": true
}

Прием стикера

{
  "updates": [
    {
      "message_id": 1702328871591005,
      "timestamp": 1702328871,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571247,
      "sticker": {
        "id": "stickers/images/43/630.png",
        "set_id": "43"
      }
    }
  ],
  "ok": true
}

Прием картинки

Замечание: для скачивания файла необходимо воспользоваться методом /bot/v1/messages/getFile.

{
  "updates": [
    {
      "message_id": 1702329451492005,
      "timestamp": 1702329451,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571251,
      "images": [
        [
          {
            "file_id": "disk/<guid>?size=small",
            "width": 150,
            "height": 11
          },
          {
            "file_id": "disk/<guid>?size=middle",
            "width": 250,
            "height": 18
          },
          {
            "file_id": "disk/<guid>?size=middle-400",
            "width": 400,
            "height": 29
          },
          {
            "file_id": "disk/<guid>",
            "width": 1048,
            "height": 78,
            "size": 20362,
            "name": "file.jpeg"
          }
        ]
      ]
    }
  ],
  "ok": true
}

Прием галереи

Замечание: для скачивания файла необходимо воспользоваться методом /bot/v1/messages/getFile.

{
  "updates": [
    {
      "message_id": 1702330642781005,
      "timestamp": 1702330642,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571257,
      "images": [
        [
          {
            "file_id": "disk/<guid>?size=small",
            "width": 150,
            "height": 10
          },
          {
            "file_id": "disk/<guid>?size=middle",
            "width": 250,
            "height": 17
          },
          {
            "file_id": "disk/<guid>?size=middle-400",
            "width": 400,
            "height": 27
          },
          {
            "file_id": "disk/<guid>",
            "width": 868,
            "height": 60,
            "size": 21743,
            "name": "file1.jpeg"
          }
        ],
        [
          {
            "file_id": "disk/<guid>?size=small",
            "width": 150,
            "height": 11
          },
          {
            "file_id": "disk/<guid>?size=middle",
            "width": 250,
            "height": 18
          },
          {
            "file_id": "disk/<guid>?size=middle-400",
            "width": 400,
            "height": 29
          },
          {
            "file_id": "disk/<guid>",
            "width": 1048,
            "height": 78,
            "size": 20362,
            "name": "file2.jpeg"
          }
        ]
      ]
    }
  ],
  "ok": true
}

Прием файла

Замечание: если пользователь отправил несколько файлов, каждый из них будет представлен своим обновлением. Для скачивания каждого файла необходимо воспользоваться методом /bot/v1/messages/getFile.

{
  "updates": [
    {
      "message_id": 1702329844441005,
      "timestamp": 1702329844,
      "chat": {
        "type": "private"
      },
      "from": {
        "id": "<guid>",
        "display_name": "Ivan Ivanov",
        "login": "ivan_ivanov",
        "robot": false
      },
      "update_id": 1571253,
      "file": {
        "id": "disk/<guid>",
        "name": "data.txt",
        "size": 20
      }
    }
  ],
  "ok": true
}

Пример ответа с ошибкой

{
  "ok": false,
  "description": "Invalid route"
}