callback

package
v2.16.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 3, 2023 License: MIT Imports: 13 Imported by: 1

README

Callback API

PkgGoDev VK

Подключение Callback API

Для подключения Callback API нужно открыть раздел «Управление сообществом» («Управление страницей», если у Вас публичная страница), перейти во вкладку «Работа с API». Далее необходимо указать и подтвердить конечный адрес сервера, куда будут направлены все запросы. Вы можете подключить до 10 серверов для Callback API, задать каждому из них отдельный набор событий и версию API.

Версия API

Данная библиотека поддерживает версию API 5.131.

Подтверждение сервера

Для подтверждения сервера задайте строку, которую должен вернуть сервер, переменной ConfirmationKeys[groupID] для отдельной группы или ConfirmationKey

Секретный ключ

Для проверки того, что запросы приходят от VK, укажите секретный ключ. Секретный ключ задайте переменной SecretKeys[groupID] для отдельной группы или SecretKey

Если ключи не совпадают, Ваш сервер вернет Bad Secret

Обработчик событий

Для каждого события существует отдельный обработчик, который передает функции ctx и object.

Пример для события message_new

cb.MessageNew(func(ctx context.Context, obj events.MessageNewObject) {
	...
})

Полный список событий Вы найдёте в документации

Контекст

Поля groupID и eventID передаются в ctx. Чтобы получить их, можно воспользоваться следующими функциями:

groupID := events.GroupIDFromContext(ctx)
eventID := events.EventIDFromContext(ctx)
Веб-сервер

Для модуля net/http воспользуйтесь функцией HandleFunc

http.HandleFunc("/callback", cb.HandleFunc)
http.ListenAndServe(":8080", nil)

Пример

package main

import (
	"context"
	"log"
	"net/http"

	"github.com/SevereCloud/vksdk/v2/callback"
	"github.com/SevereCloud/vksdk/v2/events"
)

func main() {
	cb := callback.NewCallback()

	cb.ConfirmationKey = "693d0ba9"
	// cb.ConfirmationKeys[170561776] = "693d0ba9"

	cb.MessageNew(func(ctx context.Context, obj events.MessageNewObject) {
		log.Print(obj.Message.Text)
	})

	http.HandleFunc("/callback", cb.HandleFunc)

	http.ListenAndServe(":8080", nil)
}

Автоматическая настройка

Для автоматической настройки callback сервера, существует метод AutoSetting. Данный метод:

  • проверяет существующие настройки callback
  • удаляет сервер, если он сломан
  • создает новый callback, если его нет
  • генерирует секрет
  • настраивает callback сервер с событиями, которые были прописаны в коде

AutoSetting требуется запускать вместе с веб-сервером.

package main

import (
	"context"
	"log"
	"net/http"
	"os"

	"github.com/SevereCloud/vksdk/v2/api"
	"github.com/SevereCloud/vksdk/v2/callback"
	"github.com/SevereCloud/vksdk/v2/events"
)

func main() {
	groupToken := "<TOKEN>" // рекомендуется использовать os.Getenv("TOKEN")
	vk := api.NewVK(groupToken)

	cb := callback.NewCallback()
	cb.Title = "example-bot"

	cb.MessageNew(func(ctx context.Context, obj events.MessageNewObject) {
		log.Print(obj.Message.Text)
	})

	http.HandleFunc("/callback", cb.HandleFunc)

	go func() {
		err := cb.AutoSetting(vk, "https://example.com/callback")
		if err != nil {
			log.Println(err)
			os.Exit(1)
		}
	}()

	http.ListenAndServe(":8080", nil)
}

Documentation

Overview

Package callback implements Callback API.

See more https://vk.com/dev/callback_api

Package callback implements Callback API.

Index

Constants

This section is empty.

Variables

View Source
var ErrNeedGroupToken = errors.New("callback: need group access token")

ErrNeedGroupToken for AutoSetting.

Functions

func Remove added in v2.10.0

func Remove(ctx context.Context)

Remove VK Callback server.

func RetryAfter added in v2.8.0

func RetryAfter(ctx context.Context, code int, date time.Time)

RetryAfter send the "Retry-After" header field to indicate how long the VK Callback ought to wait before making a repeated request. Not work with goroutine mode!

Possible HTTP status codes:

http.StatusGone
http.StatusTooManyRequests
http.StatusServiceUnavailable

The resend time range must be less than 3 hours. The actual time of forwarding an event notification may be longer than the specified time.

func RetryCounterFromContext added in v2.7.0

func RetryCounterFromContext(ctx context.Context) int

RetryCounterFromContext returns the X-Retry-Counter from context.

Types

type Callback

type Callback struct {
	ConfirmationKeys map[int]string
	ConfirmationKey  string
	SecretKeys       map[int]string
	SecretKey        string
	Title            string

	// ErrorLog specifies an optional logger for errors unexpected
	// behavior from handlers.
	// If nil, logging is done via the log package's standard logger.
	ErrorLog *log.Logger

	events.FuncList
}

Callback struct SecretKeys [GroupID]SecretKey.

func NewCallback

func NewCallback() *Callback

NewCallback return *Callback.

func (*Callback) AutoSetting

func (cb *Callback) AutoSetting(
	vk *api.VK,
	urlCallback string,
) error

AutoSetting automatically configures callback.

Need *api.VK with group access token, access setting: community management.

func (*Callback) HandleFunc

func (cb *Callback) HandleFunc(w http.ResponseWriter, r *http.Request)

HandleFunc handler.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL