LoginSignup
3
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-12-16

ごきげんよう

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

今回はClovaの話です。

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

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

このアドベントカレンダーの10日目の記事
https://qiita.com/surumegohan/items/e2488b5eee4c1bd5bfe8

にも記載している、この本からスタートするとClovaのスキルを動かすことが非常に素早くできます。

DSC_1826.JPG

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のコードを読めばすぐに気づきます。
https://github.com/line/clova-cek-sdk-nodejs

ド直球に言うと以下で気づくことができます。
https://github.com/line/clova-cek-sdk-nodejs/blob/master/src/speechBuilder.ts

まとめ

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

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

後から気づいたおまけ

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

3
0
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
3
0