aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: cdfd7a3903464c5a874d3ec970b4115b5f44f5ac (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Marusia API [![GoDoc](https://godoc.org/github.com/neonxp/marusia?status.svg)](https://godoc.org/github.com/neonxp/marusia)

Неофициальное SDK навыков для голосового ассистента [Маруси](http://marusia.mail.ru/).

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

Пример: [/example/main.go](/example/main.go)

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

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

```go
import "github.com/neonxp/marusia"
```

Создание функции обработчика (имплементирующий интерфейс [marusia.MessageHandler](https://pkg.go.dev/github.com/neonxp/marusia?tab=doc#MessageHandler) ):

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

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

```go
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](https://pkg.go.dev/github.com/neonxp/marusia?tab=doc#Request) в течении максимум 10 секунд следует ответить вернув сформированный объект типа [*marusia.Response](https://pkg.go.dev/github.com/neonxp/marusia?tab=doc#Response).

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

```go
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 — здесь пока будет пустой массив или какие-то экспериментальные вещи, на которые не стоит смотреть.

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

```go
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 - добавляет кнопку в диалог