GolangでLINE Notify

LINEのBOTをDeveloper Trialのときに遊んで以来、ご無沙汰だったのですが、改めてLINE Notifyを試したらものすごく手軽でした。 ぐぐってみるとherokuにデブロイする系の記事が多いのですが、HTTPでPOSTするだけで通知できるので、備忘がてら手順をまとめたいと思います。

アクセストークンの取得

LINE Notifyの画面からログインします。 ログイン後、マイページへ移動します。

f:id:cipepser:20171210180034p:plain

下の方に「アクセストークンの発行(開発者向け)」という項目があるので、 「トークンを発行する」を押下します。

f:id:cipepser:20171210180045p:plain

すると以下の画面が出てくるので、

を入力します。

f:id:cipepser:20171210180055p:plain

トークン名は、通知されるときにメッセージの先頭に付与されるので短めがおすすめです。

また、グループなどに通知したい場合は、先にグループを作っておく必要があります。 今回は「テスト」を事前に作っておきました。

f:id:cipepser:20171210180102p:plain

「発行する」を押下すると以下のようにアクセストークンが得られます。

f:id:cipepser:20171210180111p:plain

これをコピーしておきましょう。なくしてしまった場合は、もう一度同じ手順で発行します。

LINE Notifyアカウントをトークンルームに追加

アクセストークンを発行すると以下のように通知が来ます。 f:id:cipepser:20171210180123p:plain

指示通りトークルーム(今回は「テスト」グループ)にLINE Notifyのアカウント(トークン名「bot」ではなく、LINE Notifyなので注意)を招待してあげます。

f:id:cipepser:20171210180128p:plain

これで準備完了です。

メッセージを送る

実装は以下です。msgの内容を送信します。

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    accessToken := <YOUR ACCESS TOKEN>
    msg := "テストメッセージ"

    URL := "https://notify-api.line.me/api/notify"

    u, err := url.ParseRequestURI(URL)
    if err != nil {
        log.Fatal(err)
    }

    c := &http.Client{}

    form := url.Values{}
    form.Add("message", msg)

    body := strings.NewReader(form.Encode())

    req, err := http.NewRequest("POST", u.String(), body)
    if err != nil {
        log.Fatal(err)
    }

    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    req.Header.Set("Authorization", "Bearer "+accessToken)

    _, err := c.Do(req)
    if err != nil {
        log.Fatal(err)
    }
}

実行すると以下のようにメッセージを受信できます。

f:id:cipepser:20171210180444p:plain

References