A Rust client library for Esteria API with Python bindings
Project description
Esteria API Client
A Rust-based client library for sending SMS messages via the Esteria API (https://esteria.eu). This project provides:
- A core Rust library for programmatic SMS sending.
- A command-line interface (CLI) for quick SMS dispatch.
- Python bindings for easy integration into Python applications.
The client supports advanced features like scheduled sending, delivery reports, flash SMS, test mode, and custom encodings.
Features
- Authentication: Secure API key-based access.
- SMS Options:
- Scheduled delivery.
- Delivery report (DLR) callbacks.
- Expiration timeouts.
- Flags for debug, no-log, flash, test, no-blacklist, and character conversion.
- Encodings: Default, 8-bit, or UDH (User Data Header).
- Error Handling: Detailed error codes and messages from the API.
- Cross-Platform: Works on Linux, macOS, and Windows.
- Python Integration: Seamless Python API via PyO3 bindings.
- CLI Tool: Simple command-line usage with environment variable support.
Installation
For Python Users (via PyPI)
Install the Python package directly:
pip install esteria-api-client
This installs the Python bindings, which include the underlying Rust library.
For Rust Users (via crates.io)
Add the library to your Cargo.toml:
[dependencies]
esteria-api-client = "0.1.0" # Replace with the latest version
To install the CLI globally:
cargo install esteria-api-client --features cli
Note: The cli feature enables the command-line tool, and python enables Python bindings (used for building wheels).
Building from Source
Clone the repository:
git clone https://github.com/yourusername/esteria-api-client.git
cd esteria-api-client
Build the Rust library and CLI:
cargo build --features cli
For Python bindings, ensure you have maturin installed (for building wheels):
pip install maturin
maturin develop # Builds and installs locally for development
To build a PyPI wheel:
maturin build --release
Usage
Environment Variables
The client supports these env vars for convenience:
ESTERIA_API_BASE_URL: API endpoint (default:https://api.esteria.eu).ESTERIA_API_KEY: Your API key.
CLI Usage
The CLI tool (esteria-api-client) allows sending SMS from the terminal.
Basic example:
esteria-api-client \
--api-url https://api.esteria.eu \
--api-key YOUR_API_KEY \
--sender "MySender" \
--number "+1234567890" \
--text "Hello, world!"
Full options:
esteria-api-client --help
Output:
Send SMS via Esteria API
Usage: esteria-api-client [OPTIONS] --api-url <API_URL> --api-key <API_KEY> --sender <SENDER> --number <NUMBER> --text <TEXT>
Options:
-u, --api-url <API_URL> API base URL (e.g., https://api.esteria.eu)
-k, --api-key <API_KEY> API key for authentication
-s, --sender <SENDER> Sender name or number
-n, --number <NUMBER> Recipient phone number (with or without +)
-t, --text <TEXT> Message text to send
--time <TIME> Schedule time (RFC3339 format, e.g., 2024-12-31T23:59:59Z)
--dlr-url <DLR_URL> Delivery report URL
--expired <EXPIRED> Expiration time in minutes
--user-key <USER_KEY> User key for tracking
--debug Enable debug mode
--nolog Disable logging
--flash Send as flash SMS
--test Test mode (don't actually send)
--nobl No blacklist check
--convert Convert characters
--encoding <ENCODING> Encoding: default, 8bit, or udh [default: 8bit]
-h, --help Print help
-V, --version Print version
On success, it prints the message ID (e.g., Message ID: 12345).
Python Usage
Import and use the SmsClient class:
import asyncio
from esteria_api_client import SmsClient, SmsFlags, PyEncoding
async def main():
client = SmsClient("https://api.esteria.eu")
# Basic send
result = await client.send_sms(
api_key="YOUR_API_KEY",
sender="MySender",
number="+1234567890",
text="Hello from Python!"
)
print(result) # Message ID on success
# With options
flags = SmsFlags.debug() | SmsFlags.flash()
result = await client.send_sms(
api_key="YOUR_API_KEY",
sender="MySender",
number="+1234567890",
text="Scheduled flash SMS",
time=1735689599, # Unix timestamp
dlr_url="https://your-callback-url.com",
expired=60, # Expires in 60 minutes
flag_debug=True,
flag_flash=True,
user_key="my-tracking-key",
use_8bit=False, # Use default encoding
udh=True # UDH encoding
)
print(result)
# Run the async function
asyncio.run(main())
SmsFlags: Bitflags for options (e.g.,SmsFlags.debug(),SmsFlags.flash()). Combine with|.PyEncoding: Constants likePyEncoding.DEFAULT,PyEncoding.EIGHT_BIT,PyEncoding.UDH.- Errors: Raises
RuntimeErroron failure with details.
Note: The time parameter is a Unix timestamp (seconds since epoch).
Rust Usage (Library)
Use the SmsClient and SmsRequest structs:
use esteria_api_client::{SmsClient, SmsRequest, SmsFlags, Encoding};
use chrono::Utc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = SmsClient::new("https://api.esteria.eu".to_string());
let request = SmsRequest::new(
"YOUR_API_KEY",
"MySender",
"+1234567890",
"Hello from Rust!"
)
.with_flags(SmsFlags::DEBUG | SmsFlags::FLASH)
.with_encoding(Encoding::Udh)
.with_time(Utc::now()) // Schedule for now (or future)
.with_dlr_url("https://your-callback-url.com")
.with_expired(60)
.with_user_key("my-tracking-key");
match client.send_sms(request).await {
Ok(code) => println!("Message ID: {}", code),
Err(e) => eprintln!("Error: {}", e),
}
Ok(())
}
SmsFlags: Bitflags (e.g.,SmsFlags::DEBUG).Encoding: Enum forDefault,EightBit,Udh.- Errors:
SmsErrorvariants for handling.
API Error Codes
If sending fails, the client returns detailed errors based on Esteria's response codes:
- 1: System internal error
- 2: Missing parameter
- 3: Unable to authenticate
- ... (see full list in
esteria.rs)
Developer Notes
- Features: Enable
clifor the command-line tool orpythonfor bindings via Cargo. - Dependencies: Uses
reqwestfor HTTP,chronofor dates,clapfor CLI,pyo3for Python, andbitflagsfor flags. - Logging: Uses
env_logger(init in CLI). - Testing: Run
cargo test. Use--flag-testfor API test mode. - Contributing: Pull requests welcome! Focus on bug fixes, features, or docs.
- License: GPLv3.
For issues or suggestions, open a GitHub issue.
This project is not affiliated with Esteria.eu. Ensure you have an active Esteria account and API key.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file esteria_api_client-0.0.8-cp314-cp314-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: esteria_api_client-0.0.8-cp314-cp314-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 4.0 MB
- Tags: CPython 3.14, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41c1ede707e13a43b9d207b5acc3a39c00fae9216bc3f0aea74d49ab26aaa61e
|
|
| MD5 |
07d6377f2c2586c9e0e4aa97575741b2
|
|
| BLAKE2b-256 |
41d5f1a18f0c7c772a1f039558703c8548f1331b08a6b2becd961dc3a15242c2
|
File details
Details for the file esteria_api_client-0.0.8-cp314-cp314-macosx_11_0_arm64.whl.
File metadata
- Download URL: esteria_api_client-0.0.8-cp314-cp314-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.14, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30669e861ea1f61586c13b70c980a02b92b89d33a337c6d576be382d2d2b42b1
|
|
| MD5 |
07f25e2662b61ee700c298f6bbd4c091
|
|
| BLAKE2b-256 |
99d832db42672a20c8d354182e98bbfd4c269759aca108209cfb7f4e39682a4a
|
File details
Details for the file esteria_api_client-0.0.8-cp313-cp313-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: esteria_api_client-0.0.8-cp313-cp313-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 4.0 MB
- Tags: CPython 3.13, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2294b79695582e80f2f3afa3c68b71aa47d1527e75a8f785260ca2d0a3f77ca7
|
|
| MD5 |
0208c7d0c2a060e6eb3c97724ead43f7
|
|
| BLAKE2b-256 |
196f2fa3fbcb97b4eafea6a74fe7d448b918e3d8d1fcbd47b883edca0bb1e4da
|
File details
Details for the file esteria_api_client-0.0.8-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: esteria_api_client-0.0.8-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.10.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45ca33d8e94e64b8512db8957f94c74f6afeb598515b9184f89dc4cecbc1e7d5
|
|
| MD5 |
582db5c5edce544b725489522fffefba
|
|
| BLAKE2b-256 |
3b71c6d9b5e4d372cad059e0d5b70758f5d02d093d58367471e7f94f397ae586
|