需求分析
-
举例:设备开启画面变化检测,当设备画面产生变化,设备就会产生报警(画面变化报警),产生这条报警消息之后,设备会主动向平台上传该消息,则这个过程被称为消息推送服务。
-
在萤石云平台并未找到这一接口的解决方案,网上也并没有解决方案,通过工单,我了解到了,在使用萤石云是,萤石app上开启动检,就能收到消息和图片了,开通平台消息推送就能接收了。
-
消息推送官方文档地址:open.ys7.com/help/565
-
消息推送位置: 萤石云开放平台-》云信令-》消息推送。
解决方案
本人采用的是TP6,如使用其他框架,请注意值处理。
- 开通消息推送后,根据指引,填写要接收的报警信息,并准确填写webhook中的地址。
- webhook地址要求 : 必填;接收消息的地址,默认以http:// 或者 https://开头 对于一次webhook推送,用户webhook服务的http返回码为200,且返回内容中包含了推送请求消息报文messageId时,表示推送成功。
代码示例
use think\facade\Request;
class Demo
{
/**
* @notes 萤石云云信令消息
* @return json
* @author Milo
* @date 2025/02/10
*/
public function receive_message() {
$header = Request::header();
$body = Request::getContent();
$receiveMessage = null;
try {
$receiveMessage = json_decode($body, true);
if ($receiveMessage !== null) {
// do someting ...
}
} catch (Exception $e) {
//异常处理
return json($e->getMessage(), 200)
}
$result = [];
if ($receiveMessage !== null) {
$messageId = $receiveMessage['header']['messageId'];
$result['messageId'] = $messageId;
}
return json($result, 200); // 确保返回http200
}
}
建议
- 你可以先使用平台文档上的请求体进行基础测试。
示例:
{
"body": {
"data": "0",
"index": 24409
},
"header": {
"channelNo": 1,
"deviceId": "D98462102",
"messageId": "5e57f239793f2b007fecb0de",
"messageTime": 1582821945396,
"type": "ys.open.isapi"
}
}
正确的应返回
状态码: 200
{
"messageId": "5e57f239793f2b007fecb0de"
}
- 如果测试没问题,打开消息接收后,将会在报警或其他消息触发进行推送,如果你测试的没问题,但是萤石云中台一直出现【 非正常http状态码 】 ,请检测你服务器防火墙是否进行了拦截操作。
最后
感谢观看,共同学习进步~ Tomorrow will be better