Web Laravel – Tạo Bot gửi message lên chatwork nhắc nhở lịch học cho sinh viên

Tram Ho

Dân IT ai cũng từng là sinh viên hoặc đang là sinh viên, mà đã là sinh viên học theo tín chỉ thì không thể nào nhớ hết được lịch học và mình cũng vậy là một người thường xuyên quên lịch học, nhầm lịch học với lại khi nhìn vào cái lịch học từ web của trường cảm giác muốn nổ tung, phải xem hôm nay là ngày bao nhiêu rồi dò xem hôm nay học môn gì, tiết mấy, phòng học nào … mà lịch học hiển thị theo dạng file excel nhìn đau đầu thực sự. Chính vì vậy mình viết một ứng dụng web nho nhỏ giải quyết việc này.

Mục Tiêu

Mục tiêu bài viết này là tạo ra 1 ứng dụng web có chức năng sau

  1. Import lịch học từ file excel, phân tích và hiển thị lên calendar để dễ dàng xem lịch
  2. Tạo Bot tự động gửi message nhắc nhở lịch học từng ngày
    Kèm theo sản phẩm được tạo ra thì mình cũng giới thiệu và hướng dẫn sử dụng một số package hay ho.
    một số ảnh demo:

Công nghệ và một số package sử dụng

Framework Laravel
Laravel là một PHP Framework mã nguồn mở và miễn phí …
Package Maatwebsite/Excel
Package này xử lý việc nhập và xuất dữ liệu vào database thông qua các file như excel, csv …
https://docs.laravel-excel.com/3.1/getting-started/
Package sun-asterisk/chatwork-php
Package này được phát triển bởi bộ phận R&D thuộc Sun-asterisk. Package giúp cho việc thao tác với chatwork dễ dàng hơn…
https://github.com/sun-asterisk-research/chatwork-php
Laravel Full Calendar
Package này hỗ trợ việc tạo calendar
https://github.com/maddhatter/laravel-fullcalendar

Bắt tay vào code

Trước khi code thì mình cũng list ra những việc cần làm đã

  1. Tạo project laravel, tạo kết nối database
  2. Tạo giao diện hiển thị calendar
  3. Lấy file excel lịch học, tạo bảng lưu dữ liệu môn học, tạo form gửi file để xử lý insert vào database
  4. Hiển thị lịch học lên calendar
  5. Tạo Bot chatwork, tạo cronjob Bot gửi message lên chatwork nhắc nhở lịch học từng ngày
    Phần 1 cài project laravel tạo kết nối database, composer…. mn tự làm nhé, mình sẽ làm hướng dẫn từ phần 2.

Tạo giao diện hiển thị calendar

Phần này sẽ sử dụng đến package Laravel Full Calendar nên mình sẽ cài nó bằng lệnh
composer require maddhatter/laravel-fullcalendar

Tiếp tục tạo CalendarController và router để return ra view
Router
Route::get('/calendar', '[email protected]');
Controller, phần này chỉ hiển thị calendar tạm chưa có dữ liệu tí nữa có dữ liệu mình sẽ truyền vào mảng $events là xong.

Tạo file view calendar.blade.php trong foder resources

Giao diện trên mình sử dụng các link CDN mn có thể copy về chạy được luôn, giao diện bao gồm một form để mình gửi file và phần calendar để hiển thị lịch, xong thì vào route /calendar sẽ hiện thị giao diện như này

Lấy file excel lịch học, tạo bảng lưu dữ liệu môn học, tạo form gửi file để xử lý insert vào database

Tiếp theo mình truy cập vào trang web của trường để dowload file lịch học, ở đây mình xuất file theo dạng lớp hiển thị theo học phần, hình như nhiều trường cùng sử dụng 1 mẫu trang web nên có định dạng giống nhau, nếu trường bạn có khác thì không sao hết, sửa lại 1 chút ở phần đọc file thôi
File mở lên có dạng như này, nhìn rắc rối phết nhỉ.

Tiếp theo mình cần tạo bảng để lưu dữ liệu, migrate như sau nhé

