o
    ^5j¾!  ã                	   @   sX  d dl 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 d dlmZmZmZmZ d dlmZmZmZ d d	lmZ d
dddœddddœddddœddddœddddœddddœgZdddd d!d"œZd#e
d$ed%efd&d'„Zd#e	d(ed%efd)d*„Zd#e	d%edB fd+d,„Zd#ed$ed%efd-d.„Z d%efd/d0„Z!d1edB d%efd2d3„Z"dS )4é    N)ÚHTTPException)ÚSettings)ÚResponseMode)ÚWorkflowHandleOptionRequestÚWorkflowStartInteractiveRequestÚWorkflowStartRequest)ÚListRowÚListSection)Úbuild_list_responseÚbuild_text_responseÚcontrolled_errorÚrender_response)Ú!build_quick_reply_message_payloadÚbuild_text_message_payloadÚsend_conversation_message)Úbuild_mbia_entry_responseÚemergencia_cobrozEmergencia de CobrozAtencion urgente para cobros©ÚidÚtitleÚdescriptionÚsoporteÚSoportezAyuda con problemas del sistemaÚimplementacionÚImplementacionzDudas sobre implementacionÚventasÚVentaszInformacion comercialÚadministracionÚAdministracionzConsultas administrativasÚmbiaÚMBIAzAsistente conversacional MBIAzéPara poder apoyarte, necesitamos nos indiques:
1. Tu nombre y empresa
2. La tienda y caja en la que tienes el inconveniente
3. Envianos foto, imagen o video del problema
4. Descripcion del inconveniente
5. Opcional: Numero de AnyDeskzäPara poder apoyarte, necesitamos nos indiques:
1. Tu empresa
2. Sistema que estas utilizando
3. Opcion que estas utilizando
4. Descripcion de lo que deseas podamos apoyarte
5. Envianos foto o video
6. Opcional: Numero de AnyDeskzjPara poder apoyarte, necesitamos nos indiques:
1. Tu nombre y empresa
2. Descripcion de la duda que tienesz¿Gracias por comunicarte a Ventas. Para atenderte de mejor manera, escribenos:
1. Tu nombre
2. Tu numero de telefono
3. Tu correo electronico
4. El nombre de tu empresa
5. Tu tipo de industriaz‚Te has comunicado a Administracion. Por favor, envianos:
1. Tu nombre y empresa
2. NIT de tu empresa
3. Descripcion de tu consulta)r   r   r   r   r   ÚrequestÚmodeÚreturnc                 C   s    t ƒ }| jst|dƒS t||ƒS )NÚfallback)Úbuild_main_menu_responseÚsupports_interactiver   )r!   r"   Úinternal_response© r(   úF/var/www/html/macrobase-freshchat-api/app/services/workflow_service.pyÚstart_workflowL   s   

r*   Úsettingsc              
   C   sL  t | ƒ}|stdg d¢ddœƒS tƒ }t|dƒ}|d d d }| d	¡p-| d
¡p-|d }dd„ | dg ¡D ƒ}| jp>|j}| jpD|j}	t	|d |||	| j
d�}
|
}d}d }zt|||
ƒ}W n( ty‡ } z|j}t|||	| j
d�}t|||ƒ}|}d	}W Y d }~nd }~ww i |¥|dkr‘dndi | di ¡¥|||||dœ¥ddœ¥S )Nz]No se recibio conversation_id. Configura el body con el placeholder de conversacion correcto.)Úconversation_idÚconversationAliasÚconversation_aliasÚconversationIdzEEn los logs de Freshworks normalmente aparece como conversationAlias.)Úexpected_fieldsÚhintÚfreshchat_simpleÚdataÚmessagesr   Úfallback_textÚsend_messageÚtextc                 S   s0   g | ]}|  d g ¡D ]}|d |d dœ‘q
qS )Úrowsr   r   )r   r   )Úget)Ú.0ÚsectionÚrowr(   r(   r)   Ú
<listcomp>j   s    
úüþÿz.start_workflow_interactive.<locals>.<listcomp>Úsections)r7   ÚoptionsÚ
actor_typeÚactor_idÚuser_idÚinteractive)r7   r@   rA   rB   zMenu interactivo enviado.zFallback de texto enviado.)r,   Úfreshchat_messageÚsent_payloadÚsent_asÚinteractive_errorT)Úmensajer3   Úsent)Ú_resolve_conversation_idr   r%   r   r9   r@   Úfreshworks_default_actor_typerA   Úfreshworks_default_actor_idr   rB   r   r   Údetailr   )r!   r+   r,   r'   ÚrenderedÚmessager5   r?   r@   rA   Úinteractive_payloadrE   rF   rG   Úfreshchat_responseÚexcÚfallback_payloadr(   r(   r)   Ústart_workflow_interactiveS   sr   ùþ

