Я пытаюсь добавить функцию Twilio broadcast SMS в мое приложение Django, но не могу понять, как получить все номера телефонов из базы данных.
Я создал модель 'Post' в моем приложении django, которая загружает основную статью в базу данных. Я пытаюсь реализовать функцию, которая уведомляет пользователей о том, что новая статья была загружена через SMS, но это должно быть отправлено всем пользователям, которые зарегистрировали свой номер в базе данных (сохраненный в отдельной модели 'Profile').
Я добавил в модель функцию 'save', которая отправляет SMS, когда пост загружен:
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
detail_text = models.TextField(default='')
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})
def save(self, *args, **kwargs):
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
user_numbers = ''
client = Client(account_sid, auth_token)
message = client.messages.create(
body= 'Hello, a new article is available from your
dashboard.',
from_= settings.TWILIO_NUMBER,
to = user_numbers
)
print(message.sid)
return super().save(*args, **kwargs)
Я заставил API работать с одним номером, жестко закодированным в приложении, но теперь хочу брать номера из базы данных и отправлять всем пользователям, зарегистрировавшим свой номер мобильного телефона.
Я пробовал использовать Profile.objects.get(phone_numbers), но это не сработало. Изучив документацию Twilio, я понял, что мне нужно сохранить номера в settings.py как массив и изменить код в функции 'save', чтобы запустить цикл for, который перебирает все номера в массиве и присваивает их переменной 'user_numbers', используя settings.USER_NUMBERS (например). Однако я совсем новичок в Python и Django и не знаю, как это сделать.
Пример Twilio:
def broadcast_sms(request):
message_to_broadcast = ("Have you played the incredible TwilioQuest "
"yet? Grab it here: https://www.twilio.com/quest")
client = Client(settings.TWILIO_ACCOUNT_SID, settings.TWILIO_AUTH_TOKEN)
for recipient in settings.SMS_BROADCAST_TO_NUMBERS:
if recipient:
client.messages.create(to=recipient,
from_=settings.TWILIO_NUMBER,
body=message_to_broadcast)
return HttpResponse("messages sent!", 200)
Любая помощь будет очень признательна.
Некоторые соответствующие документы, которые я прочитал, включают в себя:
https://www.twilio.com/blog/broadcast-sms-text-messages-python-3-django
Вы не указали свои модели, поэтому я предположу, что у вас есть модель Profile с полем phone_number. Используйте этот метод сохранения внутри вашего класса Post:
def save(self, *args, **kwargs):
if not self.pk: # Only if the instance is being created the code is executed
phone_numbers = [profile.phone_number for profile in Profile.objects.all()]
account_sid = settings.TWILIO_ACCOUNT_SID
auth_token = settings.TWILIO_AUTH_TOKEN
client = Client(account_sid, auth_token)
for phone_number in phone_numbers:
if phone_number:
message = client.messages.create(body='Hello, a new article is available from your dashboard.', from=settings.TWILIO_NUMBER, to=phone_number)
super().save(*args, **kwargs)