o
    nYib9                     @   s  d dl mZ d dlmZmZmZmZ ddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZD ddlEmFZF ddlGmHZH ddlImJZJ dd lKmLZL dd!lMmNZN dd"lOmPZP dd#lQmRZR dd$lSmTZT dd%lUmVZV dd&lWmXZX dd'lYmZZZ G d(d) d)Z[d*S )+    )uuid4)triggerregister
unregisterunregister_all   )	CallStateDisconnectReasonConnectStateCallPlayState	MediaType
RecordTypeTapTypeCallTapStateCallFaxStateCallSendDigitsStateDetectState
DetectTypePromptState)prepare_prompt_media_list)Dial)Hangup)Answer)Connect)
DialResult)HangupResult)AnswerResult)ConnectResult)ConnectAction)Detect)DetectResult)DetectAction)Play)
PlayResult)
PlayAction)Prompt)PromptResult)PromptAction)Record)RecordResult)RecordAction)Awaiter)FaxSend)
FaxReceive)	FaxResult)	FaxAction)
SendDigits)SendDigitsResult)SendDigitsAction)Tap)	TapResult)	TapAction)
Disconnect)DisconnectResultc                   @   sF  e Zd Zdd Zedd Zedd Zedd Zed	d
 Zdd Z	dtddZ
dd Zdd ZdudefddZdd Zg fddZg fddZdvdd Zdvd!d"Zdwd#d$ZeZdwd%d&ZeZdxd'd(Zdxd)d*Zdxd+d,Zdxd-d.Zdyd0d1Zdyd2d3Zdyd4d5Zdyd6d7Zdzd8d9Z dzd:d;Z!d<d= Z"d>d? Z#d{d@dAZ$d{dBdCZ%dDdE Z&dFdG Z'dHdI Z(dJdK Z)dLdM Z*dNdO Z+dPdQ Z,dRdS Z-e.j/dddddddfdTdUZ0e.j/dddddddfdVdWZ1dXdY Z2dZd[ Z3e4j5gfd\d]Z6d^d_ Z7d`da Z8dbdc Z9ddde Z:dfdg Z;dhdi Z<dxdjdkZ=dxdldmZ>d|dndoZ?d|dpdqZ@drds ZAdS )}Callc                K   s   || _ tt | _|dd | _|dd | _|dd | _d|v rL|d dd | _|d d dd | _	|d d dd | _
|d d d	d | _d | _|d
d | _d | _d| _d| _| j |  d S )Ncall_idnode_idcontextdevicetypeparamsfrom_number	to_numbertimeout
call_stateF)callingstrr   taggetidr:   r;   	call_typer?   r@   rA   
prev_statestatepeerfailedbusyadd_call)selfrC   kwargs rQ   a/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/signalwire/relay/calling/call.py__init__)   s    zCall.__init__c                 C   s2   | j | j| jdd}| jd ur| j|d d< |S )N)r?   r@   )r=   r>   r>   rA   )rH   r?   r@   rA   )rO   r<   rQ   rQ   rR   r<   ;   s   
zCall.devicec                 C   s   | j tjkS N)rJ   r   ANSWEREDrO   rQ   rQ   rR   answeredH   s   zCall.answeredc                 C   s
   | j dkS )NF)endedrV   rQ   rQ   rR   activeL   s   
zCall.activec                 C   s   | j tjkp| j tjkS rT   )rJ   r   ENDINGENDEDrV   rQ   rQ   rR   rX   P   s   z
Call.endedc                 C      t | j||d | S N)eventcallbacksuffix)r   rE   rO   r^   r_   rQ   rQ   rR   onT      zCall.onNc                 C   r\   r]   )r   rE   ra   rQ   rQ   rR   offX   rc   zCall.offc                    ,   t | }|tjtjtjI d H  t|S rT   )r   wait_forr   rU   rZ   r[   r   rO   	componentrQ   rQ   rR   dial\      z	Call.dialc                    (   t | }|tjtjI d H  t|S rT   )r6   rf   r
   FAILEDDISCONNECTEDr7   rg   rQ   rQ   rR   
disconnecta      zCall.disconnecthangupreasonc                    &   t | |}|tjI d H  t|S rT   )r   rf   r   r[   r   )rO   rq   rh   rQ   rQ   rR   rp   f      
zCall.hangupc                    re   rT   )r   rf   r   rU   rZ   r[   r   rg   rQ   rQ   rR   answerk   rj   zCall.answerc                    s0   t | ||}|tjtjtjI d H  t|S rT   )r   rf   r
   rl   rm   	CONNECTEDr   rO   device_listringback_listrh   rQ   rQ   rR   connectp   s   zCall.connectc                    $   t | ||}| I d H  t|S rT   )r   executer   rv   rQ   rQ   rR   connect_asyncu      zCall.connect_asyncFc
                    sF   t | |||||||||	
}
|
tjtjtjtjtjI d H  t|
S rT   )	r   rf   r   MACHINEHUMANUNKNOWNCEDCNGr    rO   detect_typewait_for_beeprA   initial_timeoutend_silence_timeoutmachine_voice_thresholdmachine_words_thresholdtonedigitsrh   rQ   rQ   rR   detectz   s   "zCall.detectc
                    s2   t | |||||||||	
}
|
 I d H  t|
