Todos lo hemos visto: todo bien en tu formulario, todo bien en tu AMPscript y cuando lo ejecutas: pum. Error 500. Y lo peor es que SFMC es menos comunicativo que tu ex cuando decía “no tengo nada”. Solo te dice Error 500… y ya está. Adivina qué está mal.
Así que, llegué a la siguiente solución. Obligar a AMPscript a que me diga que es lo que está mal… usando de intermediario a su amiga menos tóxica: Server Side JavaScript. O SSJS pa los cuates.
Total que si tienes un bloque de AMPscript que te está dando problemas y quieres troubleshootear, puedes hacer lo siguiente: ponerlo entre dos bloques de SSJS. Algo así
<script runat="server">
Platform.Load("Core","1.1.1");
try{
</script>
%%[
Inserta tu AMPscript Aquí
]%%
<script runat="server">
}catch (e) {
Write("<b>Error:</b> " + Stringify(e.message) + "<br><br><b>Descripción:</b> " + Stringify(e.description));
}
</script>
Y voilá! al correr el código nos va a devolver el error y la descripción del error para que podamos debuguear.
Oye kryz, pero qué pasa si ya está en producción y los usuarios se están quejando de que tiene errores pero no puedo replicarlos?
Pues he llegado a una solución también para eso. Puedes loggear los errores en una Data Extension.
Agrega lo siguiente al segundo bloque de SSJS
<script runat="server">
}catch (e) {
Write("<b>Error:</b> " + Stringify(e.message) + "<br><br><b>Descripción:</b> " + Stringify(e.description));
Platform.Function.InsertData("errorLogDE",
["Error_Message","Error_Description"],
[e.message,e.description]);
}
</script>
Ya a partir de aquí te puedes poner más creativo y agregarle campos a tu Data Extension de errorLog, por ejemplo:
%%[
SET @PAGEURL = RequestParameter('PageUrl')
<script runat="server">
Platform.Load("Core","1.1.1");
try{
</script>
%%[
Inserta tu AMPscript Aquí
]%%
<script>
var pageUrl = Variable.GetValue("@PAGEURL");
var userAgent = Platform.Request.UserAgent;
Platform.Function.InsertData("errorLogDE",
["Error_Page", "User_Agent, "Error_Message","Error_Description", "Error_Date"],
[pageUrl, userAgent, e.message, e.description, Now()]);
}
</script>
Y agregando este código a tus CloudPages y teniendo una sola Data Extension puedes mantener el log de tus errores, saber de qué página se generaron, cual era el userAgent y así poder troubleshootear o tratar de replicar los errores.
No olvides configurar el Retention Policy de tu errorLogDE para que no te quedes con los errores hasta la eternidad consumiendo tu espacio de almacenamiento de Data Extensions.
Happy coding.