非エンジニアでもLINE公式アカウントは作れるよ

こんにちは、堀井です。

今日は「LINEの公式アカウントは非プログラマでも作成できるよ」と言うお話をしようと思います。

その上で「プログラマはもうちょっと発展した応答が返せるようになるよ」と言うお話をします。

やるぞ!!

公式アカウント解説までの流れ

LINE Developersに登録する

まずはLINE Developersに登録しましょう。

「コンソールにログイン」ボタンを押したら

「LINEアカウントでログイン」します。


公式アカウント(チャネル)を作成する

「新規チャネル作成」を選んだら

Messaging APIを選択します。

現在は直接チャネル(≒アカウント)を作成することはできないため「LINE公式アカウントを作成する」から作成しましょう。

こんな感じかな。

確認ボタンを押すと確認画面に遷移するので、完了ボタンを押してアカウントを作成します。

完了ボタンを押したら早速公式アカウントからLINEが届きました。

未認証ではあるものの、超簡単に作れましたね。

「LINE Official Account Managerへ」を押して、再ログインし、
「情報利用に関する同意について」 「LINEヤフーグループへの情報提供に関する個別規約への同意について」を読んだ上で同意します。

これで一旦完了です。


友達登録時のメッセージを修正する

とりあえず、さっきのテンプレート丸わかりなメッセージを修正しましょう。

あいさつメッセージをクリックすると、メッセージ設定欄にテンプレートが設定されています。
適当に変えてみましょう。

うんうん。

終わったら「変更を保存」してください。
次に友達登録した人にはこの挨拶が届くようになります。

例えば友達登録クーポンを渡すなど、2通以上送りたい人は「+追加」ボタンを選択することになりますが、今回は省きます。


自動応答メッセージを作成する

とりあえず何かしゃべったらランダムで返事する仕組みを用意してみましょう。

応答メッセージを選択すると

メッセージありがとうございます!

申し訳ありませんが、このアカウントでは個別のお問い合わせを受け付けておりません。
次の配信までお待ちください(content)

と言うメッセージが一律応答として設定されています。
つまり何を言っても定型文が返ってきます。

例えば「営業日」を教えてくれるように設定してみたい場合は、先ほどの画面から「作成」ボタンを押します。

タイトルはお客さんに伝わらないので、自分が分かりやすいように設定します。

応答タイプはキーワード応答にして、ひとまず「営業日」「営業」と言うワードに対して返事をするようにして「利用開始」ボタンを押すと適用されます。

では送ってみましょう。

一言一句同じワードの場合は定型文が返りますが、

のでご注意ください。

一律応答を複数設定しておくと、ランダムで返ってくるようになります。
利用トグルをオフにすると送られなくなります。

こんな感じです。


API GatewayとLambdaを利用したメッセージ送信

さらにAWSアカウント作成済みかつ、IAM等の権限管理が整っている状態である前提で書いています。

LINE Official Account ManagerでMessaging APIを利用する

画面がちょくちょく切り替わって面倒ですが、LINE Official Account Managerの設定画面から「Messaging API」を選択します。

「Messaging APIを利用する」を選択したらプロバイダー名を入力して「同意する」を選択します。

プライバシーポリシーと利用規約は必要に応じて設定します。
今回はすぐ消すので特に何も設定しませんでした。

作成したらチャンネル情報やWebhook URLの入力欄が現れますので、この後作成するAPI GatewayのURLを入力することになります。


Lambdaの作成

Lambdaのガワを作成しましょう。

関数名は適当に、ランタイムはPython v3.13にしておきます。
後でLambdaレイヤーを入れるため、バージョンにはご注意ください。

アーキテクチャもどっちでもいいです。
arm64の方が安いですが、そこを気にする人はもっと知識があるはずなのでこのページを見ない気がする。

無事に作成できました。


API Gatewayの作成

API Gatewayの作成画面からREST APIの構築を開始します。

こちらも適当に作成します。

「メソッドを作成」してLambdaと統合しましょう。

LINEにメッセージを投げるとWebhookで拾ってPOSTメソッドを投げるつくりになっているので、POSTで受け取る設定にしてメソッドを作成します。

もちろん統合するLambdaは先の手順で作成したARNを指定してください。
最後に忘れずに「APIをデプロイ」してくださいね。

URLをコピーしたら、先ほど作成したLINE Official Account ManagerのWebhook URLにペーストして保存します。

最後にLINE DevelopersのMessaging API設定からWebhookの利用をオンにします。

これでLINEからのメッセージをLambdaが受け取れるようになりました。


Lambdaのプログラミング

import json
import os
from linebot.models import TextSendMessage
from linebot import (
    LineBotApi,
)

def lambda_handler(event, context):
    #受信したメッセージを解析
    text = get_received_text(event)
    reply_token = get_reply_token(event)
    
    #botクライアントを作成
    line_channel_access_token = get_access_token()
    line_bot_api = LineBotApi(line_channel_access_token)

    #応答メッセージを作成
    send_message = create_send_message(text)

    #応答メッセージを送信
    line_bot_api.reply_message(reply_token, TextSendMessage(send_message))

    return send_message

def create_send_message(message_text: str) -> str:
    """
    応答メッセージを作成する

    :param message_text: メッセージ
    :return: 応答メッセージ
    """
    return message_text + "って言った?"

def get_received_text(event):
    """
    受信したメッセージ本文を取得

    :param event: LINEから飛んできたイベント
    :return: メッセージ本文
    """
    body = json.loads(event['body'])
    return body['events'][0]['message']['text']

def get_reply_token(event):
    """
    受信したメッセージのリプライトークンを取得

    :param event: LINEから飛んできたイベント
    :return: リプライトークン
    """
    body = json.loads(event['body'])
    return body['events'][0]['replyToken']

def get_access_token():
    """
    アクセストークンを取得

    :return: アクセストークン
    """
    return os.environ['LINE_CHANNEL_ACCESS_TOKEN']

とりあえずこんな感じで書いておきます。


チャネルアクセストークンの取得と設定

LINE DevelopersのMessaging API設定より、チャネルアクセストークン(長期)を発行しておきます。

その後、Lambdaの環境変数に「LINE_CHANNEL_ACCESS_TOKEN」を設定します。


Lambdaレイヤーの設定

osやjsonのような基本的なライブラリはいいのですが、numpyやpandasを始めとした外部ライブラリはLambdaではデフォルトで使えないので、ローカルでzipファイルを作成するなどしてレイヤーに設定してあげないといけません。

手順としては

1.ローカルでline-bot-sdkを用意する

2.「python」フォルダ内にline-bot-sdkを入れてzip圧縮する
※フォルダ名は大文字小文字も区別してください。

3.zipをS3にアップロードする

4.Lambdaレイヤーを作成する

5.Lambdaレイヤーを設定する


動作確認

なるほどいい感じ。

メッセージ作成のメソッドをあれこれ弄ってあげると占いとかもできそうですね。

念のためですがこのアカウントやチャネルは削除済みのため、アカウント名で検索しても出てきません。ご了承ください。
当然LambdaもAPI GWも削除済みです。

コメントする