fix(paradizweb): parse natural-date phrases and complete booking data extraction
This commit is contained in:
@@ -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 = 'Домик Эконом';
|
||||
|
||||
Reference in New Issue
Block a user