-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSMSender.py
More file actions
103 lines (89 loc) · 3.08 KB
/
Copy pathSMSender.py
File metadata and controls
103 lines (89 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""This python project uses twilio services to send invitations to a list of phone numbers"""
from twilio.rest import Client
from twilio.base.exceptions import TwilioRestException
import openpyxl
import re
import SMSenderData # Data file includes twilio account, location of excel, invite body and the sender's name
"""Global Variables"""
account_sid = SMSenderData.sid
auth_token = SMSenderData.token
client = Client(account_sid, auth_token)
excel = SMSenderData.excel
workbook = openpyxl.load_workbook(excel)
sheet = workbook['Sheet1']
def good_number(phone_number):
"""
:param phone_number:
:return: True if phone number is in correct format
"""
pattern = re.compile(r'\+972[\d]{9}')
if pattern.fullmatch(phone_number):
return True
else:
return False
def format_number(phone_number):
"""
:param phone_number:
:return: The correct format to be used to send the message
"""
leading_zero = re.compile(r'0\d{9}')
three_dash = re.compile(r'\d{3}-\d{7}')
two_dash = re.compile(r'[^0]\d-\d{7}')
if leading_zero.fullmatch(phone_number):
return '+972' + phone_number[1:]
elif three_dash.fullmatch(phone_number):
return '+972' + phone_number[1:3] + phone_number[4:]
elif two_dash.fullmatch(phone_number):
return '+972' + phone_number[0:2] + phone_number[3:]
else:
return None
def send_message(my_client, phone_number):
"""
:param my_client:
:param phone_number:
:return: sid of message or message error
"""
try:
message = my_client.messages.create(body=SMSenderData.body,
from_=SMSenderData.from_,
to=phone_number)
return True, message
except TwilioRestException as e:
return False, e
def get_max_row():
"""
:return: number of phone numbers in excel
"""
counter = 0
i = 1
while True:
cell = sheet.cell(row=i, column=2).value
if cell is not None:
counter += 1
i += 1
else:
return counter
def main():
max_row = get_max_row()
for i in range(2, max_row + 1):
number = sheet.cell(row=i, column=2).value # Get phone number
sent_cell = sheet.cell(row=i, column=3)
sid_cell = sheet.cell(row=i, column=4)
error_cell = sheet.cell(row=i, column=5)
if not good_number(number): # Check if number is in +972 format
number = format_number(number)
if number is None: # If not in format, write error and skip
sent_cell.value = 'No'
error_cell.value = 'Phone number is wrong'
workbook.save(excel)
continue
(sent, message) = send_message(client, number) # Send message
if sent is True:
sent_cell.value = 'Yes'
sid_cell.value = message.sid
else:
sent_cell.value = 'No'
error_cell.value = message
workbook.save(excel)
if __name__ == '__main__':
main()