Giới thiệu về gem "Slack Ruby Client"
This post hasn't been updated for 3 years
Slack là một công cụ tuyệt vời cho việc trao đổi thông tin (chat/call), nó hỗ trợ nhiều nên tảng từ web, moblie và cả desktop cho người dùng có thể sử dụng tiện lợi bất cứ ở nơi đâu. Hiện tại khá nhiều người dùng/doanh nghiệp sử dụng slack là công cụ chính để trao đổi trong công việc, ngoài những tính năng vượt trội thì Slack còn cung cấp khá đầy đủ các bộ Api/Web interface cho các nhà phát triển.
Mình xin giới thiệu tới mọi người về gem "Slack Ruby Client". Tác giả đã xây dựng gem dựa trên bộ api mà slack cung cấp, nhằm chuyển đổi cấu trúc api về đối tượng trong ruby để cho mọi người thao tác một cách dễ dàng hơn. Chủ đề này bao gồm 2 phần chính là "Slack Ruby Client" cho web api và Realtime messaging, nhưng ở bài viết này tôi chỉ giới thiệu chính về "Slack Ruby Client".
Gem này có thể giúp gì cho chúng ta
- Chúng ta có thể gửi tin nhắn đến hệ thống slack thông qua web api và gửi nhận tin nhắn qua realtime api.
- Nếu bạn đang muốn giảm tối đa lượng code và mục đích chỉ cần 1 dứng dụng cơ bản thì sử dụng gem này là tương đôi tốt (ngắn gọn, dễ hiểu)
- Nếu bạn đang muốn xây dựng một ứng dụng đầy đủ bao gồm cả BOT và tích hợp button Slack thì hãy đọc và sử dụng kèm theo slack-ruby-bot và slack-ruby-bot-server
Cài đặt
Thêm đến Gemfile => gem 'slack-ruby-client'
sau đó chạy bundle install
Sử dụng
Tạo Bot
Để sử dụng các api trong Slack chúng ta phải tạo 1 con Bot đại diện như là một người dùng. Link tạo bot tại đây
Nhập username
sau đó click button Add bot integration
để hoàn thành. Tiếp khi tạo xong bot là màn hình có đầy đủ các thông tin như api_key, username, Icon và ngoài api-token thì các thông tin khác có thể customize bình thường.
Chú ý đến api-token vì đây là key để xác thực truy cập vào slack từ Ruby.
Sử dụng API Token
Để sử dụng Thư viện Slack này trong ruby chúng ta phải khởi tạo thông tin của nó trong initializers
như token, logger...
Slack.configure do |config|
config.token = ENV['SLACK_API_TOKEN']
end
Đoạn code bên trên là cấu hình api-token để xác thực, chúng ta có thể lấy api-token trong con bot vừa tạo để cấu hình cho biến môi trường ENV['SLACK_API_TOKEN']
Web client
Slack Web Api cho phép chúng ta xây dựng ứng dụng để tương tác với nó.
- Test Auth(Kiểm tra xác thực)
client = Slack::Web::Client.new client.auth_test #Token là đúng sẽ có kết quả như dưới: [2] pry(main)> client.auth_test => {"ok"=>true, "url"=>"https://framgiaworld.slack.com/", "team"=>"FRAMGIA", "user"=>"anhkhang2304", "team_id"=>"T7W7DF45P", "user_id"=>"U8YE62Z9T"}
- Gửi tin nhắn
Gửi tin nhắn với method
chat_PostMessage.
Sau khi gửi thành công chúng ta có thể kiểm tra kết quả như hình bên dưới.[3] pry(main)> client.chat_postMessage(channel: '#kpro', text: 'Hello framgia', as_user: true) => {"ok"=>true, "channel"=>"C8YASUEUS", "ts"=>"1517023480.000018", "message"=>{"type"=>"message", "user"=>"U8YE62Z9T", "text"=>"Hello framgia", "bot_id"=>"B8YE62YTF", "ts"=>"1517023480.000018"}}
- Kiểm tra danh sách channel
Sử dụng method
channels_list
channels = client.channels_list.channels # Tìm channel có tên 'general' trong danh sách `channels` vừa list ở trên. general_channel = channels.detect { |c| c.name == 'general' }
- Upload File
Sử dụng method
files_upload
client.files_upload( channels: '#general', as_user: true, file: Faraday::UploadIO.new('/path/to/avatar.jpg', 'image/jpeg'), title: 'My Avatar', filename: 'avatar.jpg', initial_comment: 'Attached a selfie.' )
- Lấy thông tin của channel
Bạn có thể sử dụng ID của channel hoặc name với prefixed(Ký tự #).
client.channels_info(channel: 'C04KB5X4D') #or client.channels_info(channel: '#general')
- Lấy thông tin của người dùng
Giống như mục #5 bạn có thể dử dụng user_id hoặc prefixed(Nhưng với tìm kiểm user thì ta sẽ dử dụng prefixed với ký tự @)
client.users_info(user: 'U092BDCLV') # or client.users_info(user: '@dblock')
- Tìm kiếm người dùng
Để xử dụng được tính năng này chúng ta cần add them gemfile
picky
client.users_search(user: 'anhkhang2304')
-
Chú ý: Có thể tham khảo thêm rất nhiều các api khác tại đây
-
Web Client Options: Ngoài config như ban đầu là token mình sẽ list thêm một số thuộc tính mà Slack hỗ trợ.
Column 1 Column 2 user_agent User-agent, default to Slack Ruby Client/version. proxy Optional HTTP proxy. ca_path Optional SSL certificates path. ca_file Optional SSL certificates file. endpoint Slack endpoint, default is https://slack.com/api. logger Optional Logger instance that logs HTTP requests. timeout Optional open/read timeout in seconds. open_timeout Optional connection open timeout in seconds. default_page_size Optional page size for paginated requests, default is 100. default_max_retries Optional number of retries for paginated requests, default is 100. Ví dụ:
Slack::Web::Client.config do |config| config.user_agent = 'Slack Ruby Client/1.0' end client = Slack::Web::Client.new(user_agent: 'Slack Ruby Client/1.0')
Ngoài cách khai báo khi initializer thì chúng ta cũng có thể chèn trực tiếp khi gọi các function qua đối tượng request.
client.channels_list(request: { timeout: 180 })
Kết Luận
Bài viết trên đã giới thiệu cho mọi người về những api cơ bản trong slack và cách áp dụng nó trong ruby với gem. Trong phần tiếp theo mình rất hy vọng sẽ đi tiếp về giới thiệu các thuộc tính khác cần thiết hơn và kết hợp với RealTime Client.
Đây là bài mà mình đã học/dịch và làm ví dụ từ page chính thức của gem 'Slack Ruby Client'. Bài viết có thể chưa được hoàn chỉnh hoặc chưa rõ ý nên mình mong mọi người sẽ thông cảm và góp ý để bài viết thêm hoàn chỉnh hơn. Thanks!
All Rights Reserved