Creé la colección "misión". Quiero enviar un correo electrónico a un destinatario personalizado para cada nueva grabación en la mesa de la misión.
Según la documentación de Directus, vi que esto es posible a través de webHooks.
ingrese la descripción del enlace aquí
Sin embargo, no entiendo muy bien la lógica. Especialmente porque en la interfaz de administración de Directus, hay una página para agregar webhooks y vincularlos a la colección en cuestión.
¿Me puede decir por dónde debo empezar a lograr mi POC.
También puse algunas capturas de pantalla sobre la arquitectura de mi aplicación, puedes decirme si realmente debería ser así o no. Tengo dudas.
{ "name": "test1-directus", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "directus start" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "directus": "^9.0.0-rc.91", "mysql": "^2.18.1", "nodemailer": "^6.6.3" } }Creé un proyecto con el comando: npx create-directus-project test1directus Mi proyecto se ejecuta en el puerto 8055 con una configuración de proxy inverso en nginx.
¿Está todo bien o me perdí un paso?
Gracias de antemano por su ayuda.
Encontré este ejemplo para poner: extensiones/ganchos/sincronización-con-externo/index.js
Después de varias modificaciones, este error persiste en mi escritura:
Se produjo un error al ejecutar el enlace "items.create". No se puede desestructurar la propiedad 'misión' de 'indefinido' porque no está definida.
El console.log no me muestra nada.
const axios = require("axios"); module.exports = function registerHook({ services, exceptions }) { const { MailService } = services; const { ServiceUnavailableException, ForbiddenException } = exceptions; return { // Force everything to be admin-only at all times "items.*": async function ({ item, accountability }) { if (accountability.admin !== true) throw new ForbiddenException(); }, // Sync with external recipes service, cancel creation on failure "items.create": async function (input, { mission, schema }) { console.log(items); if (mission !== "recipes") return input; const mailService = new MailService({ schema }); try { await axios.post("https://example.com/items", input); await mailService.send({ to: "pseudo.pseudo@gmail.com", template: { name: "item-created", data: { collection: mission, }, }, }); } catch (error) { throw new ServiceUnavailableException(error); } input[0].syncedWithExample = true; return input; }, }; };