// ============================================================ // Specific Response Adapter — Phản hồi exact match từ bảng ánh xạ // Phụ thuộc: currentLang, _adapterPath, removeVietnameseDiacritics, SPECIFIC_RESPONSES // ============================================================ /** * Specific Response Adapter — Object Macro trả về phản hồi exact match. * So khớp case-insensitive, hỗ trợ diacritics-stripped match cho tiếng Việt. * * @param {object} rs - RiveScript instance * @param {string[]} args - Mảng các từ từ thẻ * @returns {string} Câu trả lời tương ứng hoặc thông báo "không có phản hồi cụ thể" */ function specificResponseAdapter(rs, args) { _adapterPath.push('specific_response'); var input = (args || []).join(' ').trim().toLowerCase(); if (input.length === 0) { return currentLang === 'en' ? 'No specific response for this question.' : currentLang === 'ja' ? 'この質問に対する特定の応答はありません。' : 'Không có phản hồi cụ thể cho câu hỏi này.'; } var responses = SPECIFIC_RESPONSES[currentLang] || SPECIFIC_RESPONSES['vi']; // Thử exact match trước var keys = Object.keys(responses); for (var i = 0; i < keys.length; i++) { if (keys[i].toLowerCase() === input) { return responses[keys[i]]; } } // Thử match sau khi bỏ dấu (chỉ tiếng Việt) if (currentLang === 'vi') { var inputNoDiacritics = removeVietnameseDiacritics(input); for (var j = 0; j < keys.length; j++) { if (removeVietnameseDiacritics(keys[j].toLowerCase()) === inputNoDiacritics) { return responses[keys[j]]; } } } if (currentLang === 'en') return 'No specific response for this question.'; if (currentLang === 'ja') return 'この質問に対する特定の応答はありません。'; return 'Không có phản hồi cụ thể cho câu hỏi này.'; } // Node/test: export to globalThis if (typeof module !== 'undefined' && module.exports) { globalThis.specificResponseAdapter = specificResponseAdapter; }