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/widgets/__pycache__/endpoints.cpython-310.pyc
o

we�b�@s�ddlZddlZddlmZddlZddlmZmZm	Z	ddl
mZddlm
Z
ddlmZddlmZddlmZdd	lmZmZdd
lmZddlmZmZddlmZdd
lmZddl m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-ddl.m/Z/m0Z0m1Z1m2Z2m3Z3ddl4m5Z5e�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
Cs�tjtjdtjddd�}z)|�dt|����}|dkr'tddidd	d�WS|d
kr6tddd�dd	d�WSWntyS}ztd
|�t	�
d�WYd}~nd}~wwtddidd	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$��
��rAc	Cs�ddlm}t��}tj�ttjf��t	tj
f��tj��|j
��tjt|�k���}t�d�|��|r?d|vr?|ddvsId|vro|ddvrot�dt|j�dt|j�d	�tgd
dt|j��dt|j���d�S|jj}|sz|jj
j}|jr�t�d
�|j��tgdd|j�d�d�Sd}d}zmt|fi|��}|r�tgddd�WSt|fi|��}ddlm}m}|j�|j|jk���}	|j�|j|	j k���}
|
}|j!j"dkr�t#|
j�}t�d�t$|��%||�nt�d�|j&}t'||
j�}t(|��%||�Wnot)�yrg}
|j*D]	}|
�+|j,��qddlm}ddl-m.}|j�|j|jk���}d|
t|j,�t|j,�d�}||�}t/j,ddt/j0�dt/j1��|j2�d�d �}dd!l3m4}|d&i|��}tdd"|j,d#�dd$d�YSwtd|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)rz 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 quotaNr0zCall 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.modelsrr�get_jsonr�query�	outerjoinr�assignmentsr�agent�join�partnership_account�partnership�filter�guidr7�firstr:�info�formatr2�namer�subscription�usage_over_limit�warning�partnership_account_idr rr�id�partnership_id�inboundrNrr�	call_lead�twilio_subaccount_sidrrr!�agents�append�sid�#buyercall.blueprints.chat.endpointsrLr�	firstname�lastname�partner_url�+buyercall.blueprints.notification.utilitiesr)rir�json�widgetrn�leadrg�lead_on_callr�partner_account�partner�client�subaccount_sid�all_agents_sidsrdrLrf�task_payload�	task_resp�es_datar�es_responser?r?r@�call=s���$�& �
���


�

