Использование API-интерфейсов Twilio — I: отправка SMS-сообщений

я использовал SMS-API Twilio для моего веб-приложение который отправляет текстовые уведомления, чтобы предложить пользователям заполнить новую информацию на своих информационных панелях, когда конкретное событие было обновлено в базе данных. Приложение написано на Python Flask и использует Postgres relational database. Вот ссылка на код гитхаба для приложения. Следующая часть кода и объяснение, относящееся к Twilio SMS API, можно найти в модуле: send_twilio.py.

Вспомогательная библиотека Twilio Python

Для взаимодействия с API Twilio сначала необходимо загрузить вспомогательную библиотеку Twilio. Я использую версию библиотеки Python- сумеречный питон который представляет собой модуль для использования Twilio REST API и создания действительного TwiML для SMS-взаимодействия с пользователями. Самую последнюю версию библиотеки можно найти на PyPi, и ее можно установить с помощью команды:

pip install twilio

Для доступа к библиотеке внутри вашего модуля Python можно использовать следующую команду импорта.

from twilio.rest import TwilioRestClient 

Регистрация в Twilio

Чтобы использовать Twilio SMS API для отправки сообщений, необходимо зарегистрировать учетную запись Twilio и приобрести номер телефона Twilio. При регистрации назначается SID и токен аутентификации, которые можно использовать в вашем модуле Python для входа на сервер Twilio. Я начал с бесплатной пробной версии, но позже купил телефон без возможности SMS. Цены доступны для приложений с легким использованием, таких как мое, которые еще не масштабируются для большого количества пользователей.

ACCOUNT_SID = "AC85250cc80055bfd5dfe95eb9072eaa65"
AUTH_TOKEN = "8de0e1f992ca4f46499ec975a6d8c142"

#Twilio client is invoked to create an HTTP message
client = TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN)

SMS-уведомления пользователям моего приложения с помощью Twilio API

Как только ваше приложение зарегистрируется в Twilio, у вас будет SID и токен, как указано выше. Twilio предоставляет API-интерфейсы, позволяющие сторонним приложениям взаимодействовать с Мое приложение использует таблицы БД «Пользователи» и «События» — таблица «Пользователи» содержит номера телефонов пользователей, которые должны быть уведомлены в случае обновления события, а таблица «События» содержит информацию о событии. статус (СОЗДАНО/ОБНОВЛЕНО/УДАЛЕНО), относящийся к различным событиям для каждого пользователя. Задание cron настроено для запуска этого модуля — планировщика SMS, который отслеживает базу данных на предмет любых обновленных событий и отправляет пользователю уведомление с запросом на обновление информации о событии. Планировщик отправляет триггерное сообщение в Twilio для отправки SMS-напоминаний пользователям, чьи события истекли, предлагая им заполнить информацию на информационных панелях приложений.

Запросы SQL-SELECT и UPDATE используются для поиска пользователей и обновления соответствующих событий в таблицах. Если запрос Twilio возвращается с действительным Sid (smsid, возвращенный Twilio), Sid сохраняется в файле журнала на будущее, а статус события обновляется до TWILIO_SMS_SENT.

#Twilio message schedule in the python module
def twilio_sms_scheduler():
        import random
        from random import randrange
        batchid = randrange(0,10000)
        
        marked_for_sms_events = models.Event.query.filter(and_(
                                             models.Event.status==STATUS_CREATED,
                                   models.Event.datetime<=datetime.datetime.now(),                           models.Event.batchid==0)).update(dict(batchid=batchid))
        models.db.session.commit()
        
        sms_events = models.Event.query.join(models.User).filter(and_(
                                               models.Event.batchid==batchid,                                      models.Event.userid==models.User.userid)).all()                                           
#An HTTP POST message is sent to /2019-04-01/Accounts/{AccountsSid}/Message             for event in sms_events:
            if event.user.phone: 
                      message = client.messages.create(
                      to=event.user.phone, from_="+19193733763", 
                      body="This is a reminder to update the event desc here-     
                       
                      statuscallback="

Если для SMS от Twilio получен действительный Sid, обновите статус события.

      if (message.sid is not None):     
                         models.Event.query.filter_by(eventid=event.eventid).
                         update(dict(status=SATIAPP_STATUS_SENT_SMS))
                         models.db.session.commit()
              
      return None
      

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *