前提条件
LINEへ通知を送信するには,以下の条件が必要となります。
- .NET Framework 4.7.2がインストールされたWindows PC上で,v1.4以降のPandA for Winを常に実行されていること
- LINEアカウント
- PHPを実行可能なHTTPサーバー (有料のレンタルサーバーなら大抵は使えますが,localhostでも構いません)
LINE側の準備
チャンネルの作成
LINE Developersにアクセスし,デベロッパー登録する。 公式の解説も参照。
プロバイダーを作成し,チャンネルを作成する。チャンネルを作成すると公式アカウントが友達として追加されるはず。 追加されない場合は,QRコードを利用して追加する。
ユーザーIDの取得
適当なサーバーでPOSTリクエストを受け取れるようにする。
LINE Developers ConsoleのMessaging APIタブでWebhookを有効にし,URLを設定する。
先ほど追加された公式アカウントのチャットで適当なメッセージを送信すると,WebhookでJSONを受け取れる。
source
フィールドにユーザーIDが入っているので控えておく。
APIの設定
Messaging APIの一番下で,Channel access token (long-lived)を発行する。
公式アカウントマネージャーの[設定] > [応答設定]から, 応答モードを[チャット]にする。
Webhook受信の準備
WebhookでJSONを受け取って,LINEにメッセージ送信のリクエストを送れるようにする。
Webhookで送信されるJSONの使用はリファレンスを参照
LINEへのリクエストの送り方は公式リファレンスを参照。
コード例 (PHP)
サンプルコード
<?php
function assignment2message($item) {
$lecture = $item['lecture'];
$title = $item['title'];
$due = new DateTime('@' . $item['due']);
$due->setTimezone(new DateTimeZone('Asia/Tokyo'));
$dueTime = $due->format('Y/m/d H:i:s');
$remain = $item['remain'];
return "$title ($lecture)\n$dueTime (残り{$remain}時間)";
}
$json = file_get_contents('php://input');
$contents = json_decode($json, true);
if ($contents['type'] !== 'remind') return;
$url = 'https://api.line.me/v2/bot/message/push';
$token = 'CHANNEL_ACCESS_TOKEN'; // Channel access tokenを指定
foreach ($contents['assignments'] as $assignment) {
$msg = assignment2message($assignment);
$data = [
'to' => 'U...', // ユーザーIDを指定
'messages' => [
[
'type' => 'text',
'text' => $msg
]
]
];
$data_json = json_encode($data, JSON_UNESCAPED_UNICODE);
$curl = curl_init();
$header = [
"Authorization: Bearer $token",
'Content-Type: application/json',
];
$options = [
CURLOPT_URL => $url,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => $header,
CURLOPT_POSTFIELDS => $data_json,
CURLOPT_RETURNTRANSFER => true,
];
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
curl_close($curl);
}
?>
この例では締め切り前のリマインド以外を無視していますが,$contents['type']
の値によって処理を分けることができます。
PandA for Winの設定
[設定]タブのWebhook URLにURLを入力して準備完了。
リマインド時にLINEの通知も送信されるはずです。