Files
2025-11-29 17:58:23 +08:00

486 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: sleeptrack-foundation
description: This skill provides foundational knowledge about Asleep sleep tracking platform, covering core concepts, authentication, data structures, error handling, and platform-agnostic best practices. Use this skill when developers ask about Asleep fundamentals, API concepts, error codes, sleep data structures, or need to understand how the platform works before implementing platform-specific integration. This skill serves as prerequisite knowledge for sleeptrack-ios, sleeptrack-android, and sleeptrack-be skills.
---
# Sleeptrack Foundation
## Overview
This skill provides essential foundational knowledge for integrating the Asleep sleep tracking platform. It covers core concepts, authentication patterns, data structures, error handling, and platform-agnostic best practices that apply across all implementation approaches (iOS, Android, and backend API).
Use this skill when developers need to understand:
- What Asleep is and how sleep tracking works
- API authentication and key management
- Sleep session concepts and lifecycle
- Data structures (Sessions, Reports, Statistics)
- Error codes and troubleshooting
- Platform-agnostic integration patterns
## Core Concepts
### What is Asleep?
Asleep is a sleep tracking platform that analyzes sleep using audio-based monitoring through device microphones. The platform provides:
- **Real-time sleep stage analysis**: Wake, Light, Deep, REM detection
- **Comprehensive sleep metrics**: Efficiency, latency, total sleep time, wake after sleep onset
- **Snoring detection and analysis**: Snoring stages and patterns
- **Multi-platform SDKs**: Native iOS and Android SDKs plus REST API
- **Dashboard analytics**: Web-based analytics and user management
### User Management
Each application user must be registered with Asleep before tracking sleep.
**Key Points**:
- User ID is managed by the host application (not generated by Asleep)
- One user can have multiple sleep sessions
- User data persists across sessions for trend analysis
- Users can be created, retrieved, updated, and deleted via API
**Example User ID Schemes**:
```
- UUID: "550e8400-e29b-41d4-a716-446655440000"
- Email-based: "user@example.com"
- App-specific: "app_user_12345"
```
### Sleep Sessions
A session represents one complete sleep tracking period from start to stop.
**Session Lifecycle States**:
1. **IDLE**: No tracking in progress
2. **INITIALIZING**: SDK preparing resources
3. **INITIALIZED**: Ready to start tracking
4. **TRACKING_STARTED**: Active tracking in progress
5. **TRACKING_STOPPING**: Ending session and uploading data
**Session Requirements**:
- Minimum tracking duration: 5 minutes for valid session
- Microphone access required throughout tracking
- Network connectivity needed for data upload
- One active session per user at a time
**Real-time Data Access**:
- Available after sequence 10
- Check every 10 sequences thereafter
- Provides preliminary sleep stage data during tracking
### Sleep Reports
Reports contain comprehensive analysis of completed sleep sessions.
**Report Structure**:
```
Report
├── Session Metadata
│ ├── session_id
│ ├── user_id
│ ├── start_time
│ └── end_time
├── Sleep Stages Timeline
│ ├── Wake periods
│ ├── Light sleep periods
│ ├── Deep sleep periods
│ └── REM sleep periods
├── Sleep Statistics
│ ├── Total sleep time
│ ├── Time in bed
│ ├── Sleep efficiency (%)
│ ├── Sleep latency (time to fall asleep)
│ ├── Wake after sleep onset (WASO)
│ ├── Sleep stage durations
│ └── Sleep stage ratios
└── Snoring Analysis
├── Snoring detected (yes/no)
├── Snoring stages timeline
└── Snoring statistics
```
**Key Metrics Explained**:
- **Sleep Efficiency**: (Total sleep time / Time in bed) × 100%
- Good: > 85%
- Fair: 75-85%
- Poor: < 75%
- **Sleep Latency**: Time from lying down to falling asleep
- Normal: 10-20 minutes
- Fast: < 10 minutes (may indicate sleep deprivation)
- Slow: > 20 minutes (may indicate insomnia)
- **WASO**: Total wake time after initial sleep onset
- Lower is better (indicates fewer disruptions)
### Statistics
Aggregated metrics across multiple sessions for trend analysis.
**Available Statistics**:
- Average sleep duration over time range
- Average sleep efficiency
- Sleep stage distribution averages
- Trends and patterns
**Statistics API**:
```
GET /users/{user_id}/statistics/average?from={date}&to={date}
```
## Authentication
### API Key Management
All Asleep integrations require an API key for authentication.
**Obtaining an API Key**:
1. Sign up at https://dashboard.asleep.ai
2. Navigate to API key generation section
3. Create API key for the application
4. Store securely (never commit to version control)
**Using API Keys**:
For SDK Integration (iOS/Android):
```kotlin
// Android
AsleepConfig.init(
apiKey = "your_api_key_here",
userId = "user_unique_id",
...
)
```
```swift
// iOS
AsleepConfig.init(
apiKey: "your_api_key_here",
userId: "user_unique_id",
...
)
```
For REST API Integration:
```http
GET /sessions/{session_id}
X-API-Key: your_api_key_here
```
**Security Best Practices**:
- Store API keys in environment variables or secure storage
- Never hardcode keys in source code
- Use different keys for development and production
- Rotate keys periodically
- Monitor usage in Dashboard to detect unauthorized access
- Revoke compromised keys immediately
## Error Handling
Understanding error codes is critical for robust integration.
### Error Categories
**Critical Errors** (must stop tracking):
These errors indicate conditions that prevent continued tracking and require user intervention or code fixes.
**Warning Errors** (can continue tracking):
These are transient issues that the SDK handles automatically while tracking continues.
### Error Code Reference
#### Critical Errors
**ERR_MIC_PERMISSION**
- **Cause**: App lacks microphone access permission
- **Action**: Request microphone permission from user
- **Platform Notes**:
- Android: Check RECORD_AUDIO permission
- iOS: Check NSMicrophoneUsageDescription and authorization status
**ERR_AUDIO**
- **Cause**: Microphone unavailable or in use by another app
- **Action**:
- Close conflicting apps using microphone
- Check microphone hardware functionality
- Verify no audio conflicts in device settings
**ERR_INVALID_URL**
- **Cause**: Malformed API endpoint URL in configuration
- **Action**: Verify AsleepConfig URL format
- **Example Fix**: Ensure base URL is valid HTTPS endpoint
**ERR_COMMON_EXPIRED**
- **Cause**: API rate limit exceeded or subscription plan expired
- **Action**:
- Check Dashboard for plan status
- Review API usage patterns
- Upgrade plan if needed
- Implement rate limiting in application
**ERR_UPLOAD_FORBIDDEN**
- **Cause**: Multiple simultaneous tracking attempts with same user_id
- **Action**:
- Ensure only one device tracks per user at a time
- Check for orphaned sessions
- Implement proper session cleanup
**ERR_UPLOAD_NOT_FOUND** / **ERR_CLOSE_NOT_FOUND**
- **Cause**: Attempting to interact with non-existent or already-ended session
- **Action**:
- Verify session exists before operations
- Handle session expiration properly
- Implement session state management
#### Warning Errors
**ERR_AUDIO_SILENCED**
- **Cause**: Audio temporarily unavailable but tracking continues
- **Impact**: Minimal, SDK handles gracefully
- **Action**: Log for monitoring, tracking continues
**ERR_AUDIO_UNSILENCED**
- **Cause**: Audio restored after silence period
- **Impact**: Tracking resumes normally
- **Action**: Log for monitoring
**ERR_UPLOAD_FAILED**
- **Cause**: Network connectivity issue during data upload
- **Impact**: SDK will retry automatically
- **Action**:
- Verify network connectivity
- Check for firewall/proxy issues
- Monitor retry success
### Error Handling Patterns
**Distinguish Error Severity**:
```kotlin
// Android example
when (errorCode) {
in criticalErrors -> {
// Stop tracking, notify user
stopTracking()
showErrorDialog(errorCode)
}
in warningErrors -> {
// Log and continue
logWarning(errorCode)
}
}
```
**Provide User-Friendly Messages**:
```kotlin
fun getUserFriendlyMessage(errorCode: AsleepErrorCode): String {
return when (errorCode) {
ERR_MIC_PERMISSION -> "Please allow microphone access to track sleep"
ERR_AUDIO -> "Another app is using the microphone. Please close it and try again"
ERR_COMMON_EXPIRED -> "Your subscription has expired. Please renew to continue tracking"
// ... more mappings
}
}
```
**Implement Retry Logic**:
```kotlin
// For network-related errors
suspend fun uploadWithRetry(maxRetries: Int = 3) {
repeat(maxRetries) { attempt ->
try {
upload()
return
} catch (e: NetworkException) {
if (attempt == maxRetries - 1) throw e
delay(2.0.pow(attempt) * 1000) // Exponential backoff
}
}
}
```
## Data Plan Considerations
Asleep operates on different data plans that affect API usage.
**Plan Limits**:
- Request rate limits
- Total sessions per month
- Data retention periods
- Feature availability
**Monitoring Usage**:
- Check Dashboard regularly
- Implement usage tracking in application
- Set up alerts for approaching limits
- Plan capacity for user growth
## Integration Workflows
### Typical Integration Flow
1. **Setup Phase**:
- Obtain API key from Dashboard
- Install SDK (iOS/Android) or configure REST API client
- Configure authentication
2. **User Registration**:
- Create user in Asleep system
- Store user_id mapping in application
3. **Sleep Tracking Session**:
- Request necessary permissions
- Initialize SDK with user credentials
- Start tracking session
- Monitor session state
- Handle real-time data (optional)
- Stop tracking session
4. **Report Generation**:
- Wait for report processing (automatic)
- Fetch completed report
- Display sleep analysis to user
5. **Statistics & Trends**:
- Query historical sessions
- Calculate aggregated statistics
- Display trends over time
### Common Integration Scenarios
**Scenario 1: First-Time User Setup**
```
User downloads app
→ Request microphone permission
→ Create Asleep user (POST /users)
→ Initialize SDK with API key + user_id
→ Guide user through first tracking session
```
**Scenario 2: Returning User**
```
User opens app
→ Load user_id from local storage
→ Initialize SDK with credentials
→ Check for existing running session (reconnect if found)
→ Display previous sleep reports
```
**Scenario 3: Background Tracking**
```
User starts tracking before sleep
→ Start foreground service (Android) / background mode (iOS)
→ Maintain microphone access
→ Handle app lifecycle events
→ Continue tracking through sleep
→ Stop tracking in morning
→ Process and display report
```
## Platform Selection Guide
Choose the appropriate integration approach based on application type:
**Use iOS SDK (sleeptrack-ios)**:
- Native iOS application
- Need deep iOS integration (Siri, HealthKit, etc.)
- Require iOS-specific UI patterns
- Swift/SwiftUI development
**Use Android SDK (sleeptrack-android)**:
- Native Android application
- Need Android-specific features (foreground service, etc.)
- Require Android UI patterns
- Kotlin/Jetpack Compose development
**Use REST API (sleeptrack-be)**:
- Backend/server-side integration
- Multi-platform web application
- Data aggregation and analytics
- Webhook-based event processing
- Cross-platform mobile framework (React Native, Flutter) with custom bridge
## Resources
### Official Documentation
- **Main Documentation**: https://docs-en.asleep.ai
- **LLM-Optimized Reference**: https://docs-en.asleep.ai/llms.txt
- **Dashboard**: https://dashboard.asleep.ai
### Key Documentation Pages
- **QuickStart Guide**: https://docs-en.asleep.ai/docs/quickstart.md
- **Sleep Data Overview**: https://docs-en.asleep.ai/docs/sleep-data.md
- **System Overview**: https://docs-en.asleep.ai/docs/system-overview.md
- **API Basics**: https://docs-en.asleep.ai/docs/api-basics.md
- **Webhook Guide**: https://docs-en.asleep.ai/docs/webhook.md
- **Sleep Environment Guidelines**: https://docs-en.asleep.ai/docs/sleep-environment-guideline.md
### Platform-Specific Documentation
**Android**:
- Get Started: https://docs-en.asleep.ai/docs/android-get-started.md
- Error Codes: https://docs-en.asleep.ai/docs/android-error-codes.md
- AsleepConfig: https://docs-en.asleep.ai/docs/android-asleep-config.md
- SleepTrackingManager: https://docs-en.asleep.ai/docs/android-sleep-tracking-manager.md
**iOS**:
- Get Started: https://docs-en.asleep.ai/docs/ios-get-started.md
- Error Codes: https://docs-en.asleep.ai/docs/ios-error-codes.md
- AsleepConfig: https://docs-en.asleep.ai/docs/ios-asleep-config.md
- SleepTrackingManager: https://docs-en.asleep.ai/docs/ios-sleep-tracking-manager.md
### Reference Files
This skill includes detailed API reference documentation:
- `references/asleep_api_reference.md`: Comprehensive API endpoint reference, data structures, and integration patterns
To load this reference for detailed API information:
```
Read references/asleep_api_reference.md
```
## Best Practices Summary
### Security
- Never expose API keys in client code
- Implement secure storage for credentials
- Use HTTPS for all API communications
- Validate user permissions before operations
### Performance
- Cache reports when appropriate
- Batch API requests to respect rate limits
- Implement efficient session state management
- Monitor real-time data access patterns
### User Experience
- Provide clear permission rationales
- Show friendly error messages
- Display progress during tracking
- Handle app lifecycle gracefully
### Reliability
- Implement comprehensive error handling
- Add retry logic for transient failures
- Log errors for debugging
- Test edge cases (interruptions, low battery, etc.)
### Data Management
- Clean up old sessions appropriately
- Respect user privacy and data retention
- Implement proper user deletion flows
- Backup critical session data
## Next Steps
After understanding these foundational concepts, proceed to platform-specific skills:
- **iOS Development**: Use `sleeptrack-ios` skill
- **Android Development**: Use `sleeptrack-android` skill
- **Backend API Integration**: Use `sleeptrack-be` skill
Each platform-specific skill builds on this foundation with implementation details, code examples, and platform-specific patterns.