; /etc/asterisk/extensions_salidas.conf
; Contextos de salida con grabación automática y registro CDR
; Llamadas a teléfonos fijos en Perú (2-7 seguido de 6 dígitos)
exten => _[2-7]XXXXXX,1,NoOp(=== LLAMADA SALIENTE A FIJO PERUANO ===)
same => n,NoOp(Destino: ${EXTEN}, Origen: ${CALLERID(num)})
; Generar nombre de grabación usando nuestra función
same => n,Gosub(generar-nombre-grabacion,s,1(SALIENTE,${CALLERID(num)},${EXTEN}))
; Configurar CDR para clasificación y auditoría
same => n,Set(CDR(accountcode)=FIJO_PERU)
same => n,Set(CDR(userfield)=Llamada a fijo nacional)
; Establecer CallerID corporativo (desde variable global del Taller 7)
same => n,Set(CALLERID(num)=${IDTRUNK})
; Iniciar grabación (opción 'b' = empezar tras Answer del destino)
same => n,MixMonitor(${RECORDING_PATH:23},b) ; :23 remueve el path, solo nombre archivo
; Guardar ruta completa en CDR para auditoría
same => n,Set(CDR(recording_path)=${RECORDING_PATH})
; Realizar llamada a través de la troncal
same => n,Dial(PJSIP/${EXTEN}@mi-proveedor-sip,45,T)
; Llamadas a celulares en Perú (9 seguido de 8 dígitos)
exten => _9XXXXXXXX,1,NoOp(=== LLAMADA SALIENTE A CELULAR ===)
same => n,NoOp(Destino: ${EXTEN}, Origen original: ${CALLERID(num)})
; Generar nombre de grabación
same => n,Gosub(generar-nombre-grabacion,s,1(SALIENTE,${CALLERID(num)},${EXTEN}))
same => n,Set(CDR(accountcode)=CELULAR_PERU)
same => n,Set(CDR(userfield)=Llamada a celular con CallerID rotativo)
; Aplicar CallerID dinámico (del Taller 5)
same => n,AGI(callerid_roulette.py)
same => n,NoOp(CallerID después de AGI: ${CALLERID(num)})
; Configurar idioma para locuciones
same => n,Set(CHANNEL(language)=es)
; Iniciar grabación y guardar ruta
same => n,MixMonitor(${RECORDING_PATH:23},b)
same => n,Set(CDR(recording_path)=${RECORDING_PATH})
same => n,Dial(PJSIP/${EXTEN}@mi-proveedor-sip,45,T)
; Llamadas de larga distancia nacional (0 + código área + número)
exten => _0NX[2-7]XXXXX,1,NoOp(=== LLAMADA LDN (LARGA DISTANCIA NACIONAL) ===)
same => n,NoOp(Destino: ${EXTEN}, Origen: ${CALLERID(num)})
; Generar nombre de grabación
same => n,Gosub(generar-nombre-grabacion,s,1(SALIENTE,${CALLERID(num)},${EXTEN}))
same => n,Set(CDR(accountcode)=LDN_PERU)
same => n,Set(CDR(userfield)=Larga distancia nacional)
same => n,Set(CALLERID(num)=${IDTRUNK})
same => n,MixMonitor(${RECORDING_PATH:23},b)
same => n,Set(CDR(recording_path)=${RECORDING_PATH})
same => n,Dial(PJSIP/${EXTEN}@mi-proveedor-sip,45,T)
; Llamadas internacionales (00 + código país + número)
exten => _00.,1,NoOp(=== LLAMADA LDI (INTERNACIONAL) ===)
same => n,NoOp(Destino: ${EXTEN}, Origen: ${CALLERID(num)})
; Generar nombre de grabación
same => n,Gosub(generar-nombre-grabacion,s,1(SALIENTE,${CALLERID(num)},${EXTEN}))
; Configurar CDR con mayor tiempo de ring para internacionales
same => n,Set(CDR(accountcode)=LDI)
same => n,Set(CDR(userfield)=Llamada internacional)
same => n,Set(CALLERID(num)=${IDTRUNK})
; Grabación y llamada (60 segundos de ring para internacionales)
same => n,MixMonitor(${RECORDING_PATH:23},b)
same => n,Set(CDR(recording_path)=${RECORDING_PATH})
same => n,Dial(PJSIP/${EXTEN}@mi-proveedor-sip,60,T)
; === CONTEXTO DE LLAMADAS ENTRANTES ===
; Llamadas que llegan desde la troncal SIP
exten => s,1,NoOp(=== LLAMADA ENTRANTE DESDE TRONCAL ===)
same => n,NoOp(CallerID entrante: ${CALLERID(num)} - ${CALLERID(name)})
; Generar nombre de grabación para llamada entrante
same => n,Gosub(generar-nombre-grabacion,s,1(ENTRANTE,${CALLERID(num)},${IDTRUNK}))
; Configurar CDR para llamada entrante
same => n,Set(CDR(accountcode)=ENTRANTE)
same => n,Set(CDR(userfield)=Llamada entrante desde ${CALLERID(num)})
; Configurar idioma y contestar
same => n,Set(CHANNEL(language)=es)
same => n,Wait(1) ; Pausa para estabilizar el canal
; Iniciar grabación después de Answer
same => n,MixMonitor(${RECORDING_PATH:23},ab) ; 'a' = grabar todo, 'b' = tras Answer
same => n,Set(CDR(recording_path)=${RECORDING_PATH})
; Enrutar a extensión principal (puedes modificar según necesidades)
same => n,Dial(PJSIP/1001,30)