A Python interface for sending bulk messages, dynamic messages, and handling OTP operations via the Bitmoro API.
Project description
Bitmoro Python Library
A Python library for sending messages and handling OTP (One-Time Password) operations using the Bitmoro API.
Table of Contents
Introduction
The Bitmoro Python Library provides a simple interface for:
- Sending bulk SMS.
- Sending dynamic personalized messages.
- Managing OTP operations (generation, sending, and verification).
This library integrates seamlessly with the Bitmoro API, enabling efficient SMS services for your application.
Installation
To install the library, use the following command:
pip install bitmoro
Usage
Initializing the Client
To begin, import the Bitmoro class and initialize it with your API token:
Follow the link to get API key. API Docs
from bitmoro.bitmoro import Bitmoro
token = "<YOUR_API_TOKEN>"
client = Bitmoro(token)
Sending OTPs
You can generate, send, and verify OTPs as shown below:
Generating an OTP
otp_manager = await client.get_otp_manager()
phone_number = "98XXXXXXXX"
otp = otp_manager.generate_otp(phone_number)
print(f"Generated OTP for {phone_number}: {otp}")
Sending an OTP
otp_send_response = await otp_manager.send_otp(
phone_number=phone_number,
message_template=f"Your OTP is: {otp}"
)
print("OTP send response:", otp_send_response)
Verifying an OTP
entered_otp = await get_user_input() # Async function to get user input
otp_verification_response = otp_manager.verify_otp(phone_number, entered_otp)
if otp_verification_response:
print("OTP verified successfully!")
else:
print("OTP verification failed.")
Sending Bulk Messages
To send bulk messages: import time
bulk_response = await client.send_bulk_message(
message="Hello, this is a test message", #required
numbers=["98XXXXXXXX"], #required
sender_id="BIT_MORE", #optional
scheduled_date=int(time.time()*1000) + 60*1000, #unix time stamp in millisecond of future date. Optional
callback_url="https://your-callback-url.com/test" #optional
)
print("Bulk message response:", bulk_response)
Sending Dynamic Messages
For personalized messages, use the send_dynamic_message method:
dynamic_response = await client.send_dynamic_message(
message="Hello, ${name}!", #required
contacts=[
{"number": "98XXXXXXXX", "name": "John"},
{"number": "98XXXXXXXX"}
], #required
sender_id="BIT_MORE", #optional
scheduled_date=int(time.time()*1000) + 60*1000, #unix time stamp in millisecond of future date. Optional
default_value={"name": "User"}, #optional
callback_url= "https://your-callback-url.com/test" #optional
)
print("Dynamic message response:", dynamic_response)
Callback URL Response
When a callback URL is provided, it receives a POST request containing the following information:
{
"messageId": "unique_message_id",
"message": "Hello, this is a test message",
"status": "sent",
"report": [
{
"number": "98XXXXXXXX",
"status": "success",
"message": "Sent.",
"creditCount": 1
}
],
"senderId": "BIT_MORE",
"deliveredDate": "2025-01-16T03:53:22.188Z",
"refunded": 0
}
Dependencies
This library requires Python 3.7+ and the bitmoro package. Install it using:
pip install bitmoro
Example
Here is a complete example of sending an OTP and verifying it:
import asyncio
from bitmoro import Bitmoro
async def main():
token = "<YOUR_API_TOKEN>"
client = Bitmoro(token)
otp_manager = await client.get_otp_manager()
phone_number = "98XXXXXXXX"
otp = otp_manager.generate_otp(phone_number)
print(f"Generated OTP for {phone_number}: {otp}")
#Sending single message
otp_send_response = await otp_manager.send_otp(
phone_number=phone_number,
message_template=f"Your OTP is: {otp}"
)
print("OTP send response:", otp_send_response)
entered_otp = input("Enter the OTP you received: ")
otp_verification_response = otp_manager.verify_otp(phone_number, entered_otp)
if otp_verification_response:
print("OTP verified successfully!")
else:
print("OTP verification failed.")
#sending Bulk Message
BULK MESSAGE
bulk_response = await client.send_bulk_message(
message="ranodm ",
numbers=["98XXXXXXXX"],
callback_url="https://demo.requestcatcher.com/test",
scheduledDate=int(time.time()*1000) + 60*1000,
)
print("Bulk message response:", bulk_response)
# Send a dynamic message
dynamic_response = await client.send_dynamic_message(
message="Hello, ${name}!",
contacts=[
{"number": "98XXXXXXXX", "name": "ramu"},
{"number": "98XXXXXXXX"}
],
sender_id="BIT_MORE",
scheduledDate=int(time.time()*1000) + 60*1000, # Optional
default_value={"name": "User"},
# callback_url=None # Optional
)
print("Dynamic message response:", dynamic_response)
asyncio.run(main())
License
This project is licensed under the MIT License.
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 Distribution
Built Distribution
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 bitmoro-sms-1.0.1.tar.gz.
File metadata
- Download URL: bitmoro-sms-1.0.1.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dafd73c7704f1b34da3d4088e0dd06d015d7aeb26dc7fa11f1036e2f43ba5903
|
|
| MD5 |
895043cbc6b2d7e56aedb6ea4bd14ef1
|
|
| BLAKE2b-256 |
fdbf7c2917637a56a5909a7efa24d0f1cc99a621261712510efc45e8cae0b70b
|
File details
Details for the file bitmoro_sms-1.0.1-py3-none-any.whl.
File metadata
- Download URL: bitmoro_sms-1.0.1-py3-none-any.whl
- Upload date:
- Size: 6.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.10.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16ed6aa8841999fdfd51c6359c24d27c4c5028ec81bd54d40e7d6c904002a2d5
|
|
| MD5 |
b5af574851a5ccc9f5ce281ea0e5f6a8
|
|
| BLAKE2b-256 |
9fa996156932e7806f933c653804014c81d23ba41e1801732396784e25729d38
|