���
��r�c
Csft��}tj�tjt|�k���}t�	d�
|��|r%d|vr%|ddvsCd|vr/|ddvsCd|vr9|ddvsCd|vr]|ddvr]t�dt|j�dt|j�d	�t
gd
dd�S|�d
�}tj�tjtjk���}|svtj�d�}|dkr�t|fddi|��}|j}ztjddtj�dtj��|j�d�d�}Wnty�}zt�t���d}WYd}~nd}~wwt
d|iddd�S|dk�rd}z%tjd i|��}	tjddtj�dtj��|j�d�d�}td i|��}
Wnt�y
}zt�t���d}WYd}~nd}~wwt
d|iddd�S|dk�rfd}z%tjd i|��}tjddtj�dtj��|j�d�d�}td i|��}
Wnt�y\}zt�t���d}WYd}~nd}~wwt
d|iddd�S|dk�r�d}ztjddtj�dtj��|j�d�d�}td i|��}
Wnt�y�}zt�t���d}WYd}~nd}~wwt
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: {}rBrC�lastNamerF�emailAddress�#No lead fields provided for widget rGrHrI�Missing parameters for widgetFrNr�CALL�status�missed�NEW_LEADrSrErTrUN�leadIdr0r1T�CHATrD�TEXT_MESSAGE�
EMAIL_MESSAGEr?)rr`rrarhrir7rjr:rkrlr2rmrr6rrrrrsrryr{r|r}r8�	traceback�
format_excr
�createrr)rirr��itypergr��lead_idr�r>�chatr��messager?r?r@�	save_lead�s�&


���

���

���

���r��adminc
Csd}d}d}tj�tjtjk���}|stj�d�}d}t�	�}|�rt
|�dd��}|�dd	�}|�d
d�}tt��}	|�dd�}
|�dg�}|�d
i�}ddgd�ddiddd�ddd�ddd�gd�}
|
�
|�|jr�|j�dd	�}d	�dd�|D��}tj�tj|jk���d}|dkr�t|�}nd�|�}dd �|D�}||�|�d!�|j|	|||
|tjd"�	}t�||
�\}}|r�|j}tj�tjtjk���}|s�tj�d�}tjd#d$tj�dtj��|j�d%�d&�}td-i|��}nd'|��}d(}d}nd)}d*}d}td+|i|||d,�S).apCreate omnichannel widget

    Args:
        name (str): widget name
        description (str): widget description
        type (str): widget type. Values: widget/adf
        enabled (bool): widget enabled or not. Default: True
        phonenumber_id (str): Phone number sid related to widget (optional)
        options (json): widget configuration
        channels (list): channel's sid

    Returns (json):
        data (json/None): contains widget guid if success else none 
        message (str): success or failure message
        status_code (int): http status code
        success (bool): Whether API was success
    zWidget created successfullyTr0rNrmz
New widget�descriptionrD�enabled�phonenumber_id�channels�optionsF)�H�Z�rNr�r�z	SEND CALL)rN�leadSubmitButtonName�EMAILz
SEND EMAILr�z
START CHAT)�enableNotifications�showPoweredBCIcon�widgetThemeColorr�rEcss�|]	}|��r|VqdS�N)�isalnum)�.0r>r?r?r@�	<genexpr>=s�z create_widget.<locals>.<genexpr>rz0{}cS�g|]}t�|��qSr?)r	�	get_by_id�r�ryr?r?r@�
<listcomp>H�z!create_widget.<locals>.<listcomp>z@inbound.buyercall.com)	r��emailrqrirmr�r�r��
created_by�NEW_WIDGET_CREATEDrSrTrUzWidget creation failed. Error: i�z Partnership account id is empty.i��	widget_id)�status_coder�r\r?)rrarhrrrrqrjr6rr`rr7r�updaterm�replacerer�countrl�
api_createrirrsryr{r|r}rr)r�r\r�rfr��received�widget_name�widget_desc�widget_enabled�widget_guid�widget_phonenumber�channel_sidsr��widget_options�company_before_format�company_after_format�widget_count�widget_count_stringr��paramsr�r2rgr�r�r?r?r@�
create_widget�s�
��
������

��

�
�
r�cCs0tj�tjt|�k���}tt��|�ddd�S)Nr0�Widget fetch successfullyT)	rrarhrir7rjrr�dump)rir�r?r?r@�
get_widgetrsr�cCsdtj�dd�}|rt�|�}ntjpd}tj�tj	dktj|k��
�}tdd��|�}t
|ddd�S)N�unallocated_typerT��manyr0zWidgets fetched successfully)r�argsr6r�get_unallocated_typerrqrarh�
is_options_v3�allrr�r)r��widgetsrq�
response_listr?r?r@�get_all_widgetsxs
��r�cCsFtjpd}tj�tjdktj|k���}tdd��|�}t	|ddd�S)NrFTr�r0r�)
rrqrrarhr�r�rr�r)rqr�r�r?r?r@�get_all_widget_v2�s
��r�cCs�tj�tjt|�k���}t��}|r�|r�|�d|j	�}|�dd�}|�dd�}|�dd�}|�dd�}|�di�}|�dd	�}	|�d
g�}
dd�|
D�}
t
�|�}||_	|	|_t
j|_|r`|n|j|_||_|rk|n|j|_|rs|n|j|_|j}t|fi|��}
|
|_|
r�d
d�|
D�|_ng|_|��t
��}t
jddt|�gt
j�dt
j��t|�g|j�d�d�}tdi|��}td|jiddd	�Stddiddd	�S)z
Update widgetrmrNNr�r�r�r��isActiveTr�cSsg|]}|d�qS)�valuer?)r��csidr?r?r@r��sz!update_widget.<locals>.<listcomp>cSr�r?)r	�
get_by_sidr�r?r?r@r��r��
WIDGET_EDITEDrSrErTrUr�r0r1r?)rrarhrir7rjrr`r6rmr�get_id_from_sidr�rrr�
updated_byrNr��
inbound_idr��dictr��save�get_partnershipryr{r|r}rr)rir�r��result_name�result_typer��result_enabled�result_phonenumber�result_options�	is_activer��phonenumber�existing_options�new_optionsrgr�r�r?r?r@�
update_widget�sJ


