LINEの通知

  1. トップページ
  2. 京大関係
  3. PandA for Win
  4. LINEの通知

前提条件

LINEへ通知を送信するには,以下の条件が必要となります。

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の通知も送信されるはずです。