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
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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user