LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


コマンドラインから LINE にメッセージを送れる LINE Notify

はじめに

LINE Notifyの開発をしている渡辺です。開発者向けにLINE Notifyを使ってコマンドラインからメッセージを送るという方法を紹介いたします。

これまでシステム的にLINEにメッセージを送るためにはBot API TrialまたはBusiness Connectを使用する必要がありました。これらの機能はMessaging APIとしてより洗練されましたが、Messaging APIは高機能な一方で、API呼び出しのためには多少高度な実装が必要になります。

LINE Notifyではメッセージ送信に機能を絞り、極めて短いステップでLINEにメッセージを送れるAPIを用意しています。

curl を使ってメッセージを送ってみる

LINE Notifyで発行できる「パーソナルアクセストークン」を使い、APIのエンドポイントにHTTP POSTリクエストを送るだけでメッセージを送ることができます。HTTPリクエストができればどんな方法でも使うことができますが、ここではコマンドラインで使えるHTTPクライアントであるcurlを使ってみることにします。

パーソナルアクセストークンを発行する

LINE Notifyのマイページ(LINE IDでのログインが必要)にアクセスすると「トークンを発行する」ボタンがあります。

これをクリックすると、トークン名と、このトークンを使った場合のメッセージの通知先を選択する画面が現れます。

トークン名は任意の分かりやすい名前を入力しておきます。通知先に1:1を選択した場合には、LINE Notify公式アカウントとのトークにメッセージが送信されます。トークルームを選択した場合には、そのトークルームにLINE Notify公式アカウントからメッセージが送信されます。

通知先はトークンごとに変えることができます。別々のトークルームにメッセージを投稿したい場合にはそれぞれでトークンを発行できます。

ここで発行したアクセストークンは一度しか表示されないので、どこかにメモしておきます。といっても、わからなくなってしまったら、削除して発行しなおせばいいだけです。

通知を送ってみる

取得したパーソナルアクセストークンでLINEにメッセージを送ってみます。curlコマンドを以下のように呼ぶことで、メッセージの送信ができます。[access_token]の部分を取得したパーソナルアクセストークンに置き換えてください。

curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https://notify-api.line.me/api/notify
  • -X はリクエストメソッドの指定
  • -H はリクエストヘッダの指定
  • -F はフォームデータの送信

となっています。URLはLINE Notifyの通知用エンドポイントです。
以上のようにとても簡単です。

応用例

curlで簡単に送れることはお分かりいただけたかと思います。ここから少し応用例を紹介します。

例1: Jenkinsのビルド結果を送る

Jenkinsのビルド結果をLINEに通知してみる例を紹介します。
せっかくですので、Jenkins2.0から正式に導入されたJenkinsfileを使ってみます。以下のようなspecで作ってみましょう。

1.Jenkinsのビルド結果を、以下の形式で送ります。

Build {branch}, result is {result}.
{buildUrl}

2.また、もしもビルド結果が失敗だった場合はムーンが小馬鹿にしてくる画像を送ってみます(実際にこのような画像を送ることはやめましょう...今回の例は、あくまでジョークです)。

すごくシンプルなJenkinsfileにはなりますが、このように書けば実現することができます(今回はJava projectを想定しているので、Gradleでビルドとテストの実行をしています)。

#!groovy
  
node {
    try {
        stage 'Checkout'
            checkout scm
      
        stage 'Build and test'
            sh './gradlew clean check'
            currentBuild.result = 'SUCCESS'
    } catch (err) {
        currentBuild.result = 'FAILURE'
    }
  
    stage 'Notify'
        notifyLINE('YOUR_LINE_NOTIFY_TOKEN', currentBuild.result)
}
  
def notifyLINE(token, result) {
    def isFailure = result == 'FAILURE'
      
    def url = 'https://notify-api.line.me/api/notify'
    def message = "Build ${env.BRANCH_NAME}, result is ${result}. 
${env.BUILD_URL}"
    def imageThumbnail = isFailure ? 'FAILED_IMAGE_THUMBNAIL' : ''
    def imageFullsize = isFailure ? 'FAILED_IMAGE_FULLSIZE' : ''
      
    sh "curl ${url} -H 'Authorization: Bearer ${token}' -F 'message=${message}' -F 'imageThumbnail=${imageThumbnail}' -F 'imageFullsize=${imageFullsize}'"
}

すると、ビルドが成功だった場合はこのようなメッセージが送られて来ます。

もしも、失敗してしまった場合はこのようなメッセージが送られて来ます...。

とても簡単にできました。

例2: slコマンドにしてみる

slコマンドとは、lsをうっかり slとタイプミスした際に作業を強制的にブロックすることでタイプミスの矯正を図るためのものです。。コマンド名の通り、このコマンドは実行するとターミナル上でSLが走ります。

せっかくなのでLINE Notifyを使ってLINEにSLを走らせましょう。例えば以下のようなシェルスクリプトファイルをパスの通ったディレクトリにslという名前で保存しておくことで、LINE Notify経由でLINEにSLを走らせることができます(実際にはアクセストークンや、画像のURLを正しく設定する必要があります。また、zshでの実行を想定して .zsh_historyにしています)。

#!/bin/sh
 
ACCESS_TOKEN=...
 
COUNT=$(echo $(perl -lan -e 's/^.+;| .+//g and /^sl$/ and print' ~/.zsh_history | wc -l))
 
for n in 1   4   8; do
    echo "ガタンゴトン"
    curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=SLが通ります (通算$COUNT 回)" -F "imageThumbnail=https://url-to-sl/$n.jpg" -F "imageFullsize=https://url-to-sl/$n.jpg" https://notify-api.line.me/api/notify >  
    /dev/null
    sleep 1
done

実行すると以下のようになります。

とても簡単にできました。

サービスとして登録してみる

もしかするとあなたは便利なウェブサービスの開発者かもしれません。LINE Notifyではウェブサービス提供者向けに OAuthを使った連携APIも提供しています。これを使えば任意ユーザのLINEに対して通知を送信するサービスを簡単に実現することができます。

詳細はAPIドキュメントをご参照ください。LINE IDでログインしてください。

おわりに

LINE Notifyを使ってLINEにメッセージを送信する方法を紹介しました。非常に簡単に使えますので、どうぞご活用ください。