HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/buyercall/blueprints/chat/__pycache__/endpoints.cpython-310.pyc
o

we��@sPddlmZddlmZmZddlZddlmZmZm	Z	ddl
mZddlm
Z
ddlmZddlmZdd	lmZdd
lmZmZddlmZddlmZdd
lmZddlmZededd�Ze� e�Z!d*dd�Z"d+dd�Z#e
dd��Z$e
dd��Z%e
dd��Z&e
dd��Z'e
dd��Z(d d!�Z)d"d#�Z*d$d%�Z+e
d&d'��Z,e
d(d)��Z-dS),�)�uuid4)�datetime�	timedeltaN)�	Blueprint�request�current_app)�current_user)�authenticate)�api_jsonify)�Widget)�	es_client)�insert_data_by_index�search_data)�ask_rasa)�flask_environment)�get_available_agent_ids)�Q�chat_apiz	/api/chat)�
url_prefixcOs�|rC|sC|�d�dkr=d|vr!t|�dkr|ddd�Sdddd�Sd	|vr7t|�d
kr1d|dd�Sdddd�Sdddd�Sdddd�S|s�|r�|�d�dkr�d|vrdt|�dkr^|ddd�Sdddd�Sd	|vrzt|�d
krtd|dd�Sdddd�Sdddd�Sdddd�S|r�|r�|�d�dkr�|�d�dkr�d|vr�|n|}d	|vr�|n|}d|vr�d	|vr�t|�dkr�t|�d
kr�||dd�Sdddd�Sdddd�Sdddd�Sdddd�S)a!
    This method validates the received from and to of chat and finds who is user and agent.
    user's id contains the string 'USER' and agent's id contains the string 'AGENT'.
    :chat_from param: str
    :chat_to param: str
    :return dict: {user: str, agent: str, success: bool}
    �-�
