Roorkee to Chakrata Taxi Booking

Online Taxi Booking Form

Roorkee to Chakrata Taxi Service | Roorkee to Chakrata Taxi Fare | Ertiga & Innova Crysta Cab Booking | Contact Number

Book Roorkee to Chakrata Taxi Service with Saarthi Cabs at affordable price. Roorkee to Chakrata taxi fare start from ₹1200 for one-way sedan cab . Roorkee to Chakrata taxi rates per km Sedan ₹10/km, Ertiga ₹12/km, Roorkee to Chakrata Innova Crysta ₹20/km, and Tempo Traveller ₹22/km for Roorkee to Chakrata round trip. We offer one-way cabs, round trips, airport transfers, Force Urbania, and Tempo Traveller rentals. Enjoy professional drivers, clean vehicles, transparent pricing, doorstep pickup, and 24×7 customer support. Call or WhatsApp Saarthi Cabs at 09548976265 for Roorkee to Chakrata Taxi booking. We also offer Roorkee to Chakrata taxi packages all inclusive price at Sedan ₹3500, Ertiga ₹4500/day, Innova Crysta 6900/Day, Tempo Traveller ₹8500/Day for tour trip multicity or place visit.

Roorkee to Chakrata Taxi Service: Book One Way & Round Trip Cabs

Book a reliable Roorkee to Chakrata cab with our professional Roorkee to Chakrata cab Service. Saarthi Cabs offer One-way taxi Roorkee to Chakrata , easy cab booking, and affordable Roorkee to Chakrata taxi fare. Choose from premium Roorkee to Chakrata car rental, Roorkee airport to Chakrata taxi, and Roorkee to Chakrata outstation cab through seamless Roorkee to Chakrata online taxi booking. Travel comfortably in Roorkee to Chakrata Innova taxi or Roorkee to Chakrata tempo traveller. We also provide Roorkee to Chakrata round trip cab, trusted Roorkee to Chakrata taxi service, budget-friendly Roorkee to Chakrata cheap cab, and convenient Roorkee to Chakrata same-day taxi.

Roorkee to Chakrata Taxi Fare

Saarthi Cabs provides clear and affordable Roorkee to Chakrata taxi fare with complete transparency and no hidden charges. We offer budget-friendly Roorkee to Chakrata one-way cab fare, cost-effective Roorkee to Chakrata round trip taxi fare, and competitive Roorkee to Chakrata cab price for all vehicle types. Travelers can also check Roorkee Airport to Chakrata taxi fare with reliable pickup and drop service. Our Roorkee to Chakrata per km taxi rate is among the best in the market, ensuring safe, comfortable, and hassle-free travel for families, pilgrims, and tourists.

Taxi Fare Price - Cab Rate List 2026

