AlexaVoxCraft.Logging
2.0.1.62
dotnet add package AlexaVoxCraft.Logging --version 2.0.1.62
NuGet\Install-Package AlexaVoxCraft.Logging -Version 2.0.1.62
<PackageReference Include="AlexaVoxCraft.Logging" Version="2.0.1.62" />
<PackageVersion Include="AlexaVoxCraft.Logging" Version="2.0.1.62" />
<PackageReference Include="AlexaVoxCraft.Logging" />
paket add AlexaVoxCraft.Logging --version 2.0.1.62
#r "nuget: AlexaVoxCraft.Logging, 2.0.1.62"
#:package AlexaVoxCraft.Logging@2.0.1.62
#addin nuget:?package=AlexaVoxCraft.Logging&version=2.0.1.62
#tool nuget:?package=AlexaVoxCraft.Logging&version=2.0.1.62
๐ฃ AlexaVoxCraft
AlexaVoxCraft is a modular C# .NET library for building Amazon Alexa skills using modern .NET practices. It provides comprehensive support for Alexa skill development with CQRS patterns, visual interfaces, and AWS Lambda hosting.
Key Features
- ๐ฏ MediatR Integration: CQRS-style request handling with pipeline behaviors and auto-discovery
- ๐จ APL Support: Complete Alexa Presentation Language implementation for rich visual interfaces
- โก Lambda Hosting: Optimized AWS Lambda runtime with custom serialization and ReadyToRun publishing
- ๐ Session Management: Robust session attribute handling and game state persistence
- ๐ง Pipeline Behaviors: Request/response interceptors for cross-cutting concerns like logging and validation
- ๐งช Testing Support: Comprehensive testing utilities with AutoFixture integration and property-based testing
๐ฆ Packages
Package | NuGet | Downloads |
---|---|---|
AlexaVoxCraft.Model | ||
AlexaVoxCraft.Model.Apl | ||
AlexaVoxCraft.MediatR.Lambda | ||
AlexaVoxCraft.MediatR | ||
AlexaVoxCraft.Logging |
๐ Quick Start
Install Core Packages
# Core MediatR integration and Lambda hosting
dotnet add package AlexaVoxCraft.MediatR.Lambda
# APL visual interface support (optional)
dotnet add package AlexaVoxCraft.Model.Apl
# Structured logging for Alexa skills (optional)
dotnet add package AlexaVoxCraft.Logging
Create a Basic Skill
// Program.cs
using AlexaVoxCraft.MediatR.Lambda;
using AlexaVoxCraft.Model.Response;
return await LambdaHostExtensions.RunAlexaSkill<MySkillFunction, SkillRequest, SkillResponse>();
// Function.cs
public class MySkillFunction : AlexaSkillFunction<SkillRequest, SkillResponse>
{
protected override void Init(IHostBuilder builder)
{
builder
.UseHandler<LambdaHandler, SkillRequest, SkillResponse>()
.ConfigureServices((context, services) =>
{
services.AddSkillMediator(context.Configuration, cfg =>
cfg.RegisterServicesFromAssemblyContaining<MySkillFunction>());
});
}
}
// Handler.cs
public class LaunchRequestHandler : IRequestHandler<LaunchRequest>
{
public bool CanHandle(IHandlerInput handlerInput) =>
handlerInput.RequestEnvelope.Request is LaunchRequest;
public async Task<SkillResponse> Handle(IHandlerInput input, CancellationToken cancellationToken)
{
return await input.ResponseBuilder
.Speak("Welcome to my skill!")
.Reprompt("What would you like to do?")
.GetResponse(cancellationToken);
}
}
๐ Documentation
๐ Complete Documentation - Comprehensive guides and examples
Core Components
- Request Handling - MediatR integration and handler patterns
- APL Integration - Rich visual interface development
- Lambda Hosting - AWS Lambda deployment and optimization
- Session Management - State persistence and user data
- Pipeline Behaviors - Cross-cutting concerns and interceptors
Examples
- Complete Examples - Production-ready trivia skill implementation
๐ Project Structure
AlexaVoxCraft/
โโโ ๐ src/ # Core library packages
โ โโโ ๐ฆ AlexaVoxCraft.Model/ # Base Alexa skill models & serialization
โ โโโ ๐ฆ AlexaVoxCraft.Model.Apl/ # APL (Alexa Presentation Language) support
โ โโโ ๐ฆ AlexaVoxCraft.MediatR/ # MediatR integration & request handling
โ โโโ ๐ฆ AlexaVoxCraft.MediatR.Lambda/ # AWS Lambda hosting & runtime
โ โโโ ๐ฆ AlexaVoxCraft.Logging/ # Alexa-specific logging for AWS
โ
โโโ ๐ samples/ # Working example projects
โ โโโ ๐ฑ Sample.Skill.Function/ # Basic Alexa skill demonstration
โ โโโ ๐ฑ Sample.Apl.Function/ # APL skill with visual interfaces
โ
โโโ ๐ test/ # Comprehensive test coverage
โ โโโ ๐งช AlexaVoxCraft.Model.Tests/ # Core model & serialization tests
โ โโโ ๐งช AlexaVoxCraft.Model.Apl.Tests/ # APL functionality tests
โ โโโ ๐งช AlexaVoxCraft.MediatR.Tests/ # MediatR integration tests
โ โโโ ๐งช AlexaVoxCraft.MediatR.Lambda.Tests/ # Lambda hosting tests
โ โโโ ๐งช AlexaVoxCraft.Logging.Tests/ # Logging functionality tests
โ
โโโ ๐ AlexaVoxCraft.TestKit/ # Testing utilities & AutoFixture support
โโโ ๐ docs/ # Documentation source
โโโ ๐ samples/ # Example implementations
๐ Core Concepts
Request Handling Pattern
Skills use the MediatR pattern where:
- Requests implement
IRequestHandler<T>
- Handlers optionally implement
ICanHandle
for routing logic - Pipeline behaviors handle cross-cutting concerns (logging, exceptions)
- Lambda functions derive from
AlexaSkillFunction<TRequest, TResponse>
Package Breakdown
Package | Purpose | Key Features |
---|---|---|
AlexaVoxCraft.Model | Core Alexa models | Request/response types, SSML, cards, directives, System.Text.Json serialization |
AlexaVoxCraft.Model.Apl | APL support | 40+ components, commands, audio, vector graphics, extensions (DataStore, SmartMotion) |
AlexaVoxCraft.MediatR | Request handling | Handler routing, pipeline behaviors, attributes management, DI integration |
AlexaVoxCraft.MediatR.Lambda | Lambda hosting | AWS Lambda functions, context management, custom serialization, hosting extensions |
AlexaVoxCraft.Logging | Alexa-specific logging | AWS CloudWatch-compatible JSON formatter, built on LayeredCraft.StructuredLogging |
๐งช Testing
AlexaVoxCraft includes comprehensive testing support:
- xUnit v3 with Microsoft.Testing.Platform
- AutoFixture integration for property-based testing
- AwesomeAssertions for fluent assertions
- TestKit with specimen builders and test utilities
โ ๏ธ Error Handling
Implement the IExceptionHandler
interface for centralized error handling:
public class GlobalExceptionHandler : IExceptionHandler
{
public Task<bool> CanHandle(IHandlerInput handlerInput, Exception ex, CancellationToken cancellationToken)
{
return Task.FromResult(true); // Handle all exceptions
}
public Task<SkillResponse> Handle(IHandlerInput handlerInput, Exception ex, CancellationToken cancellationToken)
{
return handlerInput.ResponseBuilder
.Speak("Sorry, something went wrong. Please try again.")
.GetResponse(cancellationToken);
}
}
๐ค Contributing
PRs are welcome! Please submit issues and ideas to help make this toolkit even better.
๐ Credits & Attribution
๐ฆ Credits:
- Core Alexa skill models (
AlexaVoxCraft.Model
) based on timheuer/alexa-skills-dotnet- APL support (
AlexaVoxCraft.Model.Apl
) based on stoiveyp/Alexa.NET.APLAlexaCompactJsonFormatter
adapted from Serilog.Formatting.Compact
๐ License
This project is licensed under the MIT License.
Stargazers over time
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- LayeredCraft.StructuredLogging (>= 1.0.0.6)
- Serilog.Formatting.Compact (>= 3.0.0)
-
net9.0
- LayeredCraft.StructuredLogging (>= 1.0.0.6)
- Serilog.Formatting.Compact (>= 3.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
2.0.1.62 | 143 | 7/11/2025 |
2.0.0.61 | 167 | 7/2/2025 |
2.0.0.59 | 149 | 7/1/2025 |
2.0.0.58 | 144 | 7/1/2025 |
2.0.0-beta.57 | 114 | 6/30/2025 |
2.0.0-beta.56 | 113 | 6/23/2025 |
2.0.0-beta.55 | 113 | 6/23/2025 |
1.0.1.54 | 256 | 5/21/2025 |
1.0.1.53 | 171 | 5/19/2025 |
1.0.1.50 | 278 | 5/13/2025 |
1.0.1.49 | 239 | 5/13/2025 |
1.0.1-beta.52 | 116 | 5/19/2025 |
1.0.1-beta.48 | 207 | 5/13/2025 |
1.0.1-beta.47 | 204 | 5/13/2025 |
1.0.1-beta.46 | 200 | 5/13/2025 |
1.0.1-beta.45 | 214 | 5/13/2025 |