�USER�NNT)�user�agent�successF�AGENT�O)�count�len)�	chat_from�chat_to�args�kwargsrr�r$�E/home/arjun/projects/buyercall/buyercall/blueprints/chat/endpoints.py�validate_from_tosFr&cCs\|st��}|r�|�dd�}|�dg�}|�dd�}|�dd�}|�dd�}tj}|r�|r�dd	lm}|j�|j|k��	�}|sGt
gd
dd�Sdd
lm}	t
�}
d|
��}ddlm}|D];}
|	j�|	j|
k��	�}|sut
gd
dd�St�d|t��t��t��tdd�|t|�d|
||d�}||t|�}q]t
gddd�St
gd
dd�St
gd
dd�S)z Create a task for agent �type�CUSTOM_TASK_FOLLOW_UP�agents�
partnershipIdN�partnershipAccountId�interactionr)�Partnership��Invalid request parameters!F)�Agent�buyercall-interaction-task-��put_to_elasticsearch�)�days�OPEN)�task_id�	is_viewed�	task_type�
created_at�
updated_at�due_date�partnership_id�partnership_account_id�status�user_id�action_user�interaction_id��zTask added successfully!T)r�get_json�getr�sid�'buyercall.blueprints.partnership.modelsr-�query�filter�firstr
�"buyercall.blueprints.agents.modelsr0r�buyercall.blueprints.user.tasksr3rr�utcnowr�strr)�receivedr9r)�partnership_sid�partnership_account_sidr,�action_user_sidr-�partnershipr0�	log_state�
index_namer3r�ag�es_data�es_respr$r$r%�create_taskDsN
�rYc 
Cs�t��}|r[|�dd�}|�dd�}|�dd�}|�dd�}|�di�}|�dd�}|�dd�}d	}|r:|�d
d�}tj�tj|k���}	ddlm	}
|
j�|
j
|	jk���}|j}nt
id
dd�S|�rv|�rv|�rvt||�}
|
ds{t
id
dd�Sd|vr�dnd}tt��t��|||t|�|||||d�d�}t�}d|��}ddlm}||t|�}|dk�r�|	j�dd�}d}|r�t||�}|�rg}|��}|D],}tt��t��|||t|�dd|�dd	�|dd�d�}||t|�}|�|�dd	��q�t
d|d
|id�ddd�St|	�}g}|	jD]	}|�|j��q|�r�tt��t��|||t|�ddd |d	d�d�}||t|�}|�d!��r|td/id#|d$d#i��}t|t|�}|d%d%�r||d%d%dd&d'}d(|�d)�||t|j�t|�d*�}t|�}t
d	|d
d+id�ddd�Stt��t��|||t|�ddd,|d	d�d�}t |t|�}|�d!��r�td/id#|d$d#i��}t|t|�}|d%d%�r�|d%d%dd&d'}t!d-|�d.|�d)�||t|j�t|�d*�}t|�}t
d	|d
d,id�ddd�St|	�}g}|	jD]	}|�|j��qtt��t��|||t|�||d	||d�d�}||t|�}|�d!��ritd/id#|d$d#i��}t|t|�}|d%d%�ri|d%d%dd&d'}|�d)�||t|j�t|�d*�}t|�}t
d	|d
d	id�ddd�St
id
dd�S)0z! Incoming first chat interaction �fromN�leadIdr*�to�payloadr'�widgetId��messager)�PartnershipAccountr.z"Missing parameters in the request.Fr�"Invalid parameters in the request.rT)r'r`�
isLeadtoBCrZ)rBr:�customer_id�lead_idr=r>r'�interaction_object�buyercall-lead-interaction-r2�CHAT_MESSAGE�
isRasaEnabled�text�RASA)rZr\r]rC�Success�INFOzTOur representative has been notified of the request and will join  the chat shortly.r?�term�_id�meta�hits�_sourcerB�NEW_�
_FOLLOW_UP�r'r)r*r+r,z]Our representative has been notified of their request and that they will chat to them shortly�__ERR_NO_AGENTS__zinteraction_id : �MISSED_�rn)"rrDrErrHrI�guidrJrGra�idr>rFr
r&rNrrrMrrLr3r�_optionsr�json�appendrr)rrrYr
�print) rO�	lead_fromrer=�lead_tor]�interaction_type�widget_guidr`�widgetra�partnership_accountr>�
who_is_who�
is_lead_to_bcrWrTrUr3�es_response�is_rasa_enabled�
rasa_reply�rasa_replies�reply�	agent_ids�all_agents_sidsrrH�es_search_responserB�task_payload�	task_respr$r$r%�interact{sx
��
��



�����
��
����	��

����
������r�cCsft��}ddlm}m}|r�|�dd�}|�dd�}|�dd�}|�dd�}|�d	i�}|�d
d�}tj�tj	|k��
�}	|j�|j|	jk�}
d}|rQ|�dd�}|r�|r�t
||�}|dsetid
dd�Sd|vrkdnd}
|d}|d}t��|||t|
j�dd||
||d�d�}t�}d|��}ddlm}||t|�}tiddd�Stid
dd�Stid
dd�S)z Log every chat to es r�r-rarZNr\r_r[r*r]r^r`rr.rbFrTrr�LOG)r'r`rcrZr\)r:r�leadrSr>r'r,rgr2rCrlzInvalid input parameters)rrDrGr-rarErrHrIryrJrzr>r&r
rrMrNrFrrLr3r)rOr-rar r!rer=r]r�r�r�r`r�r�rrrWrTrUr3r�r$r$r%�chat_logbsR
��
r�cCs�ddlm}m}tjj}|j�|jtj	k��
�}|�rN|�rNtdtd=id|i��td=id|i��gd�}t�}d|��}t
|t|dd	�}|d
d
�rGd|d
dd
i}g}	ddlm}
|d
d
D]�}i}|dd|d<|dd|d<|dd|d<|dd|d<|dd|d<|dd|d<|dd|d<|dd|d<|dd|d <i|d!<td=id"|dd#i��}
d$|��}t
|
t|d%�}i}|d
d
�r2|d
d
dd}|df|d<|d&f|d'<|d#f|d(<|d)f|d*<|d+f|d,<|
j�|
j|d-k��
�}i}|�r.|d-|d.<|j|d/<|j|d0<|j|d1<|j|d2<||d3<||d!<|	�|�qc|	|d4<t|d5d6d7�Stgd5d8d7�Stgd9d:d;�S)>z Get all tasks for an agent rr��boolrnzpartnership_id.keywordzuser_id.keyword��mustr1��qr�index�offsetrq�totalRecordCount�total�value��Leadrrr7�taskIdr9�taskTyper:�	createdAtr;�	updatedAtr<�dueDater=r*r>r+r?rA�actionUserId�interactionDetailsrorBrg�r�rr�r'�interactionType�
interactionIdrd�
customerIdrfr]rer[�
leadFirstName�leadLastName�	leadEmail�leadPhoneNumber�leadDetails�tasksrCzTasks fetched successfulyTzNot tasks found!r.r/FNrx)rGr-rarrrFrHrIrzr=rJrrrr�!buyercall.blueprints.leads.modelsr��	firstname�lastname�email�phonenumberr}r
)r-ra�	agent_sidrPrH�flas_envrUr��datar�r��hit�_task�query2�es_interaction_response�_task_interactionr,r��
_lead_detailsr$r$r%�	get_tasks�sl�
�




r�cCs�|r�ddlm}m}tdtd|d�gd�}t�}d|��}t|t|dd�}|r�|d	d
ddkr�ddd
|d	d	dddiii}dtt�	���dtt
j���}d|��}ddlm
}	|	|t||d�}
|
dsrtgd|
dd�S|j�|jt
jk���}|s�|j�d�}g}t|t|dd�}
|
r�|
d	d
ddkr�|
d	d	D]}|�|dd�q�|r�t
jddt
j�dt
j��|j�d�|d�}ddlm}|d%i|��}tgd d!d"�Stgdd#d�Stgdd#d�Stgdd#d�S)&�
 Pick a task rr�r�rn�r7r�r1r�rqr�r�rHzinteraction_id.keywordrrrBz7ctx._source.status='inprogress';ctx._source.updated_at=z;ctx._source.action_user=��update_to_elasticsearch)rU�scriptr?r.r`F�r@�TASK_PICKEDzYou've� z/tasks)r@�notify_message_type�user_related_entities�other_user_related_entities�	hyperlink�additional_notify_users)�send_notificationsrCzSuccessfully picked the task!Tr/Nr$)rGr-rarrrrrNrrMrrFrLr�r
