Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@w2or3w

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

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

あとがき

後編へつづく!

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
w2or3w
2or3(ツカサ)です。 浜松市在住のリーマンアプリケーションエンジニア。 最近サーバーレスWebアプリにお熱です。 各種SNSフォロー歓迎です〜 https://www.w2or3w.com/

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?