marusia

package
v0.2.5-alpha Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2023 License: GPL-3.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// OnStart команда запуска скилла. В скилл будет передана пустая строка
	// Command = "".
	OnStart = ""

	// OnInterrupt команда завершении скилла по команде "стоп", "выход" и т.д. в
	// скилл будет передано Command = "on_interrupt", чтобы у скилла была
	// возможность попрощаться с пользователем.
	OnInterrupt = "on_interrupt"
)

Типичные команды голосового ввода.

View Source
const Version = "1.0"

Version версия протокола.

Variables

This section is empty.

Functions

This section is empty.

Types

type Application

type Application struct {
	// Идентификатор экземпляра приложения, в котором пользователь общается с Марусей (максимум 64 символа).
	// Уникален в разрезе: «скилл + приложение (устройство)».
	ApplicationID string `json:"application_id"`

	// Тип приложения (устройства). Возможные значения:
	//  • mobile;
	//  • speaker;
	//  • VK;
	//  • other.
	ApplicationType ApplicationType `json:"application_type"`
}

Application данные о приложении.

type ApplicationType

type ApplicationType string

ApplicationType тип приложения.

const (
	Mobile  ApplicationType = "mobile"  // мобильное приложение
	Speaker ApplicationType = "speaker" // колонка
	VK      ApplicationType = "VK"      // страница вк
	Other   ApplicationType = "other"   // колонка
)

Возможные значения.

type BaseHTTPContext

type BaseHTTPContext struct {
	Req  *http.Request
	Resp http.ResponseWriter
}

func (*BaseHTTPContext) GetContext

func (bhc *BaseHTTPContext) GetContext() context.Context

func (*BaseHTTPContext) GetHeader

func (bhc *BaseHTTPContext) GetHeader(headerName string) string

func (*BaseHTTPContext) ParseRequest

func (bhc *BaseHTTPContext) ParseRequest(req interface{}) error

func (*BaseHTTPContext) SendErrorResponse

func (bhc *BaseHTTPContext) SendErrorResponse(code int, errorText string)

func (*BaseHTTPContext) SendResponse

func (bhc *BaseHTTPContext) SendResponse(code int, response any) error

func (*BaseHTTPContext) SetHeader

func (bhc *BaseHTTPContext) SetHeader(headerName, value string)

type BindingType

type BindingType string

BindingType тип для DefaultPayload.

const (
	BindingTypeSuggest BindingType = "suggest"
)

Возможные значения.

type Button

type Button struct {
	Title   string      `json:"title"`
	Payload interface{} `json:"payload,omitempty"`
	URL     string      `json:"url,omitempty"`
}

Button кнопка.

type Card

type Card struct {
	// Тип карточки.
	Type CardType `json:"type"`

	// Заголовок изображения.
	Title string `json:"title"`

	// Описание изображения.
	Description string `json:"description"`

	// ID изображения из раздела "Медиа-файлы" настроек в VKApps
	// (игнорируется для типа ItemsList).
	ImageID int `json:"image_id,omitempty"`

	// Список изображений, каждый элемент является объектом формата BigImage.
	Items []CardItem `json:"items,omitempty"`
}

Card описание карточки — сообщения с поддержкой изображений.

func NewBigImage

func NewBigImage(title, description string, imageID int) *Card

NewBigImage возвращает карточку с картинкой.

func NewImageList

func NewImageList(title, description string, imageIDs ...int) *Card

NewImageList возвращает карточку с набором картинок.

func NewItemsList

func NewItemsList(title, description string, items []CardItem) *Card

NewItemsList возвращает карточку с набором картинок.

type CardItem

type CardItem struct {
	// ID изображения из раздела "Медиа-файлы" настроек в VKApps.
	ImageID int `json:"image_id"`
}

CardItem элемент карточки.

type CardType

type CardType string

CardType тип карточки.

const (
	// Одно изображение.
	BigImage CardType = "BigImage"

	// Набор изображений.
	ItemsList CardType = "ItemsList"
)

Возможные значения.

type DefaultPayload

