LoginSignup
4
1

More than 5 years have passed since last update.

Clova(CEK)でSSMLを使う

Posted at

前提

ClovaはSSMLをサポートしていない。(2018/11現在)

やったこと

他のスマートスピーカーで作ったスキルを移植したい時に不便なので、SSMLをパースしてClovaで使えるようにした。 (特にnpmとかにはしてない)
:point_right: https://github.com/Arahabica/ClovaSSML

ただし、対応したのはbreak,audio,pタグだけで、他のタグは無視して、タグの中身だけを使うようにしました。

解説

ということで、SSMLをむりやりClovaのOutputSpeechっていうオブジェクトに変換する奴を作りました。
OutputSpeechここresponse.outputSpeechなどに入れるオブジェクトです。
使い方がちょっとだけややこしいので、解説します。
なぜ、ややこしいのかというと、breakタグを実現するのに、無音のMP3を使っているからです。

1. 無音MP3をダウンロード

ここから無音MP3をダウンロード。

2. 無音MP3をどこかにアップロード

落とした無音MP3をパブリックアクセスできるようにどこかのサーバにおいてください。

3. 無音MP3のURLの情報をセット

const silentAudios = [];
for(let time=100; time<=5000; time+= 100) {
  silentAudios.push({time, url: `YOUR_AUDIO_BASE_URL/silence${time}.mp3`});
}

4. SSMLをOutputSpeechに変換

let ssml = "はじめまして<break time='1.2s' /> 私のスキルにようこそ";
ssml += "<audio src='https://sample.com/nice_intro.mp3' /> 何とかかんとか";
let clovaSSML = new ClovaSSML({silentAudios});
let outputSpeech = clovaSSML.convert(ssml);

結果、outputSpeechは次のようになります。

{
  "type": "SpeechList",
  "values": [
    {
      "type": "PlainText",
      "lang": "ja",
      "value": "はじめまして"
    },
    {
      "type": "URL",
      "lang": "",
      "value": "https://sample.com/silence1000.mp3"
    },
    {
      "type": "PlainText",
      "lang": "ja",
      "value": "私のスキルにようこそ"
    },
    {
      "type": "URL",
      "lang": "",
      "value": "https://sample.com/nice_intro.mp3"
    },
    {
      "type": "PlainText",
      "lang": "ja",
      "value": "何とかかんとか"
    }
  ]
}

全コード

const ClovaSSML = require('./ClovaSSML'); // ClovaSSML.jsのあるディレクトリで
const silentAudios = [];
for(let time=100; time<=5000; time+= 100) {
  silentAudios.push({time, url: `YOUR_AUDIO_BASE_URL/silence${time}.mp3`});
}
let ssml = "はじめまして<break time='1.2s' /> 私のスキルにようこそ";
ssml += "<audio src='https://sample.com/nice_intro.mp3' /> 何とかかんとか";
let clovaSSML = new ClovaSSML({silentAudios});
let outputSpeech = clovaSSML.convert(ssml);

雑感

書いてて思ったけど、やっぱ初期化がややこしいですね。
無音MP3のURLをハードコーディングしちゃった方が良かったかしら。

最後にもう一度
:point_right: https://github.com/Arahabica/ClovaSSML

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1