如何从DialogFlow webhook访问Firebase存储中的音频文件

时间:2018-02-01 22:17:47

标签: firebase-storage dialogflow

我可以通过以下内容从我的DialogFlow实现内联编辑器webhook播放声音。

function saySSML (request, response) {
  const app = new DialogflowApp({request: request, response: response});

  const textToSpeech = '<speak>'
    + 'I can play a sound'
    + '<audio src="https://actions.google.com/sounds/v1/animals/animal_bark_and_growl.ogg">a digital watch alarm</audio>'
    + '</speak>';
  app.ask(textToSpeech);
}

但是,我无法弄清楚如何在Firebase存储中播放音频文件。我已尝试将音频网址替换为文件的存储位置,并在点击Firebase存储中的文件时将其替换为DownloadUrl1网址。

我还考虑按照https://firebase.google.com/docs/storage/web/create-reference创建存储引用 但是当我添加对存储服务的引用时,我得到'firebase not defined'错误。

function saySSML (request, response) {
  const app = new DialogflowApp({request: request, response: response});

  // Get a reference to the storage service, which is used to create references in your storage bucket
  var storage = firebase.storage();

  // Create a storage reference from our storage service
  var storageRef = storage.ref();

  const textToSpeech = '<speak>'
    + 'I can play a sound'
    + '<audio src="https://firebasestorage.googleapis.com/v0/b/andrewdittmer-c301f.appspot.com/o/alarm_clock.ogg?alt=media&token=d66a4055-5365-4061-b50d-0b6a126841f3">a digital watch alarm</audio>'
    + '</speak>';
  app.ask(textToSpeech);
}

有没有人能够成功地做到这一点?

感谢您提供任何帮助/指示。

1 个答案:

答案 0 :(得分:2)

Google智能助理的SSML解析器非常严格。您的网址中的&需要进行转义,因此结果应为&amp;。 Line可能看起来像这样:

    + '<audio src="https://firebasestorage.googleapis.com/v0/b/andrewdittmer-c301f.appspot.com/o/alarm_clock.ogg?alt=media&amp;token=d66a4055-5365-4061-b50d-0b6a126841f3">a digital watch alarm</audio>'

或者,如果您已经使用Firebase,并且您的音频资源是静态的,则可能需要将音频存储在Firebase Hosting中。