Sử dụng gem Chatwork trong Rails
Bài đăng này đã không được cập nhật trong 3 năm
Lời mở đầu
Hiện nay chúng ta sử dụng chatwork rất nhiều trong công việc, có lúc bạn cần gửi tin nhắn hàng ngày một cách tự động với mục đích nào đó (thông báo thời gian quẹt thẻ hàng ngày, thông báo lỗi phát sinh từ hệ thống .vv..) Sử dụng gem Chatwork giúp bạn làm được điều đó. Dưới đây mình có làm demo gửi thông báo đến chatwork về thời gian quẹt thẻ của mọi người đến 1 nhóm chat cụ thể
Cài đặt
Chúng ta thêm vàm Gemfile
gem 'chatwork'
Sau đó chạy
bundle install
Như vậy gem chatwork đã được cài đặt Ta sử dụng nó bằng cách
require "chatwork"
# Tạo một message vào nhóm có id là 1234
ChatWork.api_key = "XXX"
ChatWork::Message.create(room_id: 1234, body: "Hello, ChatWork!")
Ta sẽ được kết quả: Để lấy được api key thì ta vào đây để đăng kí lấy api. Sau khoảng 1 tuần tài khoản chatwork của bạn sẽ xuất hiện 1 tab API trong Personal Settings. Nhập mật khẩu api key sẽ hiện ra. Lưu ý k được để lộ api key vì người khác có thể dùng api key đó mạo danh bạn.
Để lấy được id của nhóm chat thì ta vào nhóm đó rồi nhìn trên đường link. Các số sau chữ id là id của nhóm đó. Ví dụ đường link là: https://www.chatwork.com/#!rid51494898 thì id sẽ là 51494898 Thật dễ dàng để tạo tin nhắn phải không.
Get thông tin từ chatwork
- Để lấy thông tin tất cả nhóm chat ta tham gia ta dùng câu lệnh
ChatWork::Room.get
. Kết quả sẽ trả về một mảng thông tin của các nhóm chat.
[{"room_id"=>45269978,
"name"=>"ABC developers ",
"type"=>"group",
"role"=>"member",
"sticky"=>true,
"unread_num"=>1,
"mention_num"=>0,
"mytask_num"=>0,
"message_num"=>27674,
"file_num"=>114,
"task_num"=>0,
"icon_path"=>"https://appdata.chatwork.com/icon/451/451074.rsz.gif",
"last_update_time"=>1492995821},
{"room_id"=>51494898,
"name"=>"ABC Family",
"type"=>"group",
"role"=>"member",
"sticky"=>true,
"unread_num"=>0,
"mention_num"=>0,
"mytask_num"=>0,
"message_num"=>31476,
"file_num"=>463,
"task_num"=>21,
"icon_path"=>"https://appdata.chatwork.com/icon/511/511687.rsz.png",
"last_update_time"=>1492995675},
{"room_id"=>57145326,
"name"=>"ABC Emoji Team",
"type"=>"group",
"role"=>"admin",
"sticky"=>true,
"unread_num"=>0,
"mention_num"=>0,
"mytask_num"=>0,
"message_num"=>10083,
"file_num"=>160,
"task_num"=>0,
"icon_path"=>"https://appdata.chatwork.com/icon/598/598720.rsz.jpg",
"last_update_time"=>1492965230},
{"room_id"=>64525173,
"name"=>"Framgia Ruby all",
"type"=>"group",
"role"=>"member",
"sticky"=>true,
"unread_num"=>0,
"mention_num"=>0,
"mytask_num"=>0,
"message_num"=>849,
"file_num"=>6,
"task_num"=>0,
"icon_path"=>"https://appdata.chatwork.com/icon/680/680809.rsz.png",
"last_update_time"=>1492948957}]
- Để lấy thông tin cá nhân ta gọi
ChatWork::Room.get.me
{"account_id"=>1616992,
"room_id"=>41518211,
"name"=>"Vu Thi Ngoc",
"chatwork_id"=>"3010",
"organization_id"=>764965,
"organization_name"=>"Framgia Vietnam",
"department"=>"Division 2",
"title"=>"Ruby developer",
"url"=>"",
"introduction"=>"",
"mail"=>"ngocvu123@gmai.com",
"tel_organization"=>"",
"tel_extension"=>"",
"tel_mobile"=>"0988222333",
"skype"=>"",
"facebook"=>"ngocvu.uet94",
"twitter"=>"",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/1133/1133838.rsz.jpg"}
****
- Lấy thông tin của người trong một nhóm chat ta dùng lệnh:
ChatWork::Member.get(room_id: "51494898")
Kết quả trả về là 1 mảng danh sách info của cả nhóm
[{"account_id"=>637911,
"role"=>"admin",
"name"=>"Nguyen Thi Ngoc",
"chatwork_id"=>"",
"organization_id"=>157080,
"organization_name"=>"Framgia Vietnam",
"department"=>"2",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/186/186001.rsz.jpg"},
{"account_id"=>950525,
"role"=>"admin",
"name"=>"Dinh Hoang Long",
"chatwork_id"=>"dinhhoanglong91",
"organization_id"=>69570,
"organization_name"=>"Framgia Vietnam",
"department"=>"System Development 2 / Section 1 / Group 2",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/392/392371.rsz.jpg"},
{"account_id"=>1039197,
"role"=>"member",
"name"=>"fksfkjsdkfdskj",
"chatwork_id"=>"",
"organization_id"=>381934,
"organization_name"=>"Framgia Vietnam",
"department"=>"New Business Development",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/ico_default_red.png"},
{"account_id"=>1072041,
"role"=>"member",
"name"=>"Nguyen Thi Hong Nhung",
"chatwork_id"=>"",
"organization_id"=>401444,
"organization_name"=>"Framgia Việt Nam",
"department"=>"Division 2/ QA sec 2",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/558/558349.rsz.jpg"},
{"account_id"=>1079357,
"role"=>"admin",
"name"=>"Nguyen Van Nam",
"chatwork_id"=>"namnv609",
"organization_id"=>69570,
"organization_name"=>"Framgia",
"department"=>"Division 2",
"avatar_image_url"=>"https://appdata.chatwork.com/avatar/808/808027.rsz.jpg"}]
Giờ ta làm một demo mang tính thực tế có thể sử dụng được dùng gem chatwork
Demo gửi thông báo đến chatwork
Hằng ngày chúng ta phải kiểm tra thời gian check in check out, nếu có thể tự động nó bằng cách gửi tự động thông báo thời gian quẹt thẻ thì sẽ rất tiện lợi, tiết kiệm rất nhiều thời gian Bước 1: Cài đặt gem chatwork như trên Bước 2: Cài đặt gem google driver cho phép chúng ta có thể đọc file lấy nội dung từ spreadsheets bất kì. Bạn có thể tham khảo cách cài đặt tại Đây Đây là đoạn code mình sử dụng
class SendNotificationService
require "chatwork"
PERSONS = ["Vũ Thị Ngọc", "Mai Đình Phú", "Nguyễn Văn Nam", "Nguyễn Văn Trường",
"Nguyễn Văn Hiển"]
class << self
def execute
# Khai báo api key của chat work
ChatWork.api_key = Settings.config.api_key
# Khai báo đường link mà bạn muốn lấy thông tin
sheet_url = Settings.config.sheet_url
session = GoogleDrive::Session.from_config("config.json")
# Lấy thông tin của sheet
sheet = session.spreadsheet_by_url(sheet_url).worksheets[1]
# Lấy ra tất cả các thông tin theo hàng trong sheet
rows = sheet.rows
# Khởi tạo mảng chứa tất cả các dữ liệu muốn lấy
timesheets = []
# Khởi tạo message để gửi đến chatwork
messages = "[To:1079357] [To:1614638][To:1385456][To:1567299]
[info][title]Timesheet at #{Time.now.to_date.to_s}[/title][code]"
# Lấy dữ liệu
rows.each do |row|
if PERSONS.include? row[2]
timesheets << row
end
end
# Tạo message
timesheets.each do |sheet|
person_timesheet = sheet.from(2).take(42).reject(&:empty?).join(" |")
messages += "#{person_timesheet}
+-----+----------------+---------------------------+-------
-------+------------+-----------+------------+-----------+"
end
messages += "[/code][/info]"
# Gửi mesage đến chatwork
ChatWork::Message.create(room_id: 41518211, body: messages)
end
end
end
Gọi
SendNotificationService.execute
Ta sẽ được kết quả
Để gửi thông báo một cách tự động ta dùng gem whenever. Bạn có thể tìm hiểu qua docs
Hi vọng bài viết có thể giúp ích cho bạn! :p Source code: https://github.com/ngocvu3010/demo_send_notification_chatwork
All rights reserved