o
    fj#"                     @   s   d dl Z d dlZd dlZ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mZ dd	lmZ dd
lmZmZ dddedededeeedB ef fddZG dd dejZdS )    N)statusviewsets)actionResponse)AgentConfig)connections)_q_identensure_business_cluster_tables   )Call)CallCreateSerializerCallSerializerg      4@)	timeout_surlpayloadr   returnc          	   
   C   sd  t |d}tjj| |ddidd}zNtjj||d;}| }z|jt 	|
ddfW W  d    W S  tyW   |jd |j
ddd	d d
 f Y W  d    W S w 1 s[w   Y  W d S  tjjy } z)t|drz| j
ddd	nt|}tt|dd
pd
d |d d
 fW  Y d }~S d }~w ty } zdd t|fW  Y d }~S d }~ww )Nutf-8zcontent-typezapplication/jsonPOST)dataheadersmethod)timeout replaceerrorsi  readcoder   )jsondumpsencodeurllibrequestRequesturlopenr   r   loadsdecode	Exceptionerror	HTTPErrorhasattrstrintgetattr)	r   r   r   r   reqresprawebody r4   5/var/www/html/livekitdocker/backend/apps/calls/api.py
_post_json   s4    $.r6   c                   @   sF   e Zd Zejd ZeZ	dd Z
dd Zeddgdd	d
 ZdS )CallViewSetbotc                 C   s   | j dkrtS tS )Ncreate)r   r   r   )selfr4   r4   r5   get_serializer_class,   s   
z CallViewSet.get_serializer_classc           &      O   s  t |jd}|jdd |j}d }d }|d}|d}	|dvr||	d ur|zKt|}
t|	}t|
 |
 d}td  *}|	d	t
| d
|g | }|r`dd |jD }tt||}W d    n1 sjw   Y  W n ty{   d }Y nw |	d urtjj|	d }t|d  }|dp|r|jndpd }|dp|r|jndpd }|r|dpt|dpd p|}|dpt|dpd p|}|||d}|r|dvr|	d urt||d< t|	|d< |d}|d urt| dkrt||d< |d}|d ur*t| dkr*t| |d< |d}|d urEt| dkrEt| |d< |d}|d ur`t| dkr`t| |d< |d}|d ur{t| dkr{t| |d< |d}|d urt| dkrt| |d< |d}t|ttfr|jdd d!}t|tr| rz-t|}t|tr|d"p|d#pd}|rt| rt| |d$< W n
 ty   Y nw |r8|jr|j|d< |jr|j|d< |j r|j |d< |j!r|j!|d< t"|d%d r&|j#j$r&|j#j$|d$< |j%r/|j%|d< |j&r8|j&|d&< d'D ]"}||v r[t||pId dkr[t|| ||< q:t'(d(d))d*}t|}|dvr|	d urz| d*t| d*t|	 }|*dd  |*dd  W n
 ty   Y nw t+||\} }!}"t|}#d&|#v rd+|#d&< t,jj-t,j.j/t,j0j1||||t|!pi d,pdt|!pi d-pd|#|!| d.|"d/
}$t2|$j}%|!|%d0< | |%d1< | d2vrt3|%t4j5d3S t3|%t4j6d3S )4N)r   T)raise_exceptionbusiness_idbot_id)Nr   _botsclusterzSELECT * FROM z WHERE bot_id = %s LIMIT 1c                 S   s   g | ]}|d  qS )r   r4   ).0cr4   r4   r5   
<listcomp>H   s    z&CallViewSet.create.<locals>.<listcomp>)id
custnumber	exenumberr   gid1mcube_exenumber	mcube_gid)rE   rF   rG   promptsystem_promptmessage_outboundfirst_message	llm_modelstt_providertts_providerllm_providervoicer   r   r   voice_idvoiceIdtts_voice_idvoice_configHTTP_AUTHORIZATION)rN   rL   rO   rP   rQ   	tts_modelrV   tts_encodingMCUBE_OUTBOUND_CALL_URLz-http://127.0.0.1:8002/api/mcube/outbound-call/z***redacted***r   mcube_call_sid)r#   responsehttp_status)
provider	directionr8   rE   rF   rG   r   provider_call_idmetadata
last_errortelephony_responsetelephony_http_status)      )r   )7r   r   is_validvalidated_datagetr-   r
   r   cursorexecuter	   fetchonedescriptiondictzipr(   r   objectsfilterfirstr,   striprI   rJ   
isinstancebytes	bytearrayr'   r   r&   rL   rO   rP   rQ   r.   rW   rT   first_message_outboundmcube_http_authorizationosgetenvrstrippopr6   r   r9   ProviderMCUBE	DirectionOUTBOUNDr   r   r   HTTP_502_BAD_GATEWAYHTTP_201_CREATED)&r:   r#   argskwargsserr   r8   cluster_bot_rowr=   r>   bidbpktablecurrowcolsrE   rF   rG   r   rK   msg_outrO   rP   rQ   rR   	voice_rawvobjvidk	mcube_urlpost_payloadr_   	resp_jsonerrpayload_for_storagecalloutr4   r4   r5   r9   1   s   


  $$













(




zCallViewSet.createFrk   )detailmethodsc                 C   s   t ddiS )NokTr   )r:   r#   r4   r4   r5   health   s   zCallViewSet.healthN)__name__
__module____qualname__r   rr   select_relatedallquerysetr   serializer_classr;   r9   r   r   r4   r4   r4   r5   r7   (   s     r7   ) r   r{   urllib.requestr"   urllib.errorrest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   apps.agents.modelsr   	django.dbr   apps.cluster.dynamic_tablesr	   r
   modelsr   serializersr   r   r,   rp   floattupler-   r6   ModelViewSetr7   r4   r4   r4   r5   <module>   s    .