Estoy tratando de crear una sala de conferencias pero estoy teniendo algunos problemas/dudas.
-Si trato de invitar a la sala de conferencias a alguien que se esté registrado contra mi centralita no hay ningún problema. El otro usuario entra a la sala de conferencias y si cuelga el teléfono o pulsa 2 (tengo puesto en los controles del menú usado en la conferencia que pulsar 2 es abandonar la sala) se detecta el colgado y sale de la sala de conferencias.
- Si trato de invitar a la sala de conferencias a alguien que no esté registrado a mi centralita(un cliente por ejemplo) saliendo por cualquier proveedor de VOIP surge un gran problema. Por mucho que cuelgue el cliente sigue estando en la sala de conferencias y tengo que acabar haciendo un "confbridge kick".
[ConferenceRooms]
exten => 969,1,NoOp()
same => n,Goto(conference,1)
exten => conference,1,NoOp()
same => n,Set(thisBridge=primary)
same => n,ConfBridge(${thisBridge},default_bridge,default_user,fancymenu)
#----------------------------------------------------------------------------------------------------
# Invitamos a alguien a la sala de conferencias
#----------------------------------------------------------------------------------------------------
exten => conference_joiner,1,NoOp()
same => n,Read(numberToDial,vm-enter-num-to-call)
# Si la extensión a la que invitamos tiene 3 dígitos será una extensión interna de nuestra centralita.
# Si tiene más de 3 dígitos estaremos invitando a alguien del exterior. Para ello saldremos a través
# de uno de nuestros proveedores de VOIP
same => n,Set(longitud=${LEN(${numberToDial})})
same => n,Noop(Longitud extension: ${longitud} )
same => n,GotoIf($["${longitud}" = "3"]?extinterna:extexterna)
# Invitamos a la sala de conferencias a alguien de la red interna
same => n(extinterna),Originate(SIP/${numberToDial},exten,ConferenceRooms,969,1)
same => n,Goto(ConferenceRooms,969,1)
# Invitamos a la sala de conferencias a alguien del exterior
same => n(extexterna),Set(codigollamadamanual=${numberToDial:0:3})
same => n,Noop(Codigo Llamada Manual: ${codigollamadamanual} )
same => n,GotoIf($["${codigollamadamanual}" = "301"]?codproveedorvoip1:proveedorvoip2)
same => n(proveedorvoip2),GotoIf($["${codigollamadamanual}" = "302"]?codproveedorvoip2:proveedorvoip3)
same => n(proveedorvoip3),GotoIf($["${codigollamadamanual}" = "303"]?codproveedorvoip3:errorcodproveedor)
same => n(codproveedorvoip1),Originate(SIP/voipdiscount-alaw/${numberToDial:3},exten,ConferenceRooms,969,1)
same => n,Goto(ConferenceRooms,969,1)
same => n(codproveedorvoip2),Originate(SIP/netelip-alaw/${numberToDial:3},exten,ConferenceRooms,969,1)
same => n,Goto(ConferenceRooms,969,1)
same => n(codproveedorvoip3),Originate(SIP/serlink-alaw/${numberToDial:3},exten,ConferenceRooms,969,1)
same => n,Goto(ConferenceRooms,969,1)
same => n(errorcodproveedor),NoOp()
same => n,Goto(ConferenceRooms,969,1)
Mediante este código, si el numero al que llamo tiene 3 dígitos la llamada se realiza hacia usuarios registrados en mi centralita, si dispone de más dígitos sale por un proveedor de VOIP (el cual dependiendo de los 3 primeros dígitos sale por uno u otro) hacia un usuario que está conectado a una línea analógica. ¿Alguna idea de por qué no se detecta el colgado de la persona a la que invito, la cuál no está registrada en mi centralita?
Después de hacer el Originate para invitar al otro usuario ¿Qué debería de haber en mi código para volver a la sala de conferencias sin crear un usuario adicional de mi mismo?
En la empresa me han comentado que podría ser interesante el hecho de poder entrar en la sala de conferencias desde el contexto de las llamadas entrantes, lo cuál me da un poco de miedo, ya que podría entrar un usuario malicioso y hacer llamadas indeseadas. ¿Algún consejo de cómo implementar esta parte sin que haya problemas de seguridad? Se podría pedir un pin para entrar en la sala, pero el pin a fin de cuentas se podría acabar sacando ¿Alguna otra idea?