
    Owi[                        d dl Z d dlmZm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 d dlmZ d d	lmZmZmZ d d
lmZmZmZ  e j0                  e      Z edddd      d        Z eddddd      dd       Zd Zd Zy)    N)shared_taskgroup)SoftTimeLimitExceeded)log_step)transaction)Trim)Company)Call)CRON_JOB_STATUSBotTypeBookingIntent)RecordingServiceget_twilio_clientget_speech_to_textT   <   z1apps.calls.tasks.process_all_booking_intents_task)bindmax_retriesdefault_retry_delaynamec                    	 t        t        j                  j                  d      j	                  t        d            j                  d      j                  dd      j                               }|sy	t        j                  j                  t        j                  j                  d
      j                  t        d         j                  dd      j                         }|j                  d      D cg c]!  }t         j#                  |j$                        # }}t'        |      j)                          y	c c}w # t*        $ r/}t,        j/                  d|        | j1                  |      d	}~ww xY w)zF
    Process booking intent for all companies having BDC numbers.
    T)bdc_number__isnull
bdc_number)	clean_bdcz^\+?\d+$)clean_bdc__regexr   )flatNF)bot_typecompany__isnull	COMPLETED)booking_intent_statusidr    2   )
chunk_sizezFailed to enqueue calls: exc)listr	   objectsexcludeannotater   filtervalues_listdistinctr
   r   SERVICE_BOTvaluer   onlyiteratorprocess_booking_intentsr!   r   apply_async	Exceptionlogger	exceptionretry)selfbdc_numberscalls_to_processcall
call_tasksr%   s         V/var/www/html/dp2/backend_v2.1/server/apps/calls/tasks/process_booking_intent_tasks.py process_all_booking_intents_taskr>      sV   $"OOD1D$675[t4
  LL ,,22 %    W&5k&B   T$/0XZ 	  ;K:S:S ;T ;;$"$$TWW- ; 	  	j%%'	  "4SE:;jjSj!!"s1   A3D? 6BD? 8&D:D? :D? ?	E7*E22E7i,  z'apps.calls.tasks.process_booking_intent)r   r   r   soft_time_limitr   c                    d}	 t        j                         5  t        j                  j	                         j                  |      j                         }ddd       |st        j                  d| d       y| j                  j                  }|j                  }|#t        j                  d|j                          yt        d   |_        |j                  dg       t!        t#                     j%                  |      }|sht'        d	|       |d
k\  r;t        d   |_        |j                  dg       t        j)                  d| d       y| j+                  dt-        d            t/        ||      \  }}}	}
}|r|j1                         sht'        d|       |d
k\  r;t        d   |_        |j                  dg       t        j)                  d| d       y| j+                  dt-        d            ||_        |	r|	|_        ||_        nt8        j:                  j<                  |_        t?        |
      |_         t        d   |_        |j                          y# 1 sw Y   xY w# tB        $ rA t        j)                  d| d       |r#t        d   |_        |j                  dg       Y yY yt,        $ r}| j                  j                  }|rD|d
k\  r?t        d   |_        |j                  dg       t        j)                  d| d       Y d}~yt        jE                  d| d|        | j+                  |      d}~ww xY w)z3
    Process booking intent for a single call.
    Nr!   zCall z not found.zNo Twilio call ID for call 
PROCESSINGr    )update_fieldsNO_RECORDING_FOUND   FAILEDu'   : No recording after 3 tries → FAILEDr   zRecording missing.)	countdownr%   )use_speakerTRANSCRIPT_EMPTYu+   : Transcript empty after 3 tries → FAILEDzTranscript empty.r   z"Soft time limit exceeded for call z. Marking as failed.u%   : Failed after 3 tries → FINAL FAIL!Unexpected error processing call : r$   )#r   atomicr
   r'   select_for_updater*   firstr5   inforequestretriestwilio_call_sidr!   r   r    saver   r   get_call_recording_public_urlr   warningr7   r4   r   striptwilio_recording_textbooking_datetimebooking_intentr   NOr.   get_transcript_complete_texttranscript_completer   r6   )r8   call_idrH   r;   retry_counttwilio_call_idrecording_url
transcriptrY   rX   speaker_labels_r%   s                r=   r1   r1   C   s    DL"!<<113::g:FLLND "KK%y45ll**--!KK5dggY?@%4\%B"		!8 9	:(

'
'
7 	 )>:a-<X-F*		)@(A	Bwi/VWX**ry9M/N*OO n+F	
 !1!1!3'8a-<X-F*		)@(A	Bwi/Z[\**ry9L/M*NN%/"$4D!"0D"/"2"2"8"8D#?#O %4[%A"		u "!x ! ?;G9DXYZ)8)BD&II%<$=I>   
"ll**K1$)8)BD&II%<$=I>NNU7)+PQR<WIRuMNjjSj!!
"sX   I- =I #I- 9AI-  BI- BI- BI-  I*%I- -AM6M>AM-MMc                 B    d}| xs g D ]  }||d    d|d    dz  } |S )N rolerK   text
 )
utterancesrg   us      r=   r[   r[      s=    D21V9+R&	{"-- K    c                    t         j                  j                  |       j                         }	 t	        t         j                  j                  |       j                         j
                  d      \  }}}}}t        |      }||_        |j                          t        d|j                         t        d|       t        d|       t        d|j                         t        d|       t        d|       t        d	|       t        d
       t        d|        y # t        $ r%}t        j                  d|  d|        Y d }~y d }~ww xY w)NrA   Tzretell transcript :zassembly transcript --:zfinal_label_text:z transcript_complete from call--:zbooking_intent final--:zbooking_datetime final--:zresults final--:z---------------------------z*Process Complete Successfully for call id:rJ   rK   )r
   r'   r*   rN   r   rR   r[   r\   rS   printra   r4   r5   r6   )	r]   r;   ra   rY   rX   rb   resultsfinal_label_textr%   s	            r=   test_process_booking_intentrq      s*   <<'*002D"O LL7+UW__
	
 8G#3  			#T__5'4!#340$2J2JK'8)+;< '*+,:GD O<WIRuMNNOs   C)D 	E#EE)F)loggingceleryr   r   celery.exceptionsr   utils.loggerr   	django.dbr   django.db.models.functionsr   apps.companies.modelsr	   apps.calls.modelsr
   apps.calls.constantsr   r   r   apps.calls.servicesr   r   r   	getLogger__name__r5   r>   r1   r[   rq   ri   rl   r=   <module>r~      s     % 3 ! ! + ) " H H  
		8	$ 		<	("("T 		2Q"Q"f%Orl   