2
votes

Comment puis-je utiliser SSML dans Dialogflow Fullfilment (langue néerlandaise)

existe-t-il un moyen simple d'utiliser SSML dans la section Fullfilment en utilisant les fonctions Actions-on-google. J'ai essayé toutes sortes de codage, mais aucun bon résultat. J'utilise le néerlandais comme langue par défaut.

Dans l'exemple ci-dessous, l'Assistant Google épelle chaque '

"status": 200,
  "headers": {
    "content-type": "application/json;charset=utf-8"
  },
  "body": {
    "payload": {
      "google": {
        "expectUserResponse": true,
        "richResponse": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "<speak>Paul, je geluksnummer is 5<audio src=\"https://www.example.com/MY_MP3_FILE.mp3\"><desc>Geluid wordt afgespeeld</desc></audio></speak>"
              }
            }
          ],
          "suggestions": [
            {
              "title": "Paars"
            },
            {
              "title": "Geel"
            },
            {
              "title": "Oranje"
            }
          ]
        }
      }
    }
  }
}

Veuillez trouver ci-dessous les paramètres d'environnement:

Paramètres d'initiation Index.js:

{
  "name": "codelab-level-three",
  "description": "Actions on Google Codelab Level 3",
  "author": "Google Inc",
  "private": true,
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "dependencies": {
    "actions-on-google": "^2.0.0",
    "firebase-admin": "~5.8.1",
    "firebase-functions": "^0.8.1",
    "i18n": "^0.8.3"
  },
  "devDependencies": {
    "eslint": "^4.19.0",
    "eslint-config-google": "^0.9.1"
  }
}

package.json:

'use strict';

// Import the Dialogflow module and response creation dependencies
// from the Actions on Google client library.
const {
    dialogflow,
    BasicCard,
    Permission,
    Suggestions,
    Carousel,
    MediaObject, 
    SimpleResponse, 
    Table, 
    Button  
//  Image,
} = require('actions-on-google');

// Import the firebase-functions package for deployment.
const functions = require('firebase-functions');

// Instantiate the Dialogflow client.
const app = dialogflow({debug: true});

La charge utile produite ressemble à ceci:

// Handle the Dialogflow intent named 'favorite color'.
// The intent collects a parameter named 'color'.
app.intent('favoriete kleur', (conv, {color}) => {
  const luckyNumber = color.length;
  const audioSound = 'https://www.example.com/MY_MP3_FILE.mp3'; // AoG currently only supports MP3!
  if (conv.user.storage.userName) {
    conv.ask(`<speak>${conv.user.storage.userName}, je geluksnummer is ${luckyNumber}<audio src="${audioSound}"><desc>Geluid wordt afgespeeld</desc></audio></speak>`); // Audio should have description
    conv.ask(new Suggestions('Paars', 'Geel', 'Oranje'));
  } else {
    conv.ask(`<speak>Je geluksnummer is ${luckyNumber}<audio src="${audioSound}"><desc>Geluid wordt afgespeeld</desc></audio></speak>`);
    conv.ask(new Suggestions('Paars', 'Geel', 'Oranje'));
  }
});


1 commentaires

Grâce à l'aide des réactions ci-dessous, j'ai changé le code, mais le problème est toujours le même. Je n'entends pas le son et même la phrase autour du son n'est visible que dans l'environnement de test (pas de son).


3 Réponses :


2
votes

Le problème le plus probable est que vous n'incluez pas de balise de fermeture . Vous devriez donc probablement l'écrire comme quelque chose comme

    conv.ask(`<speak>Je geluksnummer is ${luckyNumber}.` +
      `<audio src="${audioSound}"></audio></speak>`);


1 commentaires

Merci de votre aide. En conséquence, le message d'erreur a disparu, mais le problème est toujours le même.



1
votes

pour compléter ce que Prisoner a déjà dit, il y a d'autres problèmes.

