WebHook .NET Introducción La librería te permite interactuar con los datos de Dinaup de forma asíncrona y segura, ofreciendo métodos para:
Verificar la conexión  con el servidor (Ping).
Obtener información  sobre la sesión o el usuario (Whoami).
Generar documentos dinámicos  (GetDynamicDocument).
Obtener informes  con filtrado y paginación (GetReport).
Escribir registros  en las secciones (WriteOperation).
WebHook es el método simplificado para interactuar con la api de Dinaup. Ideal para aplicaciones sencillas o con poca carga de trabajo. Las aplicaciones más exigentes deben usar Dinaup .NET  que proporciona métodos avanzados.
Creación del Cliente Para empezar a usar la librería, crea una instancia de Dinaup.WeebHook:
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace EjemploDinaup
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Crea el cliente con la URL base, el token y el server ID
            DinaupWebHookClientC client = new DinaupWebHookClientC(
                "https://webhook.dinaup.com", 
                "tu-token-de-autenticacion", 
                "tu-server-id"
            );
            // Aquí podrás llamar a los métodos de la API
            await EjemploPing(client);
        }
        static async Task EjemploPing(DinaupWebHookClientC client)
        {
            string respuestaPing = await client.PingAsync();
            Console.WriteLine("Ping: " + respuestaPing);
        }
    }
}
Métodos Principales PingAsync Verifica si el servicio está disponible.
static async Task EjemploPing(DinaupWebHookClientC client)
{
    string respuestaPing = await client.PingAsync();
    Console.WriteLine("Ping: " + respuestaPing);
}
WhoamiAsync Obtiene información sobre el usuario o la sesión actual:
static async Task EjemploWhoami(DinaupWebHookClientC client)
{
    string identidad = await client.WhoamiAsync();
    Console.WriteLine("Identidad: " + identidad);
}
GetDynamicDocumentAsync Genera un documento dinámico a partir de un ID y un diccionario de parámetros:
static async Task EjemploDynamicDocument(DinaupWebHookClientC client)
{
    var parametros = new Dictionary<string, string>
    {
        { "Texto", "Hola Mundo" }
    };
    string contenidoDocumento = await client.GetDynamicDocumentAsync(
        "9ea36ade-05f4-4abb-abb4-3bf76065494c", 
        parametros
    );
    Console.WriteLine("Contenido del Documento: " + contenidoDocumento);
}
GetReportAsync Obtiene un informe (con paginación y/o filtros si es necesario). Retorna un objeto Report:
static async Task EjemploReport(DinaupWebHookClientC client)
{
    var filtros = new Dictionary<string, string>
    {
        { "ValorASumar", "2" }
    };
    Report reporte = await client.GetReportAsync(
        "d7ddd2ae-8aed-4b23-a866-ab310da969f4",
        page: 1,
        resultsPerPage: 20,
        withFiles: false,
        values: filtros,
        safeColumnsName: true
    );
    Console.WriteLine($"Página {reporte.currentPage} de {reporte.totalPages}");
    Console.WriteLine($"Total de resultados: {reporte.totalResults}");
    
    // Accede a los datos
    foreach (var fila in reporte.data)
    {
        // Cada fila es un Dictionary<string, string>
        // Ejemplo de lectura de campo:
        if (fila.ContainsKey("CampoEjemplo"))
        {
            Console.WriteLine("CampoEjemplo: " + fila["CampoEjemplo"]);
        }
    }
}
WriteOperationAsync (Escritura de Datos) Existen distintas sobrecargas para enviar datos a Dinaup (un registro simple, registro + lista asociada o lotes).
a) Escritura Simple (Un registro) 
static async Task EjemploEscrituraSimple(DinaupWebHookClientC client)
{
    var registro = new Dictionary<string, string>
    {
        { "TextoPrincipal", Guid.NewGuid().ToString() },
        { "ValorEntero", "15" },
        { "CampoDecimal", "0.85" }
    };
    string resultado = await client.WriteOperationAsync(
        "section-id-de-prueba",
        "id",
        false,      // scripts: si deseas ejecutar scripts del servidor ponlo en true
        registro
    );
    Console.WriteLine("Resultado escritura simple: " + resultado);
}
b) Escritura con DataWithList (Registro + Lista) La clase DataWithList permite incluir un objeto principal y una lista asociada, por ejemplo, para detalles de un pedido:
static async Task EjemploEscrituraConLista(DinaupWebHookClientC client)
{
    // Registro principal
    var registroPrincipal = new Dictionary<string, string>
    {
        { "TextoPrincipal", Guid.NewGuid().ToString() },
        { "ValorEntero", "20" },
        { "CampoDecimal", "0.95" }
    };
    // Lista de elementos relacionados
    var listaElementos = new List<Dictionary<string, string>>();
    for (int i = 1; i <= 5; i++)
    {
        var item = new Dictionary<string, string>
        {
            { "TextoPrincipal", "Item " + i },
            { "ValorDePrueba", "Prueba " + i },
            { "PruebaNumerica", i.ToString() }
        };
        listaElementos.Add(item);
    }
    var dataConLista = new DataWithList
    {
        Main = registroPrincipal,
        List = listaElementos
    };
    string resultado = await client.WriteOperationAsync(
        "section-id-de-prueba",
        "id",
        false,
        dataConLista
    );
    Console.WriteLine("Resultado escritura con lista: " + resultado);
}
c) Escritura en Lote (Múltiples registros) Si necesitas enviar varios registros o varios DataWithList en una sola llamada:
static async Task EjemploEscrituraEnLote(DinaupWebHookClientC client)
{
    var loteOperaciones = new List<DataWithList>();
    for (int j = 1; j <= 5; j++)
    {
        var registroPrincipal = new Dictionary<string, string>
        {
            { "TextoPrincipal", Guid.NewGuid().ToString() },
            { "ValorEntero", (10 + j).ToString() },
            { "CampoDecimal", (0.5 + j / 100.0).ToString() }
        };
        var listaRelacionada = new List<Dictionary<string, string>>();
        for (int i = 1; i <= 3; i++)
        {
            var item = new Dictionary<string, string>
            {
                { "TextoPrincipal", "Item " + i },
                { "ValorDePrueba", "Prueba " + i },
                { "PruebaNumerica", i.ToString() }
            };
            listaRelacionada.Add(item);
        }
        var dataItem = new DataWithList
        {
            Main = registroPrincipal,
            List = listaRelacionada
        };
        loteOperaciones.Add(dataItem);
    }
    string resultadoLote = await client.WriteOperationAsync(
        "section-id-de-prueba",
        "id",
        false,
        loteOperaciones
    );
    Console.WriteLine("Resultado escritura en lote: " + resultadoLote);
}
Ejemplo Completo 
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace EjemploDinaup
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // Instancia del cliente
            var client = new DinaupWebHookClientC(
                "https://webhook.dinaup.com",
                "tu-token",
                "tu-server-id"
            );
            // 1) Verificar conexión
            Console.WriteLine("Ping:");
            Console.WriteLine(await client.PingAsync());
            // 2) Obtener identidad
            Console.WriteLine("Whoami:");
            Console.WriteLine(await client.WhoamiAsync());
            // 3) Generar documento dinámico
            var parametros = new Dictionary<string, string> { {"Texto", "Hola Mundo"} };
            string doc = await client.GetDynamicDocumentAsync("9ea36ade-05f4-4abb-abb4-3bf76065494c", parametros);
            Console.WriteLine("Documento dinámico: " + doc);
            // 4) Obtener informe
            var reporte = await client.GetReportAsync("d7ddd2ae-8aed-4b23-a866-ab310da969f4", 1, 20, false);
            Console.WriteLine($"Informe: Página {reporte.currentPage} de {reporte.totalPages}. Resultados: {reporte.totalResults}");
            // 5) Escritura simple
            var registro = new Dictionary<string, string>
            {
                { "TextoPrincipal", Guid.NewGuid().ToString() },
                { "ValorEntero", "15" },
                { "CampoDecimal", "0.85" }
            };
            string resultado = await client.WriteOperationAsync("section-id-de-prueba", "id", false, registro);
            Console.WriteLine("Escritura simple: " + resultado);
            // 6) Escritura con lista
            await EjemploEscrituraConLista(client);
        }
        private static async Task EjemploEscrituraConLista(DinaupWebHookClientC client)
        {
            var registroPrincipal = new Dictionary<string, string>
            {
                { "TextoPrincipal", Guid.NewGuid().ToString() },
                { "ValorEntero", "20" },
                { "CampoDecimal", "1.05" }
            };
            var listaElementos = new List<Dictionary<string, string>>();
            for (int i = 1; i <= 5; i++)
            {
                var item = new Dictionary<string, string>
                {
                    { "TextoPrincipal", "Item " + i },
                    { "ValorDePrueba", "Prueba " + i },
                    { "PruebaNumerica", i.ToString() }
                };
                listaElementos.Add(item);
            }
            var dataConLista = new DataWithList
            {
                Main = registroPrincipal,
                List = listaElementos
            };
            string resultado = await client.WriteOperationAsync("section-id-de-prueba", "id", false, dataConLista);
            Console.WriteLine("Resultado escritura con lista: " + resultado);
        }
    }
}
Last modified: 29 March 2025