Skip to content

Latest commit

 

History

History
92 lines (63 loc) · 3.99 KB

README.md

File metadata and controls

92 lines (63 loc) · 3.99 KB

Руководство

Разберем простейший пример:

package main

import (
  "net/http"

  "github.com/azzzak/alice"
)

func main() {
  updates := alice.ListenForWebhook("/hook")
  go http.ListenAndServe(":3000", nil)

  updates.Loop(func(k alice.Kit) *alice.Response {
    req, resp := k.Init()
    if req.IsNewSession() {
      return resp.Text("привет")
    }
    return resp.Text(req.OriginalUtterance())
  })
}

Функция ListenForWebhook регистрирует обработчик, который принимает входящие пакеты от Алисы. Функции передается путь и настройки.

В простейшем случае путь будет /, но выбор осмысленного имени позволит запускать на одном домене несколько навыков.

alice.ListenForWebhook("/hook")

Настройки задаются с помощью соответствующих функций. Например, чтобы изменить время ожидания ответа (по умолчанию это 3000 мс) есть функция alice.Timeout.

alice.ListenForWebhook("/hook", alice.Timeout(2500))

Следующая строка запускает горутину в которой работает сервер.

go http.ListenAndServe(":3000", nil)

Вместо http-сервера можно запустить https-сервер.

go http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)

Однако разумно «спрятать» приложение за веб-сервером (вроде nginx), оставив последнему работу с сертификатами.

Функция ListenForWebhook возвращает канал, который получает входящие пакеты. За манипуляции с ними отвечает метод Loop, принимающий функцию-обработчик.

func(k alice.Kit) *alice.Response{...}

Разработчик наполняет тело функции кодом, который будет выполняться для каждой новой порции данных. Результат работы функции станет ответом Алисе.

Метод Init() получает входящий пакет и заготовку исходящего из данных запроса.

req, resp := k.Init()

С помощью различных методов из структуры запроса можно получить текст реплики пользователя, узнать даннные, извлеченные из запроса и пр. В примере используется два таких метода: один помогает выяснить было ли сообщение первым в сессии, другой — получает реплику пользователя.

req.IsNewSession()
...
req.OriginalUtterance()

Структура ответа уже готова к использованию. Для конструирования ответа доступны методы, которые можно объединять в цепочки.

Полный список методов для работы с запросом и ответом есть в документации.

После того, как ответ подготовлен, его нужно отправить Алисе. В примере мы видим два варианта. Если это первое сообщение в сессии пользователь получит приветствие.

return resp.Text("привет")

Во всех остальных случаях это будет повторение его собственной реплики.

return resp.Text(req.OriginalUtterance())