合并来自多个Webhook请求的简单响应的错误

问题描述

一个场景中多次调用Webhook并发送简单响应时,合并简单响应存在一个错误

第一次Webhook呼叫提示

{
    "override": false,"firstSimple": {
        "speech": "<speak><audio src=\"https://www.example.com/audio/file1.mp3\"></speak>","text": "Text 1"
    }
}

第二个Webhook呼叫提示

{
    "override": false,"firstSimple": {
        "speech": "<speak><audio src=\"https://www.example.com/audio/file2.mp3\"></audio> <audio src=\"https://www.example.com/audio/file3.mp3\"></audio></speak>","text": " Text 2"
    }
}

响应中的合并提示发送给用户

{
    "firstSimple": {
        "speech": "<speak><speak><audio src=\"https://www.example.com/audio/file1.mp3\"></speak> <audio src=\"https://www.example.com/audio/file2.mp3\"/> <audio src=\"https://www.example.com/audio/file3.mp3\"/></speak>","text": "Text 1 Text2"
    }
}

因此,使用两个speak标签,SSML无效并且不会被说出。 有时语音对象完全丢失。

我已经为此创建了一个Github issue

解决方法

因此发现合并的Bug与无效的SSML有关。不幸的是,Google没有针对SSML错误的错误消息。

作为解决语音对象完全丢失的问题的一种解决方法,我将conv.add(new Simple('Text'))更改为conv.prompt.firstSimple = new Simple('Text')conv.prompt.lastSimple = new Simple('Text')