S rT   )r   r{   r!   r   rQ   rQ   rR   detect_async   s   zCall.detect_asyncc              	   C      | j tj||||||dS N)r   rA   r   r   r   r   )r   r   r~   rO   r   rA   r   r   r   r   rQ   rQ   rR   detect_answering_machine      zCall.detect_answering_machinec              	   C   r   r   )r   r   r~   r   rQ   rQ   rR   detect_answering_machine_async   r   z#Call.detect_answering_machine_asyncc                 C      | j tj||dS N)r   rA   )r   r   FAXrO   r   rA   rQ   rQ   rR   
detect_fax      zCall.detect_faxc                 C   r   r   )r   r   r   r   rQ   rQ   rR   detect_fax_async   r   zCall.detect_fax_asyncc                 C   r   N)r   rA   )r   r   DIGITrO   r   rA   rQ   rQ   rR   detect_digit   r   zCall.detect_digitc                 C   r   r   )r   r   r   r   rQ   rQ   rR   detect_digit_async   r   zCall.detect_digit_asyncr   c                    s,   t | ||}|tjtjI d H  t|S rT   )r"   rf   r   ERRORFINISHEDr#   rO   
media_listvolumerh   rQ   rQ   rR   play   s   z	Call.playc                    rz   rT   )r"   r{   r$   r   rQ   rQ   rR   
play_async   r}   zCall.play_asyncc                 C      t j|dg}| ||S Nr=   url)r   AUDIOr   rO   r   r   r   rQ   rQ   rR   
play_audio      zCall.play_audioc                 C   r   r   )r   r   r   r   rQ   rQ   rR   play_audio_async   r   zCall.play_audio_asyncc                 C   *   t j|d}|rt||d< | |g|S N)r=   nameduration)r   RINGTONEfloatr   rO   r   r   r   mediarQ   rQ   rR   play_ringtone      zCall.play_ringtonec                 C   r   r   )r   r   r   r   r   rQ   rQ   rR   play_ringtone_async   r   zCall.play_ringtone_asyncc                 C      t jt|dg}| |S N)r=   r   )r   SILENCEr   r   rO   r   r   rQ   rQ   rR   play_silence      
zCall.play_silencec                 C   r   r   )r   r   r   r   r   rQ   rQ   rR   play_silence_async   r   zCall.play_silence_asyncc                 C   2   t j|d}|r||d< |r||d< | |g|S N)r=   textlanguagegender)r   TTSr   rO   r   r   r   r   r   rQ   rQ   rR   play_tts      zCall.play_ttsc                 C   r   r   )r   r   r   r   rQ   rQ   rR   play_tts_async   r   zCall.play_tts_asyncc                    s@   t | ||fi |}|tjtjtjtjtjI d H  t|S rT   )	r%   rf   r   r   NO_INPUTNO_MATCHr   SPEECHr&   rO   prompt_typer   rP   rh   rQ   rQ   rR   prompt   s   "zCall.promptc                    s,   t | ||fi |}| I d H  t|S rT   )r%   r{   r'   r   rQ   rQ   rR   prompt_async   s   zCall.prompt_asyncc                 K   $   t j|dg}| jd||d|S Nr   r   r   rQ   )r   r   r   rO   r   r   rP   r   rQ   rQ   rR   prompt_audio      zCall.prompt_audioc                 K   r   r   )r   r   r   r   rQ   rQ   rR   prompt_audio_async   r   zCall.prompt_audio_asyncc                 K   0   t d|i|}tj|d< | jd||gd|S Nr   r=   r   rQ   )r   r   r   r   rO   r   r   rP   r   rQ   rQ   rR   prompt_ringtone      
zCall.prompt_ringtonec                 K   r   r   )r   r   r   r   r   rQ   rQ   rR   prompt_ringtone_async   r   zCall.prompt_ringtone_asyncc                 K   r   Nr   r=   r   rQ   )r   r   r   r   rO   r   r   rP   r   rQ   rQ   rR   
prompt_tts   r   zCall.prompt_ttsc                 K   r   r   )r   r   r   r   r   rQ   rQ   rR   prompt_tts_async   r   zCall.prompt_tts_asyncc	           
   
      s8   t | ||||||||	}	|	tjtjI d H  t|	S rT   )r(   rf   r   r   r   r)   )
