Ateam Tech Blog

エイチームのエンジニアたちによるテックブログ

LINEグループにBotからメッセージ送信する

はじめまして。

株式会社エイチームライフデザイン、 カスタマーマーケティング本部のCRE推進部に所属しております、奥山 聡です。

今回はLINE Messaging APIの活用方法についてお届けしたいと思います。

LINEグループにプログラムからメッセージを送りたい、と思ったことはありませんか?
SlackやChatworkに比べると手順がやや複雑で手間がかかったので、備忘も兼ねて設定手順を記事に残します。
もし何かの参考になれば幸いです!

完成形

import os
from linebot import LineBotApi
from linebot.models import TextSendMessage

channel_access_token = os.getenv('LINE_CHANNEL_ACCESS_TOKEN')
group_id = os.getenv('LINE_GROUP_ID')
msg = 'Hello World!'

line_bot_api = LineBotApi(channel_access_token)
line_bot_api.push_message(group_id, TextSendMessage(text=msg))

pythonでメッセージ送信する一例です。
チャネルアクセストークンと送信先のグループのIDがあればメッセージ送信できます。

チャネル = メッセージのを送信するアカウント = Botと捉えて構いません。
これらを取得しメッセージ送信できることをゴールにします。

実装

Botのチャネルアクセストークンを取得する

チャネルアクセストークンはLINE Developersコンソール内で発行できます。
まずはチャネル(Botアカウント)を用意します。

LINEビジネスIDを取得

チャネルの作成にはLINEビジネスIDが必要です。無い場合は作成します。
https://www.linebiz.com/jp/login/
ここからアカウントを作成しログインします。
個人のLINEアカウントでも登録できますが、私はメールアドレスで登録しました。

LINE Official Account Managerにログイン

上記の画面にログインすると、その中でLINE公式アカウントを作成できます。

LINEアカウントを作成

アカウントを作っていきなり更にアカウントを作る??とこの時点で少々面食らいましたが、
要するに1つLINEビジネスIDがあれば複数のLINE公式アカウントを持つことができます。


LINE公式アカウント = チャネル = Botと考えて良いと思います

(厳密には違いますが今回は触れません)


メッセージ投稿のための設定

公式アカウントを作ったら、メッセージ投稿のための設定を行います。
画面右端の「設定」メニューを開きます。

Messaging API

サイドメニュー「Messaging API」を開き「Messaging APIを利用する」を実行します。

Messaging APIを利用する
ここで開発者情報を登録します。改めて開発者のメールアドレスと名前を登録する必要があります。
更に「プロバイダ」の設定も求められます。
プロバイダーを選択
ここには開発元企業や団体名を入れます。
個人利用なら個人名で良いと思います。
チャネル情報
Channel IDとChannel secretが発行されました(が、今回は使いませんでした)
また、画面の下部のリンクからLINE Developersコンソールに入ることができます。

Developersコンソールに移動し、アクセストークンを発行

LINE Developersコンソールに入ります。
先ほど作った「プロバイダ」と、それに紐づく形で「チャネル」が作成されているのがわかります。

LINE Developersコンソール

チャネルを開いたら、
「Messaging API」メニュー下部の「Channel access token」という項目を探します。

Channel access token

「issue」を選択し、アクセストークンを発行します。

これでチャネルの作成及び、メッセージの投稿を行うための
アクセストークンを取得できました!

LINEグループのIDを取得する

ここからが手間がかかるところです。
投稿先のLINEグループのIDを知りたいのですが、グループの詳細画面を開いてもIDらしきものが載っていません☹
SlackのチャンネルIDのようにはいきませんでした…

LINEグループのIDを確かめる手順

以下の手順を踏む必要がありました。
1. BotにWebhookのURLを登録
2. IDを知りたいLINEグループに参加させる
3. 参加時に発行されるイベントを取得

つまりWebhookの受信サーバを(一時的にでも)用意する必要があります。


