※ 某案件でLINE Notifyを利用する必要があったのでテスト構築した際に調べたことを備忘録として保存.
LINE Notifyとは
- LINE Notifyは,LINEの公式アカウント「LINE Notify」のこと.また,それを利用してユーザに通知を送る方法を指す.
- 公式アカウントとの違いは,自ら作ったアカウントで情報発信するわけではなく,ユーザからは,LINEが管理しているアカウントから情報が届いているように見えるところ.
LINE Notifyを設定して通知が届くまで
サービス登録
- このURLから所有するLINEアカウントでログイン.
- 右上のアカウント名が書かれてあるメニューから「登録サービス管理」を選択.
ユーザ連携
連携画面への遷移
- 以下のURLをGET実行することでLINE Notifyの連携画面に遷移する.
https://notify-bot.line.me/oauth/authorize?response_type=code&client_id=[Client ID]&redirect_uri=[Callback URL]&scope=notify&state=[CSRF Token]&response_mode=form_post
- ここで,Client IDはメモしたもの.
- Callback URLはサービス登録画面で指定したもの.LINE Notifyの連携画面はLINE管理なので,そこから自サービスに戻ってくるときにどのURLに遷移させたいかを指定する.
- CSRF TokenはCSRF対策のために用意するトークン.
- response_modeは任意のパラメータで,form_postを指定することで連携後のCallback URLへのリクエストがPOSTになる.このパラメータを付けなければGETになる.
注:response_modeは任意だが,CSRF Token(stateパラメータ)は必須.
連携画面からのCallback
- Callbackされる際に,Responseパラメータとしてcodeが含まれる.(これは一時code)
- このcodeを受け取ったら,以下のようにPOSTでリクエストを投げる.(PHPの例)
$query = http_build_query([
"grant_type" => "authorization_code",
"code" => [Callback時に受け取ったcode],
"redirect_uri" => [Callback URL],
"client_id" => [Client ID],
"client_secret" => [Client Secret]
]);
$header = [
"Content-Type: application/x-www-form-urlencoded",
'Content-Length: ' . strlen($query)
];
$url = "https://notify-bot.line.me/oauth/token";
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS => $query
];
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
- 戻り値としてaccess_tokenを受け取れるので,保存しておく.
通知処理
- 以下のような感じで通知可能.
$query = http_build_query([
"message" => [通知したい内容]
]);
$header = [
"Content-Type: application/x-www-form-urlencoded",
'Authorization: Bearer ' . [access_token],
'Content-Length: ' . strlen($query)
];
$url = "https://notify-api.line.me/api/notify";
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HEADER => true,
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS => $query
];
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
- 一通り確認したところ,改行とリンクの設置は可能.HTMLタグは使えないようだ.
- 画像添付なども可能だけれど,自分の用途では必要なかったので試してはいない.
補足
- 今回は通知のみ説明したが,他にも,access_tokenに紐づくユーザのstatusを表示したり,連携を解除するAPIが用意されている.
- また,Response Header情報には,あと何回APIの利用が可能なのかや,そのカウントがいつリセットされるのかについての情報が含まれている.