û	ûü€öÿ
ÿúõrT   c                 C   sB   | j | j| j| jg}|D ]}|rd|vrd|vr| ¡   S qd S )Nz{{z}})r,   r-   r.   r/   Ústrip)r!   Ú
candidatesÚ	candidater(   r(   r)   rJ   Ÿ   s   ü€rJ   c                 C   sR   t | jp| jƒ}|dkrtƒ }t|| jsdƒS |ƒS t |¡}|s%tdƒS t	|ƒS )Nr   r$   zPNo fue posible identificar la opcion seleccionada. Por favor intenta nuevamente.)
Únormalize_optionÚselected_option_idÚselected_optionr   r   r&   ÚOPTION_RESPONSESr9   r   r   )r!   r"   Ú	option_idr'   rO   r(   r(   r)   Úhandle_option¬   s   
r]   c                  C   s2   d} d}dd„ t D ƒ}td| dtd|d�g|d	�S )
Nz„Hola, soy MBBot y estoy para servirte. Por favor escoge una de las siguientes opciones para poder comunicarte al area que necesitas.z…Por favor responde con una de estas opciones:
1. Emergencia de Cobro
2. Soporte
3. Implementacion
4. Ventas
5. Administracion
6. MBIAc                 S   s&   g | ]}t |d  |d |d d�‘qS )r   r   r   r   )r   )r:   Úoptionr(   r(   r)   r=   È   s    ÿÿz,build_main_menu_response.<locals>.<listcomp>zSelecciona una opcionzVer opcioneszAreas disponibles)r   r8   )rH   r7   Úbutton_textr>   r5   )ÚMAIN_MENU_OPTIONSr
   r	   )Ú	menu_textr5   r8   r(   r(   r)   r%   º   s   ÿÿ	þûr%   Úvaluec                 C   sì   | sdS t  d| ¡}d dd„ |D ƒ¡}| ¡  ¡ }| dd¡ dd¡}| dd¡}d | ¡ ¡}i d	d
“dd
“dd
“dd
“dd
“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“ddddœ¥}| || dd¡¡S )NÚ ÚNFKDc                 s   s   � | ]
}t  |¡s|V  qd S )N)ÚunicodedataÚ	combining)r:   Úcharr(   r(   r)   Ú	<genexpr>Ù   s   € z#normalize_option.<locals>.<genexpr>ú-ú Ú_Ú.Ú1r   zopcion 1zemergencia cobrozemergencia de cobroÚcobroÚ2r   zopcion 2Ú3r   zopcion 3Ú4r   zopcion 4Ú5r   zopcion 5r   )Ú6zopcion 6r   )re   Ú	normalizeÚjoinÚlowerrU   ÚreplaceÚsplitr9   )rb   Ú
normalizedÚaliasesr(   r(   r)   rX   Õ   s`   ÿþýüûúùø	÷
öõôóòñðïìrX   )#re   Úfastapir   Úapp.core.configr   Úapp.schemas.commonr   Úapp.schemas.freshchatr   r   r   Úapp.schemas.responsesr   r	   Ú!app.services.conversation_builderr
   r   r   r   Úapp.services.freshchat_clientr   r   r   Úapp.services.mbia_servicer   r`   r[   Údictr*   rT   ÚstrrJ   r]   r%   rX   r(   r(   r(   r)   Ú<module>   sD    





ú	à(ÿþ
ýL