Desarrollo Pro-Code y SDK
Para escenarios complejos que requieren algoritmos personalizados, integraciones propietarias o alto rendimiento de procesamiento, Vivabots ofrece un soporte Pro-Code de primera clase.
Puedes escribir código directamente en actividades especiales dentro del lienzo o empaquetar librerías externas para utilizarlas en toda tu organización.
Actividad: Ejecutar Código (Script Inline)
La forma más rápida de integrar código en tu flujo de trabajo es mediante la actividad Ejecutar Código. Esta actividad te permite elegir tu lenguaje preferido y editar la lógica en un editor embebido con resaltado de sintaxis.
Ejemplo 1: Lógica Avanzada en C#
La ejecución en C# se compila en memoria como ensamblado nativo (.NET Core), ofreciendo el rendimiento más rápido posible para manipulación de strings y procesamiento lógico.
// Recibimos variables del flujo como argumentos de entrada
string inputData = args.Get<string>("InputRawText");
var cleanList = new List<string>();
// Procesamos el texto línea por línea aplicando lógica de negocio
foreach (var line in inputData.Split('\n')) {
var trimmed = line.Trim();
if (trimmed.StartsWith("VIVA-") && trimmed.Length == 12) {
cleanList.Add(trimmed);
}
}
// Retornamos el resultado al flujo de trabajo
args.Set("OutputCodes", cleanList.ToArray());
args.Set("TotalProcessed", cleanList.Count);
Ejemplo 2: Manipulación JSON en JavaScript (Node.js)
El motor de JavaScript utiliza una sandbox ultrarrápida basada en V8. Es ideal para parsear estructuras complejas y realizar llamadas HTTP personalizadas.
// Parsear un payload JSON y calcular estadísticas de compras
const payload = JSON.parse(args.inputJson);
let totalSpent = 0;
let vipClients = [];
payload.customers.forEach(client => {
let subtotal = client.orders.reduce((sum, order) => sum + order.amount, 0);
if (subtotal > 1500) {
vipClients.push({ id: client.id, name: client.name, total: subtotal });
}
totalSpent += subtotal;
});
// Guardar resultados en variables de salida de Vivabots
args.vipCount = vipClients.length;
args.vipList = JSON.stringify(vipClients);
args.averageOrder = totalSpent / (payload.customers.length || 1);
Ejemplo 3: Análisis de Datos en Python
El ejecutor de Python es perfecto para automatizaciones que involucran ciencia de datos, inteligencia artificial o manipulación avanzada de archivos locales utilizando librerías populares como pandas y openpyxl.
import pandas as pd
import json
# Obtener ruta del archivo Excel desde el flujo visual
excel_path = args.get("ExcelFilePath")
# Leer y filtrar datos usando Pandas
df = pd.read_excel(excel_path)
filtered_df = df[(df['Estado'] == 'Pendiente') & (df['Monto'] > 500)]
# Convertir el resultado a formato JSON para el flujo
json_result = filtered_df.to_json(orient='records')
# Devolver variables al flujo
args.set("JsonResult", json_result)
args.set("RowCount", len(filtered_df))
Creación de Actividades con el SDK de Vivabots
Si tu equipo de desarrollo crea componentes reutilizables, la mejor práctica es compilar una librería de clases (.dll) en C# y empaquetarla como un paquete NuGet. Esto permite que se carguen directamente en la barra de herramientas de Viva Builder.
Estructura básica de una clase de actividad:
using System;
using System.Activities;
using Vivabots.Sdk.Attributes;
namespace Vivabots.Custom.Activities
{
[DisplayName("Enviar Alerta de Slack")]
[Description("Envía un mensaje formateado a un canal de Slack mediante un webhook.")]
[Category("Notificaciones")]
public class SendSlackAlert : CodeActivity
{
// Propiedades configurables en el Panel de Propiedades de Builder
[RequiredArgument]
[Category("Entrada")]
public InArgument<string> WebhookUrl { get; set; }
[RequiredArgument]
[Category("Entrada")]
public InArgument<string> Message { get; set; }
[Category("Salida")]
public OutArgument<bool> IsSuccess { get; set; }
protected override void Execute(CodeActivityContext context)
{
string url = WebhookUrl.Get(context);
string msg = Message.Get(context);
try
{
// Lógica de comunicación HTTP con la API de Slack
bool result = SlackHttpClient.PostMessage(url, msg);
IsSuccess.Set(context, result);
}
catch (Exception ex)
{
IsSuccess.Set(context, false);
throw new Exception($"Error en SendSlackAlert: {ex.Message}");
}
}
}
}
Al subir este paquete a Viva Consola, estará disponible para que cualquier analista lo arrastre a su lienzo de diseño, abstrayendo la complejidad técnica detrás de una actividad visual simple.