Microsoft Lync Server
Header

LLamar a Lync/Skype4B como opción por defecto .. Siempre!!

octubre 7th, 2015 | Posted by Santiago Buitrago in Lync Server | skype for business

Es muy común que cuando llamamos a un usuario desde nuestro cliente Lync/Skype4B lo hagamos como una llamada de cliente a cliente, por lo que  no tendrá coste alguno. Pero si en alguna ocasión hemos llamado al usuario a través de tu número de teléfono, cuando volvamos a intentar llamarle de forma directa sin elegir el tipo de llamada lo haga directamente por el último método que hemos usado:

Evitar_Llamadas_PSTN_0.png

También sabemos que podemos poner que por defecto todas las llamadas sean de cliente a cliente, así os lo había comentado en este artículo: LLamar a Lync como opción por defecto. En este artículo había explicado como configurar un política que definiese que por defecto las llamadas fuesen llamadas de VoIP (EnableVOIPCallDefault), hasta aquí todo perfecto, pero el problema viene cuando además hemos llamado al usuario a su número de trabajo, etc…  puesto que las siguientes llamadas sino elegimos el tipo de llamada utilizará el último utilizado. Esta configuración ya no la podemos controlar desde el servidor de Lync/Skype4B, puesto que esta información se almacena en una clave de registro en la sesión del usuario:
 
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Lync\sbuitrago@asirsl.com\ContactStateCacheU
 
Como podéis apreciar en la imagen anterior, vemos que debajo de la clave HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Lync tendremos  el nombre de usuario (más bien la dirección SIP del usuario) con el que hemos iniciado sesión, luego una clave con el nombre ContactStateCacheU  que es donde se almacena la información o caché de las últimas llamadas realizadas desde nuestro cliente Lync/Skype4B. En la imagen vemos que debajo de la clave  ContactStateCacheU  tenemos la dirección de los usuarios a los que hemos llamado (no tienen porque ser todos usuarios de Lync/Skype4B y sí contactos de nuestra agenda de Outlook) y dentro la siguiente información:
  • ClickToCall: número de teléfono al que hemos llamado
  • Name: nombre de usuario al que hemos llamado

Esta información es la que utilizará nuestro cliente Lync/Skype4B para realizar la siguiente llamada, aquí os muestro una captura de una llamada (he borrado parte del número de mi móvil y en la captura de pantalla anterior lo he sustituido por XXXXXX, pero vamos, ahí tenéis un número de teléfono seguro)

Evitar_Llamadas_PSTN_1.png

Esto hará que hagamos  una llamada a un usuario que tiene Lync/Skype4B y está disponible para llamarlo vía VoIP, pero sin embargo la llamada la enviaremos a su móvil (con el consiguiente coste que tendrá). Lo que queremos es que la llamada sea a su cliente Lync/Skype4B:

Evitar_Llamadas_PSTN_2.png

Esta llamada también queda reflejada en el registro del usuario y quedaría así:

Evitar_Llamadas_PSTN_3.png

Dicho todo esto, el problema que tenemos es claro, la última llamada que hagamos a un usuario será la que quede en caché para volver a utilizarla a menos que explícitamente elijamos el tipo de llamada. Tenemos  varias soluciones para evitar esto y todas a nivel de cliente:

  • Eliminar todas las claves que están dentro de ContactStateCacheU: podemos hacerlo con un script de powershell o cmd, pero el problema que tienes que una vez que el usuario vuelva a llamar volverá a crear dichas claves. Esto no nos sirve, porque tendríamos que tener el script de borrado de las claves ejecutándose cada minuto en la sesión del usuario
  • Cambiar los permisos de la clave ContactStateCacheU: con esto evitamos que el cliente Lync/Skype4B acceda y cree nuevas claves en cada llamada, esto si nos sirve. Para ello crearemos un script con POwerShell que busque la clave ContactStateCacheU y le quite los permisos al usuario que ha iniciado sesión, de esta forma el cliente Lync/Skupe4b siempre utilizará la configuración que hemos establecido a nivel de directiva de usuario (LLamar a Lync como opción por defecto)

