callback

package
v2.0.0-...-dff137e Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2023 License: MIT Imports: 13 Imported by: 0

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/error-ident/vksdk/v2/callback"
	"github.com/error-ident/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/error-ident/vksdk/v2/api"
	"github.com/error-ident/vksdk/v2/callback"
	"github.com/error-ident/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

func Remove(ctx context.Context)

Remove VK Callback server.

func RetryAfter

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

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