rO   record_typebeeprecord_formatstereo	directionr   r   terminatorsrh   rQ   rQ   rR   record   s   zCall.recordc	              
      sF   t | ||||||||	}	|	 I d H }
|
rd|
v r|
d |	_t|	S )Nr   )r(   r{   r   r*   )rO   r   r   r   r   r   r   r   r   rh   resultrQ   rQ   rR   record_async   s   
zCall.record_asyncc                    rr   rT   )r0   rf   r   r   r1   rO   r   rh   rQ   rQ   rR   send_digits  rs   zCall.send_digitsc                    s"   t | |}| I d H  t|S rT   )r0   r{   r2   r   rQ   rQ   rR   send_digits_async  s   
zCall.send_digits_asyncc                    sN   t j| j}|D ]}t j||kr dS q
t| }|j| I d H  |jS )NT)r   ALLindexrJ   r+   rf   
successful)rO   eventsstate_indexr^   rh   rQ   rQ   rR   rf     s   zCall.wait_forc                 C      | j tjgdS N)r   )rf   r   RINGINGrV   rQ   rQ   rR   wait_for_ringing     zCall.wait_for_ringingc                 C   r   r   )rf   r   rU   rV   rQ   rQ   rR   wait_for_answered  r   zCall.wait_for_answeredc                 C   r   r   )rf   r   rZ   rV   rQ   rQ   rR   wait_for_ending  r   zCall.wait_for_endingc                 C   r   r   )rf   r   r[   rV   rQ   rQ   rR   wait_for_ended  r   zCall.wait_for_endedc                    rk   rT   )r-   rf   r   r   r   r.   rg   rQ   rQ   rR   fax_receive!  ro   zCall.fax_receivec                    s    t | }| I d H  t|S rT   )r-   r{   r/   rg   rQ   rQ   rR   fax_receive_async&  s   zCall.fax_receive_asyncc                    s0   t | |||d}|tjtjI d H  t|S N)documentidentityheader)r,   rf   r   r   r   r.   rO   r   r  r  rh   rQ   rQ   rR   fax_send+  s   zCall.fax_sendc                    s(   t | |||d}| I d H  t|S r   )r,   r{   r/   r  rQ   rQ   rR   fax_send_async0  s   zCall.fax_send_asyncc	           
   
      s4   t | ||||||||	}	|	tjI d H  t|	S rT   )r3   rf   r   r   r4   
rO   audio_directiontarget_typetarget_addrtarget_porttarget_ptime
target_uriratecodecrh   rQ   rQ   rR   tap5  s   zCall.tapc	           
   
      s0   t | ||||||||	}	|	 I d H  t|	S rT   )r3   r{   r5   r  rQ   rQ   rR   	tap_async:  s   zCall.tap_asyncc                 C   s   | j | _|d | _ t| j|dd t| j|| j d | j tjkrP| jr&| jn| j}t||tjd t| j |dd}|t	j
k| _|t	jk| _| j|  d S d S )NrB   stateChange)r`   
end_reason )rJ   rI   r   rE   r   r[   rG   r   rF   r	   r   rL   BUSYrM   rC   remove_call)rO   r>   check_idr  rQ   rQ   rR   _state_changed?  s   

zCall._state_changedrT   )rp   )FNNNNNNN)FNNNNN)NN)r   )Nr   )NNr   )NNNNNN)B__name__
__module____qualname__rS   propertyr<   rW   rY   rX   rb   rd   ri   rn   rD   rp   rt   ry   r|   r   r   r   amdr   	amd_asyncr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   rf   r   r   r   r   r   r   r  r  r  r  r  rQ   rQ   rQ   rR   r8   (   s|    




















	



r8   N)\uuidr   signalwire.blade.handlerr   r   r   r   	constantsr   r	   r
   r   r   r   r   r   r   r   r   r   r   helpersr   components.dialr   components.hangupr   components.answerr   components.connectr   results.dial_resultr   results.hangup_resultr   results.answer_resultr   results.connect_resultr   actions.connect_actionr   components.detectr   results.detect_resultr    actions.detect_actionr!   components.playr"   results.play_resultr#   actions.play_actionr$   components.promptr%   results.prompt_resultr&   actions.prompt_actionr'   components.recordr(   results.record_resultr)   actions.record_actionr*   components.awaiterr+   components.fax_sendr,   components.fax_receiver-   results.fax_resultr.   actions.fax_actionr/   components.send_digitsr0   results.send_digits_resultr1   actions.send_digits_actionr2   components.tapr3   results.tap_resultr4   actions.tap_actionr5   components.disconnectr6   results.disconnect_resultr7   r8   rQ   rQ   rQ   rR   <module>   sN    <