Réponses multimédias

Les réponses multimédias permettent à vos actions de lire du contenu audio avec une durée de lecture dépasse la limite de 240 secondes définie par SSML. Les réponses multimédias fonctionnent à la fois les appareils uniquement audio et ceux qui peuvent afficher du contenu visuel. Sur un écran, les réponses multimédias sont accompagnées d'un composant visuel avec des commandes multimédias et (Facultatif) une image fixe.

Lorsque vous définissez une réponse multimédia, utilisez un élément candidate avec les RICH_RESPONSE et LONG_FORM_AUDIO pour que Google L'Assistant ne renvoie la réponse enrichie que sur les appareils compatibles. Vous ne pouvez utiliser une réponse enrichie par objet content dans une requête.

Le contenu audio de lecture doit être dans un fichier MP3 au bon format. Les fichiers MP3 doivent être hébergées sur un serveur web et être accessibles au public via une URL HTTPS. En direct le streaming n'est compatible qu'avec le format MP3.

Exemple de réponse multimédia sur un écran connecté
Figure 1. Exemple de réponse multimédia sur un écran connecté

Comportement

Exemple de réponse d'un média sur un smartphone
Figure 2. Exemple de réponse d'un média sur un smartphone

Le composant principal d'une réponse multimédia est la fiche à piste unique. La fiche permet à l'utilisateur d'effectuer les opérations suivantes:

  • Lire à nouveau les 10 dernières secondes
  • Avancer de 30 secondes
  • Afficher la durée totale du contenu multimédia
  • Afficher un indicateur de progression pour la lecture des contenus multimédias
  • Afficher le temps de lecture écoulé

Les réponses multimédias sont compatibles avec les commandes audio suivantes pour les interactions vocales, toutes dont sont gérés l'Assistant Google:

  • "Ok Google, lance la lecture."
  • "Ok Google, mets une pause."
  • "Ok Google, arrête."
  • "Ok Google, recommence."

Les utilisateurs peuvent également contrôler le volume en disant, par exemple, "Hey Google, tourne augmenter le volume" ou "Hey Google, règle le volume à 50 %". Intents dans votre Les actions sont prioritaires si elles gèrent des phrases d'entraînement similaires. Autoriser l'Assistant traiter ces demandes des utilisateurs, sauf si votre action a une raison spécifique.

Comportement sur les téléphones Android

Sur les téléphones Android, les commandes multimédias sont également disponibles lorsque le téléphone est verrouillé. Les commandes multimédias apparaissent également dans la zone de notification, et les utilisateurs peuvent voir des réponses lorsque l'une des conditions suivantes est remplie:

  • L'Assistant Google est au premier plan, et l'écran du téléphone est allumé.
  • L'utilisateur quitte l'Assistant Google pendant la lecture de l'audio et revient à l'Assistant Google dans les 10 minutes suivant la lecture complète. Au retour Assistant Google, l'utilisateur voit la fiche multimédia et les chips de suggestion.

Propriétés

Les réponses multimédias ont les propriétés suivantes:

Propriété Type Exigence Description
media_type MediaType Obligatoire Type de support de la réponse fournie. Retour : MEDIA_STATUS_ACK lors de la confirmation de l'état d'un contenu multimédia.
start_offset chaîne Facultatif Recherchez la position de départ de la première piste multimédia. Indiquez la valeur de secondes, les secondes fractionnaires ne comportant pas plus de neuf décimales et se termine par le suffixe "s". Par exemple, 3 secondes et 1 nanoseconde est exprimée sous la forme "3.000000001s". <ph type="x-smartling-placeholder">
optional_media_controls tableau de OptionalMediaControls Facultatif Propriété d'acceptation pour recevoir des rappels lorsqu'un utilisateur modifie son contenu multimédia État de la lecture (par exemple, la mise en pause ou l'arrêt de la lecture d'un contenu multimédia)
media_objects tableau de MediaObject Obligatoire Représente les objets multimédias à inclure dans la requête. Quand ? confirmer l'état d'un contenu multimédia avec MEDIA_STATUS_ACK, ne des objets multimédias.
first_media_object_index entier Facultatif Indice basé sur 0 du premier MediaObject dans media_objects pour jouer. Si aucune valeur n'est spécifiée, zéro ou hors limites, la lecture commence à MediaObject. <ph type="x-smartling-placeholder">
repeat_mode RepeatMode Facultatif Mode de répétition pour la liste des objets multimédias. <ph type="x-smartling-placeholder">

