Email et Notifications Push

Bonjour à tous,
je viens vers vous car je suis complètement pommé.
J’aimerai qu’à un ajout d’un élément dans directus l’utilisateur soit prévenu par une notification push, j’ai intégré FCM à mon application mais je ne comprends pas comment paramétrer directus avec FMC et avec mon app (les endpoints, le nodjs et autre me paraissent vraiment abstrait) . Si vous avez des exemple à me proposer je suis preneur.

J’ai également besoin d’envoyer un mail a l’utilisateur depuis l’App (j’utilise Tipimail) mais je n’arrive pas à mettre en place la demande par L’API, donc la encore si vous avez des solutions à me proposer je suis preneur.

Je suis un peu dépassé par tout ca…
@mbritto à quand ta nouvelle formule de cours particulier mentionnée dans ton mail des nouveautés annoncées? parce que je pense que ca pourrait me faire progresser sur quelques sujets :sweat_smile:

Bonjour,

Je vais pas pouvoir trop aider sur les notifications.
Par contre, pour Tipimail, as-tu exploré la documentation qui est pas mal faite? notamment la partie API et configurateur?

Sinon, je pense que tu peux les contacter si besoin d’aide.

Bonjour,
Oui j’ai regardé, mais c’est vrai que je n’ai pas pensé à les contacter, je vais le faire immédiatement, ils pourront peut être me proposer une solution adaptée à mon besoin

1 « J'aime »

Salut @PapaRoack ! Alors ça y est nous avons lancé hier la nouvelle formule de coaching individuel qui est maintenant scindée en 2 parties :

Pour communiquer entre ton serveur Directus et Firebase Cloud Messaging tu vas devoir forcément le faire en code avec node.js. Firebase ne propose pas de façon simple d’envoyer des pushs depuis un serveur externe, il faut utiliser leur API.
Sur mon projet je l’ai fait en en TypeScript et je l’ai montré quelques fois en coaching de groupe.
Voici la partie code qui s’occupe de l’envoi des Push à Firebase :

import { BatchResponse } from "firebase-admin/lib/messaging/messaging-api";
import { App, applicationDefault, initializeApp } from "firebase-admin/app";
import { getMessaging } from "firebase-admin/messaging";

export interface PushNotificationResult {
    error?: string;
    successCount: number;
    failedDevicesTokens: string[]; 
}

export interface PushNotificationData {
    [key:string]:string,
}

export class PushNotificationsManager {
    firebaseApp:App|null = null;
    
    async sendNotification(title: string, body: string, data: PushNotificationData, tokens: string[]): Promise<PushNotificationResult> {
        if (tokens.length <= 0) {
            return { error: "No device found to send any notification", successCount: 0, failedDevicesTokens: [] };
        }
        if (this.firebaseApp == null) {
            this.firebaseApp = initializeApp({
                credential: applicationDefault()});
        }
        console.log(`Received notification to send : `, title, body, data, ` to ${tokens.length} tokens`);
        const message = {
            data: data,
            notification: { title: title, body: body },
            tokens: tokens,
        };

        try {

            const firebaseResponse: BatchResponse = await getMessaging().sendMulticast(message);
            return this.handleFirebaseResponses(firebaseResponse, tokens);
        } catch (error) {
            console.log(error);
            return { error: (typeof error === "string"?error:"Unknown error"), successCount: 0, failedDevicesTokens: [] };
        }
    }

    private handleFirebaseResponses(response: BatchResponse, tokens: string[]): PushNotificationResult {
        const failedTokens:string[] = [];
        if (response.failureCount > 0) {
            response.responses.forEach((resp, idx) => {
                if (!resp.success) {
                    const token = tokens[idx];
                    if (token != undefined){
                        failedTokens.push(token);
                    }
                }
            });
            console.log('List of tokens that caused failures: ');
            console.log(failedTokens);
        }
        return { successCount: response.successCount, failedDevicesTokens: failedTokens };
    }
}

Il va falloir que je me penche dessus parce que ca me semble tellement abstrait, je manque de connaissance
Pour le moment j’utilise leur ancienne API qui montre ses limites mais fonctionne tout de même pour moi :

func sendNotification(title:String, subtitle:String, body:String, deviceToken:[String]) async {
        guard let urlRegister = URL(string: "https://fcm.googleapis.com/fcm/send") else {return}
        var request = URLRequest(url: urlRegister)
        let session = URLSession.shared
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        request.addValue("key=MYKEY", forHTTPHeaderField: "Authorization")
        let jsonObject:[String : Any] = [ "to":deviceToken,"notification":["body":body,"title":title,"subtitle":subtitle]]
        let jsonData = try? JSONSerialization.data(withJSONObject: jsonObject, options: [])
        request.httpBody = jsonData
        do {
            let (_, _) = try await session.data(for: request)
            print("Notification envoyée")
        } catch {
            print("Impossible d'envoyer la notification'")
        }
    }

C’est donc directement dans mon code d’APP que l’utilisateur qui écrit dans la BDD qui envoie le push à l’autre utilisateur, c’est pas la folie mais ca me permet d’avancer

Pour les coachings de groupe je n’y ai jamais participé, pas que je ne souhaites pas mais entre gérer le petit la journée et travailler la nuit j’ai pas beaucoup de temps pour moi :sweat_smile:, il va falloir que je me remette à regarder les replays car j’ai du retard

Il me reste encore ce soucis d’envoie d’email automatique parceque après contact avec Tipimail, ils m’ont envoyés bouler :sweat_smile:

Le but est eye lorsque l’utilisateur créer son compte, un email soit envoyer sur son mail pro pour vérifier qu’il travaille bien dans la boite

La nouvelle version de Directus propose une fonctionnalité appelée Flow qui permet de faire des automatisations après certains événements. Tu dois pouvoir t’en servir pour envoyer un email après inscription et peut être même pour envoyer tes requêtes FCM en utilisant l’ancienne API POST.

Oui j’ai vu ça du coup en cherchant des alternatives, je n’arrive pas à accéder à la collection directus-user par contre avec donc je me suis dis que ça ne me servirai pas, mais il faut que je creuse un peu plus