Dialogflowを使って自然言語処理部分を実装していきます。
https://dialogflow.com/にアクセスしてください。
[Sign up for free]ボタンをクリックします。お持ちのGoogleアカウントでログインしてください。

初めてDialogflowをお使いになる方は利用許可してください。

Terms of Service部分のチェックを入れてから[ACCEPT]ボタンをクリックします。

[CREATE AGENT]ボタンをクリックします。

Parrot と入力し、デフォルト言語を Japanese - ja に選択してから[CREATE]ボタンをクリックします。

左側メニューの Intents の[+]ボタンをクリックします。Intent名は「MainIntent」と入力します。

Training phrasesに any と入力して、[Enter]キーで確定させます。

any の単語をマウスでダブルクリックするとポップアップメニューが表示されます。
その中にある @sys.any を選択します。

警告ダイアログが表示されるので、OKをクリックします。
この警告は非推奨な使い方だけど、問題ないかの確認ダイアログです。

最終的にこのようになればOKです。

ResponsesのText Responseに $any と入力してください。
この $any に入力した文字列が入ってきます。

画面右上の[SAVE]ボタンをクリックします。

右側に Try it now という所にオウム返ししてほしい言葉を入力します。
入力した文字が下に表示されます。

LINEのチャットボットで作ったオウム返しを動かしてみましょう!
下記URLにアクセスしてお持ちのLINEアカウントでログインしてください。
https://developers.line.biz/console/
プロバイダーをまだ設定していない方は作成しておいてください。

[新規チャネル]をクリックします。

その中の Messaging API をクリックします。

各種項目を埋めていきます。
①チャネル名 | チャットハンズオン |
②チャネル説明 | チャットハンズオン |
③大業種 | 個人 |
④小業種 | 個人(その他) |
⑤メールアドレス | ご自身のメールアドレス |

2つのチェックを入れてから[作成]ボタンをクリックします。

[同意する]をクリックします。

Dialogflowの Integrations にある LINE をクリックします。

ポップアップメニューが表示されるので、LINE Developerの各種値を反映していきます。

Channel ID はチャネル基本設定にあります。

Channel Secret はチャネル基本設定の下の方にスクロールすると出てきます。

Channel Access Token は 「Messaging API設定」 の一番下の項目にあります。

[再発行]ボタンを押して、アクセストークンを再発行します。

DialogflowにあるWebhook URLをLINE Developer側に反映させます。

[START]をクリックします。

LINE公式アカウント設定カテゴリの「応答メッセージ」を編集します。

応答メッセージを「オフ」にします。

QRコードを読み取って、LINEボットと友だちになってください。

LINEアプリから[追加]をタップして、チャット画面で好きな言葉を入力します。
これでチャットの返答がオウム返しで返ってきます。

身長と体重を入力してBMIを測定してみましょう!
左側メニューの Intents の[+]ボタンをクリックします。Intent名は「BMIIntent」と入力します。測定を開始するための言葉を Training phrases に登録します。

Action and parameters 部分に項目を埋めていきます。
REQUIRED | チェックを入れる |
PARAMETER NAME | height |
ENTITY | @sys.number |
VALUE | $height |

入力したら、[Define prompts]をクリックします。ポップアップが表示されるので、身長を答えてもらえるような言葉を登録します。
あなたの身長をcmで教えて下さい

続いて体重も同様に入力します。
REQUIRED | チェックを入れる |
PARAMETER NAME | weight |
ENTITY | @sys.number |
VALUE | $weight |
PROMPTS | 続いてあなたの体重をkgで教えて下さい |
このようになればOKです。

Fulfillment部分にあるWebhookを有効化にします。

左側メニューの Fulfillment をクリックします。Inline Editor側を ENABLED にします。index.jsにコードを入力します。
コードを入力後、右下にある[DEPLOY]ボタンをクリックします。左側に日付が表示されればOKです。
'use strict';
const functions = require('firebase-functions');
const {WebhookClient} = require('dialogflow-fulfillment');
process.env.DEBUG = 'dialogflow:debug'; // enables lib debugging statements
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
const agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
function bmiintent(agent) {
const bmiVal = (parseFloat(agent.parameters.weight) / (parseFloat(agent.parameters.height)/100 * parseFloat(agent.parameters.height)/100)).toFixed(1);
let speechText = `あなたのBMIは${bmiVal}です。`;
agent.add(speechText);
}
let intentMap = new Map();
intentMap.set('BMIIntent', bmiintent);
agent.handleRequest(intentMap);
});

LINEチャット画面で「スタート」と入力すると身長と体重を聞かれます。
値を入力すると、BMIの値が返ってきます。

スタートという文字を入力しなくてもリッチメニューで開始できるように対応しよう!
LINE Developer画面の LINE Official Account Manager のリンクをクリックします。

[ホーム]ー[リッチメニュー]にある[作成]ボタンをクリックします。

タイトルと表示期間を設定します。
①タイトル | スタート |
②表示期間 | 2020/01/01 00:00 〜 2029/12/31 00:00 |

[テンプレートを選択]ボタンをクリックします。

テンプレートは左下の物を選択して、[選択]ボタンをクリックします。

アクションの設定をします。
①タイプ | テキスト |
②テキスト | スタート |

[画像を作成]ボタンをクリックします。

メニューからテキストや背景色を設定してそれらしいボタン画像を作成します。
ボタンが出来たら[適用]ボタンをクリックします。

画像を保存する必要が特に無いので、[適用]ボタンをクリックします。

[保存]ボタンをクリックします。

LINEチャット画面を表示すると、リッチメニューが表示されます。
[測定開始]をタップすると自動的に「スタート」と入力されます。