Exemple de code

YAML

candidates:
  - first_simple:
      variants:
        - speech: This is a media response.
    content:
      media:
        start_offset: 2.12345s
        optional_media_controls:
          - PAUSED
          - STOPPED
        media_objects:
          - name: Media name
            description: Media description
            url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3'
            image:
              large:
                url: 'https://storage.googleapis.com/automotive-media/album_art.jpg'
                alt: Jazz in Paris album art
        media_type: AUDIO

JSON

{
  "candidates": [
    {
      "first_simple": {
        "variants": [
          {
            "speech": "This is a media response."
          }
        ]
      },
      "content": {
        "media": {
          "start_offset": "2.12345s",
          "optional_media_controls": [
            "PAUSED",
            "STOPPED"
          ],
          "media_objects": [
            {
              "name": "Media name",
              "description": "Media description",
              "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
              "image": {
                "large": {
                  "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                  "alt": "Jazz in Paris album art"
                }
              }
            }
          ],
          "media_type": "AUDIO"
        }
      }
    }
  ]
}

Node.js

// Media response
app.handle('media', (conv) => {
  conv.add('This is a media response');
  conv.add(new Media({
    mediaObjects: [
      {
        name: 'Media name',
        description: 'Media description',
        url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
        image: {
          large: JAZZ_IN_PARIS_IMAGE,
        }
      }
    ],
    mediaType: 'AUDIO',
    optionalMediaControls: ['PAUSED', 'STOPPED'],
    startOffset: '2.12345s'
  }));
});

JSON

{
  "session": {
    "id": "session_id",
    "params": {},
    "languageCode": ""
  },
  "prompt": {
    "override": false,
    "content": {
      "media": {
        "mediaObjects": [
        {
          "name": "Media name",
          "description": "Media description",
          "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
          "image": {
            "large": {
              "alt": "Jazz in Paris album art",
              "height": 0,
              "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
              "width": 0
            }
          }
        }
        ],
        "mediaType": "AUDIO",
        "optionalMediaControls": [
          "PAUSED",
          "STOPPED"
        ]
      }
    },
    "firstSimple": {
      "speech": "This is a media response",
      "text": "This is a media response"
    }
  }
}

Réception de l'état du contenu multimédia

Pendant ou après la lecture d'un contenu multimédia par un utilisateur, l'Assistant Google peut générer des contenus multimédias pour informer votre action de la progression de la lecture. Gérer ces états dans le code de votre webhook pour rediriger les utilisateurs de manière appropriée lorsqu'ils mettent en pause, ou terminer la lecture du contenu multimédia.

L'Assistant Google renvoie un événement d'état à partir de la liste suivante en fonction du contenu multimédia Progression de la lecture et requêtes des utilisateurs:

  • FINISHED:l'utilisateur a terminé la lecture du contenu multimédia (ou passe au contenu multimédia suivant). et non à une sortie de conversation. Cet état correspond également au Intent système MEDIA_STATUS_FINISHED.
  • PAUSED:l'utilisateur a mis en pause la lecture du contenu multimédia. Recevoir cet événement d'état avec la propriété optional_media_controls. Cet état correspond également au Intent système MEDIA_STATUS_PAUSED.
  • STOPPED:l'utilisateur a arrêté ou interrompu la lecture du contenu multimédia. Activer la réception de ces avec la propriété optional_media_controls. Cet état correspond à l'intent système MEDIA_STATUS_STOPPED.
  • FAILED:échec de la lecture de contenus multimédias. Cet état correspond également au Intent système MEDIA_STATUS_FAILED.

Pendant la lecture d'un contenu multimédia, un utilisateur peut fournir une requête pouvant être interprétée comme à la fois des événements de mise en pause et d'arrêt d'un contenu multimédia (comme "stop", "cancel" ou "exit"). Dans ce situation, l'Assistant fournit l'intent système actions.intent.CANCEL à votre Action, génère un événement d'état multimédia avec le message "STOPPED" valeur d'état quitte complètement votre action.

