Apply for Technical Support Engineer Position

Job Description

Technical Support – Job Description

We are looking for a knowledgeable and customer-focused professional to provide technical support to clients, ensuring timely resolution of issues and smooth operation of systems and applications.

Key Responsibilities:

  • Provide technical assistance to clients via phone, email, or remote support tools
  • Diagnose and troubleshoot software, hardware, or network-related issues
  • Guide clients through step-by-step solutions and system usage
  • Escalate complex technical problems to the appropriate teams
  • Maintain records of support requests, resolutions, and follow-ups
  • Ensure timely response and resolution in line with service standards (SLAs)
  • Assist in system setup, configuration, and updates when required

{ if (window.__sharedFormValidationLoaded) { return; } window.__sharedFormValidationLoaded = true; const disallowedChars = ["%","\u003C","\u003E","[","]","^","#","\u0026","*","$","|","\\","{","}","+","="]; const managedFormSelector = "form:not(.no-validation)"; const richTextFieldSelector = "textarea.tinymce_editor"; const textLikeFieldSelector = [ 'input[type="text"]:not(.tagify)', 'input[type="email"]:not(.tagify)', 'input[type="tel"]:not(.tagify)', 'input:not([type]):not(.tagify)', 'textarea:not(.tagify)' ].join(", "); const numberFieldSelector = 'input[type="number"]'; const ensureErrorNode = (input) => { const nextNode = input.nextElementSibling; if (nextNode && nextNode.classList && nextNode.classList.contains("js-field-error")) { return nextNode; } const errorNode = document.createElement("small"); errorNode.className = "js-field-error text-danger d-block mt-1 d-none"; input.insertAdjacentElement("afterend", errorNode); return errorNode; }; const setFieldError = (input, message) => { const errorNode = ensureErrorNode(input); if (message) { errorNode.textContent = message; errorNode.classList.remove("d-none"); input.setCustomValidity(message); return; } errorNode.textContent = ""; errorNode.classList.add("d-none"); input.setCustomValidity(""); }; const sanitizeNumberInput = (input) => { const oldValue = input.value; let newValue = ""; let dotCount = 0; let cursorOffset = 0; const selectionStart = typeof input.selectionStart === "number" ? input.selectionStart : null; for (let i = 0; i < oldValue.length; i++) { const char = oldValue[i]; const keepChar = (char >= "0" && char <= "9") || (char === "." && dotCount === 0); if (keepChar) { if (char === ".") { dotCount++; } newValue += char; } else if (selectionStart !== null && i < selectionStart) { cursorOffset++; } } if (newValue !== oldValue) { input.value = newValue; if ( selectionStart !== null && typeof input.setSelectionRange === "function" ) { const newPosition = Math.max(0, selectionStart - cursorOffset); input.setSelectionRange(newPosition, newPosition); } } }; const validateTextLikeInput = (input) => { const value = input.value || ""; let filteredDisallowed = disallowedChars.slice(); if (input.type === "email") { filteredDisallowed = filteredDisallowed.filter((char) => char !== "@"); } if (input.type !== "number") { filteredDisallowed = filteredDisallowed.filter((char) => char !== "."); } let error = ""; if (filteredDisallowed.some((char) => char && value.includes(char))) { error = "Invalid character entered! " + filteredDisallowed.join(" "); } else if ( input.type !== "email" && !input.classList.contains("no-minlength") && value.length > 0 && value.length < 4 ) { error = "Minimum 4 characters required"; } setFieldError(input, error); }; const handleField = (target) => { if (!(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement)) { return; } // Ignore Select2's internal search input so typing there does not trigger // the generic minimum-length validator used for normal text fields. if ( target.classList.contains("select2-search__field") || target.closest(".select2-container") ) { setFieldError(target, ""); return; } if (!target.closest(managedFormSelector)) { return; } // Tagify keeps its own serialized value in the original input, which // includes JSON characters that should not be validated by this rule. if (target.classList.contains("tagify")) { setFieldError(target, ""); return; } // TinyMCE stores HTML markup in the underlying textarea, so the generic // disallowed-character check would incorrectly flag valid rich text. if (target.matches(richTextFieldSelector)) { setFieldError(target, ""); return; } if (target.matches(numberFieldSelector)) { sanitizeNumberInput(target); return; } if (target.matches(textLikeFieldSelector)) { validateTextLikeInput(target); } }; document.addEventListener("input", (event) => { handleField(event.target); }, true); document.addEventListener("change", (event) => { handleField(event.target); }, true); [ 'input[type="text"]:not(.tagify)', 'input[type="email"]:not(.tagify)', 'input[type="tel"]:not(.tagify)', 'input[type="number"]', 'input:not([type]):not(.tagify)', 'textarea.tinymce_editor', 'textarea:not(.tagify)' ].forEach((selector) => { document.querySelectorAll(`${managedFormSelector} ${selector}`).forEach((field) => { handleField(field); }); }); });