486 lines
14 KiB
Markdown
486 lines
14 KiB
Markdown
---
|
||
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.
|