するめごはんのIT日記

主にITネタを書いていくのさ

LINE ClovaでSDKなしでオーディオファイルを再生する

ごきげんよう

この記事は ADVENTARの「するめごはんのVUI・スマートスピーカー Advent Calendar 2018」 の16日目の記事です。

今回はClovaの話です。

LINE Clovaでスキルを作成する時、SDKを用いることは多いと思います。

けれども、SDKがなくとも自分でJSONを作成してしまえばスキルを作成できます。

このアドベントカレンダーの10日目の記事

surumegohan.hatenablog.com

にも記載している、この本からスタートすると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のコードを読めばすぐに気づきます。

github.com

ド直球に言うと以下で気づくことができます。

github.com

まとめ

Clovaに限らず、要するにJSONが組み立てられればそれで良くて、SDKJSONの生成をわかりやすく補助するためのものでしかありません。

それは他のプラットフォームでも、もっというとどんなアプリやサービスでも、対応するプロトコルに合えばそれでいいのです。

後から気づいたおまけ

本の著者がそのまま書いてるじゃん・・w

qiita.com