Hey there, fellow code wranglers! Ready to add some texting superpowers to your Python project? Let's dive into building an integration with the EZ Texting API. We'll keep things snappy and to the point, so you can get up and running in no time.
EZ Texting's API is a nifty tool that lets you send SMS messages programmatically. Whether you're building a notification system, a marketing campaign, or just want to annoy your friends with automated cat facts, this integration has got you covered.
Before we jump in, make sure you've got:
requests
libraryIf you're missing any of these, no worries! A quick pip install and a sign-up form will sort you out.
First things first, let's get our environment ready:
pip install requests
Now, let's keep those API credentials safe:
import os EZ_TEXTING_USERNAME = os.environ.get('EZ_TEXTING_USERNAME') EZ_TEXTING_PASSWORD = os.environ.get('EZ_TEXTING_PASSWORD')
Pro tip: Use environment variables to keep your secrets... well, secret!
Time to create our API client:
import requests class EZTextingClient: BASE_URL = 'https://api.eztexting.com/v4' def __init__(self, username, password): self.auth = (username, password) def _request(self, method, endpoint, **kwargs): url = f"{self.BASE_URL}/{endpoint}" response = requests.request(method, url, auth=self.auth, **kwargs) response.raise_for_status() return response.json()
Let's add a method to send those messages flying:
def send_sms(self, phone_number, message): endpoint = 'sms' data = { 'phoneNumber': phone_number, 'message': message } return self._request('POST', endpoint, json=data)
Curious about your message's journey? Let's check its status:
def check_message_status(self, message_id): endpoint = f'sms/{message_id}' return self._request('GET', endpoint)
For when you need to take a trip down memory lane:
def get_message_history(self, limit=100): endpoint = 'sms' params = {'limit': limit} return self._request('GET', endpoint, params=params)
Let's not forget about organizing those contacts:
def create_contact(self, phone_number, first_name, last_name): endpoint = 'contacts' data = { 'phoneNumber': phone_number, 'firstName': first_name, 'lastName': last_name } return self._request('POST', endpoint, json=data) def create_group(self, group_name): endpoint = 'groups' data = {'name': group_name} return self._request('POST', endpoint, json=data)
Let's add some robustness to our client:
import time from requests.exceptions import RequestException class EZTextingError(Exception): pass def _request(self, method, endpoint, **kwargs): max_retries = 3 for attempt in range(max_retries): try: response = requests.request(method, f"{self.BASE_URL}/{endpoint}", auth=self.auth, **kwargs) response.raise_for_status() return response.json() except RequestException as e: if attempt == max_retries - 1: raise EZTextingError(f"API request failed: {str(e)}") time.sleep(2 ** attempt) # Exponential backoff
For when you want to send messages from the future:
def schedule_sms(self, phone_number, message, send_at): endpoint = 'sms' data = { 'phoneNumber': phone_number, 'message': message, 'sendAt': send_at.isoformat() } return self._request('POST', endpoint, json=data)
Templates make life easier, so let's use them:
def send_template(self, phone_number, template_id, template_data): endpoint = 'sms/template' data = { 'phoneNumber': phone_number, 'templateId': template_id, 'templateData': template_data } return self._request('POST', endpoint, json=data)
Don't forget to test! Here's a quick example:
import unittest class TestEZTextingClient(unittest.TestCase): def setUp(self): self.client = EZTextingClient(EZ_TEXTING_USERNAME, EZ_TEXTING_PASSWORD) def test_send_sms(self): response = self.client.send_sms('+1234567890', 'Hello, World!') self.assertIn('id', response) if __name__ == '__main__': unittest.main()
And there you have it! You've just built a solid EZ Texting API integration in Python. Remember, this is just the beginning – there's always room to expand and improve. Keep exploring the API docs for more features you can add to your integration.
Happy coding, and may your messages always reach their destination!
For the full implementation and more examples, check out our GitHub repo: [link to your GitHub repo]
Now go forth and text with the power of Python! 🐍📱