skip to Main Content

I created the "mission" collection. I want to send an email to a personalized recipient for each new recording on the mission table.

enter image description here

According to the Directus documentation, I saw that this is possible via webHooks.

enter link description here

However, I don’t quite understand the logic. Especially since in the Directus administration interface, there is a page to add webhooks and link them to the collection concerned.

enter image description here

Can you tell me where I should start to achieve my POC.

I also put some screenshots on the architecture of my app, you can tell me if this is really how it should be or not. I have doubts.

enter image description here

enter image description here

enter image description here

{
  "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"
  }
}

I created a project with the command: npx create-directus-project test1directus
My project is running on port 8055 with a reverse proxy setting on nginx.

Is everything OK or did I miss a step?

Thank you in advance for your help.

2

Answers


  1. Chosen as BEST ANSWER

    I found this example to put in: extensions / hooks / sync-with-external / index.js

    After several modifications, this error persists on my writing:

    An error was thrown while executing hook "items.create" Cannot destructure property 'mission' of 'undefined' as it is undefined.

    The console.log doesn't show me anything.

    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: "[email protected]",
              template: {
                name: "item-created",
                data: {
                  collection: mission,
                },
              },
            });
          } catch (error) {
            throw new ServiceUnavailableException(error);
          }
    
          input[0].syncedWithExample = true;
    
          return input;
        },
      };
    };


  2. You can now use Directus Flows from Settings > Flows.
    Read the docs here: https://docs.directus.io/configuration/flows

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search