o
    ^5j<   ã                   @   sŠ  d dl 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mZmZmZ d dlmZmZ d dlmZmZmZ e  e¡Zd	eeef d
edeeef fdd„Zd	eeef d
edeeef fdd„Zd	eeef deeef fdd„Zdeeef defdd„Zdeeef defdd„Z deeef dedefdd„Z!deeef de"fdd„Z#dedeeef deeef fdd„Z$dS ) é    N)ÚAny)ÚSettings)ÚWorkflowHandleOptionRequestÚWorkflowStartInteractiveRequest)Úcontrolled_error)Úis_event_processedÚmark_event_processedÚmark_menu_sentÚset_last_optionÚwas_menu_sent)Úbuild_text_message_payloadÚsend_conversation_message)Úhandle_optionÚnormalize_optionÚstart_workflow_interactiveÚpayloadÚsettingsÚreturnc                 C   sÈ   t | ƒ}|d stdd|iƒS t|ƒstd|ƒS t|dƒ}t||ƒr'td|ƒS t||ƒ t||d ƒr8td|ƒS tt	|d pC|d	 pCd
|d |d pM|d	 ddd�|ƒ}| 
d¡dkrbt||d ƒ |S )NÚconversation_idú%El evento no incluye conversation_id.Úcontextz4Evento ignorado porque no fue originado por usuario.ÚconversationzEvento duplicado ignorado.z.El menu ya fue enviado para esta conversacion.Úuser_idÚactor_idÚ ÚwhatsappT©Úclienter   r   ÚcanalÚsupports_interactiveÚerrorÚfalse)Úextract_event_contextr   Ú_is_user_eventÚ_ignoredÚ
_event_keyr   r   r   r   r   Úgetr	   )r   r   r   Ú	event_keyÚresponse© r)   úM/var/www/html/macrobase-freshchat-api/app/services/freshchat_event_service.pyÚ!handle_conversation_created_event   s0   





ûø
r+   c           
      C   s–  t | ƒ}|d stdd|iƒS t|ƒstd|ƒS t|dƒ}t||ƒr'td|ƒS t||ƒ t|d p4|d ƒ}|r“tt	|d	 pC|d
 pCd||ddd�|j
ƒ}| d¡dkr“| d¡dkr“|d }t||j|j|d	 pl|d
 d�}t||d |ƒ}t||d |ƒ i |¥di | di ¡¥||dœ¥dœ¥S t||d ƒsÆtt|d	 p¥|d
 p¥d|d |d	 p¯|d
 ddd�|ƒ}	|	 d¡dkrÄt||d ƒ |	S td|ƒS )Nr   r   r   z<Evento ignorado porque fue originado por bot/agente/sistema.ÚmessagezMensaje duplicado ignorado.Úmessage_textÚreply_payloadr   r   r   r   T)r   Úselected_optionÚselected_option_idr   r   r    r!   Úresponse_typeÚtextÚmensaje)r2   Ú
actor_typer   r   Údata)r   Úfreshchat_message)Úsentr5   r   z2Mensaje de usuario recibido sin opcion reconocida.)r"   r   r#   r$   r%   r   r   r   r   r   Údefault_response_moder&   r   Úfreshworks_default_actor_typeÚfreshworks_default_actor_idr   r
   r   r   r   r	   )
r   r   r   r'   r/   Úoption_responser2   Úpayload_to_sendÚfreshchat_responser(   r)   r)   r*   Úhandle_message_created_event6   sz   




ûø
üýÿ
ÿýý
ûø

r>   c              	   C   s^  |   d¡pi }|  d¡p|   d¡pi }|  d¡p|   d¡pi }|  d¡p*|   d¡p*i }|s?t|  d¡tƒr?|d r?|d d }|  d¡pEi }|  d¡pLi }|  d	¡pe|  d	¡pe|   d
¡pe|   d	¡pe|   d¡}|  d¡pt|  d¡pt|   d¡}|  d¡p~|  d¡}	|  d¡pˆ|  d¡}
|  d¡pœ|   d¡pœ|   d¡pœ|   d¡}|   d¡|||	|
|t|ƒt|ƒdœS )Nr5   Úactorr   r,   ÚmessageséÿÿÿÿÚassociationsÚuserr   ÚconversationAliasÚconversationIdr   Úidr   Útyper4   ÚmessageAliasÚ
message_idÚ	messageIdÚevent)rK   r   r   r   r4   rI   r-   r.   )r&   Ú
isinstanceÚlistÚ_extract_message_textÚ_extract_reply_payload)r   r5   r?   r   r,   rB   Úassociated_userr   r   r   r4   rI   r)   r)   r*   r"   y   sH   
ÿþýû
ÿþüør"   r,   c                 C   s¢   |   d¡pg }|D ]3}|  d¡pi }|  d¡}|r!t|ƒ ¡   S |  d¡p'i }|  d¡p1|  d¡}|r<t|ƒ ¡   S q	|   d¡pF|   d¡}|rOt|ƒ ¡ S dS )NÚmessage_partsr2   ÚcontentÚquick_reply_buttonÚcustom_reply_textÚlabelr   ©r&   ÚstrÚstrip)r,   ÚpartsÚpartr2   rR   Úquick_replyrT   r)   r)   r*   rN   ¢   s   
ÿrN   c                 C   s–   |   d¡pg |   d¡pg  }|D ]8}|  d¡pi }|  d¡p"|  d¡}|r-t|ƒ ¡   S |  d¡p3i }|  d¡p=|  d¡}|rHt|ƒ ¡   S qdS )	NÚreply_partsrQ   rS   r   rT   ÚcallbackrU   r   rV   )r,   rY   rZ   r[   r   r]   Úcallback_payloadr)   r)   r*   rO   ²   s   ÿrO   r   Úfallback_prefixc                 C   sb   |   d¡rd| d › �S |   d¡r!|   d¡r!| d › d| d › �S |› d|   d¡› d|   d¡› �S )NrI   zmessage:rK   r   ú:r   )r&   )r   r_   r)   r)   r*   r%   À   s
   
 r%   c                 C   s   |   d¡pd ¡ dkS )Nr4   r   rC   )r&   Úlower)r   r)   r)   r*   r#   È   s   r#   Úreasonc                 C   s"   t  d| |¡ d| dd|dœdœS )Nz%s context=%sr!   r2   T)Úignoredr   )r    r3   r1   r5   )ÚloggerÚinfo)rb   r   r)   r)   r*   r$   Ì   s   ür$   )%ÚloggingÚtypingr   Úapp.core.configr   Úapp.schemas.freshchatr   r   Ú!app.services.conversation_builderr   Úapp.services.event_storer   r   r	   r
   r   Úapp.services.freshchat_clientr   r   Úapp.services.workflow_servicer   r   r   Ú	getLoggerÚ__name__rd   ÚdictrW   r+   r>   r"   rN   rO   r%   Úboolr#   r$   r)   r)   r)   r*   Ú<module>   s"    
&&"C)*