diff --git a/README.md b/README.md index 585b58e..dfc521d 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,12 @@ response = sendblue.send_message('+19998887777', 'Hello from Sendblue!', send_st response = sendblue.send_group_message(['+19998887777', '+19998887778'], 'Hello from Sendblue!', send_style='invisible', media_url='https://source.unsplash.com/random.png', status_callback='https://example.com/callback') ``` +### Get Message + +```python +response = sendblue.get_message('message_id') +``` + ### Modify Group ```python @@ -57,4 +63,28 @@ response = sendblue.lookup('+19998887777') ```python response = sendblue.send_typing_indicator('+19998887777') +``` + +### Get Contacts + +```python +response = sendblue.get_contacts() +``` + +### Create Contact + +```python +response = sendblue.create_contact('+19998887777', 'First Name', 'Last Name', 'Company Name') +``` + +### Delete Contact + +```python +response = sendblue.delete_contact('contact_id') +``` + +### Get Messages + +```python +response = sendblue.get_messages('contact_id') ``` \ No newline at end of file diff --git a/sendblue/__init__.py b/sendblue/__init__.py index b6d63bc..ffc14e6 100644 --- a/sendblue/__init__.py +++ b/sendblue/__init__.py @@ -1 +1 @@ -from .sendblue import Sendblue +from .sendblue import Sendblue \ No newline at end of file diff --git a/sendblue/sendblue.py b/sendblue/sendblue.py index d72447c..c888cfb 100644 --- a/sendblue/sendblue.py +++ b/sendblue/sendblue.py @@ -2,26 +2,21 @@ class Sendblue: def __init__(self, api_key: str, api_secret: str) -> None: - self.api_key = api_key - self.api_secret = api_secret - self.base_url = 'https://api.sendblue.co/api' - - def request(self, endpoint: str, data: dict = None) -> dict: - url = self.base_url + endpoint - headers = { - 'sb-api-key-id': self.api_key, - 'sb-api-secret-key': self.api_secret, + self.base_url = 'https://api.sendblue.co' + self.session = requests.Session() + self.session.headers = { + 'sb-api-key-id': api_key, + 'sb-api-secret-key': api_secret, 'Content-Type': 'application/json' } - - if data: - response = requests.post(url, headers=headers, json=data) - else: - response = requests.get(url, headers=headers) - - if not response.ok: - raise Exception("Error: " + response.text) - + + def request(self, method: str, endpoint: str, data: dict = None): + url = self.base_url + endpoint + response = self.session.request(method, url, json=data) + try: + response.raise_for_status() + except requests.exceptions.HTTPError as e: + print(e, response.text) return response.json() def send_message(self, number: str, content: str, send_style: str = None, media_url: str = None, status_callback: str = None): @@ -32,7 +27,7 @@ def send_message(self, number: str, content: str, send_style: str = None, media_ 'media_url': media_url, 'status_callback': status_callback } - return self.request('/send-message', data) + return self.request('post', '/api/send-message', data) def send_group_message(self, numbers: list[str], content: str, group_id: str = None, send_style: str = None, media_url: str = None, status_callback: str = None): data = { @@ -43,7 +38,10 @@ def send_group_message(self, numbers: list[str], content: str, group_id: str = N 'media_url': media_url, 'status_callback': status_callback } - return self.request('/send-group-message', data) + return self.request('post', '/api/send-group-message', data) + + def get_message(self, message_id: str): + return self.request('get', f'/api/message/{message_id}') def modify_group(self, group_id: str, modify_type: str, number: str): data = { @@ -51,13 +49,31 @@ def modify_group(self, group_id: str, modify_type: str, number: str): "modify_type": modify_type, "number": number } - return self.request('/modify-group', data) + return self.request('post', '/modify-group', data) def lookup(self, number: str): - return self.request(f'/evaluate-service?number={number}') + return self.request('get', f'/api/evaluate-service?number={number}') def send_typing_indicator(self, number: str): data = { 'number': number } - return self.request(f'/send-typing-indicator?number={number}', data) + return self.request('post', f'/api/send-typing-indicator?number={number}', data) + + def get_contacts(self): + return self.request('get', '/accounts/contacts') + + def create_contact(self, number: str, first_name: str = None, last_name: str = None, company_name: str = None): + data = { + 'number': number, + 'firstName': first_name, + 'lastName': last_name, + 'companyName': company_name + } + return self.request('post', '/accounts/contacts', data) + + def delete_contact(self, contact_id: str): + return self.request('delete', f'/accounts/contacts/{contact_id}') + + def get_messages(self, contact_id: str): + return self.request('get', f'/accounts/messages?cid={contact_id}') \ No newline at end of file