rHrIrzr=rJrEr}r�r��partner_url�+buyercall.blueprints.notification.utilitiesr�)r7r-rarHrTrUr��update_queryr�r��resprS�assigned_agent_sids�es_tasks_responser�rWr�r$r$r%�	pick_task�sN
 �

�r�cCsX|�r%tdtd|d�gd�}d}t�}d|��}t|t|d|d�}|�r|d	d	�r|d	d	d}i}dd
lm}i}	|dd|	d
<|dd|	d<|dd|	d<|dd|	d<|dd|	d<|dd|	d<|dd|	d<|dd|	d<|dd|	d<i|	d<td8id|ddi��}
d |��}t|
t|d!�}i}|d	d	�r|d	d	dd}
|
df|d<|
d"f|d#<|
df|d$<|
d%f|d&<|
d'f|d(<|j�|j|
d)k��	�}i}|�r|
d)|d*<|j
|d+<|j|d,<|j|d-<|j
|d.<||d/<||	d<|	|d0<t|d1d2d3�Stgd4d5d6�Stgd1d2d3�Stgd1d2d3�S)9r�r�rnr�r��-created_atr1r)r�rr�r��sortrqr�rrr7r�r9r�r:r�r;r�r<r�r=r*r>r+r?rAr�r�rorBrgr�r'r�r�rdr�rfr]rer[r�r�r�r�r��taskr.r/FrCz!Task with the given id not found!TNrx)rrrrr�r�rHrIrFrJr�r�r�r�r
)r7rH�sort_stringr�rUr�r�r�r�r�r�r�r�r,r�r�r$r$r%�get_task_by_ids`





r�c	Cs�tdtdiddi��gd�}t�}d}t�}d|��}t|t|d|d	�}t|t|d
d|d�}d
di}|r8||d
<|rP|ddrP|ddd}|dd|d<t|ddd�S)Nr�rnr8Fr�r�r1T)r�rr��
count_onlyr�r�r�r�rr��limitr�r��
unViewedCountrqrrr:�latestTaskCreatedAtrCz Task meta feteched successfully!rx)rrrrr
)	rHr�r�r�rU�es_response1�es_response2r�r�r$r$r%�get_tasks_metaMs
r�cCs�t��}|�dd�}tdtdid|i��gd�}t�}d|��}d}ddlm}||t||�}|d	s<tgd
|dd�Stid
dd�S)Nr7r�rnr�r1zctx._source.is_viewed=truerr�r?r.r`FrCz&Task View status updated successfully!Trx)	rrDrErrrLr�rr
)rOr7rHr�rUr�r�r�r$r$r%�update_task_viewedbs
r�c	Cs�t��}|�dd�}|�dd�}|�dd�}|rPtdtdi|gd�d���gd�}d	}t�}d
|��}t|t||||d�}t|j�t|j	�t
|��dd
d�SdS)N�search_queryr�r�r��multi_match)r7r9r?r@rArBr=r>)rH�fieldsr�r�r1)r�rr�r�r�r�rCzTask List Fetched SuccessfullyT)r�)rrDrErrrrr~�aggregations�aggsr
�to_dict)	rOr�r�r�rHr�r�rUr�r$r$r%�search_taskrs$�
�

