diff --git a/integrations/paradiz-web/paradiz-web-agent-server.mjs b/integrations/paradiz-web/paradiz-web-agent-server.mjs index 1bde3ce..1c9db51 100644 --- a/integrations/paradiz-web/paradiz-web-agent-server.mjs +++ b/integrations/paradiz-web/paradiz-web-agent-server.mjs @@ -149,16 +149,42 @@ function extractBookingFields(text) { if (phone) out.phone = phone; if (email) out.email = email; - const guestM = t.match(/(?:фио|меня зовут|я)\s*[:\-]?\s*([А-ЯЁA-Z][а-яёa-z]+(?:\s+[А-ЯЁA-Z][а-яёa-z]+){1,2})/i); + const guestM = t.match(/(?:фио|меня зовут|я)\s*[:\-]?\s*([А-ЯЁA-Z][а-яёa-z]+(?:\s+[А-ЯЁA-Z][а-яёa-z]+){1,2})/i) + || t.match(/^\s*([А-ЯЁ][а-яё]+\s+[А-ЯЁ][а-яё]+(?:\s+[А-ЯЁ][а-яё]+)?)/); if (guestM) out.guest = guestM[1].trim(); - const guestsM = t.match(/(\d+)\s*(?:взросл|гост)/i); + const guestsM = t.match(/(\d+)\s*(?:взросл|гост|чел|человек)/i); if (guestsM) out.guests = Number(guestsM[1]); - const dateRangeM = t.match(/(?:с|заезд)\s*(\d{1,2})[./](\d{1,2}).*?(?:по|выезд|до)\s*(\d{1,2})[./](\d{1,2})/i); - if (dateRangeM) { - out.checkin = toIsoDate(dateRangeM[1], dateRangeM[2]); - out.checkout = toIsoDate(dateRangeM[3], dateRangeM[4]); + const dateRangeNumM = t.match(/(?:с|заезд)\s*(\d{1,2})[./](\d{1,2}).*?(?:по|выезд|до)\s*(\d{1,2})[./](\d{1,2})/i); + if (dateRangeNumM) { + out.checkin = toIsoDate(dateRangeNumM[1], dateRangeNumM[2]); + out.checkout = toIsoDate(dateRangeNumM[3], dateRangeNumM[4]); + } else { + const months = { + 'январ':1,'феврал':2,'март':3,'апрел':4,'ма':5,'июн':6,'июл':7,'август':8,'сентябр':9,'октябр':10,'ноябр':11,'декабр':12 + }; + const dateRangeWordM = t.match(/(?:с|заезд)\s*(\d{1,2})\s+([а-яё]+).*?(?:по|до|выезд)\s*(\d{1,2})\s+([а-яё]+)/i); + if (dateRangeWordM) { + const m1w = dateRangeWordM[2].toLowerCase(); + const m2w = dateRangeWordM[4].toLowerCase(); + const m1 = Object.entries(months).find(([k]) => m1w.startsWith(k))?.[1]; + const m2 = Object.entries(months).find(([k]) => m2w.startsWith(k))?.[1]; + if (m1 && m2) { + out.checkin = toIsoDate(dateRangeWordM[1], m1); + out.checkout = toIsoDate(dateRangeWordM[3], m2); + } + } else { + const dateRangeOneMonthM = t.match(/(?:с|заезд)\s*(\d{1,2})\s*(?:по|до|выезд)\s*(\d{1,2})\s+([а-яё]+)/i); + if (dateRangeOneMonthM) { + const mw = dateRangeOneMonthM[3].toLowerCase(); + const m = Object.entries(months).find(([k]) => mw.startsWith(k))?.[1]; + if (m) { + out.checkin = toIsoDate(dateRangeOneMonthM[1], m); + out.checkout = toIsoDate(dateRangeOneMonthM[2], m); + } + } + } } if (/домик\s*эконом/i.test(t)) out.room = 'Домик Эконом';