Saltar al contenido principal

DNN · Instalación

Esta guía monta la pieza estática del recipe DNN: el DesktopModule mínimo que persiste credenciales cifradas y resuelve la URL del API. El sync nocturno y el embebido del widget viven en páginas dedicadas (ver enlaces al final).

Requisitos

ComponenteMínimo
DNN Platform9.x
.NET Framework4.7.2+ (alternativa: .NET 8)
SQL Server2016 SP1+
PermisosHost (para HostSettings y Host → Schedule)

NuGet packages a referenciar en el módulo:

<PackageReference Include="Polly" Version="8.*" />
<PackageReference Include="System.Net.Http.Json" Version="6.*" />
<PackageReference Include="System.Text.Json" Version="6.*" />

Crear el DesktopModule

Estructura mínima dentro de DesktopModules/Neuroon/:

Neuroon/
├── App_Code/Neuroon/
│ ├── NeuroonSettings.cs
│ ├── NeuroonClient.cs
│ ├── NeuroonProduct.cs
│ └── WidgetTokenProvider.cs
├── Module.dnn // manifest mínimo
├── ModuleSettings.ascx // pestaña de configuración (Host)
└── web.config // si necesitas overrides locales

El manifest Module.dnn puede ser tan simple como un módulo "blank" (sin vistas públicas). Solo necesitamos exponer la pestaña de Host Settings.

HostSettings cifrados

DNN ofrece HostController.Instance.UpdateEncryptedString(key, value, decryptionKey) para guardar credenciales cifradas con la decryption key del web.config. Crea cuatro entradas:

using DotNetNuke.Entities.Host;
using DotNetNuke.Common.Utilities;

string decryptionKey = Config.GetDecryptionkey();

HostController.Instance.Update("Neuroon.ShopId", "shop_xxxxxxxx", true);
HostController.Instance.UpdateEncryptedString("Neuroon.ApiKey", "sk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", decryptionKey);
HostController.Instance.Update("Neuroon.ApiUrl", "https://dev-api.neuroon.ai", true);
HostController.Instance.Update("Neuroon.WidgetTokenCache", "", true);

Cita: el recipe end-to-end usa este patrón en docs/docs/recipes/dnn-end-to-end.md (Paso 1).

Y un helper para leerlas con tipado fuerte:

using DotNetNuke.Entities.Host;
using DotNetNuke.Common.Utilities;

public static class NeuroonSettings
{
public static string ShopId =>
HostController.Instance.GetString("Neuroon.ShopId");

public static string ApiKey =>
HostController.Instance.GetEncryptedString("Neuroon.ApiKey", Config.GetDecryptionkey());

public static string ApiUrl =>
HostController.Instance.GetString("Neuroon.ApiUrl", "https://api.neuroon.ai");
}

Validar la instalación

Tras añadir las HostSettings, ejecuta una vez (desde un endpoint privado, una página de mantenimiento o un breakpoint en Application_Start):

using var http = new HttpClient { BaseAddress = new Uri(NeuroonSettings.ApiUrl) };
http.DefaultRequestHeaders.Add("X-Shop-API-Key", NeuroonSettings.ApiKey);

var resp = await http.GetAsync("/api/plugin/shops/me");
resp.EnsureSuccessStatusCode();
var body = await resp.Content.ReadAsStringAsync();
DnnLog.Info("Neuroon shop info: " + body);

Si recibes 200, las credenciales son correctas. Si recibes 401, revisa la key y la decryption key del web.config.

Permisos y firewall

DNN suele desplegarse detrás de IIS/ARR/Application Gateway. Asegúrate de que el AppPool puede salir a:

  • https://api.neuroon.ai (Production)
  • https://dev-api.neuroon.ai (Development)
  • https://cdn.neuroon.ai (carga del widget desde el navegador)

Si tu CSP del Skin filtra recursos de terceros, añade cdn.neuroon.ai y los hosts de API a script-src y connect-src.

Próximos pasos