Cambie fácilmente el estado de su extensión marcando un código de marcación.

Este conjunto de scripts permite a los usuarios cambiar el estado de su propia extensión – Disponible, Ausente, Fuera de Oficina, Personalizado 1 o Personalizado 2 – marcando un código personalizado. Este script le da a los usuarios una manera rápida de actualizar su disponibilidad sin navegar a través de la interfaz 3CX.
El sistema también incluye códigos de marcación predefinidos para cambiar los estados del perfil, que pueden utilizarse en lugar de códigos personalizados. Este script demuestra la flexibilidad de los scripts de procesamiento de llamadas y puede modificarse para obtener funciones adicionales.

Cómo Configurar el Script para los Cambios de Estado de la Extensión

  1. Vaya a la Consola de Administración > Integraciones > Scripts de llamada.
  2. Agregue desde la tienda y seleccione Establecer Estado Disponible de la Extensión.
  3. Asigne un nombre para facilitar la identificación, por ejemplo “Disponible”.
  4. Ejecute este script cuando un usuario marque un código de marcación.
  5. Agregue un código de marcación de su elección – por ejemplo 57.
  6. Seleccione Todo el Sistema.

Cómo Configurar Scripts para Otros Estados

  1. Siga los mismos pasos que arriba.
  2. En el paso 3, utilice un nombre único para cada script, por ejemplo “ausente”.
  3. En el paso 5, asigne un código de marcación único para cada script – por ejemplo 58 para Fuera de Oficina, 59 para Personalizado 1.

Por qué Utilizar este Script

  1. Actualizaciones Rápidas de Estado: Cambie su disponibilidad sin acceder al Cliente Web ni a la aplicación móvil.
  2. Opciones Personalizables: Adapte los códigos y estados a sus necesidades.
  3. Flexible y Escalable: Amplíe la funcionalidad con secuencias de comandos adicionales según sea necesario.

Script de Ejemplo

¡EXENCIÓN DE RESPONSABILIDAD! Este script es solo de referencia. Para obtener la última versión, descárguela de la tienda.

Script: Disponible

using System;
using System.Threading.Tasks;
using TCX.Configuration;
using CallFlow;
using System.Linq;
using System.Collections.Generic;
namespace dummy
{
public class SetAvailableStatus : ScriptBase
{
public override async Task StartAsync()
{
var profileName = "Available";
var prompt = "ST_AVAILABLE_SET";

//-----call is direct from the extension and profile extension has required profile
if (MyCall.Caller.DN is Extension ext
&& MyCall.ReferredByDN is not DN
&& ext.FwdProfiles.FirstOrDefault(x=>x.Name.Equals(profileName)) is FwdProfile fwdProfile)
{
//set current status
ext.CurrentProfile = fwdProfile;

//reset profile override
ext.ResetCurrentProfileOverride();
ext.Save();

//----play system prompt about current status
try
{
MyCall.Info($"Extension {ext.Number} is set to {profileName}");
await MyCall.AssureMedia()
.ContinueWith(_ => MyCall.PlayPrompt(ext.GetPropertyValue("PROMPTSETID"), [prompt], PlayPromptOptions.Blocked))
.Unwrap();
}
catch
{
//ignore prompt playback failures. action is performed
}
//we made modifications
return true;
}
//we did not make any modifications
return false;
}
}
}

Script: Ausente

using System;
using System.Threading.Tasks;
using TCX.Configuration;
using CallFlow;
using System.Linq;
using System.Collections.Generic;
namespace dummy
{
public class SetAwayStatus : ScriptBase
{
public override async Task StartAsync()
{is direct from the extension and profile extension has required profile
if (MyCall.Caller.DN is Extension ext
&& MyCall.ReferredByDN is not DN
&& ext.FwdProfiles.FirstOrDefault(x=>x.Name.Equals(profileName)) is FwdProfile fwdProfile)
{
//set current status
ext.CurrentProfile = fwdProfile;

//reset profile override
ext.ResetCurrentProfileOverride();
ext.Save();

//----play system prompt about current status
try
{
MyCall.Info($"Extension {ext.Number} is set to {profileName}");
await MyCall.AssureMedia()
.ContinueWith(_ => MyCall.PlayPrompt(ext.GetPropertyValue("PROMPTSETID"), [prompt], PlayPromptOptions.Blocked))
.Unwrap();
}
catch
{
//ignore prompt playback failures. action is performed
}
//we made modifications
return true;
}
//we did not make any modifications
return false;
}
}
}