app.intent('favoriete kleur', (conv, {color}) => {
  const luckyNumber = color.length;
  const audioSound = 'https://actions.google.com/sounds/v1/cartoon/clang_and_wobble.mp3'; // AoG currently only supports MP3!
  if (conv.user.storage.userName) {
    conv.ask(`<speak>${conv.user.storage.userName}, je geluksnummer is <audio src="${audioSound}"><desc>${luckyNumber}</desc></audio></speak>`); // Audio should have description
    conv.ask(new Suggestions('Paars', 'Geel', 'Oranje'));
  } else {
    conv.ask(`<speak>Je geluksnummer is <audio src="${audioSound}"><desc>${luckyNumber}</desc></audio></speak>`);
    conv.ask(new Suggestions('Paars', 'Geel', 'Oranje'));
  }
});
  • AoG ne prend actuellement en charge que MP3 comme format audio. Voir https://developers.google.com/actions/assistant/responses#media_responses a> Désolé, je me suis trompé. Cela ne vaut que pour les réponses aux médias, PAS pour l'audio intégré dans SSML.
  • J'ai supprimé les concaténations dans le code ci-dessus. C'est contre-productif et rend les choses plus difficiles à lire que nécessaire. (Opinion)
  • La sortie audio - lors de la sortie non seulement d'un effet sonore, mais également de texte - doit contenir une description qui sera également imprimée à l'écran. L'exemple dans le code fourni devrait être correct.
  • Mais oui, la cause de votre problème initial est que vous ne fermez pas les balises audio. Les actions sur Google sont assez impitoyables concernant les balises non fermées.

J'espère que cela vous a aidé.


3 commentaires

Merci Thomas et @Prisoner. La fermeture des balises a fait l'affaire en partie. J'ai également suivi le conseil d'utiliser un fichier MP3 pour le son. Je n'ai plus d'erreurs mais je n'entends pas l'audio dans Actions-on-Goolgle


Existe-t-il une sortie dans les journaux Firebase / Lambda? Des informations de débogage dans le simulateur?


Salut Thomas, il y a en effet un journal Firebase disponible. Mais c'est gros, quel genre d'informations recherchez-vous. Toutes les directions aideraient



1
votes

La réponse à mon problème était simple: il suffit de lire le manuel. :-) Bien que .OGG et .MP3 soient pris en charge, le site Web devrait fournir HTTPS. Les sites Web qui ne sont pas sécurisés (comme HTTP) ne sont pas pris en charge. Vous trouverez ci-dessous l'exemple de fonction de test:

app.intent('favoriete muziek', conv => {
    const Optie = conv.parameters.optie;
    //Taalspecifieke meldingen
    const SoundLib =
    {
        '1': {
            description : 'Simple sound using .ogg',
            audiosound  : 'https://actions.google.com/sounds/v1/alarms/alarm_clock.ogg',
            audiotext   : 'You should hear an audio alarm signal',        
        },
        '2': {
            description : 'Music MP3 via HTTP',
            audiosound  : 'http://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
            audiotext   : 'You should hear a Jazz record called "Jazz in Paris" ',        
        },
        '3': {
            description : 'Longer MP3 file via HTTP',
            audiosound  : 'http://www.navyband.navy.mil/anthems/anthems/netherlands.mp3',
            audiotext   : 'You should hear now the Dutch National Anthem',        
        },
        '4': {
            description : 'short MP3 audio via HTTPS',
            audiosound  : 'https://ia802508.us.archive.org/5/items/testmp3testfile/mpthreetest.mp3',
            audiotext   : 'You should hear a short spoken intro text',        
        },
    };
    const Sound = SoundLib[Optie];
    var spraakzin = "<speak>This text is using <say-as interpret-as='verbatim'>SSML</say-as> followed by an audio file in a SimpleResponse box: <audio src='" + Sound.audiosound + "'>The audio file could not be processed</audio></speak>";
    if (!conv.surface.capabilities.has("actions.capability.MEDIA_RESPONSE_AUDIO")) {
        conv.ask("Media response via audio is not supported on this device.");
        return;
    }
    conv.ask(new SimpleResponse({
        speech: spraakzin,
        text: Sound.audiotext,
    }));
});

Pour plus d'informations, cliquez ici: Exemples de SSML - regardez les prérequis de AUDIO


0 commentaires