type DefaultPayload struct {
	BindingType    BindingType `json:"binding_type"`
	Index          int         `json:"index"`
	TargetPhraseID string      `json:"target_phrase_id"`
}

DefaultPayload дефолтная нагрузка.

type GinHTTPContext

type GinHTTPContext struct {
	*gin.Context
}

func (*GinHTTPContext) GetContext

func (gc *GinHTTPContext) GetContext() context.Context

func (*GinHTTPContext) GetHeader

func (gc *GinHTTPContext) GetHeader(headerName string) string

func (*GinHTTPContext) ParseRequest

func (gc *GinHTTPContext) ParseRequest(req interface{}) error

func (*GinHTTPContext) SendErrorResponse

func (gc *GinHTTPContext) SendErrorResponse(code int, errorText string)

func (*GinHTTPContext) SendResponse

func (gc *GinHTTPContext) SendResponse(code int, response any) error

func (*GinHTTPContext) SetHeader

func (gc *GinHTTPContext) SetHeader(headerName, value string)

type HTTPContext

type HTTPContext interface {
	GetHeader(headerName string) string
	SendErrorResponse(code int, errorText string)
	SetHeader(headerName, value string)
	SendResponse(code int, response any) error
	ParseRequest(req interface{}) error
	GetContext() context.Context
}

type Interfaces

type Interfaces struct {
	// Пользователь может видеть ответ скилла на экране и открывать ссылки
	// в браузере.
	Screen *Screen `json:"screen,omitempty"`
}

Interfaces интерфейсы, доступные на устройстве пользователя.

func (*Interfaces) IsScreen

func (i *Interfaces) IsScreen() bool

IsScreen пользователь может видеть ответ скилла на экране и открывать ссылки в браузере.

type Meta

type Meta struct {
	// Идентификатор клиентского приложения
	ClientID string `json:"client_id"`

	// Язык в POSIX-формате, максимум 64 символа.
	Locale string `json:"locale"`

	// Название часового пояса, включая алиасы, максимум 64 символа
	Timezone string `json:"timezone"`

	// Интерфейсы, доступные на устройстве пользователя.
	Interfaces Interfaces `json:"interfaces"`

	// Город пользователя на русском языке.
	CityRu string `json:"city_ru,omitempty"`
}

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

type Request

type Request struct {
	// Информация об устройстве, с помощью которого пользователь общается с Марусей.
	Meta Meta `json:"meta"`

	// Данные, полученные от пользователя.
	Request RequestIn `json:"request"`

	// Данные о сессии.
	Session Session `json:"session"`

	// Версия протокола.
	Version string `json:"version"`

	// Служебное поле. Позволяет передать какие-то данные о запросе в обработчик сцен
	Context context.Context
}

Request структура запроса.

type RequestIn

type RequestIn struct {
	// Служебное поле: запрос пользователя, преобразованный для внутренней
	// обработки Марусей. В ходе преобразования текст, в частности, очищается
	// от знаков препинания, а числительные преобразуются в числа. При
	// завершении скилла по команде "стоп", "выход" и т.д. в скилл будет
	// передано "on_interrupt", чтобы у скилла была возможность попрощаться с
	// пользователем.
	Command string `json:"command"`

	// Полный текст пользовательского запроса, максимум 1024 символа.
	OriginalUtterance string `json:"original_utterance"`

	// Тип ввода.
	Type RequestType `json:"type"`

	// JSON, полученный с нажатой кнопкой от обработчика скилла (в ответе на
	// предыдущий запрос), максимум 4096 байт.
	Payload json.RawMessage `json:"payload,omitempty"`

	// Объект, содержащий слова и именованные сущности, которые Маруся
	// извлекла из запроса пользователя.
	NLU language.NLU `json:"nlu"`
}

RequestIn данные, полученные от пользователя.

type RequestType

type RequestType string

RequestType тип ввода.

const (
	SimpleUtterance RequestType = "SimpleUtterance" // голосовой ввод
	ButtonPressed   RequestType = "ButtonPressed"   //  нажатие кнопки
)

