猪木の名言で元気をくれるbotを作ったら、想定外の応答で笑いが止まらなくなったから、ぜひ試して欲しい。

# 元気が出ない朝は、猪木さんの出番です。
例えば、月曜日の朝だとか、どうしても『元気が出ない朝』とかってあるじゃないですか。
そんなとき、皆さんはどうされていますか？？

そんな朝は、やっぱり、猪木さんですよね？？


ということで、今回の完成形は以下の通りです。
特に、最後の『ダー！』が、想定の斜め上を行くので、ぜひ皆さん一度ご賞味ください。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">クローバーの、最後の「ダー！」がジワるので、最後まで見てください。<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a><a href="https://twitter.com/hashtag/%E5%85%83%E6%B0%97%E3%81%8C%E3%81%82%E3%82%8C%E3%81%B0%E3%81%AA%E3%82%93%E3%81%A7%E3%82%82%E3%81%A7%E3%81%8D%E3%82%8B?src=hash&amp;ref_src=twsrc%5Etfw">#元気があればなんでもできる</a> <a href="https://t.co/ryRnjqsweJ">pic.twitter.com/ryRnjqsweJ</a></p>&mdash; 北城雅照@足立慶友整形外科 (@kutuyanomusuko) <a href="https://twitter.com/kutuyanomusuko/status/1334884281202606080?ref_src=twsrc%5Etfw">December 4, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

ちなみにこのボットは、猪木さんの名言をランダムに返してくれるように設定しました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ランダムに返信するようにも設定完了。<br>「元気が出るbot:猪木名言編」<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/%E5%85%83%E6%B0%97%E3%81%A7%E3%81%99%E3%81%8B?src=hash&amp;ref_src=twsrc%5Etfw">#元気ですか</a> <a href="https://t.co/ZNQQ4Bk05u">pic.twitter.com/ZNQQ4Bk05u</a></p>&mdash; 北城雅照@足立慶友整形外科 (@kutuyanomusuko) <a href="https://twitter.com/kutuyanomusuko/status/1334892341342007303?ref_src=twsrc%5Etfw">December 4, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

最後の名言（迷言）『ダー！』は共通です。
では行きましょう。

