Gửi email thông báo khi có tin nhắn Chatwork.

Với mục đích nhằm thông báo tới khách hàng những tin nhắn quan trọng. Nhưng khách hàng lại lơ tơ mơ hoặc không thèm đọc tin nhắn kể cả khi tin nhắn được gửi đích xác đến riêng khách hàng và thậm chí là lười không thèm join room chat. Vậy nên phải tìm cách gửi mail spam cho bõ ghét. 😒Đùa chứ để thông báo là "tin quan trọng nên tao mail, mày ráng đọc nha", spam một cách thảo mai đến kinh khủng.

Chốt lại task là: Gửi email khi có ai đó nhắc đến mình trong room Chatwork.

Đối với Chatwork, ở phần Thiết lập cá nhân cũng đã có mục gửi mail trong trường hợp bạn chưa đọc tin nhắn trong một thời gian thiết lập sẵn.

(Hình tự chụp)

Điều này giới thiệu thêm thôi chứ không thỏa mãn yêu cầu task =)) 🤣

1. Chatwork API

Chatwork API documentation

Ở trên là tài liệu gốc về API của Chatwork.

Để mình liệt kê dưới đây cho các bạn dễ nhìn. Thương vl ❤

Ảnh cắt từ tài liệu (link đính kèm ở đầu mục)

Vậy... nhìn sơ qua các API thì mình chọn API Lấy list message

curl -X GET -H "X-ChatWorkToken: API token"
https://api.chatwork.com/v2/rooms/{room_id}/messages?force=0

Với các tham số:

API Token: Chatwork cài đặt → Thiết lập API → Nhập mật khẩu và lấy token

room_id: uid của room chat

https://www.chatwork.com/#!rid36143xxx

force:

Nếu set = 1, nghĩa là lấy 100 message gần nhất

Default là nó = 0, là lấy những tin nhắn gần nhất (cũng max 100 tin), nếu lấy rồi thì sẽ không hiện lại nữa.

Dưới đây là kết quả demo nếu các bạn gửi đúng request.

[
    {
    "message_id": "1247036503163404xxx",
    "account": {
        "account_id": 2289xxx,
        "name": "Tran Huu Sang (チャン・フー・サン)",
        "avatar_image_url": "https://appdata.chatwork.com/avatar/2542/2542xxx.rsz.png"
    },
    "body": "test message",
    "send_time": 1573790xxx,
    "update_time": 0
    }
]

Vậy những thông tin cần thiết để gửi mail thông báo là

body: nội dung tin nhắn

account->name: người gửi

ngoài ra còn có thể đọc cả tập tin đính kèm.

2. Xử lí ở PHP

Về phần xử lí thì mình viết một con batch đơn giản với 2 nhiệm vụ chính: parse JSON và gửi mail

Phần GET data và parseJSON

        $response = Yii::$app->http_client->send($api_url.''.$room_id.'/messages?force=0', [], ['X-ChatWorkToken' => $api_token], 'get');
        
        $messages = json_decode($response->content);
        
        //kiểm tra tin nhắn TO đến mình hay không
        foreach ((array) $messages as $message) {
            if(self::checkMessage($message, $chat_work_bank_id)) {
                self::sendMail($message->body, $message->account->name);
            }
        }

Phần gửi mail


        $sender = new MailSender("@common/mail/templates/batch/mail_chatwork_to_bank_batch.twig");
        $sender->parse([
            'from'     => Yii::$app->params['mail']['mail_from'],
            'to'       => Yii::$app->params['mail']['mail_to'],
            'subject'  => '[GMO ID] チャットワークの通知',
            'textData' => ['message' => $message, 'name_from' => $name_from]
        ]);
        $sender->send();

Vậy là mục đích của task hầu như đã được đáp ứng.

Mở rộng: Các bạn tìm hiểu gửi mail cùng tập tin được đính kèm trên Chatwork nhé. Trong phạm trù bài viết này mình chỉ gửi mail kèm nội dung tin nhắn.

Các bạn có góp ý cải thiện hay mình có làm chưa đúng chỗ nào thì hãy góp ý thêm.✌

Hẹn gặp các bạn ở các task thú vị khác.

Love ya!💕