Azure Functions × Python で簡単にLINE Bot を作ろう! (using GitHub Codespaces)

6 min read読了の目安(約6000字

こんにちは、もっちゃんと申します。

今回はAzure FunctionsとPythonの組み合わせでちょー簡単にLINE Botが作れるかを実際に見ていきましょう!

ちなみに本エントリーは、こちらの記事の事前準備な内容も兼ねております!
ぜひあわせてご覧ください!

必要なもの

実際にやってみよう!

公式のドキュメントにちょうど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に設定すれば作業完了です!

ちなみにもしローカルで動かす場合は、環境変数をlocal.settings.jsonに設定することができます。(local.settings.jsonにアクセストークンとシークレットキーを設定します。)

LINE Botと友達になって動かしてみましょう!

それでは今回作ったLINE Botを動かしてみましょう!
まずはLINE Botとお友達になります!(LINE BotはQR Codeで簡単に友達になれます!!)

友達になったら何かメッセージを打ち込んでみてください。
きっと皆さんのLINE Botも動いたのではないでしょうか!🎉🎉(ただオウム返しするだけです^^)

まとめ

いかがでしたでしょう?結構簡単だったんじゃないでしょうか!
Azure Functionsはサーバーレスのサービスなので、ちょっと試すぐらいならお金がかからないのも良いですね。
また、基本VS Code上だけで作業が完結するのも素晴らしいところですね!

(今回のコードは下記にも置きました!)

https://github.com/mochan-tk/Azure-line-bot

参考