# 開発環境の下準備
１）　VScodeのインストール
VScodeのインストールついては、googleなどで他の記事を検索してください。
２）　node.jsとnpmのインストール
Macでの環境作りは、こちらの別の記事にまとめてあります。
参考にしてください。
[Macにnode.js,npmのインストール方法](https://qiita.com/Teru_3/items/cc8a4968eff131d00784)

#　今回の開発の手順
開発の手順に関しては、下記の記事を参考に行いました。
是非参考に進んでください。
[Clova CEKでのスキル開発の始め方〜Node.jsで開発スタート編〜](https://dotstud.io/blog/clova-cek-nodejs-tutorial/)



#  ハマったところ:スキルがうまく発動しない
 スキルを発動する際に、「ねぇクローバー、＜スキル名＞を起動して。」の声かけで、登録したスキルが発動するのですが、この認識能力が低いように感じます。うまくスキルが発動されない場合は、下記の点を確認してください。

## １）　スキル名を変更する
スキル名が特定の用語を示す名詞の場合、うまくスキルとして認識されません。
その場合は、「〜bot」と名付けるとうまくいくことがあります。
今回の場合、開発当初はスキル名を「元気があればなんでもできる」にしていました。
そこで、「ねぇクローバー、＜元気があればなんでもできる＞を起動して。」と話しかけたところ…。
「そうですね！」
とクローバーに明るく返答されました。
クローバー、確かに返答としては正解だけど、機能としては失敗だよ…。

## ２）　スキル名と呼び出し方の設定を確認する
CLOVA Develper Center→スキル設定→基本情報とすすみ、
基本情報の中にある、呼び出し名（メインと）
![スクリーンショット 2020-12-08 15.24.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581193/4952a61b-da62-0980-c8ab-a9d2248602be.png)

次に、CLOVA Develper Center→スキル設定→ユーザー設定とすすみ、
代表サンプル発話の1つ目の部分のスキル名が必ず一致しているかを確認してください。
![スクリーンショット 2020-12-08 15.24.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581193/00a8a68f-e956-dbd5-3d92-52e6a499fb6f.png)

この部分が異なっていると、スキルが発動されないので、注意が必要です。

# inoki.jsのコード

```javascript:inoki.js
const clova = require('@line/clova-cek-sdk-nodejs');
const express = require('express');

const clovaSkillHandler = clova.Client
    .configureSkill()

    //起動時に喋る
    .onLaunchRequest(responseHelper => {
        responseHelper.setSimpleSpeech({
            lang: 'ja',
            type: 'PlainText',
            value: '猪木さん、元気ですか？と聞いてください。',
        });
    })

    //ユーザーからの発話が来たら反応する箇所
    .onIntentRequest(async responseHelper => {
        const intent = responseHelper.getIntentName();
        const sessionId = responseHelper.getSessionId();
    
        console.log('Intent:' + intent);
        if(intent === 'InokiIntent'){
            const slots = responseHelper.getSlots();
            console.log(slots);
            //デフォルトのスピーチ内容を記載 - 該当スロットがない場合をデフォルト設定
            let speech = {
                lang: 'ja',
                type: 'PlainText',
                value: `猪木さん、元気ですか？と聞いてください。`
            }
            if(slots.inokiwords === '元気ですか'){
                switch(~~(5 * Math.random())) {
                    case 0: speech.value = `元気があれば、何でもできる。いくぞー！1、2、3、だー！`; break;
                    case 1: speech.value = `夢を持て！でかければでかいほどいい。とにかく、夢を持て。いくぞー！1、2、3、だー！`; break;
                    case 2: speech.value = `人は歩みを止めたときに、そして挑戦をあきらめたときに、年老いていくのだと思います。いくぞー！1、2、3、だー！`; break;
                    case 3: speech.value = `踏み出せば、その一足が道となる。いくぞー！1、2、3、だー！`; break;
                    case 4: speech.value = `迷わず行けよ。行けば分かるさ。いくぞー！1、2、3、だー！`; break;
                }
            }
            responseHelper.setSimpleSpeech(speech);
            responseHelper.setSimpleSpeech(speech, true);
        }
    })

    //終了時
    .onSessionEndedRequest(responseHelper => {
        const sessionId = responseHelper.getSessionId();
    })
    .handle();


const app = new express();
const port = process.env.PORT || 3000;

//リクエストの検証を行う場合。環境変数APPLICATION_ID(値はClova Developer Center上で入力したExtension ID)が必須
const clovaMiddleware = clova.Middleware({applicationId: 'Extention ID'});
app.post('/clova', clovaMiddleware, clovaSkillHandler);

app.listen(port, () => console.log(`Server running on ${port}`));
```

# 応用として
僕は猪木さんの名言で元気になれますが、皆さんの中には、猪木さんの言葉では元気になれない方も変わった方もいらっしゃると思います。
そこで、ご自身の好きな曲をMP3データに変換し、ランダムに再生することも可能です。

返答を記載している部分である、

```javascript:inoki.js
speech.value = `返答したい言葉`
```

を下記のように書き換えれば、曲の再生が可能です。

```javascript:inoki.js
clova.SpeechBuilder.createSpeechUrl('MP3のURL')
```

是非ためして見てください。

# その他の記事
[近すぎると小池都知事が『密です。』と連呼するデバイスを作ったら腹筋が崩壊したので、皆さんにも試して欲しい。](https://qiita.com/Teru_3/items/4570bd76d8feeaa37db4)

[誰が使うかわからないけど、膝のレントゲン写真を送ったら、その膝がどの程度痛んでいるのか教えてくれるラインbotを作ってみた。](https://qiita.com/Teru_3/items/80cecd138860fbd0c924)