《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'] (更多详情可查阅 联系人)