An open API service indexing awesome lists of open source software.

https://github.com/android-sms-gateway/example-webhooks-flask

๐Ÿ“จ Example Flask SMS Gateway Webhook Processor | HMAC Security + Pydantic Validation | Auto-Registration
https://github.com/android-sms-gateway/example-webhooks-flask

example flask-application sms-gate sms-gateway webhook-integration

Last synced: about 21 hours ago
JSON representation

๐Ÿ“จ Example Flask SMS Gateway Webhook Processor | HMAC Security + Pydantic Validation | Auto-Registration

Awesome Lists containing this project

README

          

# ๐Ÿ“ฑ Example SMS Webhook Processor (Flask)

[![Example](https://img.shields.io/badge/Type-Example%20Project-orange.svg)](https://github.com/android-sms-gateway/example-webhooks-flask)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Python](https://img.shields.io/badge/Python-3.9%2B-brightgreen.svg)](https://www.python.org/)
[![Flask](https://img.shields.io/badge/Framework-Flask-%23000000.svg)](https://flask.palletsprojects.com/)

> **โš ๏ธ Example Project Notice**
> Not intended for production use without proper security review and modifications.

## ๐Ÿ“‹ Table of Contents
- [๐Ÿ“ฑ Example SMS Webhook Processor (Flask)](#-example-sms-webhook-processor-flask)
- [๐Ÿ“‹ Table of Contents](#-table-of-contents)
- [โœจ About The Project](#-about-the-project)
- [๐Ÿ› ๏ธ Built With](#๏ธ-built-with)
- [โš ๏ธ Important Notes](#๏ธ-important-notes)
- [๐Ÿš€ Getting Started](#-getting-started)
- [๐Ÿ“ฆ Prerequisites](#-prerequisites)
- [โšก Installation](#-installation)
- [โš™๏ธ Configuration](#๏ธ-configuration)
- [๐Ÿ–ฅ๏ธ Usage](#๏ธ-usage)
- [๐Ÿ“š API Reference](#-api-reference)
- [`POST /webhook/sms-received`](#post-webhooksms-received)
- [๐Ÿค Contributing](#-contributing)
- [๐Ÿ“œ License](#-license)

## โœจ About The Project

**Example Project Features**:
- ๐Ÿงฉ Demonstrates webhook registration/deregistration lifecycle
- ๐Ÿ” Example HMAC signature validation implementation
- ๐Ÿ“ Sample payload validation using Pydantic models
- ๐Ÿ”„ Synchronous Flask implementation

### ๐Ÿ› ๏ธ Built With

- ๐Ÿš€ [Flask](https://flask.palletsprojects.com/) - Lightweight Python web framework
- โœ”๏ธ [Pydantic](https://pydantic.dev/) - Data validation and settings management
- ๐ŸŒ [HTTPX](https://www.python-httpx.org/) - Synchronous HTTP client

### โš ๏ธ Important Notes

**This example intentionally omits**:

- Production-grade error handling
- Rate limiting
- Persistent storage integration
- Advanced security features

**Recommended for**:

- ๐Ÿงช Testing SMS Gate webhook integration
- ๐ŸŽ“ Learning Flask webhook implementations

## ๐Ÿš€ Getting Started

### ๐Ÿ“ฆ Prerequisites

- Python 3.9+ (development environment)
- Valid SSL certificate ([project's CA](https://docs.sms-gate.app/services/ca/) available) or reverse proxy (like [ngrok](https://ngrok.com/))
- SMS Gate credentials

### โšก Installation

1. Clone the example repository:
```bash
git clone https://github.com/android-sms-gateway/example-webhooks-flask.git
cd example-webhooks-flask
```

2. Install dependencies:
```bash
pip install -r requirements.txt
```

3. Create environment file:
```bash
cp .env.example .env
```

## โš™๏ธ Configuration

**Example `.env` configuration**:
```ini
# ๐Ÿ”‘ Example SMS Gate API Credentials
FLASK_SMS_GATE_API_URL="https://api.sms-gate.app/3rdparty/v1" # API root endpoint (optional)
FLASK_SMS_GATE_API_USERNAME="test_user" # API username
FLASK_SMS_GATE_API_PASSWORD="test_password" # API password

# ๐Ÿ”’ Example Webhook Security
FLASK_WEBHOOK_SECRET="your_test_secret_here" # signing key (optional)
FLASK_WEBHOOK_URL="https://localhost:8443/webhook/sms-received" # current server endpoint

# ๐Ÿ›ก๏ธ SSL Configuration
FLASK_SSL_CERT_PATH="./certs/server.crt" # SSL certificate (optional)
FLASK_SSL_KEY_PATH="./certs/server.key" # SSL private key (optional)
```

## ๐Ÿ–ฅ๏ธ Usage

**Run the server**:
```bash
python app.py
```

**Expected output**:
```plaintext
Registered webhook ID: 6GlbDer5u83MLiupOKXxf
* Serving Flask app 'main'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://10.10.0.2:8080
Press CTRL+C to quit
Received SMS:
SIM: 1
From: ******1212
Message: Android is always a sweet treat!
Received at: 2025-04-15 15:50:56+07:00
127.0.0.1 - - [15/Apr/2025 15:50:59] "POST /webhook/sms-received HTTP/1.1" 200 -
^CUnregistered webhook ID: 6GlbDer5u83MLiupOKXxf
```

## ๐Ÿ“š API Reference

### `POST /webhook/sms-received`

**Example Request**:
```bash
curl -X POST https://localhost:8443/webhook/sms-received \
-H "X-Signature: abc123..." \
-H "X-Timestamp: 1690123456" \
-d @sample_payload.json
```

**Example Response**:
```json
{
"status": "ok"
}
```

## ๐Ÿค Contributing

This example project welcomes contributions to:

- Improve documentation
- Demonstrate additional features
- Enhance example security implementations

## ๐Ÿ“œ License

This example code is released under [Apache License 2.0](LICENSE).