Amazon Lexを使ったLINE Botをつくる

2018.04.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、中村です。
前回に引き続きAmazon Lex(以下、Lex)のお話です。

今回はLINEと連携させます。細かい設定は、こちらを参考にしてください。

注意点

API Gatewayの設定

LINEの署名チェックを行うために、リクエストヘッダー情報が必要です。
ヘッダー情報をAmazon Lambdaに渡すために、API Gatewayで下記の設定をしましょう。

LINEの設定

LINE開発者コンソールのチャネル設定から"自動応答メッセージ"を"利用しない"に設定する。
設定しない場合メッセージを送信すると、下記のメッセージが表示されます。

Lexとの連携

前回Lexで作成したBotを使用します。
LexのコンソールからBot NameとBot Aliasをメモしてください。

Bot Name

Bot Alias

AWS SDKで連携できるので、簡単に動かすことができます。

const line = require('@line/bot-sdk');
const aws = require('aws-sdk');
var lex = new aws.LexRuntime({region: 'us-east-1'});
var client = new line.Client({channelAccessToken: /* LINEチャネルのACCESSTOKENを入れてください */});

var params = {
    botAlias: 'prd',
    botName: 'Reservation',
    userId: event.events[0].source.userId,
    inputText: event.events[0].message.text
};
lex.postText(params, function(err,data){
    if (!err) {
        var message = {
            'type': 'text',
            'text': data.message
        };
        client.replyMessage(event.events[0].replyToken, message).then((response) => console.log(response)).catch((err) => console.log(err)); //LINEの送信
    } else {
        console.log(err);
    }
});

実際に使ってみよう

おわりに

いかがでしたでしょうか。
テキストのやり取りについては、簡単に連携することができました。
音声入力についても、今後連携していきます。