s Instant Booking

Advanced Appliance Repair, LLC

What We Do

We provide professional appliance repair services for major household appliances, combining expert service, modern technology, and friendly customer care to make the repair process easy and dependable.

Contact Information* Required Information

Service Location

Additional Information

Brands

Brands

Which Appliance Service Type Should I Choose?

Standard Household Appliance

Choose this option for most common household appliance brands, including standard washers, dryers, dishwashers, refrigerators, freezers, ranges, cooktops, ovens, and microwaves.

 

Boutique / Premium Appliance

Choose this option if your appliance is a premium, luxury, or specialty brand. These appliances often require additional technical resources, specialized parts research, and more detailed service procedures.

Boutique brands include, but are not limited to:

Sub-Zero, Cove, Wolf, Miele, Thermador, Viking, Dacor, Monogram, Fisher & Paykel, Gaggenau, and similar premium appliance brands.

If your appliance brand is listed above or is considered a high-end specialty brand, please select Boutique / Premium Appliance when booking.

 

Not Sure Which One to Pick?

If you are unsure, please choose the option that best matches your appliance brand. Our office may adjust the service type if needed after reviewing your appliance information.

Pick Service Category

Pick Sub Category

Dispatch Standard

Standard home appliance. Washer, Dryer, Oven, Range, Microwave, Refrigerator, Freezer Dishwasher,

$159.95 / EA

Boutique Dispatch

Sub-Zero, Cove, Wolf, Miele, Thermador, Viking, Dacor, Monogram, Fisher & Paykel, Gaggenau, Etc

$179.95 / EA


$ 0
Dispatch Standard
$ 159.95 / EA
Description:
Standard home appliance. Washer, Dryer, Oven, Range, Microwave, Refrigerator, Freezer Dishwasher,

$ 0
Boutique Dispatch
$ 179.95 / EA
Description:
Sub-Zero, Cove, Wolf, Miele, Thermador, Viking, Dacor, Monogram, Fisher & Paykel, Gaggenau, Etc

Schedule

Booking Summary

Pick Appliance Repair:

Next Booking:


