CallBack API Редактировано: 28.08.2020 в 04:16

CallBack API работает по принципу сервера-приемщика. Ваш сервер просто слушает запросы с сервера ВКонтакте ну или просто разные запросы. ВКонтакте посылает запрос каждый раз, когда происходит какое-то событие. Данный метод передачи событий надежный, но долгий. За место него можно использовать LongPoll API, будет значительно быстрее. Но, конечно, такой же скорости можно добиться и на CallBack API, просто создав определенные условия для сервера.

CallBack API в EasyVK создает сервер и прослушивает все входящие запросы. На запрос GET / он отвечает 404 Not Found, чтобы, если вдруг ваш пользователь найдет сервер бота, он не смог навредить ему, просто уйдя.

Далее, сервер слушает POST запросы корня, туда будут присылаться все события. Если POST запрос кто-то скомпромитировал, то вам лучше всего использовать пароль для вашей группы, чтобы никто ничего не мог сделать. События по просту будут игнорироваться, если пароль в них не совпадает с заданным вами.

То есть как это происходит. Событие возникает, ваш сервер работает независимо от сервера ВКонтакте, ВКонтакте посылает POST запрос с определенным кодом, с полным событием, EasyVK проверяет, что событие относится к вашей группе, проверяет, что пароль совпадает, если это так, то вызывает событие уже в программе, которое вы можете ловить и делать с ним что-либо. Вот таков путь вашего сообщения.


easyvk.callbackAPI.listen().then(({connection}) => {
  connection.on('message_new', (msg) => {
    console.log('[Got message]', msg)
  })
})

callbackAPI.listen()

Данный метод создает сервер по заданным вами параметрам и начинает слушать события, которые присылает ему сервер ВКонтакте.

Так как CallBack API предназначен для прослушивания событий группы, вам следует указать EasyVK какую именно группу вы хотите слушать, указать код подтверждения сервера, чтобы ВКонтакте сделал свой первый запрос подтверждения. То есть, чтобы ВК убедились, что это правда ваш сервер, они отправят запрос подтверждения, и EasyVK вернет код подтверждения, который вы укажете в настройках. Код подтверждени берется из настроек группы, когда вы подключаете CallBAckk API. Процедура подтверждения обычно проводится единожды для одной группы, но EasyVK поддерживает и множественное слушание, когда события могут происходит на разных группах, а сервер, который их слушает - один, как и слушатели событий, они не дублируются и вы всегда можете понять в какой именно группе произошло событие. Об этом ниже.

easyvk.callbackAPI.listen({
  port: process.env.PORT || 8080, //Http port для сервера, для heroku process.env.PORT,
  groups: [
    {
      groupId: 11,
      confirmCode: 'TestConfirmationCode',
      secret: 'GroupPassword'
    },
    {
      /*....*/
    }
  ]
}).then(({ connection }) => {

  connection.on('message_new', (msg) => {

    console.log(msg.group_id)

  })

}).catch(console.error)

Если вам нужно слушать всего лишь одну группу, необязательно для этого создавать массив groups, для этого можно всего лишь передать groupId, confirmCode, secret в верхний уровень объекта параметров таким образом

easyvk.callbackAPI.listen({
  groupId: '1' //ID группы,
  secret: 'SecretCodeForGroupOrJustPassword',
  confirmCode: 'TestConfirmationCode' //Код подтверждения, единожды для одной группы,
  port: process.env.PORT || 8080
})

В EasyVK имеется также вариант использования CallBack API после инициализации easyvk таким образом

easyvk(/*параметры авторизации*/).then(vk => {

  // Пример
  // vk.callbackAPI.listen(/*..*/).then()

}).catch(console.error)

Также если вам необходимо внести изменения в сервере, вы можете использовать переменную app, это Express Application

vk.callbackAPI.listen().then(({ connection, app, vk }) => {
  app.get('/fold', (req, res) => {
    //Пример
  })
})

События

В Callback API для EasyVK повторяются все события, которые описаны на этой странице, а также еть некоторые системные события, которые описаны ниже

Событие Описание
secretError Возникает, когда сервер пытается отправить событие, но пароль в нем не совпадает с тем, что вы прописали в параметрах группы.
confirmationError Возникает, когда, сервер пытается отправить запрос подтверждение, но по каким-то причинам в EasyVK нет той группы, которую пытается запросить сервер
eventEmpty Возникает, когда отправляется запрос, но в нем нету события, и вообще он пустой
function errorHandler ({ postData, description }) {
  console.log(`[${ description }]`, postData)
}

connection.on('eventEmpty', errorHandler)
.on('confirmationError', errorHandler)
.on('secretError', errorHandler)