File: //home/arjun/projects/buyercall/buyercall/blueprints/widgets/__pycache__/endpoints.cpython-310.pyc
o
we�b � @ s� d dl Zd dlZd dlmZ d dlZd dlmZmZm Z d dl
mZ d dlm
Z
d dlmZ d dlmZ d dlmZ d d lmZmZ d d
lmZ d dlmZmZ d dlmZ d d
lmZ d dl m!Z! d dl"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 e�6e7�Zede7ddd�Z8e� dd� �Z9e� dd� �Z:e� d d!� �Z;e� e!d"�d#d$� ��Z<e� d1d%d&��Z=e!d"�d'd(� �Z>d)d*� Z?e� e!d"�d+d,� ��Z@e� d1d-d.��ZAe� d/d0� �ZBdS )2� N)�uuid4)�request� Blueprint�current_app)�cross_origin)�current_user)�Agent)�Channel)�Chat)�Contact�ContactChannelTie��send_notifications��Partnership�PartnershipAccount)�Phone)�Message)�api_role_required)�fix_name)�WidgetOutSelectedResponseSchema)�api_jsonify)� bw_client�subaccount_client� )�Widget�AgentAssignment)�BandwidthRouting�Routing�add_widget_lead�phonecall_inprogress�NoAgentsException� )�Email�chat_widget_api� templatesz/api/widget)�template_folder�
url_prefixc
C s� t jtjd tjd dd�}z)|�dt| �� ��}|dkr'tddidd d�W S |d
kr6tddd�dd d�W S W n tyS } ztd
|� t �
d� W Y d }~nd }~ww tddidd d�S )N�REDIS_CONFIG_URL�REDIS_CONFIG_PORTT)�host�port�decode_responses�CONNECT�1�callConnect�� �Successz-1F)r/ �errorzError : z2Cannot retrieve lead status - is Redis accessible?)�redis�StrictRedisr �config�get�strr � Exception�print�logr2 )�lead_sid�redis_db�connect�e� r? �H/home/arjun/projects/buyercall/buyercall/blueprints/widgets/endpoints.py�call_status( s$ ��
��rA c C s� ddl m} t�� }tj�ttjf��t tj
f��tj��|j
��tjt| �k��� }t�d�|�� |r?d|v r?|d dv sId|v ro|d dv rot�dt|j� d t|j� d � tg d
dt|j�� dt|j�� �d�S |jj}|sz|jj
j}|jr�t�d
�|j�� tg dd|j� d�d�S d}d}zmt|fi |��}|r�tg ddd�W S t|fi |��}ddl m}m} |j�|j|jk��� } |j�|j| j k��� }
|
}|j!j"dkr�t#|
j�}t�d� t$|��%||� nt�d� |j&}t'||
j�}t(|��%||� W no t)�yr g }
|j*D ] }|
�+|j,� �qddl m} ddl-m.} |j�|j|jk��� }d|
t|j,�t|j,�d�}||�}t/j,ddt/j0� dt/j1� �|j2� d�d �}dd!l3m4} |d&i |��}tdd"|j,d#�dd$d� Y S w td|j,d%�dd$d�S )'z� The endpoint that gets called when the lead presses 'Call Now!' on the
widget.
Receives the widget GUID as a query string parameter, and the user's data
in the JSON body.
r )r z The call widget json request: {}� firstName�� � �phoneNumberz(No lead fields provided for call widget � - �.� �-Fz0partnership_account {} has exceeded their quota.i� zpartnership_account z has exceeded their quotaNr0 zCall in progressTr �trackingzCalling Bandwidth number...zCalling Twilio number...)�create_task�MISSED_CALL_FOLLOW_UP)�type�users�
partnershipId�partnershipAccountId�MISSED_CALL�You'verE � /settings��user_id�notify_message_type�user_related_entities�other_user_related_entities� hyperlinkr
�
ERR_NO_AGENTS)�success�code�callIdr1 )r\ r^ r? )5�'buyercall.blueprints.partnership.modelsr r �get_jsonr �query� outerjoinr �assignmentsr �agent�join�partnership_account�partnership�filter�guidr7 �firstr: �info�formatr2 �namer �subscription�usage_over_limit�warning�partnership_account_idr r r �id�partnership_id�inboundrN r r � call_lead�twilio_subaccount_sidr r r! �agents�append�sid�#buyercall.blueprints.chat.endpointsrL r � firstname�lastname�partner_url�+buyercall.blueprints.notification.utilitiesr )ri r �json�widgetrn �leadrg �lead_on_callr �partner_account�partner�client�subaccount_sid�all_agents_sidsrd rL rf �task_payload� task_resp�es_datar �es_responser? r? r@ �call= s� ��$�& �
���
�
���
��r� c
C sf t �� }tj�tjt| �k��� }t� d�
|�� |r%d|v r%|d dv sCd|v r/|d dv sCd|v r9|d dv sCd|v r]|d dv r]t�dt|j� d t|j� d � t
g d
dd�S |�d
�}tj�tjtjk��� }|svtj�d�}|dkr�t|fddi|��}|j}ztjddtj� dtj� �|j� d�d�}W n ty� } zt�t�� � d}W Y d}~nd}~ww t
d|iddd�S |dk�rd}z%tjd i |��} tjddtj� dtj� �|j� d�d�}td i |��}
W n t�y
} zt�t�� � d}W Y d}~nd}~ww t
d|iddd�S |dk�rfd}z%tjd i |��}tjddtj� dtj� �|j� d�d�}td i |��}
W n t�y\ } zt�t�� � d}W Y d}~nd}~ww t
d|iddd�S |dk�r�d}ztjddtj� dtj� �|j� d�d�}td i |��}
W n t�y� } zt�t�� � d}W Y d}~nd}~ww t
d|iddd�S dS )!z� Saves the lead information in the database. Receives the widget GUID as a query string parameter,
and the user's data in the JSON body.�/The after hours call widget json request is: {}rB rC �lastNamerF �emailAddress�#No lead fields provided for widget rG rH rI �Missing parameters for widgetFrN r �CALL�status�missed�NEW_LEADrS rE rT rU N�leadIdr0 r1 T�CHATrD �TEXT_MESSAGE�
EMAIL_MESSAGEr? )r r` r ra rh ri r7 rj r: rk rl r2 rm r r6 r rr r rs r ry r{ r| r} r8 � traceback�
format_excr
�creater r )ri r r� �ityperg r� �lead_idr� r>