Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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')
```
2 changes: 1 addition & 1 deletion sendblue/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from .sendblue import Sendblue
from .sendblue import Sendblue
62 changes: 39 additions & 23 deletions sendblue/sendblue.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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 = {
Expand All @@ -43,21 +38,42 @@ 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 = {
"group_id": group_id,
"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}')