�r�cCs0t��}|�dd�}|�dd�}|�dd�}t�}d|��}tj�tj|k���}g}|j	D]}|�
|j�q.ddlm}	m
}
|
j�|
j|jk���}|	j�|	j|jk���}|r�tdid|i��}
t|
t|�}|ddr�|dddd	d}|�d
�||jt|j�t|�d�}t|�}tidd
d�SdS)NrB�	widget_idr'rgrr�rnrqrrrtrurCzTask send successfully!Trx)rrDrErrrHrIrFrJr)r}rGr-rarzr>r=rrrrNrYr
)rOrBr�r�rTrUr�r�rr-rar�rSrHr�r�r�r$r$r%�interaction_task�s>


����r�c
	Cs�t��}|�dd�}|rltdtd|d�gd�}d}t�}d|��}t|t|dd	|d
�}|reg}|ddD]*}|dd
|dd|dd|dd|dd|dd|ddd�d�}	q5|�|	�t|ddd�SdS)Nrer�rn)rer�r�rg�rr�rqrrrBr:r'rdrZr`)�fromLeadr`)�interaction_IDr�r�r@�lead_IDr]rCz"Interactions Fetched Successfully!T)	rrDrErrrrr}r
)
rOrerHr�r�rUr�r�r��_interactionr$r$r%�task_interactions�s.







��
�r�)NN)N).�uuidrrr�logging�log�flaskrrr�flask_loginr�buyercall.blueprints.chat.utilsr	�buyercall.lib.util_restr
�#buyercall.blueprints.widgets.modelsr�buyercall.extensionsr�.buyercall.integrations.elasticsearch.utilitiesr
rr�buyercall.blueprintsr�$buyercall.blueprints.widgets.routingr�elasticsearch_dslr�__name__r�	getLogger�loggerr&rYr�r�r�r�r�r�r�r�r�r�r$r$r$r%�<module>sH


/7
g
5
F
4
8
%