�r�cCs�|r�tj�tjt|�k���}t��}|r=d|vr|ddvs=d|vr)|ddvs=d|vr3|ddvs=d|vrD|ddvrDtiddd�St	�
|�d�|�d��}|rvd	}|j|�dd
�krd|�dd
�|_
|jsn|�dd�|_d|_|��nd}|d|d|d|d|jdd
d�}t	jdi|��}ddlm}|�d�}|�dd�|�dd�|�d�|j|jd	d|j|j|d�
}tjdi|��}	|j|j|	jd�}
tjdi|
��}|��d|||||j�tiddd	�Stgddd�S)z3 Send email using the data getting from the widget rBrCr�rFr�rIr�FTNrD�newr��r{r|�
phonenumber_1r�rqr��
bdc_statusr��InteractionManagerr�)
�
first_name�	last_namer��source�channel�
is_inbound�
is_forward�
contact_idrq�	meta_data)�contact�
channel_idr�r0zMail sent successfully!r?)rrarhrir7rjrr`rr�findr6r��
phonenumber_2r|r�r�rqr��6buyercall.blueprints.widgets.utils.interaction_managerr��get_channel_by_typer�rrr#r�run)�
widget_sidr�r�r�is_existing_contactr�r�r��email_params�email_object�	cc_params�contact_channelr?r?r@�send_lead_mail�sf
�	


���rc
CsLd}d}d}t��}tj�tjt|�k���}|�rt�	d�
|��|r.d|vr.|ddvsLd|vr8|ddvsLd|vrB|ddvsLd	|vrf|d	dvrft�d
t|j�dt|j�d�t
gd
dd�St�|�d	�|�d��}|r�d}|j|�dd�kr�|�dd�|_|js�|�dd�|_d|_|��nd}|d|d|d|d	|jddd�}tjdi|��}td|�ddlm}	|�d�}
|s�|�dd�|�dd�|d	|d|
j|
j|j|j|jd�	}tjdi|��}|j|
j|jd�}
tjdi|
��}|	�� d||
|||j�}|j!|j|j"|j�p|j|d�}t
||d�St
gd
dd�S)NzChat started successfully!r0Tr�rBrCr�rFr�r�rGrHrIr�FrDr�r�r�zis_existing_contact : rr�r�)	r�r�r��phone_numberr�r�r�r�rq)rrr�)r�rmr�r�assigned_agent_id)�datar�r?)#rr`rrarhrir7rjr:rkrlr2rmrrrr6r�rr|r�r�rqr�r9rr�rr�rrr
rrryr�)rr�r�r\r�r�rr	r�r�r��chat_params�chat_objectrr
�assigned_agents_idsrr?r?r@�
start_chats~&
�	



����rr�)C�loggingr:r��uuidrr3�flaskrrr�
flask_corsr�flask_loginr�"buyercall.blueprints.agents.modelsr�$buyercall.blueprints.channels.modelsr	� buyercall.blueprints.chat.modelsr
�$buyercall.blueprints.contacts.modelsrrr~rr_rr�(buyercall.blueprints.phonenumbers.modelsr�buyercall.blueprints.sms.modelsr�$buyercall.blueprints.user.decoratorsr�%buyercall.blueprints.widgets.rest_apir�(buyercall.blueprints.widgets.serializersr�buyercall.lib.util_restr�buyercall.lib.util_twiliorr�modelsrr�routingrrrr r!�email.modelsr#�	getLogger�__name__�
widget_apirAr�r�r�r�r�r�r�rrr?r?r?r@�<module>s\


]
^v

1O