fix button force anoncecall

This commit is contained in:
javad committed 2026-09-28 21:13:19 +03:30
1 parent 9af91941d9
commit 4525ec3e6a
9 files changed
+99 -48

No files matched your search

+5 -3
View File
@@ -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
View File
@@ -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