То, что мы создадим, это следующее.
Отправлено с вашей пробной учетной записи Twilio <- потому что я использую пробную учетную запись (бесплатно)
Привет, Коджи, с днем рождения! Хорошего дня.
это сообщение, которое отправляется сценарием Python с API Twilio.
Как это устроено
Проведите сценарий Python где -нибудь (например, Heroku) и пейте сценарий каждые 24 часа. В качестве первого шага, скрипт проверяет электронную таблицу Google, в которой есть список получателей (клиентов) с номером телефона и день рождения. Конечно, электронная таблица может быть текстовым файлом, файлом CSV, файлом Excel или DB. Это зависит от того, сколько клиентов в списке и какую службу хостинга вы будете использовать для этого. Кроме того, как часто нужно будет обновлять список, и эти люди знакомы с инструментом CLI или нет.
В этом случае я использую таблицу Google, потому что это будет поддерживаться нетехнологичным человеком.
Еще одна вещь, я использую поэзию ( https://python-poetry.org/ )
Создать поэтический проект
$ poetry new birthday_bot $ cd birthday_bot
Установите пакеты
В этой статье мы используем GSiRead, OAuth2client и Twilio Первые 2 пакета предназначены для доступа к электронной таблице Google, а последний предназначен для использования API Twilio.
gsiRead
https://gspread.readthedocs.io/en/latest/index.html
Twilio
https://pypi.org/project/twilio/
$ poetry add gspread oauth2client twilio
Setup Env для таблицы Google
GSiReD
Burnash/GsiRead
Google Sheets Python API
Простой интерфейс для работы с Google Sheets.
Функции:
- Откройте электронную таблицу Название , ключ или URL Анкет
- Читать, написать и форматировать ячейки.
- Обмен и контроль доступа.
- Пакетные обновления.
Установка
pip install gspread
Требования: Python 3.6+.
Основное использование
Начните использовать gsiRead:
import gspread gc = gspread.service_account() # Open a sheet from a spreadsheet in one go wks = gc.open("Where is the money Lebowski?").sheet1 # Update a range of cells using the top left corner address wks.update('A1', [[1, 2], [3, 4]]) # Or update a single cell wks.update('B42', "it's down there somewhere, let me take another look.") # Format the header wks.format('A1:B1', {'textFormat': {'bold':
Вот руководство по настройке https://gspread.readthedocs.io/en/latest/oauth2.html
Если вы не хотите использовать электронную таблицу Google для хранения информации получателей. Вы можете пропустить этот шаг и добавить функцию для чтения текстового файла/файла CSV.
Получить Twilio API
Нам нужно account_id
, auth_token
, и Phone_Number, чтобы отправить сообщение на смартфон.
Страница справочного центра Twilio очень полезна, чтобы получить их. https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them
код
app.py
import gspread import json from oauth2client.service_account import ServiceAccountCredentials import datetime from twilio.rest import Client # create client account_id = 'Twilio_account_id' auth_token = 'Twilio_auth_token' phone_number = 'Twilio_phone_number' client = Client(account_id, auth_token) # connect google spreadsheet and return worksheet info def connect_gspread(jsonf: str, key:str) -> gspread.models.Worksheet: #print('connect_gspread') scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive'] credentials = ServiceAccountCredentials.from_json_keyfile_name(jsonf, scope) gc = gspread.authorize(credentials) SPREADSHEET_KEY = key worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1 # print(type(worksheet)) return worksheet # send a message to a recipient_number def send_msg(name: str, recipient_number: str): # add recipient name to the message message = client.messages.create( body = 'Hi {}, Happy Birthday! Have a wonderful day.'.format(name), from_ = phone_number, # from_ = 'recipient_number', to = recipient_number ) jsonf = './integral.json' spread_sheet_key = 'spreadsheet_key' ws = connect_gspread(jsonf,spread_sheet_key) # get cell value from worksheet(ws) names = ws.col_values(1) birthdays = ws.col_values(2) numbers = ws.col_values(3) today = datetime.datetime.now() today = today.strftime("%m/%d") print('today is {}'.format(today)) if birthdays[1] == today: send_msg(names[1], numbers[1]) print('sent a msg') else: print('no target')
запустить сценарий
$ poetry run python app.py today is 03/10 sent a msg
Оригинал: “https://dev.to/kojikanao/build-a-birthday-bot-with-twilio-and-spreadsheet-33a6”