aboutsummaryrefslogtreecommitdiff

Marusia API GoDoc

Неофициальное SDK навыков для голосового ассистента Маруси.

Документация: https://pkg.go.dev/github.com/neonxp/marusia

Пример: /example/main.go

Использование

Импорт библиотеки:

import "github.com/neonxp/marusia"

Создание функции обработчика (имплементирующий интерфейс marusia.MessageHandler ):

func messageHandler(ctx context.Context, req *marusia.Request) (*marusia.Response, error) {
    ...
}

Создание экземпляра API и http сервера, обрабатывающего колбеки:

m := marusia.New(messageHandler)
server := http.Server{
    Addr:    ":8080",
    Handler: m.Handler(),
}
if err := server.ListenAndServe(); err != http.ErrServerClosed {
    log.Fatal(err)
}

Суть работы с API заключается в том, что при получении колбека с запросом типа *marusia.Request в течении максимум 10 секунд следует ответить вернув сформированный объект типа *marusia.Response.

Содержимое запроса

type Request struct {
    Command           string 
    OriginalUtterance string 
    Type              string 
    Payload           Payload
    Nlu               struct {
        Tokens   []string    
        Entities []interface{}
    }
}
  • Command — служебное поле: запрос пользователя, преобразованный для внутренней обработки Марусей. В ходе преобразования текст, в частности, очищается от знаков препинания, а числительные преобразуются в числа. При завершении скилла по команде "стоп", "выход" и т.д. в скилл будет передано "on_interrupt", чтобы у скилла была возможность попрощаться с пользователем.
  • OriginalUtterance — полный текст пользовательского запроса, максимум 1024 символа.
  • Type — тип ввода, обязательное свойство. Возможные значения: "SimpleUtterance" — голосовой ввод, "ButtonPressed" — нажатие кнопки.
  • Payload — JSON, полученный с нажатой кнопкой от обработчика скилла (в ответе на предыдущий запрос), максимум 4096 байт.
  • Nlu.Tokens — слова и именованные сущности, которые Маруся извлекла из запроса пользователя.
  • Nlu.Entities — здесь пока будет пустой массив или какие-то экспериментальные вещи, на которые не стоит смотреть.

Содержимое ответа

type Response struct {
    Text       string    
    TTS        string    
    Buttons    []*button 
    EndSession bool      
}

Методы:

  • NewResponse(text string) *Response - конструктор объекта, где text - текст ответа пользователю
  • Response.SetText(text string) *Response - задание текста ответа
  • Response.SetTTS(tts string) *Response - текст с раставленными ударениями (знак "+")
  • Response.SetEndSession(endSession bool) *Response - задает признак конца диалога
  • Response.AddButton(title string, payload Payload, URL string) *Response - добавляет кнопку в диалог