Skip to content
daslearning-orgPublic

About

An open-source solution for a SMS API Server hosted locally

Topics

Resources

Stars

363 stars

Watchers

10 watching

Forks

Latest commit

 

History

82 Commits

Folders and files

Repository files navigation

📨 OpenSMS

An open-source cross-platform solution to host a SMS API server locally.

GitHub Downloads (all assets, all releases)

Keeping things simple
  • It is meant to be used with a backend or application layer in the local network while OpenSMS serves as the SMS gateway / API.
  • To keep it simple, rate limiting or other restrictions may be applied at the application layer (not adding in OpenSMS app itself).
  • It uses the default SIM for sending sms as set in the android settings.

🤔 Why would you choose our app? (Features)

👉 Turns your Android phone into a SMS API server.
👉 Also available on Desktop platforms via EC200U or similar USB development boards.
👉 Open-source, No advertisements and privacy focused.

💰 Sponsor Me

You can buy me a coffee via this link or tap on below image. Thank you 🙏.

📽️ Demo

You can click on the below Image or this Youtube Link to see the demo. Please let me know in the comments, how do you feel about this App.

🧑‍💻 Quickstart Guide

📱 Android Platform

  1. You can check the Releases and downlaod the latest version of the android app on your phone.
  2. You may need to disable (temporarily) Play Protect from your Play Store settings.
  3. Install the App & launch.
  4. Grant the permissions.
  5. Android might block sms permission. Go to Settings > Apps > OpenSMS > Tap on three vertical-dots at top-right corner > Allow restricted access.
  6. Then grant SMS permission from the settings window.
  7. Relaunch the app.
  8. Click Start Server. It will then prompt you to generate an API Key for the first time. Generate and store it securely.

🖥️ Desktop Platform

Prerequisites:

  • We need a USB Development Board with SIM support, which supports AT commands via Serial port. Connect it to your desktop / server platform via USB. I am using EC200U Board which also has ESP32-S3.

  • Find your serial port which supports the AT commands. You can check the driver installation section if you require more info.

  • On Linux Modem Manager may automatically use the default serial port which is for AT commands. In that case you need to free the serial port.

sudo systemctl stop ModemManager # stop immediately, but auto starts on boot
sudo systemctl disable ModemManager # disbable it permanently

>_ CLI Mode (Recommended)

You can run any of the following modes. First clone the repo and install the modules.

  • Download openSmsCli for Linux or openSmsCli.exe on Windows from the Releases. Then run below commands. You may run via Python as well.
# On Linux
chmod +x openSmsCli
./openSmsCli --help # get arguments detail
./openSmsCli interactive --serial /dev/ttyUSB0
# On Windows
.\openSmsCli.exe --help
.\openSmsCli.exe interactive --serial COM1
  • Or run it via Python
git clone https://github.com/daslearning-org/OpenSMS.git
cd OpenSMS/app
pip install -r req_cli.txt # virtual env is recommended
python openSmsCli.py --help # to know the arguments
  • Interactive Mode: You may need to run this first to generate the first API Key.
python openSmsCli.py interactive --serial /dev/ttyUSB0 # change your serial port, on windows: COM1 (example)

# generate a new API key
newkey

# get other interactive commands
help
  • Foreground Mode:
python openSmsCli.py run --serial /dev/ttyUSB0
  • Background Mode: It generates a background process with PID. You need to kill the process in order to stop it.
python openSmsCli.py start --serial /dev/ttyUSB0

UI Mode

We can also use the graphical app (same as android). Executable binaries will also be available in Releases if you do not wish to avoid managing Python.

  • Dedicated App based on OS: You will get OpenSmsApp for Linux and OpenSmsApp.exe for Windows. Just run it. You can also run it via Python as shown below.

  • Run the UI via Python

git clone https://github.com/daslearning-org/OpenSMS.git
cd OpenSMS/app
pip install -r requirements.txt # virtual env is recommended
python main.py # Opens the app ui
  • You can select the serial port (dropdown) & start the Serial Connection.

  • Then you can start the API Server.

🧪 Test API endpoint

Find the network address of your device and you may test out the API. Sample given below (This sends sms to your given number).

curl -i -X POST 'http://127.0.0.1:9292/sms/' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer my-secret-api-key' \
    -d '{"number": "+1234567890", "text": "Hello from OpenSMS API!"}'

📚 Tech Stack Used

Python stack

It works on Android and will bring this to Linux & Windows too.

  • FastAPI for the API layer.
  • KivyMD and few Kivy components for the UI and building the app.
  • SMS via pyjnius on Android.
  • PySerial on Desktop platforms to send AT commands to LTE/GSM development board.
  • psutil to get the network interface details on Desktop platforms.

📋 Future plans

  1. Leverage the ESP32-S3 to host the SMS API server directly without the need of an Android phone or a Desktop platform (for low traffic).

💌 Contact Details


🧩 Building your app from code

📱 Build Android App

A Linux environment is recommended for the app development. If you are on Windows, you may use WSL or any Virtual Machine.

# add the python repository (Optional: if you want some other versions)
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update

# install all dependencies.
sudo apt install -y ant autoconf automake ccache cmake g++ gcc lbzip2 libffi-dev libltdl-dev libtool libssl-dev make openjdk-17-jdk patch patchelf pkg-config unzip wget zip git python3 python3-venv python3-dev libcairo2-dev pkg-config libjpeg-dev zlib1g-dev

# optionally you may check the java installation with below commands
java -version
javac -version

# install python modules
git clone https://github.com/daslearning-org/OpenSMS.git
cd OpenSMS/app
python3 -m venv .env # create python virtual environment
source .env/bin/activate
pip install -r req_android.txt

# build the android apk
buildozer android debug # this may take a good amount of time for the first time & will generate the apk in the bin directory

About

An open-source solution for a SMS API Server hosted locally

Topics

Resources

Stars

363 stars

Watchers

10 watching

Forks

Releases

Packages

Contributors

Languages