select predefined messages
Deploy db-migrations / db-migrations (push) Successful in 49s
Deploy service message-delivery-method-web-push / service message-delivery-method-web-push (push) Successful in 1m9s
Deploy app frontend / app frontend (push) Successful in 1m53s
Deploy service tg-bot / service tg-bot (push) Successful in 1m36s

This commit is contained in:
2024-12-17 02:41:14 +02:00
parent c1edb1937f
commit 0e37ebfe5f
15 changed files with 630 additions and 70 deletions
@@ -10,6 +10,8 @@ import {
import { createQRCode } from "../../api/qrCodes";
import { generateQRCodeImage } from "../../services/qrGenerator";
import { selectMultipleActions } from "./selectMultipleActions";
import { defaultMessages } from "@hereconnect/constants";
import { selectPredefinedMessages } from "./selectPredefinedMessages";
export async function newQRCodeConversation(
conversation: Conversation<MyContext>,
@@ -30,7 +32,7 @@ export async function newQRCodeConversation(
return;
}
// 1. Выбор типа объекта (placement)
// Выбор типа объекта (placement)
await ctx.reply("Выберите объект, для которого будет создан QR-код:", {
reply_markup: {
inline_keyboard: buildPlacementKeyboard(qrCodePlacements),
@@ -52,7 +54,24 @@ export async function newQRCodeConversation(
// Подтверждаем выбор
await placementChoice.answerCallbackQuery({ text: "Объект выбран!" });
// 2. Ввод названия QR-кода
// Выбор действий
const availableActions = [
{ action: "sendMessage", label: "Отправить сообщение" },
{ action: "viewContactInfo", label: "Посмотреть контактные данные" },
] as const;
const chosenActions = await selectMultipleActions(
conversation,
ctx,
availableActions,
);
if (chosenActions.length === 0) {
await ctx.reply("Вы не выбрали ни одного действия. Попробуйте снова /new.");
return;
}
// Ввод названия QR-кода
let exampleName: string;
switch (typedPlacement) {
@@ -76,6 +95,15 @@ export async function newQRCodeConversation(
break;
}
let predefinedMessages: QRCodeDocument["predefinedMessages"] = undefined;
if (chosenActions.includes("sendMessage")) {
predefinedMessages = await selectPredefinedMessages(
conversation,
ctx,
typedPlacement,
);
}
// Отправляем сообщение пользователю с примером
await ctx.reply(
`Введите название для вашего QR-кода (например: «${exampleName}»):`,
@@ -83,42 +111,23 @@ export async function newQRCodeConversation(
const nameMsg = await conversation.waitFor("message:text");
const name = nameMsg.message.text.trim();
if (name.length < 2) {
await ctx.reply(
"Название должно содержать минимум 2 символа. Попробуйте снова /new.",
);
return;
}
// 3. Выбор действий
const availableActions = [
{ action: "sendMessage", label: "📩 Отправить сообщение" },
{ action: "viewContactInfo", label: "📞 Посмотреть контактные данные" },
] as const;
// Уведомление о создании QR-кода
await ctx.reply("Создаём QR-код…");
const chosenActions = await selectMultipleActions(
conversation,
ctx,
availableActions,
);
if (chosenActions.length === 0) {
await ctx.reply("Вы не выбрали ни одного действия. Попробуйте снова /new.");
return;
}
// 4. Создание документа в БД
// Создание документа в БД
const { url } = await createQRCode({
userUuid,
name,
placement: typedPlacement,
actions: chosenActions,
predefinedMessages,
});
// 5. Генерация QR-кода
// Генерация QR-кода
const pngBuffer = await generateQRCodeImage(url, { format: "png" });
// 6. Отправляем пользователю QR-код
// Отправляем пользователю QR-код
await ctx.reply("Ваш QR-код готов! Вот он:");
await ctx.replyWithPhoto(