Cab TypeTaxi Fare
Sedan Cab₹12/km
SUV Cab₹14/km
Innova Crysta Cab₹20/km
Tempo Traveller₹30/km
Note:
• All Fare is Approx Please call us for final price.
• For One Way Trip – Fare is All Inclusive ( Driver DA & Night Charges, Cab Rent, Fuel Charges)
• For Round Trip – Fare is All Exclusive ( All Extra – Driver DA & Night Charges, Toll Taxi, State Tax, Parking, Per Day Minimum Pay of 300 km in Plain Area.
• Tour trip in Hill Areas: Per Day Packages with 200 km in Hill Area Fare is All Inclusive ( Driver DA & Night Charges, Cab Rent, Fuel Charges) for extra Kilometer ₹2/km additional Charges on regular per km Rates
• Assured luggage space (either carrier or boot space) for Rs. 300
• Confirmed Car Model 2022 or above for Rs. 400
• Pet Allowed for Rs. 550
• Parking is Extra in all conditions.
• Upgrade to Refundable booking (100% refund for cancellation before 6 hours of departure time) Pay Extra 10% of Total Booking Amount.

Roorkee to Chakrata Cab Service

  • What is the Roorkee to Chakrata taxi fare?
  • Saarthi Cabs provides Roorkee to Chakrata taxi fare range ₹1200–₹16,560. Pricing is fully transparent with no hidden charges. Customers receive advance fare details ensuring affordable and reliable long-distance travel. For Roorkee to Chakrata taxi Booking Call
  • Do you provide Roorkee to Chakrata one-way cab service?
  • Yes, Saarthi Cabs offers one-way taxi service from Roorkee to Chakrata with doorstep pickup and professional drivers. Our Roorkee to Chakrata one-way cab fare ₹1200 (Starting Price). We provide clean, comfortable vehicles for long-distance travel at affordable rates, ensuring a smooth and hassle-free journey.
  • What are the round-trip taxi rates from Roorkee to Chakrata?
  • Saarthi Cabs round-trip rates are Roorkee to Chakrata taxi fare per km Sedan ₹10/km, Ertiga ₹12/km, Innova Crysta ₹20/km, and Tempo Traveller ₹22/km. All fares are fixed and transparent. Customers enjoy safe, comfortable, and economical travel with experienced drivers and well-maintained vehicles for long routes.
  • Do you offer airport transfer service on this route?
  • Yes, Saarthi Cabs provides airport pickup and drop services for Roorkee to Chakrata routes. We ensure timely service with comfortable vehicles for stress-free transfers. Our drivers maintain punctuality and smooth coordination for both arrival and departure journeys.
  • Which vehicles are available for Roorkee to Chakrata cab booking?
  • Saarthi Cabs offers Sedan, Ertiga, Innova Crysta, Tempo Traveller, and Force Urbania Traveller. Customers can select vehicles based on group size and comfort needs. All vehicles are well-maintained, clean, and driven by professional drivers ensuring safe long-distance travel.
  • What is the SUV Ertiga fare for Roorkee to Chakrata?
  • The Roorkee to Chakrata Ertiga fare is ₹12/km for round-trip travel. You can book Roorkee to Chakrata Ertiga taxi package fare per day 4500/Day for tour trip multicity or place visit. Saarthi Cabs provides a family-friendly, spacious vehicle suitable for medium-sized groups. The calculated fare ensures affordability with comfort, making it ideal for long-distance journeys.
  • What is the Innova Crysta fare for Roorkee to Chakrata?
  • Roorkee to Chakrata Innova Crysta fare is ₹20/km for round-trip booking. Saarthi Cabs offers premium comfort, spacious seating, and luxury travel experience. The calculated fare provides value for money while ensuring a smooth and comfortable long-distance journey. You can book Roorkee to Chakrata Innova Crysta package fare per day 6900/Day for tour trip multicity or place visit
  • What is the Tempo Traveller fare for Roorkee to Chakrata?
  • Roorkee to Chakrata Tempo Traveller fare is ₹22/km for round-trip service. Saarthi Cabs provides spacious group travel options ideal for large families or groups. The calculated fare ensures economical travel with comfort, safety, and convenience throughout the journey. You can book Roorkee to Chakrata tempo traveller package fare per day 8500/Day(Starting) for tour trip multicity or place visit
  • Can I book a Tempo Traveller or Urbania Traveller for group travel?
  • Yes, Saarthi Cabs offers Tempo Traveller and Force Urbania Traveller for group travel. These are ideal for weddings, corporate tours, family trips, and religious journeys. They provide spacious seating, comfort, and reliable service for long-distance group transportation.
  • Are there any hidden charges in the taxi fare?
  • No, Saarthi Cabs follows transparent pricing with no hidden charges. Customers receive advance fare details before booking. All costs are clearly explained to ensure trust, transparency, and a smooth travel experience without unexpected expenses.
  • Why choose Saarthi Cabs for Roorkee to Chakrata Taxi Booking?
  • Saarthi Cabs offers affordable fares, professional drivers, clean vehicles, doorstep pickup, 24×7 support, and safe travel. We focus on reliability and customer satisfaction, ensuring comfortable long-distance journeys with transparent pricing and high-quality service for every passenger.

One-way Taxi Roorkee to Chakrata

Book a One-Way Taxi Roorkee to Chakrata with Saarthi Cabs and pay only one-side fare. Get doorstep pickup and drop at your destination with reliable, trusted & cheapest pricing. Check the best Roorkee to Chakrata one way cab price fare with transparent rates, professional drivers, and clean, comfortable cars for a smooth journey.

Airport Taxi for Roorkee to Chakrata

Roorkee Airport to Chakrata taxi service provides easy booking at the cheapest fare. We offer Roorkee to Chakrata Airport Taxi pickup with flight tracking, luggage assistance, comfortable vehicles, and direct drop to your destination with safe and reliable travel experience.

Roorkee to Chakrata Innova taxi

Book Roorkee to Chakrata Innova Crysta Taxi with both One Way & Round Trip options at the cheapest fare. Get the best Roorkee to Chakrata Innova Crysta taxi fare with transparent pricing and no hidden charges. We also offer special Chakrata tour taxi packages for family trips and temple visits.

Roorkee to Chakrata Car Rental

Roorkee to Chakrata round trip cab is available at affordable rates with taxi fare per km starting from ₹10/km. It is ideal for sightseeing, temple visits, and return travel with flexible timing and comfortable vehicles

Roorkee to Chakrata Same-Day Taxi

Roorkee to Chakrata same-day return taxi is ideal for quick trips with easy booking and affordable fare. You can visit Chakrata , complete your darshan, and return the same day with comfortable travel and flexible timing.

Hire Roorkee to Chakrata Tempo Traveller

Hire Roorkee to Chakrata Tempo Traveller with Saarthi Cabs for comfortable and affordable group travel. Choose from well-maintained Tempo Travellers with professional drivers, spacious seating, and reliable service. Perfect for family trips, weddings, corporate tours, and religious journeys with 24×7 booking support. Contact 09548976265.

Roorkee to Chakrata Taxi Service Contact Number : 09548976265

Call or WhatsApp our dedicated helpline for quick booking: 09548976265. Available 24 hours for Roorkee to Chakrata Taxi Booking, fare queries, or urgent airport pickups/drops. Roorkee to Chakrata Taxi Service Contact Number :09548976265

Call Us Now
WhatsApp
Scroll to Top
' ); } else { log('Placeholder tab was blocked by the browser popup blocker.'); } } catch (e) { pendingWaWindow = null; }clearPendingWindowTimer(); pendingCloseTimer = setTimeout(function () { log('No successful submission detected within 10s.'); updatePendingStatus('This is taking longer than expected. The form may not have submitted successfully — you can close this tab and try again.'); }, 10000); }// Writes a status line directly into the placeholder tab, so this can be checked visually // on a phone without needing to open the browser console. function updatePendingStatus(text) { if (!pendingWaWindow || pendingWaWindow.closed) return; try { var el = pendingWaWindow.document.getElementById('saarthi-wa-status'); if (el) el.textContent = text; } catch (e) { /* ignore - tab may already be navigating */ } }// Adds a tappable fallback link into the placeholder tab, in case an automatic // navigation gets blocked for any reason (some mobile browsers restrict this). function addPendingFallbackLink(url) { if (!pendingWaWindow || pendingWaWindow.closed) return; try { var el = pendingWaWindow.document.getElementById('saarthi-wa-link'); if (el) { el.innerHTML = 'Tap here to open WhatsApp'; } } catch (e) { /* ignore */ } }function clearPendingWindowTimer() { if (pendingCloseTimer) { clearTimeout(pendingCloseTimer); pendingCloseTimer = null; } }function closePendingWindow() { clearPendingWindowTimer(); if (pendingWaWindow && !pendingWaWindow.closed) { pendingWaWindow.close(); } pendingWaWindow = null; }/* --------------------------------------------------------------------------------------- * Your live "Online Taxi Booking Form" (Form #3) uses generic Fluent Forms field names * (input_text, dropdown, dropdown_1, numeric-field, datetime) that aren't self-descriptive. * This map gives them proper labels, taken straight from your form export. Any field you * add later that ISN'T in this map still gets collected and auto-labelled by the generic * fallback logic further down - nothing new needs to be hard-coded here to keep working. * ------------------------------------------------------------------------------------- */ var FIELD_LABEL_MAP = { 'input_text': 'Pickup Location', 'input_text_1': 'Destination Location', 'dropdown_1': 'Trip Type', 'dropdown': 'Cab Type', 'datetime': 'Date', 'numeric-field': 'Mobile Number' };// Preferred display order in the WhatsApp message, matching your requested format. // Any field not listed here (e.g. a new field you add later) is appended after these, // in whatever order it appears on the form. var FIELD_ORDER = ['input_text', 'input_text_1', 'dropdown_1', 'dropdown', 'datetime', 'numeric-field'];/* --------------------------------------------------------------------------------------- * Turn a Fluent Forms field "name" attribute into a clean, readable label. * Checks the known-field map above first, then falls back to auto-formatting for any * field that isn't in the map (handles simple names and bracketed/nested names like * "names[first_name]"). * ------------------------------------------------------------------------------------- */ function labelizeFieldName(rawName) { if (Object.prototype.hasOwnProperty.call(FIELD_LABEL_MAP, rawName)) { return FIELD_LABEL_MAP[rawName]; }var base = rawName;var bracketMatch = rawName.match(/\[([^\]]+)\]\s*$/); if (bracketMatch && bracketMatch[1]) { base = bracketMatch[1]; } else { var rootMatch = rawName.match(/^[^\[]+/); if (rootMatch) { base = rootMatch[0]; } }base = base.replace(/\[\]$/, ''); base = base.replace(/[_\-]+/g, ' '); base = base.replace(/([a-z0-9])([A-Z])/g, '$1 $2'); base = base.trim().replace(/\s+/g, ' ');return base.replace(/\b\w/g, function (c) { return c.toUpperCase(); }); }/* --------------------------------------------------------------------------------------- * Picks an emoji icon for a field based on its readable label. Falls back to a generic * bullet for any field that doesn't match a known keyword, so the solution still works * for fields nobody hard-coded in advance. * ------------------------------------------------------------------------------------- */ function iconForLabel(label) { var l = label.toLowerCase();if (/pick\s*-?\s*up/.test(l)) return '📍'; if (/drop|destination/.test(l)) return '📍'; if (/trip\s*-?\s*type/.test(l)) return '🔄'; if (/cab|car|vehicle/.test(l)) return '🚗'; if (/date/.test(l)) return '📅'; if (/time/.test(l)) return '⏰'; if (/mobile|phone|contact\s*number|whatsapp/.test(l)) return '📞'; if (/e-?mail/.test(l)) return '✉️'; if (/name/.test(l)) return '🙍'; if (/message|note|comment/.test(l)) return '📝';return '🔹'; }/* --------------------------------------------------------------------------------------- * Field name patterns that are internal Fluent Forms / WordPress / anti-spam plumbing, * never real user answers. These are always skipped. * ------------------------------------------------------------------------------------- */ function isInternalFieldName(name) { if (/^_/.test(name)) return true; // Fluent Forms prefixes internal fields with "_" return /fluentformnonce|wp_http_referer|g-recaptcha|h-captcha|turnstile|honeypot|embded_post_id|form_instance_input|_wp_nonce/i.test(name); }/* --------------------------------------------------------------------------------------- * Walks the actual submitted
element and pulls out every real answer, automatically, * with NO hard-coded field names. Handles text, phone, date, select, radio, checkbox, * multi-select and array-style ("field[]") values. Empty fields, submit buttons and * hidden/technical fields are skipped. * ------------------------------------------------------------------------------------- */ function collectFormData(formEl) { var data = {}; var elements = formEl.elements;for (var i = 0; i < elements.length; i++) { var el = elements[i]; if (!el.name) continue;var type = (el.type || '').toLowerCase();if (type === 'submit' || type === 'button' || type === 'reset' || type === 'file' || type === 'image') { continue; } if (type === 'hidden') { continue; // ignore hidden technical fields } if (isInternalFieldName(el.name)) { continue; }var cleanKey = el.name.replace(/\[\]$/, ''); var value = null;if (type === 'checkbox' || type === 'radio') { if (!el.checked) continue; value = el.value; } else if (el.tagName === 'SELECT' && el.multiple) { value = Array.prototype.filter .call(el.options, function (o) { return o.selected; }) .map(function (o) { return o.value; }); } else { value = el.value; }if (value === null) continue; if (typeof value === 'string' && value.trim() === '') continue; if (Array.isArray(value) && value.length === 0) continue;if (Object.prototype.hasOwnProperty.call(data, cleanKey)) { var existing = Array.isArray(data[cleanKey]) ? data[cleanKey] : [data[cleanKey]]; var incoming = Array.isArray(value) ? value : [value]; data[cleanKey] = existing.concat(incoming); } else { data[cleanKey] = value; } }return data; }/* --------------------------------------------------------------------------------------- * Builds the final WhatsApp message text from the collected field data. * ------------------------------------------------------------------------------------- */ function buildWhatsAppMessage(data) { var lines = ['🚕 NEW SAARTHI CABS ENQUIRY'];// Known fields first, in the preferred order; then any extra/new fields, in their // natural form order, so the solution keeps working if you add fields later. var orderedKeys = FIELD_ORDER.filter(function (k) { return Object.prototype.hasOwnProperty.call(data, k); }); var remainingKeys = Object.keys(data).filter(function (k) { return orderedKeys.indexOf(k) === -1; }); var allKeys = orderedKeys.concat(remainingKeys);allKeys.forEach(function (key) { var label = labelizeFieldName(key); var value = data[key];if (Array.isArray(value)) { value = value.join(', '); }lines.push(iconForLabel(label) + ' ' + label + ': ' + value); });lines.push(''); lines.push('Saarthi Cabs');return lines.join('\n'); }/* --------------------------------------------------------------------------------------- * Opens WhatsApp with the pre-filled message. Uses the free wa.me link (no API, no paid * plugin). Falls back to a full navigation if the browser blocks the popup. * ------------------------------------------------------------------------------------- */ function openWhatsApp(message) { var url = 'https://wa.me/' + WA_NUMBER + '?text=' + encodeURIComponent(message); log('wa.me URL:', url);clearPendingWindowTimer();if (pendingWaWindow && !pendingWaWindow.closed) { log('Reusing the placeholder tab opened at click-time.'); updatePendingStatus('Opening WhatsApp now...'); addPendingFallbackLink(url); // tappable backup in case auto-navigation is blocked try { pendingWaWindow.location.href = url; } catch (e) { log('Could not set location on the placeholder tab, relying on the fallback link.', e); } pendingWaWindow = null; return; }log('No placeholder tab available - trying window.open() directly.'); var win = window.open(url, '_blank');if (!win) { log('window.open() was blocked - falling back to a same-tab redirect. Note: if this form also redirects to another URL on success, that redirect may override this one; the placeholder-tab method above avoids that.'); window.location.href = url; } }/* --------------------------------------------------------------------------------------- * Resolves the actual DOM element for a given Fluent Forms form id. * ------------------------------------------------------------------------------------- */ function getFormElement(formId) { return document.querySelector('#fluentform_' + formId) || document.querySelector('form[data-form_id="' + formId + '"]'); }/* --------------------------------------------------------------------------------------- * Central handler: runs once per successful submission of the target form. * ------------------------------------------------------------------------------------- */ function handleSuccessfulSubmission(formEl, dedupeKey) { if (!formEl) { log('No form element found for #' + TARGET_FORM_ID + ' - aborting.'); updatePendingStatus('Could not find the form on this page. Please contact us directly.'); return; }var key = dedupeKey || ('t' + Date.now()); if (lastDedupeKey === key) { log('Duplicate success signal ignored (key:', key, ')'); return; } lastDedupeKey = key;var data = collectFormData(formEl); log('Collected field data:', data);if (Object.keys(data).length === 0) { log('No usable field data found - not opening WhatsApp.'); updatePendingStatus('No enquiry details were found. Please contact us directly.'); return; }var message = buildWhatsAppMessage(data); log('Opening WhatsApp with message:', message); openWhatsApp(message); }function formMatchesTarget(formId) { return String(formId) === String(TARGET_FORM_ID); }/* ========================================================================================= * PRIMARY METHOD: Fluent Forms triggers "fluentform_submission_success" directly on the * jQuery object itself (not on document, and it does NOT pass a formId argument - * only the response). We bind with a delegated selector scoped to our target form's id/ * data attribute so this only ever reacts to Form #3, and works even if the form markup * is injected after page load (e.g. inside a shortcode/block that loads late). * (Validation failures never fire this event, so WhatsApp correctly never opens on failure.) * ======================================================================================= */ var formSelector = '#fluentform_' + TARGET_FORM_ID + ', form[data-form_id="' + TARGET_FORM_ID + '"]';/* ------------------------------------------------------------------------------------------- * Open the placeholder tab the instant the form is submitted (client-side "submit" event, * which fires immediately on the user's click, before any AJAX round-trip). This is what * keeps window.open() from being blocked as a "popup", and keeps it immune to the form's * own redirect confirmation happening moments later in the same (main) tab. * ------------------------------------------------------------------------------------- */ $(document).on('submit', formSelector, function () { log('Form submit detected - opening a placeholder tab early to avoid popup blockers.'); openPendingWindow(); });$(document).on('fluentform_submission_success', formSelector, function (event, payload) { log('fluentform_submission_success fired for target form.', payload);var formEl = this; // Fluent Forms triggers this event as: $form.trigger('fluentform_submission_success', // { form: $form, response: res }) - so the actual AJAX response is nested one level in. var ajaxResponse = (payload && payload.response) ? payload.response : payload; var insertId = null;if (ajaxResponse) { if (ajaxResponse.data && ajaxResponse.data.insert_id) { insertId = ajaxResponse.data.insert_id; } else if (ajaxResponse.data && ajaxResponse.data.insertedId) { insertId = ajaxResponse.data.insertedId; } else if (ajaxResponse.insert_id) { insertId = ajaxResponse.insert_id; } }var dedupeKey = insertId ? ('id' + insertId) : null; handleSuccessfulSubmission(formEl, dedupeKey); });/* ------------------------------------------------------------------------------------------- * If validation fails (client-side or server-side), show that clearly on the placeholder * tab instead of silently leaving it stuck - satisfies "never open WhatsApp on validation * failure" while keeping the tab useful for troubleshooting on mobile. * ------------------------------------------------------------------------------------- */ $(document).on('fluentform_submission_failed', formSelector, function () { log('Submission failed validation.'); updatePendingStatus('The form submission did not go through. Please check the form and try again. You can close this tab.'); clearPendingWindowTimer(); });/* ========================================================================================= * FALLBACK METHOD: some Fluent Forms versions/themes don't reliably fire the event above. * As a safety net, we watch the target form's wrapper for the "success message" element * Fluent Forms injects after a valid AJAX submission, and treat that as a success signal too. * The dedupe key above prevents this from ever double-firing WhatsApp. * ======================================================================================= */ $(function () { var formEl = getFormElement(TARGET_FORM_ID); if (!formEl) { log('Form #' + TARGET_FORM_ID + ' not found on this page (fallback watcher not attached).'); return; }log('Form #' + TARGET_FORM_ID + ' found. Listeners attached and ready.');var wrapper = formEl.closest('.fluentform, .frm-fluent-form, .ff-form-wrap') || formEl.parentElement; if (!wrapper || !window.MutationObserver) return;var observer = new MutationObserver(function (mutations) { for (var i = 0; i < mutations.length; i++) { var added = mutations[i].addedNodes; for (var j = 0; j < added.length; j++) { var node = added[j]; if (node.nodeType !== 1) continue;var isSuccessNode = (node.className && /success/i.test(node.className)) || (node.querySelector && node.querySelector('.ff-message-success, [class*="success"]'));if (isSuccessNode) { log('Fallback watcher detected a success message in the DOM.'); handleSuccessfulSubmission(formEl, null); return; } } } });observer.observe(wrapper, { childList: true, subtree: true }); });})(jQuery); //# sourceURL=saarthi-wa-enquiry-js-after