From 4ee2a4b1c1b64e91ce063b2642de187a67f6b45a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Dubigny?= Date: Fri, 30 Aug 2024 16:56:41 +0200 Subject: [PATCH 1/3] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index df13f232..3ea7dcdd 100644 --- a/README.md +++ b/README.md @@ -110,7 +110,7 @@ Afin de configurer votre module ou votre client OpenId Connect, vous trouverez c Voici à quoi ressemble le bouton MonComptePro : -![](/assets/button-moncomptepro.svg) +![](/public/button-moncomptepro.svg) Pour intègrer ce bouton sur votre service, 3 options s’offrent à vous. From 09c16e53e52be15bae0d76a95b288e9e14e9cd69 Mon Sep 17 00:00:00 2001 From: Douglas Duteil Date: Mon, 2 Sep 2024 14:17:51 +0200 Subject: [PATCH 2/3] feat: use crisp for moderation exchange (#651) --- .github/workflows/end-to-end.yml | 1 + cypress/e2e/join_and_moderation/env.conf | 0 cypress/e2e/join_and_moderation/fixtures.sql | 10 +++ cypress/e2e/join_and_moderation/index.cy.ts | 34 +++++++ package-lock.json | 8 ++ package.json | 1 + public/mail-banner.png | Bin 0 -> 20104 bytes src/config/env.ts | 6 ++ src/connectors/brevo.ts | 1 - src/connectors/crisp.ts | 84 ++++++++++++++++++ src/managers/organization/join.ts | 36 +++++--- .../unable-to-auto-join-organization.ejs | 11 --- .../mails/unable-to-auto-join-organization.ts | 24 +++++ 13 files changed, 193 insertions(+), 23 deletions(-) create mode 100644 cypress/e2e/join_and_moderation/env.conf create mode 100644 cypress/e2e/join_and_moderation/fixtures.sql create mode 100644 cypress/e2e/join_and_moderation/index.cy.ts create mode 100644 public/mail-banner.png create mode 100644 src/connectors/crisp.ts delete mode 100644 src/views/mails/unable-to-auto-join-organization.ejs create mode 100644 src/views/mails/unable-to-auto-join-organization.ts diff --git a/.github/workflows/end-to-end.yml b/.github/workflows/end-to-end.yml index 3ea741f8..6775782c 100644 --- a/.github/workflows/end-to-end.yml +++ b/.github/workflows/end-to-end.yml @@ -46,6 +46,7 @@ jobs: - check_email_deliverability - delete_account - delete_totp + - join_and_moderation - join_collectivite_territoriale_official_contact_domain - join_must_confirm - join_org_with_gouv_fr_domain diff --git a/cypress/e2e/join_and_moderation/env.conf b/cypress/e2e/join_and_moderation/env.conf new file mode 100644 index 00000000..e69de29b diff --git a/cypress/e2e/join_and_moderation/fixtures.sql b/cypress/e2e/join_and_moderation/fixtures.sql new file mode 100644 index 00000000..57487b3f --- /dev/null +++ b/cypress/e2e/join_and_moderation/fixtures.sql @@ -0,0 +1,10 @@ +INSERT INTO users + (id, email, email_verified, email_verified_at, encrypted_password, created_at, updated_at, given_name, family_name, + phone_number, job) +VALUES + (1, '86983334-028f-48b5-881d-8b05d738bec5@mailslurp.net', true, CURRENT_TIMESTAMP, '$2a$10$kzY3LINL6..50Fy9shWCcuNlRfYq0ft5lS.KCcJ5PzrhlWfKK4NIO', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Jean', 'Nouveau', '0123456789', 'Sbire'); + +INSERT INTO organizations + (id, siret, created_at, updated_at) +VALUES + (1, '66204244933106', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); diff --git a/cypress/e2e/join_and_moderation/index.cy.ts b/cypress/e2e/join_and_moderation/index.cy.ts new file mode 100644 index 00000000..3a73d866 --- /dev/null +++ b/cypress/e2e/join_and_moderation/index.cy.ts @@ -0,0 +1,34 @@ +// + +// + +describe("join and moderation", () => { + before(() => { + cy.mailslurp().then((mailslurp) => + mailslurp.inboxController.deleteAllInboxEmails({ + inboxId: "86983334-028f-48b5-881d-8b05d738bec5", + }), + ); + }); + + beforeEach(() => { + cy.login( + "86983334-028f-48b5-881d-8b05d738bec5@mailslurp.net", + "password123", + ); + }); + + it("will be moderated", function () { + cy.visit(`/`); + cy.get('[name="siret"]').type("66204244933106"); + cy.get('[type="submit"]').click(); + + cy.contains("Rattachement en cours"); + cy.contains( + "⏱️ Notre équipe étudie votre demande de rattachement à l’organisation Bnp paribas - Bnp pariba", + ); + cy.contains( + "avec l’adresse email 86983334-028f-48b5-881d-8b05d738bec5@mailslurp.net.", + ); + }); +}); diff --git a/package-lock.json b/package-lock.json index 8739c3d6..3c892e7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "@fullhuman/postcss-purgecss": "^5.0.0", "@gouvfr/dsfr": "^1.12.1", + "@numerique-gouv/crisp": "https://github.com/douglasduteil/crisp/releases/download/v1.6.1/douglasduteil-crisp-1.6.1.tgz", "@panva/jose": "^1.9.3", "@sentry/node": "^7.112.2", "@sentry/tracing": "^7.112.2", @@ -1044,6 +1045,13 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@numerique-gouv/crisp": { + "name": "@douglasduteil/crisp", + "version": "1.6.1", + "resolved": "https://github.com/douglasduteil/crisp/releases/download/v1.6.1/douglasduteil-crisp-1.6.1.tgz", + "integrity": "sha512-fLa2Onk60hMclWoyKkpGpNSwPB3oyXg7fDmFB3t8I/b649IzDWsfYr7YFS9T0gYgaesw0hwhRKa8OT9LJZWIDg==", + "license": "WTFPL" + }, "node_modules/@panva/asn1.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", diff --git a/package.json b/package.json index 5db40949..7d94b304 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,7 @@ "connect-redis": "^7.1.1", "console-log-level": "^1.4.1", "cookie-parser": "^1.4.6", + "@numerique-gouv/crisp": "https://github.com/douglasduteil/crisp/releases/download/v1.6.1/douglasduteil-crisp-1.6.1.tgz", "csrf-sync": "^4.0.3", "dotenv": "^16.4.5", "ejs": "^3.1.10", diff --git a/public/mail-banner.png b/public/mail-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..a4dcf38a4e13549f99d02e49290291959dc2fe48 GIT binary patch literal 20104 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 literal 0 HcmV?d00001 diff --git a/src/config/env.ts b/src/config/env.ts index 714051e5..4d03d708 100644 --- a/src/config/env.ts +++ b/src/config/env.ts @@ -3,6 +3,12 @@ import "dotenv/config"; export const { NODE_ENV, + CRISP_BASE_URL = "https://api.crisp.chat", + CRISP_IDENTIFIER, + CRISP_KEY, + CRISP_PLUGIN_URN, + CRISP_USER_NICKNAME = "MonComptePro", + CRISP_WEBSITE_ID, DEPLOY_ENV = "preview", PORT = 3000, MONCOMPTEPRO_HOST = `http://localhost:${PORT}`, diff --git a/src/connectors/brevo.ts b/src/connectors/brevo.ts index 79793dd3..28b6c45b 100644 --- a/src/connectors/brevo.ts +++ b/src/connectors/brevo.ts @@ -15,7 +15,6 @@ type RemoteTemplateSlug = | "verify-email"; type LocalTemplateSlug = | "organization-welcome" - | "unable-to-auto-join-organization" | "welcome" | "moderation-processed" | "delete-account" diff --git a/src/connectors/crisp.ts b/src/connectors/crisp.ts new file mode 100644 index 00000000..88602383 --- /dev/null +++ b/src/connectors/crisp.ts @@ -0,0 +1,84 @@ +// + +import { fetch_crisp, type Config } from "@numerique-gouv/crisp"; +import { + CreateConversationRoute, + SendMessageInAConversationRoute, + UpdateConversationMetaRoute, + UpdateConversationStateRoute, +} from "@numerique-gouv/crisp/router/conversation"; +import { + CRISP_BASE_URL, + CRISP_IDENTIFIER, + CRISP_KEY, + CRISP_PLUGIN_URN, + CRISP_USER_NICKNAME, + CRISP_WEBSITE_ID, +} from "../config/env"; + +// + +const config: Config = { + base_url: CRISP_BASE_URL, + identifier: CRISP_IDENTIFIER || "", + key: CRISP_KEY || "", + plugin_urn: CRISP_PLUGIN_URN || "", + user_nickname: CRISP_USER_NICKNAME, + website_id: CRISP_WEBSITE_ID || "", + debug: true, +}; +// + +export async function startCripsConversation({ + content, + email, + nickname, + subject, +}: { + content: string; + email: string; + nickname: string; + subject: string; +}) { + const { session_id } = await fetch_crisp(config, { + endpoint: `/v1/website/${config.website_id}/conversation`, + method: "POST", + searchParams: {}, + }); + + await fetch_crisp(config, { + endpoint: `/v1/website/${config.website_id}/conversation/${session_id}/meta`, + method: "PATCH", + searchParams: {}, + body: { + email, + nickname, + segments: ["email", "moderation"], + subject, + }, + }); + + await fetch_crisp(config, { + endpoint: `/v1/website/${config.website_id}/conversation/${session_id}/message`, + method: "POST", + searchParams: {}, + body: { + type: "text", + origin: `urn:${config.website_id}`, + from: "operator", + content, + user: { + nickname: config.user_nickname, + }, + }, + }); + + await fetch_crisp(config, { + endpoint: `/v1/website/${config.website_id}/conversation/${session_id}/state`, + method: "PATCH", + searchParams: {}, + body: { state: "resolved" }, + }); + + return session_id; +} diff --git a/src/managers/organization/join.ts b/src/managers/organization/join.ts index 33d6aa98..0973a6bf 100644 --- a/src/managers/organization/join.ts +++ b/src/managers/organization/join.ts @@ -1,6 +1,9 @@ import * as Sentry from "@sentry/node"; import { isEmpty, some } from "lodash-es"; -import { MAX_SUGGESTED_ORGANIZATIONS } from "../../config/env"; +import { + CRISP_WEBSITE_ID, + MAX_SUGGESTED_ORGANIZATIONS, +} from "../../config/env"; import { InseeConnectionError, InseeNotActiveError, @@ -15,7 +18,7 @@ import { import { getAnnuaireEducationNationaleContactEmail } from "../../connectors/api-annuaire-education-nationale"; import { getAnnuaireServicePublicContactEmail } from "../../connectors/api-annuaire-service-public"; import { getOrganizationInfo } from "../../connectors/api-sirene"; -import { sendZammadMail } from "../../connectors/send-zammad-mail"; +import { startCripsConversation } from "../../connectors/crisp"; import { findEmailDomainsByOrganizationId } from "../../repositories/email-domain"; import { createModeration, @@ -45,6 +48,7 @@ import { isEtablissementScolaireDuPremierEtSecondDegre, } from "../../services/organization"; import { isEmailValid } from "../../services/security"; +import { unableToAutoJoinOrganizationMd } from "../../views/mails/unable-to-auto-join-organization"; import { markDomainAsVerified } from "./main"; export const doSuggestOrganizations = async ({ @@ -150,7 +154,7 @@ export const joinOrganization = async ({ } const { id: organization_id, cached_libelle } = organization; - const { email } = user; + const { email, given_name, family_name } = user; const domain = getEmailDomain(email); const organizationEmailDomains = await findEmailDomainsByOrganizationId(organization_id); @@ -303,20 +307,30 @@ export const joinOrganization = async ({ }); } - const ticket = await sendZammadMail({ - to: email, - subject: `[MonComptePro] Demande pour rejoindre ${cached_libelle || siret}`, - template: "unable-to-auto-join-organization", - params: { + let ticket_id = null; + if (CRISP_WEBSITE_ID) { + ticket_id = await startCripsConversation({ + content: unableToAutoJoinOrganizationMd({ + libelle: cached_libelle || siret, + }), + email, + nickname: `${given_name} ${family_name}`, + subject: `[MonComptePro] Demande pour rejoindre ${cached_libelle || siret}`, + }); + } else { + logger.info( + `unable_to_auto_join_organization_md mail not send to ${email}:`, + ); + logger.info({ libelle: cached_libelle || siret, - }, - }); + }); + } const { id: moderation_id } = await createModeration({ user_id, organization_id, type: "organization_join_block", - ticket_id: String(ticket.id), + ticket_id, }); throw new UnableToAutoJoinOrganizationError(moderation_id); diff --git a/src/views/mails/unable-to-auto-join-organization.ejs b/src/views/mails/unable-to-auto-join-organization.ejs deleted file mode 100644 index 85108416..00000000 --- a/src/views/mails/unable-to-auto-join-organization.ejs +++ /dev/null @@ -1,11 +0,0 @@ -Bonjour, -

-⏱️ Notre équipe est en train de vous rattacher à l’organisation <%= libelle; %>. -

-Vous recevrez un email pour accéder à votre démarche dès que nous aurons terminé. -

-(délai moyen : 1 jour ouvré) -

-Cordialement, -

-L’équipe MonComptePro diff --git a/src/views/mails/unable-to-auto-join-organization.ts b/src/views/mails/unable-to-auto-join-organization.ts new file mode 100644 index 00000000..a940bf5f --- /dev/null +++ b/src/views/mails/unable-to-auto-join-organization.ts @@ -0,0 +1,24 @@ +// + +import { MONCOMPTEPRO_HOST } from "../../config/env"; + +// + +export function unableToAutoJoinOrganizationMd({ + libelle, +}: { + libelle: string; +}) { + return ` +![MonComptePro](${MONCOMPTEPRO_HOST}/dist/mail-banner.png) + +Bonjour, + +⏱️ Notre équipe est en train de vous rattacher à l’organisation **${libelle}**. +Vous recevrez un email pour accéder à votre démarche dès que nous aurons terminé. +(délai moyen : 1 jour ouvré) + +Cordialement, +L’équipe MonComptePro +`.trim(); +} From 0d383c8594705c0b9e96c2fde21d92b47cb466e9 Mon Sep 17 00:00:00 2001 From: Douglas Duteil Date: Mon, 2 Sep 2024 15:27:51 +0200 Subject: [PATCH 3/3] :pirate_flag: (crisp): add delay hack (#678) --- src/connectors/crisp.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/connectors/crisp.ts b/src/connectors/crisp.ts index 88602383..7ff6feb4 100644 --- a/src/connectors/crisp.ts +++ b/src/connectors/crisp.ts @@ -73,6 +73,10 @@ export async function startCripsConversation({ }, }); + // HACK(douglasduteil): Wait for the message to be sent + // Crisp seems to have a delay between the message being sent and the state being updated + await new Promise((resolve) => setTimeout(resolve, 500)); + await fetch_crisp(config, { endpoint: `/v1/website/${config.website_id}/conversation/${session_id}/state`, method: "PATCH",