Возможные значения.

type Response

type Response struct {
	// Текст, который следует показать и сказать пользователю. Максимум 1024
	// символа. Не должен быть пустым. В тексте ответа можно указать переводы
	// строк последовательностью «\n».
	Text string `json:"text"`

	// Ответ в формате TTS (text-to-speech), максимум 1024 символа.
	// Поддерживается расстановка ударений с помощью '+'.
	TTS string `json:"tts,omitempty"`

	// Кнопки (suggest'ы), которые следует показать пользователю. Кнопки можно
	// использовать как релевантные ответу ссылки или подсказки для
	// продолжения разговора.
	Buttons []Button `json:"buttons,omitempty"`

	// Признак конца разговора:
	//
	// true — сессию следует завершить,
	//
	// false — сессию следует продолжить.
	EndSession bool `json:"end_session"`

	// Описание карточки — сообщения с поддержкой изображений.
	// Важно! Если указано данное поле, то поле text игнорируется.
	Card *Card `json:"card,omitempty"`
}

Response данные для ответа пользователю.

func (*Response) AddButton

func (r *Response) AddButton(title string, payload interface{})

AddButton добавляет к ответу кнопку с полезной нагрузкой.

Если полезная нагрузка не нужна, можно передать nil.

func (*Response) AddURL

func (r *Response) AddURL(title, url string)

AddURL добавляет к ответу кнопку с ссылкой.

type Screen

type Screen struct{}

Screen структура для Interfaces.

type Session

type Session struct {
	// Уникальный идентификатор сессии, максимум 64 символа.
	SessionID string `json:"session_id"`

	// Идентификатор вызываемого скилла, присвоенный при создании.
	// Соответствует полю "Маруся ID" в настройках скилла.
	SkillID string `json:"skill_id"`

	// Признак новой сессии:
	//
	// true — пользователь начинает новый разговор с навыком,
	//
	// false — запрос отправлен в рамках уже начатого разговора.
	New bool `json:"new"`

	// Идентификатор сообщения в рамках сессии, максимум 8 символов.
	// Инкрементируется с каждым следующим запросом.
	MessageID int `json:"message_id"`

	// Данные об экземпляре приложения.
	Application Application `json:"application"`

	// Авторизационный токен Маруси.
	AuthToken string `json:"auth_token"`

	// Данные о пользователе. Передаётся, только если пользователь авторизован.
	User User `json:"user,omitempty"`
}

Session данные о сессии.

type User

type User struct {
	// Идентификатор аккаунта пользователя (максимум 64 символа). Уникален в разрезе: «скилл + аккаунт».
	UserID string `json:"user_id"`

	// Идентификатор аккаунта пользователя в ВК, работает только если данное поле было
	// включено разработчиками ВК навыков Маруси.
	// Не работает в отладки и локально.
	UserVKID string `json:"user_vk_id,omitempty"`
}

User данные о пользователе.

type Webhook

type Webhook struct {
	context2.LogObject
	// contains filtered or unexported fields
}

Webhook структура.

func NewWebhook

func NewWebhook(l logger.Interface) *Webhook

NewWebhook возвращает новый Webhook.

func (*Webhook) BaseHTTPHandleFunc

func (wh *Webhook) BaseHTTPHandleFunc(w http.ResponseWriter, r *http.Request)

BaseHTTPHandleFunc обработчик http запросов для gin.Context.

func (*Webhook) GinHandleFunc

func (wh *Webhook) GinHandleFunc(c *gin.Context)

GinHandleFunc обработчик http запросов для gin.Context.

func (*Webhook) HandleFunc

func (wh *Webhook) HandleFunc(c HTTPContext)

HandleFunc обработчик http запросов.

func (*Webhook) OnEvent

func (wh *Webhook) OnEvent(f eventFunc)

OnEvent обработчик скилла.

Таймаут ожидания ответа — 5 секунд, после чего сервер Маруси завершит сессию.

Directories

Path Synopsis
hub

Jump to

Keyboard shortcuts

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