Is it possible to play audio file or stream?
Asked Answered
P

2

2

Is it possible to play audio file or stream using actions-on-google-nodejs library?

Priedieu answered 25/1, 2018 at 22:25 Comment(0)
D
6

Using SSML you can return an audio clip up to 120s.

<speak>
  <audio src="https://actions.google.com/sounds/v1/animals/cat_purr_close.ogg">
    <desc>a cat purring</desc>
    PURR (sound didn't load)
  </audio>
</speak>

Edit

If you want to play audio the mp3 file (over 120s), you need to use Media Responses

if (!conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO')) {
      conv.ask('Sorry, this device does not support audio playback.');
      return;
    }
    conv.ask(new MediaObject({
      name: 'Jazz in Paris',
      url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
      description: 'A funky Jazz tune',
      icon: new Image({
        url: 'https://storage.googleapis.com/automotive-media/album_art.jpg',
        alt: 'Ocean view',
      }),
    }));
Disparagement answered 25/1, 2018 at 23:9 Comment(7)
Not higher than that? I was thinking in play a full podcast.Priedieu
Unfortunately full podcast playback isn't supported, at least not in this way. You can read this doc for podcast actions.Disparagement
SSML is not enough long to me to play. This is not the answer I looking for.Biggs
What about live content?Karalee
Live streams of media are not supported in the platformDisparagement
how can i achieve this using php?Myatt
When you look at the MediaResponse documentation, you can see the JSON equivalent.Disparagement
O
5

To add one more point to Nick's answer, you can also build a Media Response which will allow you to play a long audio file (I'm currently playing 50 mins album in my app). You can find it on Google's doc here.

A short example in Node.js could be:

const richResponse = app.buildRichResponse()
 .addSimpleResponse("Here's song one.")
  .addMediaResponse(app.buildMediaResponse()
  .addMediaObjects([
    app.buildMediaObject("Song One", "https://....mp3")
      .setDescription("Song One with description and large image.") // Optional
      .setImage("https://....jpg", app.Media.ImageType.LARGE)
        // Optional. Use app.Media.ImageType.ICON if displaying icon.
  ])
)
.addSuggestions(["other songs"]);

And then you can just do

app.ask(richResponse)

UPDATE:

As per a comment request, here is the JSON response sent by my app for a mediaResponse:

{
  "conversationToken": "[\"_actions_on_google\"]",
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "Here is my favorite album."
              }
            },
            {
              "mediaResponse": {
                "mediaType": "AUDIO",
                "mediaObjects": [
                  {
                    "name": my_name,
                    "description": my_descr,
                    "largeImage": {
                      "url": my_url
                    },
                    "contentUrl": my_contentURL
                  }
                ]
              }
            }
          ],
          "suggestions": [
            {
              "title": my_suggestion
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "assistant.intent.action.TEXT"
        }
      ]
    }
  ],
  "responseMetadata": {
    "status": {
      "message": "Success (200)"
    },
    "queryMatchInfo": {
      "queryMatched": true,
      "intent": "0a3c14f8-87ca-47e7-a211-4e0a8968e3c5",
      "parameterNames": [
        my_param_name
      ]
    }
  },
  "userStorage": "{\"data\":{}}"
}
Od answered 23/3, 2018 at 8:55 Comment(3)
I tried that it seems only can play mp3. 😕 I want to play m3u8 streaming in my context.Biggs
Can you please post a REST(Json) response format here too. I am looking for streaming audio in Google Home but I may not be using the nodejs sdk that they provide.Arand
@Arand Sure, I'll update my answer with the RESPONSE tab obtained with the Actions On Google simulator.Irrevocable

© 2022 - 2024 — McMap. All rights reserved.