LoginSignup
3
1

オウム返しbot作ってみた話

Posted at

LINEbotを作ってみた!!

ubuntu Linux AWS MessageAPI
最終更新日 2023年12月19日 投稿日2023年12月19日

はじめに

今回私は、LINEbotを作成し、オウム返しをするプログラムと、天気予報を取得するプログラムを作成し、LINEbotでメールを送り返すことにチャレンジ


目次

1.APIとは
2.環境開発
3.公式LINE作成方法
4.aws無料アカウント作成
5.オウム返しチャットボット

1.APIとは

APIとは、Application Programming Interfaceの略で、別々のアプリケーションがお互いに情報をやりとりする際の接点となる窓口です。本来APIとは、広い意味を持つ言葉だが、今回のMessage APIとは、REST APIのことである。REST APIとはルールのようなものに従って出来ている。

image.png
普段我々は、webサーバーに「webページを表示して!」とリクエストを投げ、webサーバー側が処理をしてレスポンスを返してクライアント側にデータを表示させる。webサーバーがサーバー側で、自分やブラウザがクライアントである。しかし、Webhookにおいては、ユーザーがこんなメッセージを送ってきたよ、webhookを受けとってとリクエストが飛んでくるので、それをあなたが用意したポットサーバーでそれを受けとってwebhookを受けとったよ。ステータスコード200!とレスポンスを返さなければならない。Webhookを投げてくるものがクライアントで自身が用意するポットサーバーがサーバーにかわる。

2.環境開発

今回はSDKをpythonで行う
・pythonのインストール
ここからインストール

pythonをインストールする理由としてオウム返しのチャットボットを作成する際にmessageAPIのSDKを用意する必要がある。

その他のSDK
・Java
・php
・node.js
・go
・Ruby

WSL(仮想マシン)


[スタート] > [cmdと入力] > [右クリック] > [管理者として実行]
下記を実行

PS C:\Users\ユーザー名>dim.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

実行後再起動

PS C:\Users\ユーザー名> wsl --install ubunts

実行後、ユーザー名とパスワードを要求される。これでLinuxのubuntuの環境構築が完了し、wslが使用出来る。

3.公式LINE作成方法

[LINE VOOM]>[作成]をクリック アカウント名を入力しカテゴリーは各使用用途に応じて変更して下さい。今回は特に指定はないので個人で個人(学生)を指定した。地域は日本に設定し、アカウント作成をクリック。

MessageAPIを作成するためにLINE Official Account Managerを開く
ここから作成

LINEアカウントでログインをクリックし、[メールアドレス],[パスワード]を入力。 二要素認証のため、4 桁の認証番号が表示されるので、スマートフォンの LINE を開くと、認証番号入力の画面が表示されますので、この 4 桁の認証番号を入力して[本人確認]をタップするとログインできる。

ログイン完了後

[設定]>[Messaging API]>[Messaging APIを利用する]
LINE Developers コンソールにログインしたことがない場合、[名前]と[メールアドレス]を入力して[同意]をクリックし[OK]をクリック。
その後、プライバシーポリシーと利用規約が表示される。サービス提供者としてすでに持っている場合は登録し無ければ入力せずに[OK]をクリック

####LINE Developersコンソールにアクセスしてアクセストークンを発行
ここから
先程作成したブロバイダーを選択する
[Messaging API設定]>[チャンネルアクセストークン(長期)]>[発行]
[チャンネル基本設定]>[チャンネルシークレット]
※チャンネルアクセストークンとチャンネルシークレットは今後使用するのでコピーなどして覚えておくこと

管理アプリをインストールして公式アカウントからメッセージを確認しよう
インストールは下記から↓
Andoroidの場合
iosの場合

4.AWSアカウント作成

AWS無料利用枠を使用した。無料利用枠は、12ヶ月のAWS無料利用枠の期間が終了しても自動的に期限切れにならない。しかし、無料の使用量は毎月合計量が計算され、自動的に請求額に適用されるため注意が必要!!

ここからアカウント作成

5.オウム返しチャットボットを作成

手順1.環境開発で使用出来るようにしたWSLを開く。

[スタート]>[WSLと入力]>[開く]
そこでホーム画面からpythonの作業ディレクトリを作成する

$ cd
$ mkdir python
$ ls

※作業ディレクトリは必ずpythonにして下さい。でないとこの後の作業で上手くいかないため

$ cd python

作業ディレクトリに移動

$ sudo apt update
$ sudo apt install python3-pip

実行すると[Y/n]と表示するのでYを入力し[Enter]を押す。

$ cd ..
$ sudo apt install zip

zipコマンドでpythonディレクトリをzipファイルに圧縮するために作業ディレクトリの前に戻り上記を実行する。

$ zip -r python.zip python

上記を実行するとpythonディレクトリをzipファイルに圧縮出来る。

