你必須很努力

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

2022/01/30
字數統計: 637閱讀時間: 2 min

前言

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

步驟

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

LINE Notify 頁面

登入自己的 LINE

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

3. 選「發行權杖」

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

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

5. 用 curl 測試看看

記得先把 加入群組中

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-01-30

CATALOG
  1. 1. 前言
  2. 2. 步驟
    1. 2.1. 1. 登入到 ,並登入個人的 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. 記得先把 加入群組中
    6. 2.6. 6. 用 Postman 測試看看
      1. 2.6.1. Postman 點 </> icon ,可以選各式程式語言的範例
    7. 2.7. 7. 用 Ruby 的 irb 測試看看
  3. 3. 將 Ruby 那段寫得更嚴謹些
  4. 4. 小結
  5. 5. 參考文件