藉由命令列模式使用LINE Notify發送訊息到LINE

前言

嗨!我的名字是渡辺博文,負責LINE Notify的開發工作。在這篇文章中,我想要分享開發者如何能夠直接藉由命令列模式使用LINE Notify發送訊息到LINE。

目前要傳送系統訊息到LINE必須要有Bot API試用帳號(譯者按:目前此類型帳號已停用)或Business Connect帳號。雖然這兩者都可被Messaging API取代並提供許多重要的功能,但是它們需要比較進階的程式撰寫。

LINE Notify是一種具有特定功能的API,簡化了將訊息發送到LINE的流程。

使用cURL發送訊息

透過LINE Notify產生你自己的「personal access token」,你便能夠藉此來發送一個HTTP POST請求到API端點。在此任何可發送HTTP請求的方式皆可使用。在本文中,讓我們來看看如何使用HTTP客戶端工具cURL來完成訊息傳送。

產生personal access tokens

你可以瀏覽「個人頁面」(必須要登入LINE帳號)來產生你自己的personal tokens。

當你按下「發行權杖(Generate token)」按鈕時,會跳出一個設定畫面。在此畫面你可設定你的Token名稱,並指定要接收通知的目標。

請將你的Token取一個容易辨識的名稱。當要決定接收通知的聊天室時,選擇「透過1對1聊天接收LINE Notify的通知」就可以讓LINE Notify官方帳號向你發送訊息;而選擇某個群組則會使LINE Notify官方帳號向該群組發送訊息。

你可以針對每個Token選擇各自接收通知的聊天室。因此,為了要將訊息發送至各個聊天室,你需要針對每個聊天室產生對應的Token。

請注意,當您關掉視窗後下次開啟時系統不會再顯示你所產生的Token。因此你必須自己記錄此Token,否則只能將此Token刪除並重新產生一組新的Token。

發送通知

讓我們來試著用你在前面步驟中所拿到的personal access token發送一則訊息給自己。你可以使用下列的cURL指令來發送一則訊息。將[access_token]字串替換成你的personal access token。

curl -X POST -H 'Authorization: Bearer [access_token]' -F 'message=foobar' https://  
notify-api.line.me/api/notify
  • -X 是指定發出HTTP請求,例如: POST的方法
  • -H 是指定發出請求的標頭資訊
  • -F 是指定傳送表單資料

最後一個參數便是發送LINE Notify通知時所使用的網址。

整體說來,簡單又容易。

情境範例

前面的部分向你展示了如何輕鬆地使用cURL發送訊息。以下來看一些範例。

範例1: 發送Jenkins建構的結果

這裡是一個透過 LINE Notify 發送 Jenkins建置結果訊息給自己的範例。
我們使用Jenkins 2.0內建的Jenkinsfile,並且將使用下列的規格。

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}. \n${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指令

當你誤把「ls」拼成「sl」時,sl指令就會被執行。這個指令會停止所有的工作,直到你修正這個拼字錯誤。其實它真正的名字是:一旦這個指令被執行,你會看到一個SL(steam locomotive;蒸汽火車頭)通過你的終端機螢幕。

我們來利用LINE Notify做出一個SL通過LINE螢幕的效果。將以下的shell script存為一個名為「sl」的執行擋,你就能利用LINE Notify製造出SL通過LINE螢幕的效果(必須要先設定好access token與圖片的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 "Choo choo"
    curl -s -X POST -H "Authorization: Bearer $ACCESS_TOKEN" -F "message=SL coming 
    through (Total: $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,你可以使用這個API輕鬆地撰寫發送訊息給LINE上特定用戶的服務。

你可以在development document獲得更多的細節資訊(必須要登入LINE帳號)。

結語

閱讀這篇文章後,你應該能夠使用LINE Notify發送訊息到LINE。建議你可以試試看喔。
Review

Related Post