local function trim(value) if not value then return "" end return (value:gsub("^%s+", ""):gsub("%s+$", "")) end local function xml_unescape(value) local text = value or "" text = text:gsub("<", "<") text = text:gsub(">", ">") text = text:gsub(""", '"') text = text:gsub("'", "'") text = text:gsub("&", "&") return text end local function ssml_escape(value) local text = value or "" text = text:gsub("&", "&") text = text:gsub("<", "<") text = text:gsub(">", ">") text = text:gsub('"', """) text = text:gsub("'", "'") return text end local function strip_vendor_prefix(value) return (value or ""):gsub("^%[[^%]]+%]", "") end local function first_non_empty(...) for index = 1, select("#", ...) do local candidate = trim(select(index, ...)) if candidate ~= "" then return candidate end end return "" end local function extract_from_xml(xml) local text = first_non_empty( xml:match("]*>(.-)"), xml:match("]*>(.-)") ) if text == "" then return "" end text = text:gsub("", "%1") text = strip_vendor_prefix(xml_unescape(trim(text))) return trim(text) end if not session or not session:ready() then return end local asr_text = trim(session:getVariable("asr_text")) local asr_text_ssml = trim(session:getVariable("asr_text_ssml")) if asr_text ~= "" then if asr_text_ssml == "" then session:setVariable("asr_text_ssml", ssml_escape(asr_text)) end return end local raw_result = first_non_empty( session:getVariable("detect_speech_result_text"), session:getVariable("RECOG_RESULT"), session:getVariable("speech_detection_result"), session:getVariable("detect_speech_result"), session:getVariable("detect_speech_results") ) if raw_result == "" then session:setVariable("asr_text", "") session:setVariable("asr_text_ssml", "") return end local text if raw_result:find("<", 1, true) then text = extract_from_xml(raw_result) else text = trim(strip_vendor_prefix(xml_unescape(raw_result))) end if text == "" then session:setVariable("asr_text", "") session:setVariable("asr_text_ssml", "") return end session:setVariable("asr_text", text) session:setVariable("asr_text_ssml", ssml_escape(text))