手順2. AWS(Amazon Web Servis)を開く

[コンソールホーム画面]>[Lambda]を開く>[レイヤー]>[レイヤー作成]をクリック

名前 Messaging-API-SDK-for-python
説明 Messaging API SDK for python
アップロード方法 zip ファイルをアップロード
アップロードするファイル  「2.6.1 Messaging API の SDK を準備する」で用意した python.zip
互換性のあるアーキテクチャ x86_64 にチェックを入れる
互換性のあるランタイム Python 3.10 を選択
ライセンス https://github.com/line/line-bot-sdk-python/blob/master/LICENSE

これでLambda関数の作成が完了した。次にMessage API SDKのレイヤーを追加したいので、[Layers]>[レイヤーの追加]をクリック。レイヤーの選択を下記に設定。

レイヤーソース カスタレイヤー
カスタムレイヤー Messaging API SDK for python
バージョン 1

Layersが追加出来たら、次に[トリガーを追加]をする。APIGatewayを作成する。[トリガーの設定]>[API Gateway]を選択。トリガー値は下記に設定し[追加]をクリック。トリガーの作成後、[API エンドポイント]のURLをLINE Developersを開き、[Messaging API設定]>[Webhook URL]>[編集]をクリックして貼り付ける。[検証]をクリックして

LINE4.png

LINE3.png
が表示されたら成功。

インテント 新規APIを作成
APIタイプ HTTP API
セキュリティ 開く
その他の設定  すべてデフォルトのまま
import json
import logging
import os
import sys

from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextMessage, TextSendMessage

# INFOレベル以上のログメッセージを拾うように設定する
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# 環境変数からMessaging APIのチャネルアクセストークンとチャネルシークレットを取得する
CHANNEL_ACCESS_TOKEN = os.getenv('CHANNEL_ACCESS_TOKEN')
CHANNEL_SECRET = os.getenv('CHANNEL_SECRET')

# それぞれ環境変数に登録されていないとエラー
if CHANNEL_ACCESS_TOKEN is None:
    logger.error(
        'LINE_CHANNEL_ACCESS_TOKEN is not defined as environmental variables.')
    sys.exit(1)
if CHANNEL_SECRET is None:
    logger.error(
        'LINE_CHANNEL_SECRET is not defined as environmental variables.')
    sys.exit(1)

line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)
webhook_handler = WebhookHandler(CHANNEL_SECRET)


@webhook_handler.add(MessageEvent, message=TextMessage)
def handle_message(event):

    # 応答トークンを使って回答を応答メッセージで送る
    line_bot_api.reply_message(
        event.reply_token, TextSendMessage(text=event.message.text))


def lambda_handler(event, context):

    # リクエストヘッダーにx-line-signatureがあることを確認
    if 'x-line-signature' in event['headers']:
        signature = event['headers']['x-line-signature']

    body = event['body']
    # 受け取ったWebhookのJSONを目視確認できるようにINFOでログに吐く
    logger.info(body)

    try:
        webhook_handler.handle(body, signature)
    except InvalidSignatureError:
        # 署名を検証した結果、飛んできたのがLINEプラットフォームからのWebhookでなければ400を返す
        return {
            'statusCode': 400,
            'body': json.dumps('Only webhooks from the LINE Platform will be accepted.')
        }
    except LineBotApiError as e:
        # 応答メッセージを送ろうとしたがLINEプラットフォームからエラーが返ってきたらエラーを吐く
        logger.error('Got exception from LINE Messaging API: %s\n' % e.message)
        for m in e.error.details:
            logger.error('  %s: %s' % (m.property, m.message))

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

#CHANNEL_ACCESS_TOKEN = os.getenv('CHANNEL_ACCESS_TOKEN')
#CHANNEL_SECRET = os.getenv('CHANNEL_SECRET')
上記の2行には公式LINEで作成しチャンネルアクセストークンとチャンネルシークレットキーを入れる。書き換えれば[Deploy]をクリックする。

[Deploy]をクリック後、[設定]>[環境変数]>[編集]をクリックし下記を入力し[保存]をクリック。

キー
CHANNEL_ACCESS_TOKEN チャネルアクセストークン
CHANNEL_SECRET チャネルシークレット

下記のように[正常に更新されました。]と表示されれば成功!!
LINE5.png

感想

今回初めてLinebotを動かしてみてAPIやawsといった触れたことのないもの触れていい経験になったと感じる。linebotは今回オウム返しをするといったものを作ったが、今度は天気予報を取得するものを作ってみたい。

参考文献

https://qiita.com/Qiita/items/c686397e4a0f4f11683d
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-1---enable-the-windows-subsystem-for-linux
https://qiita.com/MinadukiSekina/items/25f3440565ca7b6a359e

3
1
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
3
1