Как я могу использовать SSML в диалоге Fullfilment (голландский язык) - PullRequest
0 голосов
/ 16 января 2019

есть простой способ использовать SSML в разделе «Полная реализация» с помощью функций Actions-on-google. Я перепробовал все виды кодирования, но безрезультатно. Я использую нидерландский язык по умолчанию.

В приведенном ниже примере помощник Google пишет каждое '<' и т. Д.: </p>

// 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'));
  }
});

Ниже приведены параметры среды:

Настройки инициализации Index.js:

'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});

package.json:

{
  "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"
  }
}

Полученная полезная нагрузка выглядит следующим образом:

"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"
            }
          ]
        }
      }
    }
  }
}

Ответы [ 3 ]

0 голосов
/ 16 января 2019

В дополнение к тому, что уже сказал Prisoner, есть и другие проблемы.

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 поддерживает только MP3 как аудиоформат.См. https://developers.google.com/actions/assistant/responses#media_responses Извините, я ошибся.Это касается только Media Response, а НЕ встроенного звука в SSML.
  • Я удалил конкатенации в приведенном выше коде.Это контрпродуктивно и делает вещи более трудными для чтения, чем необходимо.(Мнение)
  • Аудиовыход - при выводе не только звукового эффекта, но и текста - должен содержать описание, которое также будет напечатано на экране.Пример в поставляемом коде должен быть в порядке.
  • Но да, причина вашей первоначальной проблемы в том, что вы не закрываете аудио теги.Действия в Google довольно неумолимы в отношении незамкнутых тегов.

Надеюсь, это помогло.

0 голосов
/ 23 января 2019

Ответ на мою проблему был прост: просто прочитайте руководство. :-) Хотя поддерживаются как .OGG, так и .MP3, сайт должен обеспечивать HTTPS. Веб-сайты, которые не защищены (например, HTTP), не поддерживаются. Ниже вы можете найти пример функции, как вы можете проверить:

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,
    }));
});

Более подробную информацию можно найти здесь: Примеры SSML - посмотрите на предпосылки AUDIO

0 голосов
/ 16 января 2019

Наиболее вероятная проблема заключается в том, что вы не включаете закрывающий тег </speak>. Так что вы, вероятно, должны написать это как-то вроде

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