An open-source cross-platform solution to host a SMS API server locally.
Keeping things simple
- It is meant to be used with a backend or application layer in the local network while
OpenSMSserves as the SMS gateway / API. - To keep it simple, rate limiting or other restrictions may be applied at the application layer (not adding in
OpenSMSapp itself). - It uses the default
SIMfor sending sms as set in the android settings.
👉 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.
You can buy me a coffee via this link or tap on below image. Thank you 🙏.
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.
- You can check the Releases and downlaod the latest version of the android app on your phone.
- You may need to disable (temporarily)
Play Protectfrom yourPlay Storesettings. - Install the App & launch.
- Grant the permissions.
- Android might block
smspermission. Go toSettings>Apps>OpenSMS> Tap on three vertical-dots at top-right corner >Allow restricted access. - Then grant
SMSpermission from the settings window. - Relaunch the app.
- Click
Start Server. It will then prompt you to generate an API Key for the first time. Generate and store it securely.
Prerequisites:
-
We need a USB Development Board with SIM support, which supports
ATcommands viaSerialport. 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 Managermay automatically use the default serial port which is forATcommands. 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 permanentlyYou can run any of the following modes. First clone the repo and install the modules.
- Download
openSmsClifor Linux oropenSmsCli.exeon 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/ttyUSB0We 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
OpenSmsAppfor Linux andOpenSmsApp.exefor 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.
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!"}'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
ATcommands to LTE/GSM development board. - psutil to get the network interface details on Desktop platforms.
- Leverage the
ESP32-S3to host the SMS API server directly without the need of an Android phone or a Desktop platform (for low traffic).
- Developer & Author: Somnath Das
- Contact Us
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