2017年12月17日 星期日

使用C#開發LineBot(15) – 當Linebot與我們同在一起, 談群組(聊天室)處理

2017年下旬,Line更新了相關的API,終於讓Linebot可以抓取到群組中的用戶的資訊,這一點看似不起眼,但其實沒有這個功能的話,相當程度的限制了Linebot在群組中的可能性。

也因此,隨著Line開發相關API,我們的LineBotSDK當然也跟著支援了,請將專案中的LineBotSDK更新到v0.6.1-beta即可享有此功能:

更新後你會發現有幾個跟群組聊天有關係的API,分別是

  • LeaveRoom
  • LeaveGroup
  • GetRoomMemberProfile
  • GetGroupMemberProfile

在開始之前,你需要知道一些基本概念:

  1. Line裡面的群組聊天有兩種,分別是room與group
  2. 你隨意地邀請幾個人加入聊天,那一種叫做room
  3. 你透過選單所建立的群組,叫做group
  4. 一個群組裡面只能加入一隻bot
  5. 你的bot無法知道是誰把自己加進來的
  6. 但你的bot可以知道群組中當前說話的人是誰(意味著,可以取得他的個人資料,包含頭像、顯示名稱…等),即便你的bot沒有跟發話者成為好友。
  7. 你的bot只能被某人加入群組,無法主動加入群組,但可以主動離開群組。

好了,有了這些基本概念之後,我們可以開始來玩玩看,請先大致瀏覽一下底下這段code,這是WebHook的片段程式碼(完整程式碼位於github https://github.com/isdaviddong/LinebotInTheGroup)  :


接著我們看運行的結果,當我們在兩人對話的狀況下,可以透過邀請好友的方式,把一隻bot加入對談:

注意上面testlinebot2018這支bot,請觀察他回復的訊息,你會發現,他是知道自己是被加入room還是group中的(這資訊很重要,可以透過source.type取得)。

同時,當你對照上面的code也可以知道,當bot被加入群組(room/group)時,WebHook會收到一個join的event(位於第12行)。

接著,你可以試試看在群組中說話:

你會發現,當bot收到你的訊息時,WebHook會收到一個message event(第18行),其中可以取得說話者的userId(36行),透過UserId你可以取得該人的個人資訊(35行, GetRoomMemberProfile),最後回應給群組中所有人(一樣透過Reply即可, 45行)。

如果要讓bot離開群組,只需要針對呼叫LeaveRoom/LeaveGroup即可(25,27行),例如:

當你對bot說bye,你會發現bot在說完bye-bye之後,就離開聊天室了,對應到上面的程式碼就是第19-27行,呼叫LeaveRoom或是LeaveGroup API即可,請留意,一但bot主動離開,bot是無法自己重新加回群組或聊天室的,必須『被加入』才行。

其實用起來並不難,但有這幾個功能之後,你的bot可以做的事情就非常多了,改天我們再來談談一些具體的應用實例。

------------------
相關課程:http://www.studyhost.tw/NewCourses/LineBot
電子書:http://studyhost.blogspot.tw/2017/12/line-bot.html
LineBotSDK:https://www.nuget.org/packages/LineBotSDK

如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。

8 則留言:

匿名 提到...

請問有沒有辦法能夠連已讀的人有誰都知道
如果是要連已讀都知道的話大概要怎麼寫?

isDavid 提到...

沒辦法

Rick 提到...

您好, 最近在研究line機器人,看了您的資料非常有用,

我有請其他人在群組測試,只要其他人沒有加機器人好友,機器人就無法去查詢他的資料,
line server會回傳404 not found,
要有加機器人好友後才能正確查到發話者資訊。

我是自己用HttpWebRequest的方式去建立webhook。

想請問是否真的不加機器人好友也可以查到發話者資訊?

謝謝。

Rick 提到...

不好意思,我找到問題了,原來在group跟room裡找user的方式不是用單純的Get Profile,
謝謝。

洪憲明 提到...
作者已經移除這則留言。
小煉 提到...

請問老師
導入老師的範例程式碼後做test
要讓BOT離開當前群組
BOT也確實回應了bye-bye 但卻沒有出現離開的訊息
不知道問題出在哪
使用的SDK是0.6.9的版本

isDavid 提到...

要看到code比較知道你的問題可能發生在哪...

小煉 提到...

謝謝老師回應
我用的是老師在github上的程式碼
https://github.com/isdaviddong/LinebotInTheGroup/blob/master/WebApplication/Controllers/LineBotGroupController.cs

https://i.imgur.com/7pBwxlD.jpg
這個是我自己的測試圖
謝謝老師幫我解答><

Related Posts Plugin for WordPress, Blogger...

熱門文章