46
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

API GatewayとLambda(Python)でLINE BOT(Messaging API)開発 [前編]

Last updated at Posted at 2021-01-03

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 の コンソールにアクセスし、プロバイダーを作成します。
image.png
プロバイダー名を入力して作成します。
ここではプロバイダー名を「サンプルプロバイダー」としました。
image.png

チャンネル設定で「Messaging API」を選択します。
image.png

チャンネルアイコン、チャンネル名、チャネル説明、大業種、小業種、メールアドレス、プライバシーポリシーURL(任意)、サービス利用規約URL(任意)、などを設定・入力し、作成します。
ここではチャンネル名を「サンプルチャンネル」としました。
image.png

作成されたチャンネルの以下の情報は後ほど利用します。
・「チャンネル基本設定」にある チャネルシークレット
・「Messaging API設定」にある チャネルアクセストークン(長期) (※発行してください)

「Messaging API設定」にある Webhook設定 > Webhook URL へは、これから作成するWebAPIのURLを設定します。
LINE Developpersでの作業はひとまずここまで。

AWSでAPI GatewayとLambda(Python)の作成

続いてAWSで作業します。
AWSにアカウントが必要ですが、登録手順については割愛。

Lambda(Python)の作成

AWSマネジメントコンソールのLambdaのページへアクセスし、関数を作成します。
image.png
関数名は「sample_function_from_line」、ランタイムは「Python 3.6」を選択しました。
image.png

関数コードのlambda_function.pyはひとまず以下のコードとしておいてください。
「こんにちは!」と応答するだけのプログラムです。

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というキーの値として登録しておきます。
image.png
image.png

最後に、コードが保存されていることを確認のうえ、デプロイします。
image.png

API Gatewayの作成

AWSマネジメントコンソールのAPI Gatewayのページへアクセスし、APIを作成します。
image.png
REST APIを構築します。
image.png
API名を入力、エンドポイントタイプはリージョンを選択し、作成します。
ここではAPI名は「sample_api_from_line」としました。
image.png

アクションから「リソースの作成」を選択し、
image.png
新しい子リソースの作成をします。
ここではリソース名を「sample-resource」としました。「API Gateway CORSを有効にする」のチェックはONとします。
image.png

作成したリソースにPSOTメソッドを作成します。
image.png
image.png

POSTメソッドのセットアップでは、先ほど作成したLambda関数(sample_function_from_line)を選択します。
「Lambdaプロキシ統合の使用」もONにしておきましょう。
image.png
「Lambda関数に情報を追加する
 API Gatewayに、Lambda関数を呼び出す権限を与えようとしています:」
という確認メッセージが表示されますので、OKボタン押下で許可を与えます。
image.png

アクションから「APIのデプロイ」を選択します。
image.png

APIのデプロイ画面で新しいステージを作成し、デプロイします。
ステージ名は、ここでは「work」としておきました。
image.png

デプロイされたworkステージのPOSTメソッドを選択し、「URLの呼び出し」に表示されているURLを、
「Messaging API設定」にある Webhook設定 > Webhook URL へ設定します。

LINEチャンネルのMessaging API設定

LINE Developpersのコンソールに戻りまして、作成しておいたサンプルチャンネルの「Messaging API設定」にある Webhook設定 > Webhook URL へ、デプロイしたPOSTメソッドのURLを設定します。
image.png
Webhookの利用ラジオボタンもONにします。
image.png

動作確認

これで一通りの設定は完了です。動作確認してみましょう。
「Messaging API設定」にあるQRコードから、作成したLINE BOTを友達追加することができます。
image.png

友達として追加して、何か話しかけてみましょう。
image.png
「メッセージありがとうございます!申し訳ありませんが、このアカウントでは個別のお問い合わせを受け付けておりません。次の配信までお待ちください。」という自動応答の後に続き、実装した「こんにちは!」を返してきてくれていますね。

自動応答の設定

自動応答を無くすための設定は、チャンネル基本設定の基本設定にある「LINE Official Account Manager」へのリンクから飛んだ先で行う事ができます。
image.png
応答設定の応答メッセージを「オフ」にします。
image.png
なおここでは友達追加して最初に表示される「あいさつメッセージ」も非表示にしたり、内容を更新したりすることができます。

それでは改めて動作確認してみましょう。
何か話しかけると「こんにちは!」とだけ返してくれるBOTが完成しました🎉
image.png

あとがき

後編へつづく!

46
34
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
46
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?