рдЯреИрдХреНрдЯрдлреБрд▓ рд░реЛрдмреЛрдЯ: рд╕реБрди рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рд╡рд╛рдХреН рдкрд╣рдЪрд╛рди (рдЗрд╕рдХреЗ рдмрд╛рдж - ASR, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рднрд╛рд╖рдг рдорд╛рдиреНрдпрддрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдмреЙрдЯ рдФрд░ / рдпрд╛ IVR рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЪреБрдирд╛рд╡ рдХреЗ рд▓рд┐рдП рднреАред рд╡реЙрдХреНрд╕рд┐рдордкреНрд▓рд╛рдВрдЯ, рдЧреБрдб рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди ASR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - Google рдорд╛рдиреНрдпрддрд╛ рдЬрд▓реНрджреА рдФрд░ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди ... рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рд╣реИред рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЫреЛрдЯреЗ рд╡рд╛рдХреНрдпреЛрдВ рдореЗрдВ рднреА рд╡рд┐рд░рд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рдЪрд╛рд╣рд┐рдП рдХрд┐ ASR рдЙрддреНрддрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╡рд┐рд░рд╛рдо рдирд╣реАрдВ рд▓реЗрдЧрд╛ред рдпрджрд┐ рдПрдПрд╕рдЖрд░ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдмреЛрд▓рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ "рдЙрддреНрддрд░" рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдзреНрд╡рдирд┐ рд╕рдВрд╢реНрд▓реЗрд╖рдг рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрд╕реА рд╕рдордп рд╡реНрдпрдХреНрддрд┐ рдмреЛрд▓рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ рдФрд░ рдПрдХ рдмреБрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛: рдмреЙрдЯ / рдЖрдИрд╡реАрдЖрд░ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдЬ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрд╣реЗ рдХреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВред


рд╕рдВрдХрд▓реНрдкрдирд╛


рд▓рдХреНрд╖реНрдп рдПрдХ рдкреНрд░рд╢реНрди рдкреВрдЫрдирд╛ рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдмрд┐рдирд╛ рд░реБрдХрд╛рд╡рдЯ рдХреЗ рд╕реБрдирдирд╛ рдФрд░ рдЙрд╕рдХреЗ рдЙрддреНрддрд░ рдХреА рд╕рдорд╛рдкреНрддрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реИред ASR рдХреЛ рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ ASR.Result рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ - рдпрд╣ рддрдм рдЯреНрд░рд┐рдЧрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдмреЛрд▓рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд▓реЗрддрд╛ рд╣реИред Google рдХреЗ ASR рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдкрд╛рда рдХреЗ рд╕рд╛рде ASR.Result рдЬреИрд╕реЗ рд╣реА рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХрдо рд╕реЗ рдХрдо рдереЛрдбрд╝рд╛ рд╕рд╛ рд░реБрдХрддрд╛ рд╣реИ рдФрд░ Google рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдХреНрдд рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ рдФрд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд░реБрдХрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк ASR.InterimResult рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рдорд╛рдиреНрдпрддрд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдПрд╕рдЖрд░ рд╕рднреА "рдХрдЪреНрдЪреЗ" рдкрд╛рда рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рд╣реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ - рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдХрд┐ рдПрдПрд╕рдЖрд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, ASR.InterimResult рдШрдЯрдирд╛ рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ рдЬреЛ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рдХрд╣ рд░рд╣рд╛ рд╣реИ ред рд╣рдо рдХреЗрд╡рд▓ рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХрдм рддрдХ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧреНрд░рдВрдереЛрдВ ASR.Result рд╕реЗ рдкреНрд░рд╛рдкреНрдд - рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

asr.addEventListener(ASREvents.InterimResult, e => { clearTimeout(timer) timer = setTimeout(stop, 3000) }) asr.addEventListener(ASREvents.Result, e => { answer += " " + e.text }) function stop(){ //... } 

рд╣рдо рд╕рд╛рд░ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЯрд╛рдЗрдорд░


рдард╣рд░рд╛рд╡ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 timeouts = { silence: null, pause: null, duration: null } 

рд╕рд╡рд╛рд▓ рдкреВрдЫрдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЕрдХреНрд╕рд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕реЛрдЪрддрд╛ рд╣реИред рем-, рд╕реЗрдХрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪреБрдкреНрдкреА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдорд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд╣рдо рдЯрд╛рдЗрдорд░ рдЖрдИрдбреА рдХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕.рд╕реБрд░рдХреНрд╖рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗред

рдЙрддреНрддрд░ рдХреЗ рдордзреНрдп рдореЗрдВ рд╕реНрдерд┐рдд рдкреЛрдЬрд╝ 3-4 рд╕реЗрдХрдВрдб рдореЗрдВ рдЗрд╖реНрдЯрддрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡реНрдпрдХреНрддрд┐ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╡рд╣ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдкреЗрдХреНрд╖рд╛ рдореЗрдВ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ timeouts.pause рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред

рдкреВрд░реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЯрд╛рдЗрдорд░ - timeouts.duration - рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ рд╡реНрдпрдХреНрддрд┐ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдд рдХрд░реЗред рдпрд╣ рд╣рдореЗрдВ рдЙрди рдорд╛рдорд▓реЛрдВ рд╕реЗ рднреА рдмрдЪрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЖрд╡рд╛рдЬрд╝ рдХреЗ рд╕рд╛рде рд╢реЛрд░ рдХрдорд░реЗ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рднрд╛рд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЙрди рдорд╛рдорд▓реЛрдВ рд╕реЗ рднреА рдЬрдм рд╣рдореЗрдВ рдПрдХ рдЕрдиреНрдп рд░реЛрдмреЛрдЯ рдорд┐рд▓рд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рдмрд╛рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо ASR рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:

 require(Modules.ASR) let call, asr, speech = "" timeouts = { silence: null, pause: null, duration: null } 

рдЖрд╡рдХ рдХреЙрд▓


рдЬрдм рдХреЛрдИ рдЗрдирдХрдорд┐рдВрдЧ рдХреЙрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрддреА рд╣реИ, рддреЛ AppEvents.CallAlerting рдИрд╡реЗрдВрдЯ рдлрд╛рдпрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ред рдЖрдЗрдП рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдПрдВ: рдХреЙрд▓ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдВ рджреЗрдВ, рдЕрднрд┐рд╡рд╛рджрди рдХреЗ рдмрд╛рдж рдорд╛рдиреНрдпрддрд╛ рд╢реБрд░реВ рдХрд░реЗрдВред рдФрд░ рдЪрд▓реЛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкреВрдЫреЗ рдЧрдП рдкреНрд░рд╢реНрди (рд╡рд┐рд╡рд░рдг - рдереЛрдбрд╝рд╛ рдЖрдЧреЗ) рдХреЗ рдмреАрдЪ рд╕реЗ рд░реЛрдмреЛрдЯ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рджреЗрдВред

рд╣реИрдВрдбрд▓рд░ AppEvents.CallAlerting
 VoxEngine.addEventListener(AppEvents.CallAlerting, e => { call = e.call //    .     Connected call.answer() call.addEventListener(CallEvents.Connected, e => { call.say(",      . , ,        ?", Language.RU_RUSSIAN_FEMALE) //    4          setTimeout(startASR, 4000) //        call.addEventListener(CallEvents.PlaybackFinished, startSilenceAndDurationTimeouts) }); call.addEventListener(CallEvents.Disconnected, e => { VoxEngine.terminate() }) }) 

рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ startASR рдФрд░ startSilenceAndDurationTimeouts рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреНрдпреЛрдВ рд╣реИред

рдорд╛рдиреНрдпрддрд╛ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ


рдорд╛рдиреНрдпрддрд╛ startASR рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ ASR рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐ рдХреА рдЖрд╡рд╛рдЬрд╝ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ ASREvents.InterimResult рдФрд░ ASREvents.Result рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛, рдпрд╣рд╛рдВ рд╣рдо ASR.InterimResult рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдИрд╡реЗрдВрдЯ рдХрд╛ рд╣реИрдВрдбрд▓рд░ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИ, рдЯрд╛рдЗрдордЖрдЙрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдкреЙрдЬрд╝ рдХрд░реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдЖрд╡рд╛рдЬрд╝ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ (рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреИрд╕реЗ рдмреЙрдЯ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред ASREvents.Result рд╣реИрдВрдбрд▓рд░ рдмрд╕ рднрд╛рд╖рдг рдЪрд░ рдореЗрдВ рд╕рднреА рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рднрд╛рд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдмреИрдХрдПрдВрдб рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВред

startASR
 function startASR() { asr = VoxEngine.createASR({ lang: ASRLanguage.RUSSIAN_RU, interimResults: true }) asr.addEventListener(ASREvents.InterimResult, e => { clearTimeout(timeouts.pause) clearTimeout(timeouts.silence) timeouts.pause = setTimeout(speechAnalysis, 3000) call.stopPlayback() }) asr.addEventListener(ASREvents.Result, e => { //    speech += " " + e.text }) //    ASR call.sendMediaTo(asr) } 

рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВрд╕реБрд╡рд┐рдзрд╛рдПрдБрдбрд╛рдпрд░реЗрдХреНрдЯрдЖрдЙрдЯ ... рд╕рдВрдмрдВрдзрд┐рдд рдЯрд╛рдЗрдорд░ рдХреЗ рдорд╛рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 function startSilenceAndDurationTimeouts() { timeouts.silence = setTimeout(speechAnalysis, 8000) timeouts.duration = setTimeout(speechAnalysis, 30000) } 

рдФрд░ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рд╕реНрдкреАрдЪрдЕрдирд▓рд┐рд╕рд┐рд╕ рдорд╛рдиреНрдпрддрд╛ рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рдг рд╕реЗ рдкрд╛рда (рдЬреЛ ASREvents.Result рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ) рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ ред рдпрджрд┐ рдХреЛрдИ рдкрд╛рда рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рд╢реНрди рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ; рдпрджрд┐ рдХреЛрдИ рдкрд╛рда рд╣реИ, рддреЛ рд╡рд┐рдирдореНрд░рддрд╛ рд╕реЗ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣реЛ рдФрд░ рд▓рдЯрдХрд╛рдУред

speechAnalysis
 function speechAnalysis() { //   ASR stopASR() const cleanText = speech.trim().toLowerCase() if (!cleanText.length) { //     ,       , // ..     ,   , ,    handleSilence() } else { call.say( "   !  !", Language.RU_RUSSIAN_FEMALE ) call.addEventListener(CallEvents.PlaybackFinished, () => { call.removeEventListener(CallEvents.PlaybackFinished) call.hangup() }) } } 

рд╕рд╡рд╛рд▓ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдЬрд┐рдореНрдореЗрджрд╛рд░:

 function handleSilence() { call.say(",   . , ,        ?", Language.RU_RUSSIAN_FEMALE) //    3          setTimeout(startASR, 3000) call.addEventListener(CallEvents.PlaybackFinished, startSilenceAndDurationTimeouts) } 

рдЕрдВрдд рдореЗрдВ, ASR рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп:

 function stopASR() { asr.stop() call.removeEventListener(CallEvents.PlaybackFinished) clearTimeout(timeouts.duration) } 

рд╕рдм рдПрдХ рд╕рд╛рде


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ
require(Modules.ASR)
let call,
asr,
speech = ""
timeouts = {
silence: null,
pause: null,
duration: null
}
// CallAlerting ,
VoxEngine.addEventListener(AppEvents.CallAlerting, e => {
call = e.call
// . Connected
call.answer()
call.addEventListener(CallEvents.Connected, e => {
call.say(", . , , ?", Language.RU_RUSSIAN_FEMALE)
// 4
setTimeout(startASR, 4000)
//
call.addEventListener(CallEvents.PlaybackFinished, startSilenceAndDurationTimeouts)
});
call.addEventListener(CallEvents.Disconnected, e => {
VoxEngine.terminate()
})
})
function startASR() {
asr = VoxEngine.createASR({
lang: ASRLanguage.RUSSIAN_RU,
interimResults: true
})
asr.addEventListener(ASREvents.InterimResult, e => {
clearTimeout(timeouts.pause)
clearTimeout(timeouts.silence)
timeouts.pause = setTimeout(speechAnalysis, 3000)
call.stopPlayback()
})
asr.addEventListener(ASREvents.Result, e => {
//
speech += " " + e.text
})
// ASR
call.sendMediaTo(asr)
}
function startSilenceAndDurationTimeouts() {
timeouts.silence = setTimeout(speechAnalysis, 8000)
timeouts.duration = setTimeout(speechAnalysis, 30000)
}
function speechAnalysis() {
// ASR
stopASR()
const cleanText = speech.trim().toLowerCase()
if (!cleanText.length) {
// , ,
// .. , , ,
handleSilence()
} else {
call.say(
" ! !",
Language.RU_RUSSIAN_FEMALE
)
call.addEventListener(CallEvents.PlaybackFinished, () => {
call.removeEventListener(CallEvents.PlaybackFinished)
call.hangup()
})
}
}
function handleSilence() {
call.say(", . , , ?", Language.RU_RUSSIAN_FEMALE)
// 3
setTimeout(startASR, 3000)
call.addEventListener(CallEvents.PlaybackFinished, startSilenceAndDurationTimeouts)
}
function stopASR() {
asr.stop()
call.removeEventListener(CallEvents.PlaybackFinished)
clearTimeout(timeouts.duration)
}
view raw asr.js hosted with тЭд by GitHub

рдЕрдВрддрд┐рдо рдкрд░рд┐рджреГрд╢реНрдп рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рд░реЛрдмреЛрдЯ рдХреЛ рдХреИрд╕реЗ "рдПрдиреНрдиреЛрдмрд▓" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЪрд╛рддреБрд░реНрдп рдФрд░ рдзреНрдпрд╛рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХрдорд╛рддреНрд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдмреЙрдЯ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рддрдЪреАрдд рдХреЛ рдХреИрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЪрд╛рдирдХ рдбрд╛рдпрд▓реЙрдЧрдлреНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ - рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ ред

Source: https://habr.com/ru/post/hi431676/


All Articles