Script: Fuera de la oficina

using System;
using System.Threading.Tasks;
using TCX.Configuration;
using CallFlow;
using System.Linq;
using System.Collections.Generic;
namespace dummy
{
public class SetDNDStatus : ScriptBase
{
public override async Task StartAsync()
{
var profileName = "Out of office";
var prompt = "ST_OUTOFFICE_SET";

//-----call is direct from the extension and profile extension has required profile
if (MyCall.Caller.DN is Extension ext
&& MyCall.ReferredByDN is not DN
&& ext.FwdProfiles.FirstOrDefault(x=>x.Name.Equals(profileName)) is FwdProfile fwdProfile)
{
//set current status
ext.CurrentProfile = fwdProfile;

//reset profile override
ext.ResetCurrentProfileOverride();
ext.Save();

//----play system prompt about current status
try
{
MyCall.Info($"Extension {ext.Number} is set to {profileName}");
await MyCall.AssureMedia()
.ContinueWith(_ => MyCall.PlayPrompt(ext.GetPropertyValue("PROMPTSETID"), [prompt], PlayPromptOptions.Blocked))
.Unwrap();
}
catch
{
//ignore prompt playback failures. action is performed
}
//we made modifications
return true;
}
//we did not make any modifications
return false;
}
}
}

Script: Personalizado 1

using System;
using System.Threading.Tasks;
using TCX.Configuration;
using CallFlow;
using System.Linq;
using System.Collections.Generic;
namespace dummy
{
public class SetCustom1Status : ScriptBase
{
public override async Task StartAsync()
{
var profileName = "Custom 1";
var prompt = "ST_CUSTOM1_SET";

//-----call is direct from the extension and profile extension has required profile
if (MyCall.Caller.DN is Extension ext
&& MyCall.ReferredByDN is not DN
&& ext.FwdProfiles.FirstOrDefault(x=>x.Name.Equals(profileName)) is FwdProfile fwdProfile)
{
//set current status
ext.CurrentProfile = fwdProfile;

//reset profile override
ext.ResetCurrentProfileOverride();
ext.Save();

//----play system prompt about current status
try
{
MyCall.Info($"Extension {ext.Number} is set to {profileName}");
await MyCall.AssureMedia()
.ContinueWith(_ => MyCall.PlayPrompt(ext.GetPropertyValue("PROMPTSETID"), [prompt], PlayPromptOptions.Blocked))
.Unwrap();
}
catch
{
//ignore prompt playback failures. action is performed
}
//we made modifications
return true;
}
//we did not make any modifications
return false;
}
}
}

Script: Personalizado 2

using System;
using System.Threading.Tasks;
using TCX.Configuration;
using CallFlow;
using System.Linq;
using System.Collections.Generic;
namespace dummy
{
public class SetCustom2Status : ScriptBase
{
public override async Task StartAsync()
{
var profileName = "Custom 2";
var prompt = "ST_CUSTOM2_SET";

//-----call is direct from the extension and profile extension has required profile
if (MyCall.Caller.DN is Extension ext
&& MyCall.ReferredByDN is not DN
&& ext.FwdProfiles.FirstOrDefault(x=>x.Name.Equals(profileName)) is FwdProfile fwdProfile)
{
//set current status
ext.CurrentProfile = fwdProfile;

//reset profile override
ext.ResetCurrentProfileOverride();
ext.Save();

//----play system prompt about current status
try
{
MyCall.Info($"Extension {ext.Number} is set to {profileName}");
await MyCall.AssureMedia()
.ContinueWith(_ => MyCall.PlayPrompt(ext.GetPropertyValue("PROMPTSETID"), [prompt], PlayPromptOptions.Blocked))
.Unwrap();
}
catch
{
//ignore prompt playback failures. action is performed
}
//we made modifications
return true;
}
//we did not make any modifications
return false;
}
}
}

Manténgase Informado

No olvide participar en nuestro Foro y seguirnos en X y LinkedIn para estar al tanto de las novedades de 3CX.