どうも。
もはや生活インフラの一部となったLINE。 そのLINEを使ってメッセージを送れたら、なんて考えたことまりませんか?
「金曜日には週報を出そう」とか、 「月末には作業報告書を出そう」とかとか。
それ、けっこう簡単にできますよ。
ということでやってみました。 例に漏れず自分への備忘録です。
チャネルを作ろう
LINE使っている人ならわかると思いますが、「公式アカウント」これを使います。 (不特定多数の方を相手にする場合は有料になるかと思います。私は技術検証の名のもと個人で利用していますので。)
先ずは「LINE Developersサイト」にアクセスします。
developers.line.biz
「ログイン」を押下します。
LINEのアカウントを使ってログインします。
ログインします。
Developersサイトのトップページに遷移します。
プロバイダーの作成をしましょう。
適当にプロバイダー名を入力し、作成を押下します。
プロバイダーが作成されたので、「Messaging API」を押下します。
Messaging APIのチャネルトップ画面に遷移しました。
「アイコン」「チャネル説明」「大業種」「小業種」「メールアドレス」あたりを入力し、規約に合意して「作成」を押下します。
チャネルを設定しよう
「Messaging API」の項目があるので、こちらを開いて上記のように編集します。
ポイントは以下の通り。
- Webhookの利用をONにする。
- Webhook URLを設定し、対象サーバでPOST内容を確認できるようにする。
- グループ・複数人チャットへの参加を許可する は私はONにした。
- 応答メッセージ は私はOFFにした。
- あいさつメッセージ は私はOFFにした。
- QRコードを控えておく。(友達登録に必要)
- チャネルアクセストークンを発行しておく。
ここでは試しにWebhook URLのphpを書きます。
// Webhook用のページを用意 # vi /usr/share/nginx/html/post.php // jsonリクエストをログに出力 <?php error_log(print_r(file_get_contents("php://input"),true));
これで結果をログファイルに出力することができます。
以下は友達登録した場合のWebhook例。
// ログ内容を追従する # tail -f /var/log/php-fpm/7.3/www-error.log // 友達登録したよの通知。userIdの値が必要になります。 [28-Jan-2020 17:38:35 UTC] {"events":[{"type":"follow","replyToken":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","source":{"userId":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","type":"user"},"timestamp":1580233115449,"mode":"active"}],"destination":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
このように、Webhookを設定していたら逐次「どんなことがされたか」が取得できます。
今回は友達登録をしたユーザのIDを取得することができました。
同じように、グループにこのチャネルユーザ(公式アカウント)を入れても同様に「groupId」を取得することが可能です。
チャネルアクセストークンとuserId(またはgroupId)が揃ったら、Messaging APIは利用可能です。
送信してみる
一番簡単なcurlを使っての送信。
# curl -X POST -H 'Content-Type:application/json' -H 'Authorization:Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' -d '{"to":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","messages":[{"type":"text","text":"This is a message."}]}' https://api.line.me/v2/bot/message/push
Authorizationに使うのがチャネルアクセストークン。 jsonのtoに使うのがuserId(またはgroupId)となっています。
curlではなく、AWS Lambdaで用意しておけば後々CloudWatch Eventsなどで活用できるので、それも作っておきましょう。
gisted9a1e6be46a52246024bc72819a627c
こんな感じです。
テストイベントはこんな感じに。
{ "messages": [ { "type": "text", "text": "AWS Lambdaでメッセージを送るテスト" } ] }
さて、送信結果は・・・
うん。送信できています。
ね、簡単でしょう?
ということで、私からは以上です。