fix(akquise): Berater-Mail ohne Link ins CRM
Die Berater haben keinen Zugang zum CRM. Die Mail verlinkt nur noch die Ausschreibung, falls hinterlegt; der Hinweis auf die Einstellungen in der Fusszeile entfaellt ebenso. CRM_PUBLIC_URL wird nicht mehr gebraucht. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
6772f34b4e
commit
019fa1a251
@@ -989,7 +989,9 @@ crm@perinco.de, sobald er in der Akquise einem Projekt zugeordnet wird - beim
|
|||||||
Anlegen und auch, wenn er später beim Bearbeiten dazukommt. Wer schon
|
Anlegen und auch, wenn er später beim Bearbeiten dazukommt. Wer schon
|
||||||
zugeordnet war, bekommt beim erneuten Speichern keine zweite Mail. Die Mail
|
zugeordnet war, bekommt beim erneuten Speichern keine zweite Mail. Die Mail
|
||||||
sagt, dass der Berater auf das Projekt beworben wurde, und enthält die
|
sagt, dass der Berater auf das Projekt beworben wurde, und enthält die
|
||||||
Projektdaten samt ausgeschriebenem Link zum Projekt; eine Antwort darauf
|
Projektdaten samt ausgeschriebenem Link zum Projekt, sofern einer hinterlegt
|
||||||
|
ist. Ins CRM verlinkt sie nicht, die Berater haben dort keinen Zugang. Eine
|
||||||
|
Antwort darauf
|
||||||
geht an den, der das Projekt eingetragen hat. Ohne hinterlegte Adresse geht
|
geht an den, der das Projekt eingetragen hat. Ohne hinterlegte Adresse geht
|
||||||
nichts heraus, der Haken zeigt dann einen Hinweis.
|
nichts heraus, der Haken zeigt dann einen Hinweis.
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -396,7 +396,9 @@ der Akquise ein Projekt eingetragen und dabei ein Berater ausgewählt, bekommt
|
|||||||
dieser eine Mail: Betreff „Du wurdest beworben: ‹Titel›", im Text „wir haben
|
dieser eine Mail: Betreff „Du wurdest beworben: ‹Titel›", im Text „wir haben
|
||||||
dich auf folgendes Projekt beworben", dazu Titel, Endkunde, Anbieter, Kanal,
|
dich auf folgendes Projekt beworben", dazu Titel, Endkunde, Anbieter, Kanal,
|
||||||
Tagessatz, Zeitraum, der **Link zum Projekt** ausgeschrieben, wer beworben hat
|
Tagessatz, Zeitraum, der **Link zum Projekt** ausgeschrieben, wer beworben hat
|
||||||
und die Beschreibung (gekürzt auf 1500 Zeichen).
|
und die Beschreibung (gekürzt auf 1500 Zeichen). Ist kein Link hinterlegt,
|
||||||
|
fehlt die Zeile. **Einen Link ins CRM enthält die Mail bewusst nicht** - die
|
||||||
|
Berater haben keinen Zugang zum CRM.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
|
|||||||
+2
-3
@@ -46,9 +46,8 @@ MS_CLIENT_ID=
|
|||||||
MS_CLIENT_SECRET=
|
MS_CLIENT_SECRET=
|
||||||
MS_MAILBOX=crm@perinco.de
|
MS_MAILBOX=crm@perinco.de
|
||||||
|
|
||||||
# Adresse des CRM fuer den Link in der Berater-Mail bei neuem Projekt
|
# Die Berater-Mail bei neuem Projekt braucht zusaetzlich die
|
||||||
# (braucht zusaetzlich die Anwendungsberechtigung Mail.Send).
|
# Anwendungsberechtigung Mail.Send (siehe docs/11-postfach.md).
|
||||||
# CRM_PUBLIC_URL=https://crm.perinco.de
|
|
||||||
|
|
||||||
# Ordner im Postfach. "inbox" ist ein von Graph vorgegebener Name.
|
# Ordner im Postfach. "inbox" ist ein von Graph vorgegebener Name.
|
||||||
# MS_MAIL_FOLDER=inbox
|
# MS_MAIL_FOLDER=inbox
|
||||||
|
|||||||
@@ -14,12 +14,13 @@ import { splitConsultants } from './acquisitionRules.js';
|
|||||||
* App hat dafuer die Anwendungsberechtigung Mail.Send. Antworten gehen per
|
* App hat dafuer die Anwendungsberechtigung Mail.Send. Antworten gehen per
|
||||||
* Reply-To an den Benutzer, der das Projekt eingetragen hat.
|
* Reply-To an den Benutzer, der das Projekt eingetragen hat.
|
||||||
*
|
*
|
||||||
|
* Die Berater haben keinen Zugang zum CRM - die Mail verlinkt deshalb nur die
|
||||||
|
* Ausschreibung (falls hinterlegt) und nie das CRM selbst.
|
||||||
|
*
|
||||||
* Der Versand laeuft nach der Antwort an den Browser und darf das Speichern nie
|
* Der Versand laeuft nach der Antwort an den Browser und darf das Speichern nie
|
||||||
* scheitern lassen: ein Fehler landet im Log, der Eintrag ist trotzdem da.
|
* scheitern lassen: ein Fehler landet im Log, der Eintrag ist trotzdem da.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const PUBLIC_URL = (process.env.CRM_PUBLIC_URL || 'https://crm.perinco.de').replace(/\/+$/, '');
|
|
||||||
|
|
||||||
/** Beschreibung in der Mail kuerzen - der volle Text steht im CRM. */
|
/** Beschreibung in der Mail kuerzen - der volle Text steht im CRM. */
|
||||||
const MAX_DESCRIPTION_CHARS = 1500;
|
const MAX_DESCRIPTION_CHARS = 1500;
|
||||||
|
|
||||||
@@ -96,9 +97,7 @@ export function buildMessage(acquisition, consultantName) {
|
|||||||
description
|
description
|
||||||
? `<p style="white-space:pre-wrap;border-left:3px solid #ddd;padding-left:12px;color:#444">${escapeHtml(description)}</p>`
|
? `<p style="white-space:pre-wrap;border-left:3px solid #ddd;padding-left:12px;color:#444">${escapeHtml(description)}</p>`
|
||||||
: '',
|
: '',
|
||||||
`<p><a href="${PUBLIC_URL}/">Im perinco CRM öffnen</a></p>`,
|
'<p style="color:#888;font-size:12px">Automatische Nachricht von perinco.</p>',
|
||||||
'<p style="color:#888;font-size:12px">Automatische Nachricht aus dem perinco CRM. ',
|
|
||||||
'Die Benachrichtigung lässt sich unter Einstellungen → Akquise je Berater abschalten.</p>',
|
|
||||||
'</div>',
|
'</div>',
|
||||||
].join('');
|
].join('');
|
||||||
|
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ check(
|
|||||||
message.html.includes('<a href="https://example.com/p?a=1&b=2">https://example.com/p?a=1&b=2</a>')
|
message.html.includes('<a href="https://example.com/p?a=1&b=2">https://example.com/p?a=1&b=2</a>')
|
||||||
);
|
);
|
||||||
check('Leere Felder fehlen', !message.html.includes('Projektpreis'));
|
check('Leere Felder fehlen', !message.html.includes('Projektpreis'));
|
||||||
|
check('Kein Link ins CRM', !/crm\.perinco|CRM/.test(message.html));
|
||||||
|
|
||||||
|
const withoutLink = buildMessage({ id: 2, title: 'Ohne Link', link: null }, 'Nico');
|
||||||
|
check('Ohne Link: kein <a>', !withoutLink.html.includes('<a ') && !withoutLink.html.includes('Link zum Projekt'));
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
failures === 0 ? '\nAlle Pruefungen bestanden.' : `\n${failures} Pruefung(en) fehlgeschlagen.`
|
failures === 0 ? '\nAlle Pruefungen bestanden.' : `\n${failures} Pruefung(en) fehlgeschlagen.`
|
||||||
|
|||||||
Reference in New Issue
Block a user