Cột class để lưu tên lớp học, date là ngày học,lession là tiết học, room là địa điểm phòng học. Nhớ tạo model tên là Schedule cho bảng dữ liệu schedules này luôn nhé.

Ở form giao diện phần trước có tạo action gửi đến route “/calender/import” rồi giờ mình tạo router và function nhận file ấy thôi
Router
Route::post('/calender/import', '[email protected]');
Function import bên CalenderController

Phần này sử dụng đến package Maatwebsite Excel nên mình sẽ cài nó bằng lệnh

Publish config
php artisan vendor:publish --provider="MaatwebsiteExcelExcelServiceProvider"

Tạo file để sử lý việc đọc file excel và insert dữ liệu vào DB nhé
php artisan make:import CalenderImport --model=Schedule
Nội dung file này như sau

Nhìn loằng ngoằng nhỉ: phần code này mình viết và dùng khoảng 1 năm trước nhưng mình sẽ giữ nguyên như này hơi dài nhưng có vẻ dễ hiểu hơn
công việc hàm trên như sau, nó sẽ đọc từng row trong file excel, sau đó kiểm tra xem row đó có phải môn học không ( bỏ qua các row thông tin khác ) , nếu nó là row chưa thông tin từng môn học thì mình sử lý cắt chuỗi lấy thời gian học, ngày học, tiết học
, địa điểm học và tính chính sác thời gian ngày học theo khoảng thời gian trên rồi lưu thông tin từng buổi học vào DB …
Dữ liệu được lưu vào dưới dang như sau

Hiển thị lịch học lên calender

Phần hiển thị mình chỉ cần lấy dữ liệu ra, tạo even hiên thị lên calender thôi
sửa lại function index bên controller là xong, CalenderController hoàn thiện sẽ như sau

giờ thì vào lại view sẽ thấy lịch học hiển thị

Tạo Bot chatwork, tạo cronjob Bot gửi message lên chatwork nhắc nhở lịch học từng ngày

Phần này trước hết bạn cần có 2 tài khoản https://www.chatwork.com/, 1 tài khoản làm bot để gửi message và một tài khoản nhận message.
có 2 tài khoản này rồi thì mình bắt đầu tạo cronjob để gửi message lên chatwork
Để gửi message lên chatwork thì mình cần cài package sun-asterisk/chatwork-php đã giới thiệu ở đầu bài
composer require sun-asterisk/chatwork-php
xong rồi thì ta tiếp tục chạy lênh để tạo command
php artisan make:command DailyNotification
Lệnh này sẽ tạo ra file DailyNotification.php mình sẽ sử lí việc bắn message ở đây
giờ mình cần lấy token ở tài khoản bot đã, nó sẽ đại diện cho tài khoản bot để gửi message thay vì nhập tài khoản và mật khẩu.
Bạn đăng nhập chatwork và vào link này để lấy token https://www.chatwork.com/service/packages/chatwork/subpackages/api/token.php
Có token rồi thì sửa lại command như sau

ở đây your-api-token là token nãy lấy ở tài khoản bot của bạn nhé
còn your-room-id là id phòng chát giữa bot và bạn, có thể lấy trực tiếp từ url phòng chát hoặc sử dụng lệnh trong package SunAsteriskChatwork
Xong rồi giờ bạn chạy command này là ngay lập tức Bot sẽ gửi messgae cho bạn cái lịch học,
php artisan command:notification
Giờ thì mình tạo lịch cho nó chạy hằng ngày thôi, đăng ký trong kernel và setup cronjob trên máy chủ nhé

mình cho nó chạy thông báo lúc 6h sáng. Hoặc bạn có thể cho chạy trước mỗi buổi học …

Kết bài

Bài biết này mình giới thiệu 1 số package và cách áp dụng nó, chỉ vài cái nhỏ nhỏ này thôi cũng làm cho cuộc sống đơn giản, thuận tiện hơn. Cảm ơn mọi người theo dõi, rất mong nhận được sự góp ý của mọi người để mình cải thiện chất lượng bài viết hơn. Thấy nó thú vị thì đừng quên upvote nhé
Make Awesome Things That Matter !

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo