Skip to content

Commit 474e21e

Browse files
committed
feat(moderation): auto mark as resolved
1 parent 22daa31 commit 474e21e

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

packages/~/infra/crisp/lib/src/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
GetMessagesInAConversationRoute,
1313
SendMessageInAConversationRoute,
1414
UpdateConversationMetaRoute,
15+
UpdateConversationStateRoute,
1516
} from "@numerique-gouv/crisp/router/conversation";
1617
import type { OperatorsRouter } from "@numerique-gouv/crisp/router/operators";
1718
import { z } from "zod";
@@ -111,4 +112,15 @@ export async function create_conversation(
111112
return { session_id };
112113
}
113114

115+
export function MarkConversationAsResolved(config: Config) {
116+
return async function mark_conversation_as_resolved(session_id: string) {
117+
await fetch_crisp<UpdateConversationStateRoute>(config, {
118+
endpoint: `/v1/website/${config.website_id}/conversation/${session_id}/state`,
119+
method: "PATCH",
120+
searchParams: {},
121+
body: { state: "resolved" },
122+
});
123+
};
124+
}
125+
114126
export type get_crisp_mail_dto = Awaited<ReturnType<typeof get_crisp_mail>>;

packages/~/moderations/lib/src/usecase/respond_to_ticket.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
import { NotFoundError } from "@~/app.core/error";
44
import { z_username } from "@~/app.core/schema/z_username";
5-
import { get_user, is_crisp_ticket, send_message } from "@~/crisp.lib";
5+
import {
6+
get_user,
7+
is_crisp_ticket,
8+
MarkConversationAsResolved,
9+
send_message,
10+
} from "@~/crisp.lib";
611
import { get_full_ticket, send_zammad_response } from "@~/zammad.lib";
712
import {
813
ARTICLE_TYPE,
@@ -57,6 +62,14 @@ async function respond_in_conversation(
5762
user,
5863
session_id: moderation.ticket_id,
5964
});
65+
66+
// HACK(douglasduteil): Wait for the message to be sent
67+
// Crisp seems to have a delay between the message being sent and the state being updated
68+
await new Promise((resolve) => setTimeout(resolve, 1_000));
69+
70+
const mark_conversation_as_resolved =
71+
MarkConversationAsResolved(crisp_config);
72+
await mark_conversation_as_resolved(moderation.ticket_id);
6073
}
6174

6275
async function respond_to_zammad_ticket(

0 commit comments

Comments
 (0)