Giải pháp hết box ChatWork dành cho người… nghèo
Người viết: Mạnh Vũ 1. Bài toán Những ai đang dùng ChatWork (mà không phải premium) đều sẽ gặp phải 1 vấn đề: Bạn chỉ được phép tham gia tối đa 14 chat box. Ngày xưa, khi full box, chúng ta có thể thoát 1 box để tham gia box khác. Tuy nhiên với sự thay đổi gần đây thì việc ...
Người viết: Mạnh Vũ
1. Bài toán
Những ai đang dùng ChatWork (mà không phải premium) đều sẽ gặp phải 1 vấn đề: Bạn chỉ được phép tham gia tối đa 14 chat box. Ngày xưa, khi full box, chúng ta có thể thoát 1 box để tham gia box khác. Tuy nhiên với sự thay đổi gần đây thì việc thoát box sẽ không làm giảm số lượng box chat đã tham gia của bạn, khiến cho những người dùng tài khoản free rất chi là đau khổ khi đã lỡ join nhiều box. Một giải pháp được đưa ra đó là lập 1 tài khoản khác để có thể tiếp tục sử dụng, nhưng như thế sẽ phải check tin nhắn ở 2 tài khoản. Bài viết này sẽ giúp bạn set up 1 con bot đơn giản, forward các tin nhắn từ 1 tài khoản sang tài khoản còn lại.
2. Cách thức hoạt động
Tech stack
- Ruby on Rails – framwork web
- gem chatwork – gem này cung cấp các phương thức để thao tác với ChatWork, nhưng chúng ta cũng chỉ cần phương thức gửi tin nhắn đi thôi, bạn có thể đọc docs tại đây
- ChatWork API – api_token ta dùng để cài đặt khi sử dụng gem chatwork
- ChatWork Webhook – sẽ gửi một request đến 1 đường dẫn đã cài đặt khi có một event xảy ra
- Heroku – đương nhiên dùng để deploy app lên rồi ✌
- Pingdom – chắc hẳn ai cũng biết app heroku freee sau một thời gian không hoạt động thì sẽ được sleep, sẽ hoạt động lại khi có request đến app đó. Pingdom sẽ liên tục “ping” đến app heroku của chúng ta, ngăn nó vào trạng thái sleep :v
Mô tả cách hoạt động
3. Cài đặt
2.2. Hướng dẫn
Tạo app Ruby on Rails
Cái này thì đơn giản rồi, ai cũng biết, ta chạy lệnh sau:
1 2 3 4 |
rails new cw-rails -T cd cw-rails |
Thêm vào Gemfile gem "chatwork" và chạy bundle install
Lấy API token
Tại phần profile (góc trên cùng bên phải), ta chọn API Setting
Trang API Setting hiện ra, ta nhập mật khẩu và nhấn Display để có được API Token, ta lưu chuỗi này lại (để lần sau đỡ phải mở lại trang này ✌ )
Và ta phải làm quá trình này 2 lần, mỗi lần cho 1 tài khoản
Tạo controller
Ta tiến hành tạo 1 controller rails g controller cws
Tại controller Cws, ta cài đặt như sau:
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 |
class CwsController < ApplicationController skip_before_action :verify_authenticity_token def index render html: "index page" end def create # set up token ChatWork.api_key = ENV["FRAMGIA_ACCOUNT_TOKEN"] # get room id and body of the message room_id = params[:webhook_event][:room_id] body = params[:webhook_event][:body] # find room c = ChatWork::Room.find room_id: room_id room_name = c.name # set up some params destination_room_id = ENV["DESTINATION_ROOM_ID"] body = "[To:3056978] Vu Duc Manh (private)
Message in #{room_name}:
#{body}" # change token to bot's token ChatWork.api_key = ENV["BOT_TOKEN"] # create message from bot ChatWork::Message.create room_id: destination_room_id, body: body render status: 200 end end |
Thêm vào routes.rb của app:
1 2 3 |
resources :cws |
Giải thích 1 chút:
1 2 3 |
ChatWork.api_key |
Sẽ cài đặt api_key cho ứng dụng, api key này cho phép chúng ta có quyền để thao tác với tài khoản chatwork có api key đó.
1 2 3 |
ChatWork.api_key = ENV["FRAMGIA_ACCOUNT_TOKEN"] |
Sẽ cài đặt api key thành api token của tài khoản phụ
1 2 3 4 |
room_id = params[:webhook_event][:room_id] body = params[:webhook_event][:body] |
để lấy id của box chat mà bạn muốn lấy tin nhắn và nội dung tin nhắn
1 2 3 4 |
c = ChatWork::Room.find room_id: room_id room_name = c.name |
để lấy tên của room (box chat)
1 2 3 4 |
destination_room_id = ENV["DESTINATION_ROOM_ID"] body = "[To:123456] Vu Duc Manh
Message in #{room_name}:
#{body}" |
đây sẽ xác định room mà tài khoản phụ gửi tin nhắn đến (chính là room private của acc chính và acc phụ) và nội dung của tin nhắn gửi về cho tài khoản chính. Dãy số sau To là id của người nhận, để người đó nhận được thông báo
1 2 3 |
ChatWork.api_key = ENV["BOT_TOKEN"] |
cập nhật token thành token của tài khoản bot để ta có thể gửi tin nhắn từ tài khoản này
Thực ra đoạn này không cần thiết lắm, nếu bạn muốn tài khoản phụ gửi tin nhắn trực tiếp cho tài khoản chính, nhưng mình sẽ dùng 1 tài khoản thứ 3 để gửi, đặt tên nó là con bot cho xịn sò