From 00967290b9f3a9e4618630fb7d1a86fcead9da17 Mon Sep 17 00:00:00 2001
From: Seven Du <dujinfang@gmail.com>
Date: Fri, 11 Oct 2019 15:32:09 +0800
Subject: [PATCH] [core] support partial speech events

---
 src/switch_ivr_async.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/switch_ivr_async.c b/src/switch_ivr_async.c
index bb629e9af2..ee23ccd79c 100644
--- a/src/switch_ivr_async.c
+++ b/src/switch_ivr_async.c
@@ -4673,9 +4673,9 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 
 			status = switch_core_asr_get_results(sth->ah, &xmlstr, &flags);
 
-			if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
+			if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK && status != SWITCH_STATUS_MORE_DATA) {
 				goto done;
-			} else if (status == SWITCH_STATUS_SUCCESS) {
+			} else {
 				/* Try to fetch extra information for this result, the return value doesn't really matter here - it's just optional data. */
 				switch_core_asr_get_result_headers(sth->ah, &headers, &flags);
 			}
@@ -4732,6 +4732,14 @@ static void *SWITCH_THREAD_FUNC speech_thread(switch_thread_t *thread, void *obj
 						switch_event_merge(event, headers);
 					}
 
+					switch_event_add_body(event, "%s", xmlstr);
+				} else if (status == SWITCH_STATUS_MORE_DATA) {
+					switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "detected-partial-speech");
+
+					if (headers) {
+						switch_event_merge(event, headers);
+					}
+
 					switch_event_add_body(event, "%s", xmlstr);
 				} else {
 					switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Speech-Type", "begin-speaking");