[LINE bot 好好玩 30 天玩轉 LINE API] 第 9 天:事件處理真簡單 – 續

本文同步刊載於 iT 邦幫忙第11屆鐵人賽:[LINE bot 好好玩 30 天玩轉 LINE API] 第 9 天:事件處理真簡單 – 續

前言

昨天講了很多的 message 的 event type,就有人問我說?我們平常會加入機器人為好友、把機器人加入群組,加入聊天室看他這些情境好像都會說話,那這個部分是用 event 做到的嗎?
答案是:是的
所以我們今天就來講解這些特別的 event type 吧 ~

開始之前 – 關注 follow

我們第一個討論的是關注這件事情,在目前我們的機器人應該跟我們是好友名單的狀態,那我們先打開我們的機器人按下封鎖,沒錯就是封鎖大力的把它按下去!反正可以再解除封鎖不用緊張 XD

https://ithelp.ithome.com.tw/upload/images/20190924/201177018tgeihE2BA.png

關注 follow

現在我們已經是一個沒有關注機器人的狀態了那我們就來改一下我們的 Code 吧!

switch (event.type) {
    case 'follow':
        console.log(`Followed this bot: ${JSON.stringify(event)}`);
        return client.replyMessage(event.replyToken, { type: 'text', text: 'Got followed event' });
    case 'unfollow':
        return console.log(`Unfollowed this bot: ${JSON.stringify(event)}`);
}

然後重啟一下我們的程式,這時候我們按一下解除封鎖

https://ithelp.ithome.com.tw/upload/images/20190924/20117701EgkBB2nGa3.png

看一下我們的 Server Log,可以發現一件事情我們的 Server 會收到 replyToken 代表我們是可以回覆訊息的

Followed this bot: {"type":"follow","replyToken":"8a6320bfa84b49ccb1a45b75b615f4db","source":{"userId":"U8955b5b423b1d6be9a9a6e902b0f818c","type":"user"},"timestamp":1568908601892}

取消關注 unfollow

這時候我們再次按下封鎖,會看到我們的 Server Log,這次我們沒有收到 replyToken 了,代表這時候我們是沒有辦法回傳任何訊息

Unfollowed this bot: {"type":"unfollow","source":{"userId":"U8955b5b423b1d6be9a9a6e902b0f818c","type":"user"},"timestamp":1568908608217}

follow 與 unfollow 詳細討論

在這邊我們可以用這個 follow 與 unfollow 做一些事情,不過這邊要注意一個點,只有 follow 才有辦法傳訊息 (它有 replyToken),unfollow 是沒有的呦!

可以思考一下其實這件事情是很合理的嗎?我們的機器人已經被使用者取消關注也就是封鎖,所以如果有辦法回傳訊息合理嗎?不太合理
所以 unfollow 是沒有辦法傳送訊息的。

開始之前 – 加入群組

因為我們今天要做的範例是把機器人加入群組或是聊天室,所以要先做一個事前動作,先回我們的 Official Accont Manager 找到我們的 Bot,點選右上角的設定

https://ithelp.ithome.com.tw/upload/images/20190924/20117701tgGvwZ8MHQ.png

找到聊天,看到加入群組或多人聊天室,把不接受邀請加入群組或多人聊天室,改成接受邀請加入群組或多人聊天室

https://ithelp.ithome.com.tw/upload/images/20190924/201177013kkgZ9Jmvg.png

按下變更

https://ithelp.ithome.com.tw/upload/images/20190924/20117701voXGaoA2Uw.png

這樣我們的 Bot 就可以被加到群組了!

不過有一件事情要注意一個群組只能加入一個機器人,這點要注意一下,如果群組裡面已經有一台機器人就不用想再加入它了 XD

機器人加入群組或聊天室

加入群組

現在我們要來做加入群組的範例來改一下我們的 Code 吧!

