.NET библиотека для лёгкого и быстрого создания навыков для Алисы от Яндекса. Она уже содержит простенький веб-сервер.
dotnet add package AliceNet
Автоматически собранная документация тут: https://clusterm.github.io/AliceNet/
Подробнее про настройку навыков и значения переменных смотрите в документации Яндекса: https://yandex.ru/dev/dialogs/alice/doc/
Библотека явно ориентирована на русскоязычых разработчиков, поэтому все комментарии и документация на русском языке.
Нужно создать класс, который наследуется от класса AliceServerBase
и переопределить метод HandleRequest
.
В этом методе нужно обработать запрос и вернуть ответ. Теперь нужно создать экземпляр класса, указав конструкторы
на локальный endpoint и вызвать метод Start()
.
using wtf.cluster.AliceNet;
using wtf.cluster.AliceNet.Types;
using wtf.cluster.AliceNet.Types.Request.Entities;
using wtf.cluster.AliceNet.Types.Request.RequestBody;
using wtf.cluster.AliceNet.Types.Response;
namespace AliceExample
{
internal class Program
{
static async Task Main(string[] args)
{
var server = new AliceServer("http://localhost:8080/alice/");
server.Start();
await Task.Delay(Timeout.InfiniteTimeSpan);
}
}
internal class AliceServer(string localEndpoint) : AliceServerBase(localEndpoint, logger: null)
{
protected override async Task<AliceResponse> HandleRequest(AliceReqest request, CancellationToken cancellationToken = default)
{
if (request.Session.New)
{
return new AliceResponse
{
Response = new ResponseBody
{
Text = "Привет, это Алиса! Скажи триста!",
Buttons = [
new Button
{
Title = "Открыть репозиторий",
Url = "https://github.com/ClusterM/AliceNet"
}
]
}
};
}
else if (request.RequestBody is SimpleUtterance su && su.Nlu.Entities.Any(e => e is NumberEntity n && n.Value == 300))
{
return new AliceResponse
{
Response = new ResponseBody
{
Text = "Отсоси у тракториста!",
/* обходим цензуру :) */
Tts = "xxx <[schwa t s schwa ss ii]> у тракториста! <speaker audio=\"alice-sounds-game-win-1.opus\">"
}
};
}
else
{
return new AliceResponse
{
Response = new ResponseBody
{
Text = "Ну скажи триста..."
}
};
}
}
}
}
Можно и просто использовать библиотеку со своим веб-сервером, используя её для сериализации и десериализации запросов и ответов. Для этого используется System.Text.Json
.