LINE ClovaでSDKなしでオーディオファイルを再生する
この記事は ADVENTARの「するめごはんのVUI・スマートスピーカー Advent Calendar 2018」 の16日目の記事です。
今回はClovaの話です。
LINE Clovaでスキルを作成する時、SDKを用いることは多いと思います。
けれども、SDKがなくとも自分でJSONを作成してしまえばスキルを作成できます。
このアドベントカレンダーの10日目の記事
にも記載している、この本からスタートするとClovaのスキルを動かすことが非常に素早くできます。
Clovaのテキストスピーチは本に書いてある
上記の本には既にAPI GatewayとLambdaを使って挨拶をするスキルの作り方、および、ソースコードが記載されておりダウンロード可能です。
ほぼ同様の記述でオーディオファイルを再生する
音声ファイルとしてmp3を作っておいて、例えばAWSならそのままS3に置いておくとします。
'use strict'; exports.handler = function (event, context, callback) { var response = { statusCode: 200, headers: {}, body: "" }; var speechText = ""; var requestJson = JSON.parse(event.body).request; var endFlg = false; if (requestJson.type === 'LaunchRequest') { // 起動時処理 speechText = 'https://s3-ap-northeast-1.amazonaws.com/起動時に再生したいオーディオファイル.mp3'; } else if (requestJson.type === 'SessionEndedRequest') { // セッション切れ speechText = 'https://s3-ap-northeast-1.amazonaws.com/セッションが切れたら再生したいオーディオファイル.mp3'; endFlg = true; } else if (requestJson.type === 'IntentRequest') { if (requestJson.intent.name === 'EndIntent' || requestJson.intent.name === 'Clova.NoIntent') { // 終了処理 speechText = 'https://s3-ap-northeast-1.amazonaws.com/終了時に再生したいオーディオファイル.mp3'; endFlg = true; } else if (requestJson.intent.name === 'Clova.GuideIntent') { // ヘルプ用 speechText = 'https://s3-ap-northeast-1.amazonaws.com/ヘルプの時に再生したいオーディオファイル.mp3'; } else if (requestJson.intent.name === 'HelloIntent') { speechText = 'https://s3-ap-northeast-1.amazonaws.com/ハローと言われたの時に再生したいオーディオファイル.mp3'; } else if (requestJson.intent.name === 'MorningIntent') { (略) } var responseJson = JSON.stringify({ "version": "1.0", "response": { "outputSpeech": { "type": "SimpleSpeech", "values": { "type":"URL", //ここを「URL」にする "lang":"ja", //ここはjaである必要すら本当はない "value": speechText } }, "card": {}, "directives": [], "shouldEndSession": endFlg } }); response.body = responseJson; callback(null, response); };
要するに、JSONを組み立てられればそれでOKなわけです。
実際に公式のSDKのコードを読めばすぐに気づきます。
ド直球に言うと以下で気づくことができます。
まとめ
Clovaに限らず、要するにJSONが組み立てられればそれで良くて、SDKはJSONの生成をわかりやすく補助するためのものでしかありません。
それは他のプラットフォームでも、もっというとどんなアプリやサービスでも、対応するプロトコルに合えばそれでいいのです。
後から気づいたおまけ
本の著者がそのまま書いてるじゃん・・w