Azure Functions × Python で簡単にLINE Bot を作ろう! (using GitHub Codespaces)
こんにちは、もっちゃんと申します。
今回はAzure FunctionsとPythonの組み合わせでちょー簡単にLINE Botが作れるかを実際に見ていきましょう!
ちなみに本エントリーは、こちらの記事の事前準備な内容も兼ねております!
ぜひあわせてご覧ください!
必要なもの
- VS Code(私はブラウザでVS Codeが使えるGitHub Codespacesを使います!)
- Azure Functions for Visual Studio Code(VS Codeの拡張機能)
- LINE Messaging API SDK for Python
- Azureのサブスクリプション
- 何事も楽しむ心♪
実際にやってみよう!
公式のドキュメントにちょうどVS CodeとPythonの組み合わせでAzure Functionsを利用する手順が用意されているのでこちらも参考にしつつ進めます。
1.Azure Functionsのローカル プロジェクトを作成する
VS Code上で下記のように[新しいプロジェクトの作成] アイコンを選択し、ローカル プロジェクトを作成します。
2.LINE Bot用のコード用意
VS Code上で下記のファイルを編集してください。
-
requirements.txt
line-bot-sdk
を追加してください。
azure-functions
line-bot-sdk
-
__init __.py
下記のコードに置き換えてください。(コチラのサンプルコードを元にAzure Functions用に修正を加えたコードです)
サンプルコード
import logging
import os
import azure.functions as func
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
# Azure FunctionsのApplication Settingに設定した値から取得する↓
channel_secret = os.getenv('LINE_CHANNEL_SECRET', None)
channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN', None)
line_bot_api = LineBotApi(channel_access_token)
handler = WebhookHandler(channel_secret)
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
# get x-line-signature header value
signature = req.headers['x-line-signature']
# get request body as text
body = req.get_body().decode("utf-8")
logging.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
func.HttpResponse(status_code=400)
return func.HttpResponse('OK')
@handler.add(MessageEvent, message=TextMessage)
def message_text(event):
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=event.message.text)
)
3.Azure Functionsにデプロイ
ここまででローカルの(最低限の)作業は完了です。それではデプロイを行なっていきましょう。
まず下記のようにVS Code上でAzureにSign inします。
そして下記のようにVS Code上でデプロイ作業を行います。
デプロイが完了したらFunctionsのURL
を取得します。(後で使います)
4.Messaging API チャネルの作成
ここからはVS Codeの画面からちょっと離れて、LINE Developersコンソール画面でMessaging API チャネルの作成作業を行います。
Messaging API チャネルの作成については下記あたりを参考に作業を進めてください。
https://developers.line.me/ja/services/messaging-api/ にアクセスしてログインし、Messaging API チャネルの作成画面まで進み、今回のチャネル名はazure-functions-bot
とかにして、あとはチャネル名などの必要な情報を入力して最後に作成
ボタンを押して作成してください。
チャネルを作成したら、アクセストークンとシークレットキーを取得しにいきます。(後で使います)
続いてWebhookの設定に先ほど取得したAzure FunctionsのURL
を設定します。
応答メッセージ設定もオフにしておきましょう!
5.環境変数の設定(Application Settingの設定)
最後にVS Codeの画面上で取得したアクセストークンとシークレットキーをApplication Settingに設定すれば作業完了です!
LINE Botと友達になって動かしてみましょう!
それでは今回作ったLINE Botを動かしてみましょう!
まずはLINE Botとお友達になります!(LINE BotはQR Codeで簡単に友達になれます!!)
友達になったら何かメッセージを打ち込んでみてください。
きっと皆さんのLINE Botも動いたのではないでしょうか!🎉🎉(ただオウム返しするだけです^^)
まとめ
いかがでしたでしょう?結構簡単だったんじゃないでしょうか!
Azure Functionsはサーバーレスのサービスなので、ちょっと試すぐらいならお金がかからないのも良いですね。
また、基本VS Code上だけで作業が完結するのも素晴らしいところですね!
(今回のコードは下記にも置きました!)
参考
- https://github.com/line/line-bot-sdk-python/blob/master/examples/flask-echo/app_with_handler.py
- https://docs.microsoft.com/ja-jp/python/api/azure-functions/azure.functions.httprequest?view=azure-python
- https://docs.microsoft.com/ja-jp/python/api/azure-functions/azure.functions.httprequest?view=azure-python#get-body------bytes
- https://qiita.com/uezo/items/98622699aa3988c580ad
- https://docs.microsoft.com/en-us/python/api/azure-functions/azure.functions.httpresponse?view=azure-python
- https://azure.microsoft.com/ja-jp/pricing/details/functions/
Discussion