Discount $ 0.00
Sub Total $ 0.00
Tax $ 0.00
TOTAL $ 0.00
(function () { const company = { name: "Advanced Appliance Repair", bookingLink: "https://durangoadvancedappliancerepair.com/contact/", phone: "(970) 759-4194", businessHours: "Monday through Friday, 8:00 AM to 4:30 PM", serviceArea: "La Plata County, Colorado, including Durango, Bayfield, Ignacio, and nearby approved service areas" }; const conversation = { appliance: null, brand: null, symptom: null, warranty: false, lastQuestion: null, readyToBook: false }; const manufacturerSupport = { "Whirlpool": { phone: "1-866-698-2538", website: "https://www.whirlpool.com/services/contact-us.html" }, "Maytag": { phone: "1-800-344-1274", website: "https://www.maytag.com/owners.html" }, "KitchenAid": { phone: "1-800-422-1230", website: "https://www.kitchenaid.com/service-and-support.html" }, "Amana": { phone: "1-866-616-2664", website: "https://www.amana.com/resources/contact-us.html" }, "JennAir": { phone: "1-800-536-6247", website: "https://www.jennair.com/owners-center-pdp.html" }, "GE": { phone: "1-800-432-2737", website: "https://www.geappliances.com/ge/service-and-support/contact.htm" }, "Hotpoint": { phone: "1-800-432-2737", website: "https://www.hotpoint.com/appliance-support/" }, "Café": { phone: "1-800-432-2737", website: "https://www.cafeappliances.com/support/contact-us" }, "Monogram": { phone: "1-800-444-1845", website: "https://www.monogram.com/support" }, "Frigidaire": { phone: "1-800-374-4432", website: "https://www.frigidaire.com/en/contact-us" }, "Electrolux": { phone: "1-888-845-7330", website: "https://owner.electrolux.com/repairs/information" }, "LG": { phone: "1-800-243-0000", website: "https://www.lg.com/us/support/contact" }, "Samsung": { phone: "1-800-726-7864", website: "https://www.samsung.com/us/support/contact/" }, "Bosch": { phone: "1-800-944-2904", website: "https://www.bosch-home.com/us/owner-support/contact-us" }, "Thermador": { phone: "1-800-735-4328", website: "https://www.thermador.com/us/support/contact-us" }, "Sub-Zero": { phone: "1-800-222-7820", website: "https://www.subzero-wolf.com/about/contact-us", mustCallAARForWarranty: true }, "Wolf": { phone: "1-800-222-7820", website: "https://www.subzero-wolf.com/about/contact-us", mustCallAARForWarranty: true }, "Cove": { phone: "1-800-222-7820", website: "https://www.subzero-wolf.com/about/contact-us", mustCallAARForWarranty: true }, "Miele": { phone: "1-888-996-4353", website: "https://www.mieleusa.com/cs/service/contact-11" }, "Viking": { phone: "1-888-845-4641", website: "https://vikingrange.com/support-and-documentation/customer-support" }, "Dacor": { phone: "1-833-353-5483", website: "https://www.dacor.com/us/owner/support/contact-us/" }, "Fisher & Paykel": { phone: "1-888-936-7872", website: "https://www.fisherpaykel.com/us/help-and-support/contact-us" }, "Gaggenau": { phone: "1-877-442-4436", website: "https://www.gaggenau.com/us/for-owners/customer-care/contact-us" }, "Bertazzoni": { phone: "Check manufacturer website", website: "https://us.bertazzoni.com/more/contact-us" }, "Speed Queen": { phone: "1-800-552-5475", website: "https://speedqueen.com/contact-us/" }, "Kenmore": { phone: "1-800-4-MY-HOME / 1-800-469-4663", website: "https://www.kenmore.com/warranty-information/" } }; const brandAliases = { "whirlpool": "Whirlpool", "maytag": "Maytag", "kitchenaid": "KitchenAid", "kitchen aid": "KitchenAid", "amana": "Amana", "jennair": "JennAir", "jenn-air": "JennAir", "ge": "GE", "general electric": "GE", "hotpoint": "Hotpoint", "cafe": "Café", "café": "Café", "profile": "GE", "monogram": "Monogram", "frigidaire": "Frigidaire", "electrolux": "Electrolux", "lg": "LG", "samsung": "Samsung", "bosch": "Bosch", "thermador": "Thermador", "subzero": "Sub-Zero", "sub-zero": "Sub-Zero", "sub zero": "Sub-Zero", "wolf": "Wolf", "cove": "Cove", "miele": "Miele", "viking": "Viking", "dacor": "Dacor", "fisher paykel": "Fisher & Paykel", "fisher & paykel": "Fisher & Paykel", "fisher-paykel": "Fisher & Paykel", "gaggenau": "Gaggenau", "bertazzoni": "Bertazzoni", "speed queen": "Speed Queen", "speedqueen": "Speed Queen", "kenmore": "Kenmore" }; const warrantyTerms = [ "warranty", "manufacturer warranty", "factory warranty", "extended warranty", "home warranty", "under warranty", "covered by warranty", "warranty company", "service bench", "dispatch", "claim number", "authorization", "authorized", "lowes warranty", "home depot warranty", "ge warranty", "whirlpool warranty", "samsung warranty", "bosch warranty", "frigidaire warranty", "subzero warranty", "sub-zero warranty", "sub zero warranty", "wolf warranty", "cove warranty" ]; const sensitiveTopics = [ "employee", "employees", "payroll", "salary", "wage", "technician pay", "customer list", "customer data", "customer information", "financial", "profit", "revenue", "income", "bank", "tax", "vendor pricing", "parts cost", "internal notes", "password", "login", "owner income", "profit margin" ]; const emergencyTerms = [ "fire", "smoke", "burning smell", "electrical burning", "sparking", "gas smell", "smell gas", "carbon monoxide", "co alarm", "flooding", "water everywhere", "leaking badly" ]; const notServicedAppliances = [ "regular vacuum", "shop vac", "vacuum cleaner", "stand mixer", "kitchenaid mixer", "countertop microwave", "counter top microwave", "counter microwave", "toaster", "coffee maker", "blender", "air fryer", "instant pot", "instapot", "small appliance", "garbage disposal" ]; const appliancePrepInstructions = { dryer: "Please make sure the dryer is accessible, laundry is removed, and the area around the unit is clear. If this is a gas dryer and you smell gas, stop using it and contact your utility provider or emergency services first.", washer: "Please leave the washer accessible and avoid running another load before the appointment if it is leaking or not draining. If there is standing water, include that in the booking notes.", dishwasher: "Please clear items from under the sink so the technician can access the water shutoff, drain line, and electrical connection if needed. If there is standing water or leaking, include that in the booking notes.", refrigerator: "Please make sure the refrigerator is accessible and avoid unplugging it unless there is a safety concern. If possible, leave the unit in its current condition so the technician can verify temperatures and symptoms.", freezer: "Please make sure the freezer is accessible. If it is not cooling, avoid unloading or unplugging it unless necessary for food safety or safety concerns.", range: "Please make sure the cooking area is clear. If you smell gas, stop using the appliance and contact the gas utility or emergency services before scheduling appliance service.", oven: "Please make sure the oven area is accessible and remove items from inside the oven before the appointment.", cooktop: "Please clear the cooktop area before the appointment. If you smell gas, stop using the appliance and contact the gas utility or emergency services before scheduling appliance service.", microwave: "We may service built-in or over-the-range microwaves, but we do not service countertop microwaves. Please confirm whether the microwave is built in, over the range, or countertop.", "central vacuum": "Please describe whether the issue is with the main central vacuum unit, a wall inlet, hose, or suction at one area of the home.", "range hood": "Please make sure the hood or vent area is accessible and the cooking surface below it is clear before the appointment." }; const symptomLibrary = { dryer: [ "no heat", "does not heat", "doesnt heat", "doesn't heat", "not heating", "wont heat", "won't heat", "not getting hot", "takes too long", "long dry time", "not drying", "clothes wet", "shuts off", "will not start", "wont start", "won't start", "does not start", "no power", "making noise", "squeaking", "squealing", "thumping", "drum not turning", "not tumbling", "burning smell" ], washer: [ "not draining", "will not drain", "wont drain", "won't drain", "not spinning", "will not spin", "wont spin", "won't spin", "leaking", "water on floor", "will not start", "wont start", "won't start", "does not start", "no power", "fills slowly", "will not fill", "overfills", "shakes", "banging", "off balance", "locked", "door locked", "error code" ], dishwasher: [ "not draining", "water in bottom", "standing water", "leaking", "not washing", "dishes dirty", "not drying", "no heat", "does not heat", "will not start", "wont start", "won't start", "does not start", "no power", "not filling", "soap left", "detergent left", "smells", "error code" ], refrigerator: [ "not cooling", "warm", "too warm", "freezing food", "ice buildup", "frost buildup", "leaking", "water on floor", "not making ice", "ice maker not working", "no ice", "noise", "making noise", "not dispensing", "water dispenser not working", "no power", "error code" ], freezer: [ "not freezing", "not cooling", "warm", "too warm", "frost buildup", "ice buildup", "leaking", "noise", "making noise", "no power", "error code" ], range: [ "burner not working", "burner wont light", "burner won't light", "clicking", "no spark", "not heating", "oven not heating", "no heat", "does not heat", "temperature off", "takes too long", "gas smell", "will not ignite", "wont ignite", "won't ignite", "error code" ], oven: [ "not heating", "no heat", "does not heat", "wont heat", "won't heat", "temperature off", "too hot", "not hot enough", "takes too long", "broil not working", "bake not working", "door locked", "error code" ], cooktop: [ "burner not working", "burner wont light", "burner won't light", "no spark", "clicking", "not heating", "no heat", "does not heat", "cracked glass", "gas smell", "error code" ], microwave: [ "not heating", "no heat", "does not heat", "turntable not turning", "sparking", "light not working", "fan not working", "door issue", "will not start", "wont start", "won't start", "error code" ], "central vacuum": [ "no suction", "low suction", "will not turn on", "wont turn on", "won't turn on", "clogged", "noise", "smell", "not working" ], "range hood": [ "fan not working", "light not working", "not venting", "making noise", "no power", "buttons not working", "switch not working" ] }; const messages = document.getElementById("aar-chat-messages"); const input = document.getElementById("aar-chat-input"); const sendBtn = document.getElementById("aar-chat-send"); const toggleBtn = document.getElementById("aar-chat-toggle"); const closeBtn = document.getElementById("aar-chat-close"); const chatWindow = document.getElementById("aar-chat-window"); if (!messages || !input || !sendBtn || !toggleBtn || !closeBtn || !chatWindow) { console.error("Advanced Appliance Repair chatbot error: one or more required HTML elements are missing."); return; } toggleBtn.addEventListener("click", function () { chatWindow.style.display = "block"; toggleBtn.style.display = "none"; if (!messages.dataset.started) { botReply( "Hi, I’m the booking assistant for " + company.name + ". I can help with non-warranty appliance repair booking. Warranty work should not be self-booked. What appliance do you need service on?" ); messages.dataset.started = "true"; conversation.lastQuestion = "appliance"; } }); closeBtn.addEventListener("click", function () { chatWindow.style.display = "none"; toggleBtn.style.display = "block"; }); sendBtn.addEventListener("click", handleUserMessage); input.addEventListener("keydown", function (event) { if (event.key === "Enter") { handleUserMessage(); } }); function handleUserMessage() { const userText = input.value.trim(); if (!userText) return; addMessage(userText, "user"); input.value = ""; const response = generateResponse(userText); setTimeout(function () { botReply(response); }, 250); } function generateResponse(rawText) { const text = normalize(rawText); updateConversationFromText(text); if (containsAny(text, sensitiveTopics)) { return "I can only help with booking and appliance service appointment questions. I cannot provide private company information, customer data, employee details, payroll information, financial data, vendor information, passwords, internal notes, or confidential records."; } if (containsAny(text, emergencyTerms)) { return "For safety concerns such as fire, smoke, gas smell, carbon monoxide alarms, active flooding, sparking, or electrical burning smells, please stop using the appliance immediately. If there is immediate danger, contact emergency services or your utility provider first before booking appliance service."; } if (containsAny(text, warrantyTerms)) { conversation.warranty = true; return warrantyBlockResponse(); } if (isGreeting(text)) { return "Hello. I can help with non-warranty appliance repair booking. What appliance do you need service on?"; } if (isThanks(text)) { return "You’re welcome. When you are ready, you can continue booking online or call the office if you need help."; } if (asksForManufacturerNumber(text)) { return manufacturerSupportResponse(); } if (asksForHuman(text)) { return ( "You can contact the office at " + company.phone + " during business hours: " + company.businessHours + ". For faster help, please have the appliance type, brand, service address, and model/serial number available." ); } if (asksAboutServiceArea(text)) { return ( "Our normal service area includes " + company.serviceArea + ". If you are unsure whether your address is covered, please call the office before booking." ); } if (asksWhatWeService(text)) { return "We service major household appliances such as washers, dryers, dishwashers, refrigerators, freezers, ranges, ovens, cooktops, built-in microwaves, hood vents, ice makers, laundry centers, and central vacuums. We do not service most small countertop appliances."; } if (mentionsNotServicedAppliance(text)) { return notServicedResponse(text); } if (asksAboutModelSerial(text)) { return "The model and serial number are usually on a sticker or metal tag on the appliance itself. Please upload a clear photo of that tag when booking. A photo of the owner’s manual usually is not enough because it may not show the exact model and serial number."; } if (asksAboutPrice(text)) { return "Pricing can depend on appliance type, location, and the work needed. Please review the booking page or contact the office for current appointment-related pricing. Warranty work should not be scheduled through the self-booking page."; } if (asksAboutPreparing(text)) { return prepResponse(); } if (asksAboutParts(text)) { return "If parts are needed, the technician will document the diagnosis and the office will follow the normal parts process. Timing depends on the appliance model, part availability, and whether all required parts are available."; } if (asksAboutInstallOrExternalIssues(text)) { return "Some issues are caused by installation, plumbing, electrical, gas supply, or venting conditions rather than the appliance itself. If the issue is outside the appliance, a plumber, electrician, HVAC, installer, or gas professional may be needed."; } if (asksToBook(text)) { return bookingStepResponse(); } return nextConversationStep(); } function updateConversationFromText(text) { const appliance = findAppliance(text); const brand = findBrand(text); const symptom = findSymptom(text); if (appliance) { conversation.appliance = appliance; } if (brand) { conversation.brand = brand; } if (symptom) { conversation.symptom = symptom; } } function nextConversationStep() { if (!conversation.appliance) { conversation.lastQuestion = "appliance"; return "What appliance do you need service on? For example: dryer, washer, dishwasher, refrigerator, freezer, oven, range, cooktop, built-in microwave, range hood, or central vacuum."; } if (!conversation.brand) { conversation.lastQuestion = "brand"; return "We may be able to help with that. What brand is the " + conversation.appliance + "?"; } if (!conversation.symptom) { conversation.lastQuestion = "symptom"; return ( "Thanks. What issue are you having with the " + conversation.brand + " " + conversation.appliance + "? For example: no heat, not cooling, leaking, not draining, making noise, error code, or will not start." ); } conversation.readyToBook = true; return finalBookingResponse(); } function bookingStepResponse() { if (conversation.warranty) { return warrantyBlockResponse(); } if (!conversation.appliance || !conversation.brand || !conversation.symptom) { return nextConversationStep(); } return finalBookingResponse(); } function finalBookingResponse() { const prep = prepResponse(); const boutiqueNote = isBoutiqueBrand(conversation.brand) ? " Because this appears to be a boutique or premium brand, please select the boutique appliance option if your booking page offers that choice." : ""; return ( "Thank you. Based on what you entered, this sounds like a non-warranty service request for a " + conversation.brand + " " + conversation.appliance + " with this issue: “" + conversation.symptom + ".”" + boutiqueNote + "\n\nNext step: please continue to the booking page and include your appliance type, brand, symptom, service address, contact information, and a clear photo of the model and serial number tag.\n\n" + prep + "\n\nImportant: If this is warranty work, do not self-book. Warranty calls require a dispatch from the manufacturer or warranty company. For Sub-Zero, Wolf, or Cove warranty appointments, call our office during business hours." ); } function warrantyBlockResponse() { const support = conversation.brand ? manufacturerSupport[conversation.brand] : null; if (conversation.brand && support && support.mustCallAARForWarranty) { return ( "Sub-Zero, Wolf, and Cove warranty appointments must be scheduled by calling our office during business hours. Please do not use the self-booking page for these warranty appointments.\n\n" + "Call " + company.name + ": " + company.phone + "\nBusiness hours: " + company.businessHours + "\n\nIf you still need to contact Sub-Zero, Wolf, or Cove Customer Care for warranty or dispatch questions, their listed customer care number is " + support.phone + ". You can also verify current contact information on the manufacturer’s website or in your owner’s manual.\n\n" + "Note: This is a simple chatbot. Phone numbers can change, and not every number may work for every warranty situation." ); } if (support) { return ( "Warranty service should not be scheduled through the self-booking page. Warranty appointments require a dispatch from the manufacturer or warranty company first.\n\n" + "For " + conversation.brand + " warranty or dispatch questions, the listed manufacturer support contact is:\n" + "Phone: " + support.phone + "\nWebsite: " + support.website + "\n\nPlease contact the manufacturer or warranty provider and ask them to dispatch " + company.name + " if we are an authorized servicer for your appliance.\n\n" + "Note: This is a simple chatbot. Phone numbers can change, and not every number may work for every warranty situation. You can also verify current contact information on the manufacturer’s website or in your owner’s manual." ); } return ( "Warranty service should not be scheduled through the self-booking page. Warranty appointments require a dispatch from the manufacturer or warranty company first. Please contact your appliance manufacturer or warranty provider and ask them to dispatch " + company.name + " if we are an authorized servicer for that appliance.\n\n" + "If this is for Sub-Zero, Wolf, or Cove warranty, please call our office during business hours instead of using self-booking.\n\n" + "Call " + company.name + ": " + company.phone + "\nBusiness hours: " + company.businessHours + "\n\nNote: This is a simple chatbot. Manufacturer phone numbers can change, and not every number may work for every warranty situation. You can verify contact information on the manufacturer’s website or in your owner’s manual." ); } function manufacturerSupportResponse() { if (!conversation.brand) { return "Which manufacturer or brand do you need the customer service number for? Examples: Whirlpool, GE, Samsung, LG, Bosch, Sub-Zero, Wolf, Cove, Miele, Viking, Dacor, Fisher & Paykel, Gaggenau, Speed Queen, or Kenmore."; } const support = manufacturerSupport[conversation.brand]; if (!support) { return "I do not have a verified number for that brand in this simple chatbot. Please check the manufacturer’s website or your owner’s manual for current customer service and warranty dispatch information."; } return ( conversation.brand + " customer service / warranty support:\nPhone: " + support.phone + "\nWebsite: " + support.website + "\n\nNote: This is a simple chatbot. Phone numbers can change, and not every number may work for every warranty situation. You can also verify current information on the manufacturer’s website or in your owner’s manual." ); } function prepResponse() { return ( appliancePrepInstructions[conversation.appliance] || "Before the appointment, please make the appliance accessible, clear the surrounding area, secure pets, and have a clear photo of the model and serial number tag ready." ); } function notServicedResponse(text) { if (text.includes("central vacuum") || text.includes("central vac")) { conversation.appliance = "central vacuum"; conversation.lastQuestion = "brand"; return "We may service central vacuums. What brand is the central vacuum, and what issue are you having?"; } if ( text.includes("microwave") && !text.includes("countertop") && !text.includes("counter top") && !text.includes("counter microwave") ) { conversation.appliance = "microwave"; conversation.lastQuestion = "brand"; return "We may service built-in or over-the-range microwaves, but we do not service countertop microwaves. Is your microwave built in, over the range, or sitting on the counter?"; } return "We do not service most small appliances. That includes regular vacuums unless they are central vacuums, stand mixers, countertop microwaves, toasters, coffee makers, blenders, air fryers, and similar countertop appliances."; } function findAppliance(text) { if (text.includes("washing machine") || text.includes("washer")) return "washer"; if (text.includes("dryer")) return "dryer"; if (text.includes("dishwasher")) return "dishwasher"; if (text.includes("refrigerator") || text.includes("fridge")) return "refrigerator"; if (text.includes("freezer")) return "freezer"; if (text.includes("range") || text.includes("stove")) return "range"; if (text.includes("wall oven") || text.includes("oven")) return "oven"; if (text.includes("cooktop")) return "cooktop"; if ( (text.includes("over the range microwave") || text.includes("built in microwave") || text.includes("built-in microwave") || text.includes("microwave")) && !text.includes("countertop") && !text.includes("counter top") ) { return "microwave"; } if (text.includes("central vacuum") || text.includes("central vac")) return "central vacuum"; if (text.includes("ice maker") || text.includes("icemaker")) return "refrigerator"; if (text.includes("hood") || text.includes("vent hood") || text.includes("range hood")) return "range hood"; return null; } function findBrand(text) { const aliases = Object.keys(brandAliases).sort(function (a, b) { return b.length - a.length; }); for (let alias of aliases) { if (text.includes(alias)) { return brandAliases[alias]; } } return null; } function findSymptom(text) { const generalSymptoms = [ "no heat", "does not heat", "doesnt heat", "doesn't heat", "not heating", "wont heat", "won't heat", "not getting hot", "not cooling", "does not cool", "doesnt cool", "doesn't cool", "warm", "too warm", "not draining", "does not drain", "doesnt drain", "doesn't drain", "wont drain", "won't drain", "not spinning", "does not spin", "doesnt spin", "doesn't spin", "leaking", "water on floor", "standing water", "making noise", "noise", "squeaking", "squealing", "banging", "thumping", "will not start", "wont start", "won't start", "does not start", "doesnt start", "doesn't start", "no power", "dead", "error code", "flashing code", "not working", "broken", "not drying", "not washing", "not filling", "not dispensing", "not making ice", "no ice", "burner not working", "will not ignite", "wont ignite", "won't ignite", "temperature off", "too hot", "not hot enough" ]; if (conversation.appliance && symptomLibrary[conversation.appliance]) { for (let symptom of symptomLibrary[conversation.appliance]) { if (text.includes(symptom)) { return symptom; } } } for (let symptom of generalSymptoms) { if (text.includes(symptom)) { return symptom; } } if (conversation.lastQuestion === "symptom" && text.length >= 3) { return text; } return null; } function asksForManufacturerNumber(text) { return includesAnyPhrase(text, [ "manufacturer number", "customer service number", "support number", "phone number for", "contact manufacturer", "contact the manufacturer", "dispatch number" ]); } function asksToBook(text) { return includesAnyPhrase(text, [ "book", "schedule", "appointment", "set up service", "service call", "come out", "need service", "repair appointment" ]); } function asksWhatWeService(text) { return includesAnyPhrase(text, [ "what do you service", "what appliances", "do you work on", "do you fix", "appliances do you repair" ]); } function asksAboutServiceArea(text) { return includesAnyPhrase(text, [ "service area", "do you come to", "where do you service", "what area", "location" ]); } function asksAboutModelSerial(text) { return includesAnyPhrase(text, [ "model number", "serial number", "model and serial", "where is the tag", "data plate", "rating plate" ]); } function asksAboutPrice(text) { return includesAnyPhrase(text, [ "price", "cost", "fee", "diagnostic", "how much", "charge" ]); } function asksAboutPreparing(text) { return includesAnyPhrase(text, [ "prepare", "before appointment", "before you arrive", "what should i do", "get ready" ]); } function asksAboutParts(text) { return includesAnyPhrase(text, [ "parts", "order parts", "part available", "how long will parts" ]); } function asksAboutInstallOrExternalIssues(text) { return includesAnyPhrase(text, [ "install", "installation", "plumbing", "electrical", "gas line", "venting", "water line", "drain line" ]); } function asksForHuman(text) { return includesAnyPhrase(text, [ "call", "phone", "talk to someone", "office", "real person", "human" ]); } function isGreeting(text) { return includesAnyPhrase(text, [ "hi", "hello", "hey", "good morning", "good afternoon", "good evening" ]); } function isThanks(text) { return includesAnyPhrase(text, [ "thanks", "thank you", "appreciate it" ]); } function mentionsNotServicedAppliance(text) { return containsAny(text, notServicedAppliances); } function isBoutiqueBrand(brand) { return [ "Sub-Zero", "Wolf", "Cove", "Miele", "Thermador", "Viking", "Dacor", "Monogram", "Fisher & Paykel", "Gaggenau", "Bertazzoni" ].includes(brand); } function containsAny(text, list) { return list.some(function (item) { return text.includes(item); }); } function includesAnyPhrase(text, phrases) { return phrases.some(function (phrase) { return text.includes(phrase); }); } function normalize(text) { return text.toLowerCase().replace(/[^\w\s&.'-]/g, "").trim(); } function addMessage(text, sender) { const div = document.createElement("div"); div.className = "aar-message aar-" + sender; const bubble = document.createElement("span"); bubble.className = "aar-bubble"; bubble.innerHTML = sanitizeAndLink(text).replace(/\n/g, "
"); div.appendChild(bubble); messages.appendChild(div); messages.scrollTop = messages.scrollHeight; } function botReply(text) { addMessage(text, "bot"); } function sanitizeAndLink(text) { const div = document.createElement("div"); div.textContent = text; let safeText = div.innerHTML; safeText = safeText.replace( /(https?:\/\/[^\s]+)/g, '$1' ); return safeText; } })();