API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [前編]
はじめに
先日、以前より興味のあったLINE BOT(Messaging API)を初めて作ってみました。
思っていたより簡単だったので、今後も気軽に作ってけたらなと思ってます。
せっかく作れるようになったので、このフレッシュな気持ちがなくなる前に記事を書いておきます。
前編と後編と、2つに分けて書こうと思います。
前編では主に環境構築。何か話しかけると「こんにちは!」とだけ返すBOTを作成します。
後編ではline-bot-sdkというライブラリを利用して、メッセージ以外のやり取りをする実装についても書こうと思ってます。
LINE Developpersでプロバイダーとチャンネルの作成
まずはLINE Developpersで作業します。
LINE Developpersにアカウントが必要ですが、登録手順については割愛。
LINE Developpers の コンソールにアクセスし、プロバイダーを作成します。
プロバイダー名を入力して作成します。
ここではプロバイダー名を「サンプルプロバイダー」としました。
チャンネル設定で「Messaging API」を選択します。
チャンネルアイコン、チャンネル名、チャネル説明、大業種、小業種、メールアドレス、プライバシーポリシーURL(任意)、サービス利用規約URL(任意)、などを設定・入力し、作成します。
ここではチャンネル名を「サンプルチャンネル」としました。
作成されたチャンネルの以下の情報は後ほど利用します。
・「チャンネル基本設定」にある チャネルシークレット
・「Messaging API設定」にある チャネルアクセストークン(長期) (※発行してください)
「Messaging API設定」にある Webhook設定 > Webhook URL へは、これから作成するWebAPIのURLを設定します。
LINE Developpersでの作業はひとまずここまで。
AWSでAPI GatewayとLambda(Python)の作成
続いてAWSで作業します。
AWSにアカウントが必要ですが、登録手順については割愛。
Lambda(Python)の作成
AWSマネジメントコンソールのLambdaのページへアクセスし、関数を作成します。
関数名は「sample_function_from_line」、ランタイムは「Python 3.6」を選択しました。
関数コードのlambda_function.py
はひとまず以下のコードとしておいてください。
「こんにちは!」と応答するだけのプログラムです。
import json
import os
import urllib.request
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
LINE_CHANNEL_ACCESS_TOKEN = os.environ['LINE_CHANNEL_ACCESS_TOKEN']
REQUEST_URL = 'https://api.line.me/v2/bot/message/reply'
REQUEST_METHOD = 'POST'
REQUEST_HEADERS = {
'Authorization': 'Bearer ' + LINE_CHANNEL_ACCESS_TOKEN,
'Content-Type': 'application/json'
}
REQUEST_MESSAGE = [
{
'type': 'text',
'text': 'こんにちは!'
}
]
def lambda_handler(event, context):
logger.info(event)
params = {
'replyToken': json.loads(event['body'])['events'][0]['replyToken'],
'messages': REQUEST_MESSAGE
}
request = urllib.request.Request(
REQUEST_URL,
json.dumps(params).encode('utf-8'),
method=REQUEST_METHOD,
headers=REQUEST_HEADERS
)
response = urllib.request.urlopen(request, timeout=10)
return 0
環境変数に、LINE Developpersで作成したチャンネルの「Messaging API設定」で発行した チャネルアクセストークン(長期) をLINE_CHANNEL_ACCESS_TOKEN
というキーの値として登録しておきます。
最後に、コードが保存されていることを確認のうえ、デプロイします。
API Gatewayの作成
AWSマネジメントコンソールのAPI Gatewayのページへアクセスし、APIを作成します。
REST APIを構築します。
API名を入力、エンドポイントタイプはリージョンを選択し、作成します。
ここではAPI名は「sample_api_from_line」としました。
アクションから「リソースの作成」を選択し、
新しい子リソースの作成をします。
ここではリソース名を「sample-resource」としました。「API Gateway CORSを有効にする」のチェックはONとします。
POSTメソッドのセットアップでは、先ほど作成したLambda関数(sample_function_from_line)を選択します。
「Lambdaプロキシ統合の使用」もONにしておきましょう。
「Lambda関数に情報を追加する
API Gatewayに、Lambda関数を呼び出す権限を与えようとしています:」
という確認メッセージが表示されますので、OKボタン押下で許可を与えます。
APIのデプロイ画面で新しいステージを作成し、デプロイします。
ステージ名は、ここでは「work」としておきました。
デプロイされたworkステージのPOSTメソッドを選択し、「URLの呼び出し」に表示されているURLを、
「Messaging API設定」にある Webhook設定 > Webhook URL へ設定します。
LINEチャンネルのMessaging API設定
LINE Developpersのコンソールに戻りまして、作成しておいたサンプルチャンネルの「Messaging API設定」にある Webhook設定 > Webhook URL へ、デプロイしたPOSTメソッドのURLを設定します。
Webhookの利用ラジオボタンもONにします。
動作確認
これで一通りの設定は完了です。動作確認してみましょう。
「Messaging API設定」にあるQRコードから、作成したLINE BOTを友達追加することができます。
友達として追加して、何か話しかけてみましょう。
「メッセージありがとうございます!申し訳ありませんが、このアカウントでは個別のお問い合わせを受け付けておりません。次の配信までお待ちください。」という自動応答の後に続き、実装した「こんにちは!」を返してきてくれていますね。
自動応答の設定
自動応答を無くすための設定は、チャンネル基本設定の基本設定にある「LINE Official Account Manager」へのリンクから飛んだ先で行う事ができます。
応答設定の応答メッセージを「オフ」にします。
なおここでは友達追加して最初に表示される「あいさつメッセージ」も非表示にしたり、内容を更新したりすることができます。
それでは改めて動作確認してみましょう。
何か話しかけると「こんにちは!」とだけ返してくれるBOTが完成しました🎉
あとがき
後編へつづく!