Como creo que la segunda opción es la más acertada y la más fiable, aquí os dejo un script que hemos creado desde ASIR (gracias Amandio por tu ayuda!!)

Evitar_Llamadas_PSTN_4.png
Aquí os dejo el código del script para copiar – pegar:

# Buscar Claves que incluyan la palabra Contac dentro la clave HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync
$keys = Get-ChildItem -Path HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync -Include Contact* -Recurse | Select-Object Name 
foreach ($key in $keys){ 
    # Leemos el valor Name
    $keyRoot = $key.Name 
    # Reemplazamos el valor por HKCU 
    $PSKeyRoot = $keyRoot.Replace("HKEY_CURRENT_USER","HKCU:") 
    # Leemos los permisos actuales
    $acl = Get-Acl $PSKeyRoot
    # Creamos los permisos necesarios
    $ace = New-Object System.Security.AccessControl.RegistryAccessRule("$env:username","FullControl", "ContainerInherit", "None", "Deny")
            
    # Añadimos la regla a la ACL  
    $acl.AddAccessRule($ace) 
    # Establecemos los permisos sobre la clave de registro que habíamos puesto en la variable PSKeyRoot 
    Set-Acl -Path "$PSKeyRoot" -acl $acl 
}

El proceso del script es sencillo y aquí os lo dejo documentado por fases:

  1. Buscamos una clave de registro dentro de HKCU:\SOFTWARE\Microsoft\Office\15.0\Lync que empiece por Contact (solo existe la que buscamos: ContactStateCacheU) y tenemos su valor en una variable
  2. El valor que nos devuelve comienza por HKEY_CURRENT_USER\SOFTWARE y debemos cambiarlo por HKCU: , y así lo hacemos
  3. Establecemos los permisos que vamos a aplicar sobre el usuario que ha iniciado sesión ($env:username): queremos denegar el Control Total sobre la clave ContactStateCacheU y las subclaves (son las que representan a los usuarios llamados)
  4. Establecemos el valor de dichos permisos sobre la clave de registro que habíamos capturado, puesto en un variable,  cambiado el nombre y lo más importante

Esto lo que permitirá es que denegaremos el acceso a la clave HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\15.0\Lync\$env:username\ContactStateCacheU y subclaves al usuario que ha iniciado sesión:

Evitar_Llamadas_PSTN_5.png

Y con esto el cliente Lync/Skype4B no podrá leer el contenido de la clave ContactStateCacheU ni las subclaves, lo que hará que siempre llame utilizando VoIP (EnableVOIPCallDefault), lo que mediante la directiva de cliente que habíamos configurado desde el servidor. El que no pueda acceder a la clave ContactStateCacheU no impide el correcto funcionamiento del cliente Lync/Skype4B, simplemente que no almacenará en caché las últimas llamadas y por lo tanto siempre utilizará las llamadas de VoIP que es lo que queremos.
 
Por último lo que nos queda es aplicar este script a todos los usuarios que queramos, para ello simplemente nos creamos una GPO con la siguiente configuración:
Evitar_Llamadas_PSTN_6.png
Básicamente en la directiva de grupo, editamos la configuración de usuario, nos vamos a Configuración de Windows – Scripts (inicio de sesión o cierre de sesión ) y configuramos el script como inicio de sesión, se lo agregamos como Scripts de PowerShell. Una vez configurada nuestra directiva se la vinculamos a la OU en donde tenemos los usuarios y en el próximo inicio de sesión se le aplicará dicha directiva.
 
Con esta configuración los usuarios ya no podrán leer la clave ContactStateCacheU y con esto ya tenemos lo que queremos, que todos los usuarios a los cuales se haya aplicado la GPO tendrá siempre la llamada de VoIP por defecto.
 
Espero que os sea de utilidad!!

You can follow any responses to this entry through the RSS 2.0 You can leave a response, or trackback.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *