Получение событий через CallBack
«Webhook – это механизм отправки уведомлений при наступлении в системе определённого события. Под событием понимается изменение состояния системы. Например, событиями являются: создание нового товара, изменение информации о компании, удаление услуги и т.д...»
Чтобы принимать событий VK API, необходимо настроить Handlers. Сделать это можно через Fiber следующим образом:
package main
import (
"github.com/botscommunity/API"
"github.com/botscommunity/callback"
"github.com/botscommunity/vkgo/samples/public/events"
"github.com/botscommunity/vkgo/scene"
"github.com/gofiber/fiber/v2"
)
func main() {
bot := API.Create("YOUR_TOKEN")
scenes := scene.Create().
Message(events.Message)
session := callback.Create(bot, scenes)
server := fiber.New()
server.Post("/:confirmation", session.Fiber)
server.Listen(":8000")
}
Небольшое разъяснение. Сначала мы создаём бота, который будет отправлять запросы на сервер ВКонтакте вроде отправки сообщения, изменения или удаления чего-либо. Затем создаём сцены, которые будут работать с поступающими событиями, в данном случае - новым сообщением. Настоятельно рекомендуется изменить events на собственный, как это сделать можно посмотреть здесь. Затем создаём Callback сессию, в аргументах которой указываем бота и сцены, после чего нам необходимо настроить сервер через Fiber. В этом примере мы создаём Post обработчик «https://localhost:8000/:confirmation» и назначаем ему Fiber метод созданной сессии. Говоря про localhost, для доступа к нему для ВКонтакте можно использовать NGRok.
После всего этого необходимо подключить Ваш сервер к Callback серверу ВКонтакте. Для этого переходим в настройки сообщества в разделы «Работа с API ➜ Callback API»
Подключение
В «Callback API» можно настроить сервер, к которому будут поступать события. Можно изменить название, выставить Версию API (рекомендуется ставить последнюю, т.к старые версии нашей библиотекой пока что не поддерживаются) и самое важное - Адрес, который и является тем самым NGRok HTTP-адресом, куда ВКонтакте будет отсылать запросы с новым событием. К слову говоря, Callback отправляет событие, а не события. Самый простой способ подключить свой сервер - использовать ссылку вроде «https://{ngrok_url}/{confirmation_string}». Итак, расмотрим эту ссылку подробнее. Получить «ngrok_url» можно из команды «ngrok http 8000», как правило он находится в значении «Forwarding {ngrok_url} -> http://localhost:8000». {confirmation_string} указан в разделе «Строка, которую должен вернуть сервер: {confirmation_string}».
После проделанного, если Ваш бот инициализирован в коде и находится в сети, Ваш сервер вернёт строку подтверждения и ВКонтакте запомнит URL, на который будет отсылать событие. Если же произошла ошибка, это может быть связано с тем, что подключаемое сообщество отсутствует в записи, исправляется следующим образом:
session.Config("everyone", true)
Хотя и отправлять запросы в ответ не получится, поскольку подключаемого бота не существует, но принимать сможет.