你必須很努力

用 Ruby 將訊息傳到 LINE 群組 (LINE Notify API)

2022/01/30
字數統計: 651閱讀時間: 3 min

前言

首先你要先有 LINE,若沒有,可以左轉離開了 XD

步驟

1. 到 LINE Notify ,並登入個人的 LINE 帳號

LINE Notify

LINE Notify 頁面

登入自己的 LINE

2. 點自己的名字,進入「個人頁面」

3. 選「發行權杖」

4. 輸入想要加入 LINE Notify 的 LINE 群組,接著點「發行」

注意: 若離開此頁面,將不會再顯示新發行的權杖。 離開頁面前,請先複製權杖。

5. 用 curl 測試看看

記得先把「LINE Notify 官方帳號」加入群組中

LINE Notify 官方帳號

1
2
3
4
5
# 記得換成自己的 token
curl -X POST -H 'Authorization: Bearer <access_token>' -F 'message=測試發訊息' https://notify-api.line.me/api/notify

# 範例
curl -X POST -H 'Authorization: Bearer tsxxxxxxxxxIV' -F 'message=測試發訊息' https://notify-api.line.me/api/notify

官方文件 LINE Notify API Document 提供的範例

6. 用 Postman 測試看看

Postman 點 </> icon ,可以選各式程式語言的範例

7. 用 Ruby 的 irb 測試看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
require('net/http')
token = 'tsxxxxxxxxxIV' # 換成自己的 Token
url = 'https://notify-api.line.me/api/notify'
message = "測試要傳的訊息\nHello World!!"
uri = URI(url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
http.open_timeout = 10
http.continue_timeout = 10

request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{token}"
request.set_form_data(message: "\n#{message}")
response = http.request(request)
response

將 Ruby 那段寫得更嚴謹些

不能保證每次打 API 都是正常的,有可能剛好遇到 LINE 服務異常,導致 Timeout 等問題,應該要針對已知可能會發生的問題,進行預防和處理。

另外也應該針對 response 和 exception 存 logger,後續有異常要追問題時,才會有比較多線索和方向

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class ChatBotNotifier
require('logger')
require('net/http')

LINE_NOTIFY_URL = 'https://notify-api.line.me/api/notify'.freeze

def line_notify(token, message)
uri = URI(LINE_NOTIFY_URL)
http = init_http(uri)
call_line_api(uri, http, token, message)
end

private

def logger
@logger ||= Logger.new('message.log')
end

def init_http(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
http.open_timeout = 10
http.continue_timeout = 10
http
end

def call_line_api(uri, http, token, message, error_retry = 0)
request = Net::HTTP::Post.new(uri)
request['Authorization'] = "Bearer #{token}"
request.set_form_data(message: "\n#{message}")
response = http.request(request)
logger.info("#{__FILE__}##{__method__} response: #{response.body}")
rescue StandardError => e
if error_retry < 5
sleep(10)
error_retry += 1
retry
else
logger.error("#{__FILE__}##{__method__} exception: #{e.inspect}")
end
end
end


token = 'tsxxxxxxxxxIV' # 換成自己的 Token
message = "測試要傳的訊息\nHello World!!"
ChatBotNotifier.new.line_notify(token, message)

小結

若有例行要傳的訊息,可以用 Linux crontab 做排程,也可用 Sidekiq 的 scheduler 處理。

參考文件

LINE Notify API Document


medium 文章連結:https://link.medium.com/gkQQBO1Henb
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

原文連結:https://riverye.com/2022/01/30/line-notify/

發表日期:2022-01-30

更新日期:2022-07-22

CATALOG
  1. 1. 前言
  2. 2. 步驟
    1. 2.1. 1. 到 LINE Notify ,並登入個人的 LINE 帳號
      1. 2.1.1. LINE Notify 頁面
      2. 2.1.2. 登入自己的 LINE
    2. 2.2. 2. 點自己的名字,進入「個人頁面」
    3. 2.3. 3. 選「發行權杖」
    4. 2.4. 4. 輸入想要加入 LINE Notify 的 LINE 群組,接著點「發行」
      1. 2.4.1. 注意: 若離開此頁面,將不會再顯示新發行的權杖。 離開頁面前,請先複製權杖。
    5. 2.5. 5. 用 curl 測試看看
      1. 2.5.1. 記得先把「LINE Notify 官方帳號」加入群組中
    6. 2.6. 6. 用 Postman 測試看看
      1. 2.6.1. Postman 點 </> icon ,可以選各式程式語言的範例
    7. 2.7. 7. 用 Ruby 的 irb 測試看看
  3. 3. 將 Ruby 那段寫得更嚴謹些
  4. 4. 小結
  5. 5. 參考文件