switch (event.type) {
    case 'join':
      console.log(`Joined: ${JSON.stringify(event)}`);
      return client.replyMessage(event.replyToken, { type: 'text', text: `Joined ${event.source.type}` });

    case 'leave':
      return console.log(`Left: ${JSON.stringify(event)}`);
}

然後我們來創建群組也把 Bot 加進去

https://ithelp.ithome.com.tw/upload/images/20190924/20117701QJUPhWYLh9.png

看一下我們的 Server Log 顯示

Joined: {"type":"join","replyToken":"27be1764730143b1b8c831c6ce074739","source":{"groupId":"C7960e45823c264996b23efc5f05ee5b1","type":"group"},"timestamp":1568909157814}

加入聊天室

如果是使用聊天室比較特別,要先說第一句話才會收到 Event,跟群組不太依樣
看一下我們的 Server Log 顯示

Joined: {"type":"join","replyToken":"5a119e0002f944ef9f7db902847669ee","source":{"roomId":"Rb6c6d06a5c3f87d383302446e3e42a04","type":"room"},"timestamp":1568994838089}

機器人離開群組或聊天室

做完了加入群組,那我們現在把 Bot 退出群組吧!

看一下我們的 Server Log 顯示

Left: {"type":"leave","source":{"groupId":"C7960e45823c264996b23efc5f05ee5b1","type":"group"},"timestamp":1568910243536}

成員加入

如果是機器人被加入群組或是聊天室的情況下,群組裡面的成員有加入的動作,就會觸發此 Event

switch (event.type) {
    case 'memberJoined':
      console.log(`MemberJoined: ${JSON.stringify(event)}`);
      return client.replyMessage(event.replyToken, { type: 'text', text: `MemberJoined ${event.source.type}` });

    case 'memberLeft':
      console.log(`MemberLeft: ${JSON.stringify(event)}`);
      return client.replyMessage(event.replyToken, { type: 'text', text: `MemberLeft ${event.source.type}` });
}

加入群組

看一下我們的 Server Log 顯示
如果是群組的情況下 Log 會是 room

MemberJoined: {"type":"memberJoined","replyToken":"54af16ff595041b1aabcd58f9bae8184","source":{"roomId":"Rb6c6d06a5c3f87d383302446e3e42a04","type":"room"},"timestamp":1568995221291,"joined":{"members":[{"userId":"U8591b177451f5cbcefa9296e950e2ca3","type":"user"}]}}

加入聊天室

如果是聊天的情況下 Log 會是 group

MemberJoined: {"type":"memberJoined","replyToken":"7445974875d1434fbd5bb292338049f4","source":{"groupId":"C9a7cf153e54492b8e88881333313bb08","type":"group"},"timestamp":1568995387393,"joined":{"members":[{"userId":"U8591b177451f5cbcefa9296e950e2ca3","type":"user"}]}}

成員離開

成員離開的情況下是沒有 replyToken 可以使用的,這點要注意一下

加入群組

看一下我們的 Server Log 顯示
如果是群組的情況下 Log 會是 room

MemberLeft: {"type":"memberLeft","source":{"roomId":"Rb6c6d06a5c3f87d383302446e3e42a04","type":"room"},"timestamp":1568995104112,"left":{"members":[{"userId":"U8591b177451f5cbcefa9296e950e2ca3","type":"user"}]}}

加入聊天室

如果是聊天的情況下 Log 會是 group

MemberLeft: {"type":"memberLeft","source":{"groupId":"C9a7cf153e54492b8e88881333313bb08","type":"group"},"timestamp":1568995524699,"left":{"members":[{"userId":"U8591b177451f5cbcefa9296e950e2ca3","type":"user"}]}}

總結

機器人可以被加入各種群組或是聊天室,不過正常權限的 Bot 是沒有辦法取得群組裡面其他使用者的 User ID 的,除非這個使用者是之後才加入的,並且是在機器人加入之後,機器人也是沒有辦法移除人的,所以人家常常說的翻群機器人,其實不太算機器人他其實是用使用者帳號的權限下去改的,因次機器人是沒辦法做壞事的 XD