β οΈ Example Project Notice
Not intended for production use without proper security review and modifications.
Example Project Features:
- π§© Demonstrates webhook registration/deregistration lifecycle
- π Example HMAC signature validation implementation
- π Sample payload validation using Pydantic models
- π FastAPI - Modern Python web framework
- βοΈ Pydantic - Data validation and settings management
- π HTTPX - Async HTTP client
- β‘ UVicorn - ASGI server
This example intentionally omits:
- Production-grade error handling
- Rate limiting
- Persistent storage integration
- Advanced security features
Recommended for:
- π§ͺ Testing SMS Gate webhook integration
- π Learning FastAPI webhook implementations
- Python 3.9+ (development environment)
- Valid SSL certificate (project's CA available) or reverse proxy (like ngrok)
- SMS Gate credentials
-
Clone the example repository:
git clone https://github.com/android-sms-gateway/example-webhooks-fastapi.git cd example-webhooks-fastapi
-
Install development dependencies:
pip install -r requirements.txt # or pipenv install
-
Create example environment file:
cp .env.example .env
Example .env
configuration:
# π Example SMS Gate API Credentials
SMS_GATE_API_URL="https://api.sms-gate.app/3rdparty/v1" # API root endpoint (optional)
SMS_GATE_API_USERNAME="test_user" # API username
SMS_GATE_API_PASSWORD="test_password" # API password
# π Example Webhook Security
WEBHOOK_SECRET="your_test_secret_here" # signing key (optional)
WEBHOOK_URL="https://localhost:8443/webhook/sms-received" # current server endpoint
# π‘οΈ SSL Configuration
SSL_CERT_PATH="./certs/server.crt" # SSL certificate (optional)
SSL_KEY_PATH="./certs/server.key" # SSL private key (optional)
Run the example server:
python main.py
Expected output:
INFO: Started server process [42516]
INFO: Waiting for application startup.
Registered webhook with ID: mIv93KBZgaFNGrhl_ivk9
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)
Received SMS:
SIM: 1
From: 6505551212
Message: Android is always a sweet treat!
Received at: 2025-04-15 12:28:01+07:00
INFO: 169.150.246.92:0 - "POST /webhook/sms-received HTTP/1.1" 200 OK
^CINFO: Shutting down
INFO: Waiting for application shutdown.
Unregistered webhook ID: mIv93KBZgaFNGrhl_ivk9
INFO: Application shutdown complete.
INFO: Finished server process [42516]
Example Request:
curl -X POST https://localhost:8443/webhook/sms-received \
-H "X-Signature: abc123..." \
-H "X-Timestamp: 1690123456" \
-d @sample_payload.json
Example Response:
{
"status": "ok"
}
This example project welcomes contributions to:
- Improve documentation
- Demonstrate additional features
- Enhance example security implementations
This example code is released under Apache License 2.0.