《vbot微信聊天機器人微信聊天消息詳解(1):結構詳解》要點:
本文介紹了vbot微信聊天機器人微信聊天消息詳解(1):結構詳解,希望對您有用。如果有疑問,可以聯系我們。
相關主題:web微信和微信機器人
Vbot 的內置處理使消息變得多種多樣,也更便于程序的靈活處理。
所有消息類都繼承于 Illuminate\Support\Collection,Collection 實現了 ArrayAccess 接口,你把消息當成數組即可,取出屬性時只需把屬性名稱當作數組下標, 比如 $message['from']['NickName'] 。更多的消息操作方法可以參考:https://laravel-china.org/docs/laravel/5.4/collections
注意:每次接受到的消息都會存入緩存中,兩分鐘后過期,方便取出撤回消息。
每種消息都可能含有各自獨特的屬性,但它們都含有基礎屬性。
參數 | 類型 | 描述 |
---|---|---|
type | string | 消息類型(每種消息都對應一個 type 類型) |
username | string | 發送者的 Username,當為群消息時此值為 sender 的 username |
from | array | 消息來源 |
sender | array | 群消息發送者,個人發送時,本項為空 |
content | string | 經過處理顯示在控制臺的消息 |
message | string | 轉格式后的消息 |
time | Carbon | 發送時間 |
fromType | string | 消息發送者類型 |
raw | array | 消息原始數據(完全不經處理的原始數據) |
要點:
username :表示發送者的標識,每次vbot進程都是一樣的,因此在當前進程可以做為該用戶的唯一標識。
注意,消息不管是群發送,還是個人發送,[username]值都是發消息的那個個人的username,
(a)消息為群內發送時,[username]是群內發消息者的標識,而不是群的username,它等同于[sender][UserName]。
(b)當消息為個人發送時,[username]是發送者的標識,此時[sender]為空
message 、 content 、 raw 有什么區別?
raw: 是微信返回的原始數據,其中夾雜著大量無用的數據, Vbot 在處理 raw 時會取出有用的數據作為消息的屬性
message: message 是經過 raw 處理而來的,例如對標簽、XML 的轉移,可以保存到數據庫。
content: content 是為了處理不便于在控制臺展示的數據。如 [表情] [視頻] [分享] 等等
【總結】message比較有用,可以保存入庫,可以做內部操作,比如查找關鍵字。
fromType:消息發送者的類型,有以下幾種:
System 系統消息
Self 自己發送的消息
Group 群組消息
Friend 聯系人消息
Official 公眾號消息
Special 特殊賬號消息
Unknown 未知消息
注意首字母是大寫的。
from :來源
注意可能是好友,或群,或公眾號。[from]詳細記錄了發送者的信息。
如果是群發來的信息,就會有$message['sender'],保存了群里發消息的人的信息。
因此,通常你需要先用fromType來判斷消息發送者類型,再去取發消息的人信息。
time :注意這是一個對象,而不是數組。它的值如下:
[time] => Carbon\Carbon Object
(
[date] => 2018-03-11 10:03:45.000000
[timezone_type] => 3
[timezone] => Etc/GMT-8
)
消息發送時間獲取方法:$message['time']->date ,當然你也可以直接用接收消息時的time(),時間大致一樣。
舉例:
消息類型: $message['type']
消息來源昵稱: $message['from']['NickName'] (更多詳情可查閱 聯系人)