fix button force anoncecall
This commit is contained in:
1 parent
9af91941d9
commit
4525ec3e6a
9 files changed
+99
-48
No files matched your search
@@ -85,7 +85,7 @@ def _deliver(job):
|
||||
job.last_error = ""
|
||||
|
||||
|
||||
def process_due_announcements():
|
||||
def process_due_announcements(*, job_id=None):
|
||||
now = timezone.now()
|
||||
# A crashed worker can safely retry with the same provider idempotency key.
|
||||
AnnouncementJob.objects.filter(
|
||||
@@ -93,13 +93,15 @@ def process_due_announcements():
|
||||
next_attempt_at__lt=now - timedelta(minutes=10),
|
||||
).update(status=AnnouncementJob.Status.PENDING, next_attempt_at=now)
|
||||
with transaction.atomic():
|
||||
jobs = list(
|
||||
queryset = (
|
||||
AnnouncementJob.objects.select_for_update(skip_locked=True)
|
||||
.filter(status=AnnouncementJob.Status.PENDING, next_attempt_at__lte=now)
|
||||
.select_related("message__ticket__customer", "ticket__customer")
|
||||
.annotate(priority=Case(When(source=AnnouncementJob.Source.MANUAL, then=Value(0)), default=Value(1), output_field=IntegerField()))
|
||||
.order_by("priority", "next_attempt_at", "pk")[:20]
|
||||
)
|
||||
if job_id is not None:
|
||||
queryset = queryset.filter(pk=job_id)
|
||||
jobs = list(queryset.order_by("priority", "next_attempt_at", "pk")[:20])
|
||||
AnnouncementJob.objects.filter(pk__in=[job.pk for job in jobs]).update(
|
||||
status=AnnouncementJob.Status.PROCESSING, next_attempt_at=now,
|
||||
)
|
||||
|
||||
@@ -251,9 +251,19 @@ def _process_delivery_checks(options):
|
||||
NotificationJob.objects.filter(pk__in=[job.pk for job in jobs]).update(
|
||||
delivery_next_check_at=now + timedelta(minutes=10),
|
||||
)
|
||||
provider = get_sms_provider()
|
||||
if not jobs:
|
||||
return
|
||||
try:
|
||||
provider = get_sms_provider()
|
||||
except Exception:
|
||||
logger.exception("SMS delivery provider initialization failed")
|
||||
return
|
||||
for job in jobs:
|
||||
result = provider.get_delivery_status(job.provider_message_id)
|
||||
try:
|
||||
result = provider.get_delivery_status(job.provider_message_id)
|
||||
except Exception:
|
||||
logger.exception("SMS delivery check failed for job %s", job.pk)
|
||||
continue
|
||||
if result is None:
|
||||
job.delivery_status = ""
|
||||
job.delivery_next_check_at = None
|
||||
|
||||
+13
-2
@@ -472,8 +472,19 @@ def staff_announcement_now(request, public_id):
|
||||
elif not ticket.customer.is_active or not ticket.customer.local_mobile:
|
||||
messages.error(request,"شماره همراه مخاطب برای تماس در دسترس نیست.")
|
||||
else:
|
||||
_,created=schedule_immediate_announcement(ticket,request.user)
|
||||
messages.success(request,"درخواست اطلاعرسانی تلفنی فوری در صف قرار گرفت." if created else "درخواست اطلاعرسانی تلفنی این تیکت در دقیقهٔ گذشته ثبت شده است.")
|
||||
job,created=schedule_immediate_announcement(ticket,request.user)
|
||||
if created:
|
||||
from apps.notifications.announcement_worker import process_due_announcements
|
||||
process_due_announcements(job_id=job.pk)
|
||||
job.refresh_from_db()
|
||||
if job.status == AnnouncementJob.Status.SENT:
|
||||
messages.success(request,"درخواست تماس توسط سرویس پذیرفته شد.")
|
||||
elif job.attempts:
|
||||
messages.warning(request,"سرویس تماس پاسخ نداد؛ تلاش مجدد در صف قرار گرفت.")
|
||||
else:
|
||||
messages.info(request,"درخواست تماس در حال پردازش است.")
|
||||
else:
|
||||
messages.info(request,"درخواست اطلاعرسانی تلفنی این تیکت در دقیقهٔ گذشته ثبت شده است.")
|
||||
return redirect("staff_tickets:detail",public_id=public_id)
|
||||
@staff_required
|
||||
@require_POST
|
||||
|
||||
Reference in new issue
Block a user