Google 动作不发送 actions.intent.MEDIA_STATUS

Google action does not send actions.intent.MEDIA_STATUS

这是我关于 Stack Overflow 的第一个问题,所以如果我有任何问题请告诉我!

我正在构建一个能够播放播客的 google 动作,我想在播客结束时播放结束音频剪辑。据我从文档 (https://developers.google.com/actions/assistant/responses#media_responses) 中得知,在音频播放结束时,设备应发送包含 actions.intent.MEDIA_STATUS 意图的请求。然后我想用结束音频回应这个,但我从来没有收到请求。

至于我到目前为止的设置:我使用 dialogflow 来设置对话,然后将请求发送到 AWS Lambda,我在其中设置了一些 java 代码来发回播客 url。我有媒体响应的那部分功能 - 它可以播放、暂停、向前跳转和返回。到目前为止,为了获得下一个音轨,我已经完成了以下操作:

  1. 在 Dialogflow 中创建一个意图(我称之为 AudioCompleteIntent)
  2. 将actions_intent_MEDIA_STATUS添加到意图的"Events"部分(如所示)
  3. 添加一个虚拟训练短语。不确定这是否有必要,但这是我可以让 AudioCompleteIntent 集成的唯一方法 在 "Actions" 部分中使用 google 操作。它不会出现 除此以外。我认为 "Actions" 部分中的意图对于设备发送请求是必要的,但也许它仅用于用户启动的意图。
  4. 为了实现,我选择了 "Enable webhook call for this intent" 以便我可以将请求发送到 AWS Lambda 函数。 Lambda 函数已将所有请求记录到日志

我附上了我在 Dialogflow 中的意图的屏幕截图。训练短语仍然不总是与动作同步,但无论对话流意图是否显示在 google 动作控制台 AudioCompleteIntent Screenshot

中,初始化对话的意图似乎都有效

问题是,我没有看到来自设备的任何具有 actions.intent.MEDIA_STATUS 意图的请求。在播客自行完成播放后(不是在用户停止播放时),我希望设备向 Dialogflow 发送 actions.intent.MEDIA_STATUS 意图,然后 dialogflow 将通过将 AudioCompleteIntent 发送到 aws lambda 函数来处理此问题。我在 dialogflow "history" 部分和 aws 日志中都没有看到我的 AudioCompleteIntent 请求或任何类型的 actions.intent.MEDIA_STATUS 意图。 dialogflow/AWS 都显示开始播客的对话记录 - 播客结束时什么也没有。

我一直在用我的像素(2016 年的像素 1)phone 的 google 助手进行测试。显然,根据 Google action MediaResponse not working on some devices 的说法,存在一些设备无法发送请求的错误,但这个问题已经存在将近一年了,所以我认为这个问题已经得到解决,我这边搞砸了。我没有足够的声誉来评论 post 并询问解决方案,所以我想我会询问我的设置

我最终让它开始工作。我缺少的主要部分是我需要将 "expectUserResponse" 设置为 True 并提供建议筹码。由于缺少建议筹码,当前文档中的示例(截至 2019 年 2 月)将无法播放。我删除了 "expectUserResponse": true 从示例中获取并开始播放,但它没有发送 actions.intent.MEDIA_STATUS 响应。重新引入 "expectUserResponse": true 并添加建议筹码确实有效

我无法包含我发送的实际回复,但这里是文档中代码示例的编辑版本。具体来说,我在 https://developers.google.com/actions/assistant/responses#media_responses 提供的 DIALOGFLOW JSON 选项卡的 "Sample Code" 部分下的示例中添加了建议芯片:

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "mediaResponse": {
              "mediaType": "AUDIO",
              "mediaObjects": [
                {
                  "contentUrl": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
                  "description": "A funky Jazz tune",
                  "icon": {
                    "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                    "accessibilityText": "Ocean view"
                  },
                  "name": "Jazz in Paris"
                }
              ]
            }
          }
        ],
        "suggestions": [
          {
            "title": "pause"
          },
          {
            "title": "start over"
          }
        ]
      },
      "userStorage": "{\"data\":{}}"
    }
  },
  "outputContexts": [
    {
      "name": "/contexts/_actions_on_google",
      "lifespanCount": 99,
      "parameters": {
        "data": "{}"
      }
    }
  ]
}

感谢 https://github.com/actions-on-google/actions-on-google-nodejs/issues/247#issuecomment-439617878 中的 BoneGoat 提出了在 node.js 方面寻找用户响应的重要性。希望这个问题能帮助其他 Java 开发者!