Запланированные сообщения отправляются с разницей в 5 часов 30 минут в Twilio и Sendgrid api

Я работаю над приложением Django, в котором я использую twilio для отправки sms и whatsapp сообщений и sendgrid api для отправки электронных писем. Проблема возникает в запланированных сообщениях во всех трех случаях. Например, если я запланировал отправку письма на 06:24 PM (запланированное время - 06:24 PM), то я получаю письмо в 11:54 PM, следовательно, разница составляет 5 часов и 30 минут. Такая же проблема возникает в sms и whatsapp.

Я думаю, что проблема может быть связана с часовым поясом. Я планирую сообщения из Индии, а аккаунт twilio находится в США. И разница во времени в 5 часов 30 минут связана с форматом UTC, так как Индия опережает UTC на 5 часов 30 минут. Но я не могу найти решение этой проблемы.

Итак, есть ли какой-то конкретный способ решить эту проблему?

Проблема в том, что Twilio и SendGrid планируют сообщения в UTC, а вы создаете свое время в IST без привязки к часовому поясу, поэтому время интерпретируется как UTC и поэтому отправляется за 5 часов 30 минут.

Я не эксперт по Python, поэтому могу ошибаться. Но, я думаю, что использование mktime здесь неверно, и вы должны использовать gmtime.

message = MAIL(...)
finalScheduleTime = int(time.gmtime(scheduleTime.timetuple()))
message.send_at = finalScheduleTime

Альтернативный вариант - не обязательно сначала преобразовывать время в дату. Вы можете изменить часовой пояс времени даты с вашего местного на UTC:

import pytz

utcdatetime = scheduleTime.astimezone(pytz.UTC)

Затем превратите это в метку времени:

message.send_at = int(utcdatetime.timestamp())

Согласно ответу philnash, sendgrid api и twilio планируют сообщения в UTC, а мы генерируем их в IST без привязки к часовому поясу. Следовательно, сначала нам нужно добавить часовой пояс, а затем преобразовать его в UNIX Timestamp. Обратитесь к следующему коду:

scheduleTime = scheduleTime.astimezone()
finalScheduleTime = int(time.mktime(scheduleTime.timetupple()))
message.send_at = finalScheduleTime 

Следовательно, это решит проблему.

Вернуться на верх