Lorsque l'Assistant génère un événement d'état multimédia avec PAUSED ou STOPPED "status", envoyez une réponse multimédia qui ne contient qu'un d'accusé de réception (de type MEDIA_STATUS_ACK).

Progression de la lecture des contenus multimédias

La progression actuelle de la lecture des contenus multimédias est disponible dans les Champ context.media.progress pour les requêtes webhook. Toi vous pouvez utiliser la progression du contenu multimédia comme décalage temporel pour reprendre la lecture à l'endroit où la lecture du contenu multimédia s'est terminée. Pour appliquer le décalage temporel de début à un contenu multimédia utilisez la propriété start_offset.

Exemple de code

Node.js

// Media status
app.handle('media_status', (conv) => {
  const mediaStatus = conv.intent.params.MEDIA_STATUS.resolved;
  switch(mediaStatus) {
    case 'FINISHED':
      conv.add('Media has finished playing.');
      break;
    case 'FAILED':
      conv.add('Media has failed.');
      break;
    case 'PAUSED' || 'STOPPED':
      if (conv.request.context) {
        // Persist the media progress value
        const progress = conv.request.context.media.progress;
      }
      // Acknowledge pause/stop
      conv.add(new Media({
        mediaType: 'MEDIA_STATUS_ACK'
        }));
      break;
    default:
      conv.add('Unknown media status received.');
  }
});

Afficher une playlist

Vous pouvez ajouter plusieurs fichiers audio à votre réponse pour créer une playlist. À la fin de la première piste, la suivante démarre automatiquement. jusqu'à ce que chaque piste ait été lue. Les utilisateurs peuvent également appuyez sur le bouton Suivant à l'écran, ou dites Suivant ou un autre terme similaire pour passer à l' titre suivant.

Le bouton Suivant est désactivé pour le dernier titre de la playlist. Toutefois, Si vous activez le mode boucle, la playlist reprend depuis le première piste. Pour en savoir plus sur le mode boucle, consultez Implémentez le mode boucle.

Pour créer une playlist, ajoutez plusieurs MediaObject dans le champ media_objects. tableau. L'extrait de code suivant montre une invite qui renvoie une playlist de trois pistes:

{
  "candidates": [
    {
      "content": {
        "media": {
          "media_objects": [
            {
              "name": "1. Jazz in Paris",
              "description": "Song 1 of 3",
              "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
              "image": {
                "large": {
                  "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                  "alt": "Album cover of an ocean view",
                  "height": 1600,
                  "width": 1056
                }
              }
            },
            {
              "name": "2. Jazz in Paris",
              "description": "Song 2 of 3",
              "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
              "image": {
                "large": {
                  "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                  "alt": "Album cover of an ocean view",
                  "height": 1600,
                  "width": 1056
                }
              }
            },
            {
              "name": "3. Jazz in Paris",
              "description": "Song 3 of 3",
              "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
              "image": {
                "large": {
                  "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                  "alt": "Album cover of an ocean view",
                  "height": 1600,
                  "width": 1056
                }
              }
            }
          ],
        }
      }
    }
  ]
}

Implémenter le mode de lecture en boucle

Le mode boucle vous permet de fournir une réponse audio qui se répète. Vous pouvez utiliser ce mode pour répéter un seul titre ou lire une playlist en boucle. Si l'utilisateur dit Suivant ou quelque chose de similaire pour un seul titre en boucle, le titre reprend. For (boucle) playlists, un utilisateur qui dit Suivant pour lancer le titre suivant de la playlist.

Pour implémenter le mode en boucle, ajoutez repeat_mode. à votre requête et définissez sa valeur sur ALL. Cet ajout permet à vos contenus de réponse en boucle au début du premier objet multimédia à la fin de la le dernier objet multimédia est atteint.

L'extrait de code suivant montre une invite qui renvoie une piste en boucle:

{
  "candidates": [
    {
      "content": {
        "media": {
          "media_objects": [
            {
              "name": "Jazz in Paris",
              "description": "Single song (repeated)",
              "url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3",
              "image": {
                "large": {
                  "url": "https://storage.googleapis.com/automotive-media/album_art.jpg",
                  "alt": "Album cover of an ocean view",
                  "height": 1600,
                  "width": 1056
                }
              }
            }
          ],
          "repeat_mode": "ALL"
        }
      }
    }
  ]
}