
    .i                         d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
  e j                  e      Z eddd	d
      dedefd       Zy)    N)shared_task)settings)timezone)get_twilio_client)OutboundMessageT   
   zapps.calls.tasks.send_sms_task)bindmax_retriesdefault_retry_delayname	to_numbermessagec                    t         j                  j                  d||t        j                  dd      }	 |st
        j                  d       yt               }|j                  j                  |t        j                  |      }d|_	        |j                  |_        t        j                         |_        |j                  g d	
       t
        j!                  d| d|j                          y# t"        $ rZ}d|_	        t%        |      |_        |j                  ddg
       t
        j)                  d|        | j+                  |      d}~ww xY w)zd
    Celery task to send SMS asynchronously using Twilio.
    Retries automatically on failure.
    sms)bodyfrompending)channeltomessage_payloadstatusz7Celery SMS task failed: no destination number provided.F)r   from_r   sent)r   provider_message_idsent_at)update_fieldsz[CELERY] SMS sent to z, SID=Tfailedr   error_messagez4[CELERY] Twilio SMS send failed, will retry. Error: )excN)r   objectscreater   TWILIO_FROM_NUMBERloggererrorr   messagesr   sidr   r   nowr   saveinfo	Exceptionstrr   	exceptionretry)selfr   r   deliverytwilio_clientr   r    s          G/var/www/html/dp2/backend_v2.1/server/apps/calls/tasks/send_sms_task.pysend_sms_taskr3      s6    &&--//
  . H"LLRS)+$$++-- , 
 !'*ww$#<<>$PQ+I;fSWWIFG ""!$SX$?@OPSuUVjjSj!!"s   C/ B C/ /	E8AEE)loggingceleryr   django.confr   django.utilsr   apps.calls.servicesr   apps.appointments.modelsr   	getLogger__name__r$   r,   r3        r2   <module>r>      s\        ! 1 4			8	$ 		)	)"3 )" )")"r=   