Messaging APIのWebhookとは
友だちのメッセージ投稿やグループへの参加など、Botに対し「イベント」が発生するたび、それを受信することができます。
企業などのLINE公式アカウントのチャットBotはこれを使って実装してるんですね。


公式ドキュメントのWebhook仕様はこちら

Webhook受信先を用意する

イベント受信のための一時的なサーバを作ります。
今回はAWS lambdaを使用しました。

lambda
ランタイムはpythonを選択しました。
他は全て初期設定で構いません。

イベントをログに出力するように修正
import json

def lambda_handler(event, context):
    print(event['body']) # 追加行
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

初期コードに1行追加し、Deployします。
受信したパラメータをログに出すようにしました。

URL発行

「設定」→「関数 URL」より関数URLを作成します。
認証タイプはNONEで作成しました。

関数 URL
※どこからでもアクセスできてしまいますが、今回の用途のように一時的にであれば大丈夫でしょう。
終わったらURLの削除を忘れないようにします。

Webhook受信のための設定

先ほど作成したURLをLINE Official Account Manager
「Messaging API」の「Webhook URL」に保存します。

Webhook URL

更に、「応答設定」メニューの詳細設定からWebhookをオンにします。

応答設定
これでWebhook受信の準備が整いました。

LINEグループにBotを招待する

Botをグループに招待するために、もう一つ設定を変更しておきます。
サイドメニュー「アカウント設定」の中から「トークへの参加」項目を探し、
「グループ・複数人トークへの参加を許可する」に切り替えます。

アカウント設定
これを行わないとBotをグループに招待してもすぐに退出してしまいます。

Botを友だち追加

ここからは個人のLINEアカウントを使います。
まずはBot(LINEアカウント)と友だちになります。
「ホーム」メニューの「友だち追加ガイド」を参考に、URLやQRコードで友だち追加してください。

友だち追加
(設定したプロバイダ名はここで公開されることになります)


友だち追加後にサーバーのログを見ると、何かが実行されていることがわかります。
これは「友だち追加」のイベントを受信したためです。


CloudWatch
(lambdaのメニュー「モニタリング」→CloudWatchのログより確認)

LINEグループにBotを招待し、イベントの中身を確認

あと少しです!
LINEグループにBotを招待するとイベントが発行されるので、ログを確認します。

イベント
typejoinなのはグループへの参加イベントであることを表します。
source内のgroupIdがお目当てのLINEグループIDです😆
これを控えておきます。

終わったら忘れないようにlambda関数のURLを削除します。
Webhookの設定も無効化しておきます。

(余談)グループID確認手段について

サーバはイベントの中身が確認できればなんでも良いです(ただしhttpsである必要はあります)
本格的なアプリを組む場合は別ですが、今回のような用途であればGASやLambdaで良いでしょう。


調べるとGASで同じことをやる記事がいくつか出てきました。そちらの方が手軽で良さそうです。


もし、もっと手っ取り早くIDを確認する手段をご存知の方がいれば、
ぜひ教えてください🙏

いよいよメッセージ送信

冒頭のソースチャネルアクセストークングループのIDを入れてやれば完成です。 実行するとグループにメッセージが送信されます!

メッセージ送信
あとはリマインダーにするなりなんなりご自由に✌

公式SDKについて

実装には公式のSDKを使いました。

$ pip install line-bot-sdk

GoやRubyなど他言語にも提供されているので、チェックしてみてください。

まとめ

  • アクセストークンはDeveloperコンソール内で発行できる
  • LINEグループIDの取得はWebhookイベントを参照するしかなく、サーバが必要

SlackやChatworkは便利ですが、家族や友人に入れてもらうのはちょっと無理があります。
LINEで自由にメッセージ投稿できるのであれば、有力なツールになるのではないでしょうか。私はサークルのイベントのリマインドに使っています。

ぜひぜひお試しください!