バナーナナブログ

宮城県仙台市より、日々思ったことを綴っていくウェブログです。

LINEのMessaging APIを使ってみた

どうも。

もはや生活インフラの一部となったLINE。 そのLINEを使ってメッセージを送れたら、なんて考えたことまりませんか?

「金曜日には週報を出そう」とか、 「月末には作業報告書を出そう」とかとか。

それ、けっこう簡単にできますよ。

ということでやってみました。 例に漏れず自分への備忘録です。

チャネルを作ろう

LINE使っている人ならわかると思いますが、「公式アカウント」これを使います。 (不特定多数の方を相手にする場合は有料になるかと思います。私は技術検証の名のもと個人で利用していますので。)

先ずは「LINE Developersサイト」にアクセスします。

developers.line.biz f:id:smdbanana:20200129021429p:plain
「ログイン」を押下します。

f:id:smdbanana:20200129021532p:plain
LINEのアカウントを使ってログインします。

f:id:smdbanana:20200129021552p:plain
ログインします。

f:id:smdbanana:20200129021714p:plain
Developersサイトのトップページに遷移します。
プロバイダーの作成をしましょう。
適当にプロバイダー名を入力し、作成を押下します。

f:id:smdbanana:20200129021823p:plain
プロバイダーが作成されたので、「Messaging API」を押下します。

f:id:smdbanana:20200129022017p:plain
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でメッセージを送るテスト"
    }
  ]
}

さて、送信結果は・・・

f:id:smdbanana:20200129030911p:plain

うん。送信できています。

ね、簡単でしょう?

ということで、私からは以上です。