# Webhook

EMQX 支持通过 Webhook 的方式将客户端消息和事件发送到外部 HTTP 服务。

前置准备

# 功能清单

# 快速开始

我们将通过示例来展示如何使用 Dashboard 创建一个简单的 Webhook,并桥接到一个 HTTP 服务器。

# 搭建简易 HTTP 服务

首先我们使用 Python 搭建一个简单的 HTTP 服务,用来接收 POST / 请求,该服务打印请求内容后返回 200 OK:

from flask import Flask, json, request

api = Flask(__name__)

@api.route('/', methods=['POST'])
def print_messages():
  reply= {"result": "ok", "message": "success"}
  print("got post request: ", request.get_data())
  return json.dumps(reply), 200

if __name__ == '__main__':
  api.run()
1
2
3
4
5
6
7
8
9
10
11
12

将上面的代码保存为 http_server.py 文件,文件所在目录运行如下命令:

# 安装 flask 依赖
pip install flask

# 启动服务
python3 http_server.py
1
2
3
4
5

# 创建 Webhook

  1. 转到 Dashboard 数据集成 -> 数据桥接页面。
  2. 点击页面右上角的创建。
  3. 在数据桥接类型中选择 Webhook,点击下一步。

image

  1. 输入数据桥接名称,要求是大小写英文字母或数字组合,这里我们输入 my_webhook
  2. 请求方法选择 POST,URL 为 http://localhost:5000,其他使用默认值即可。
  3. 点击最下方创建按钮完成规则创建。

至此您已经完成数据桥接创建,接下来将继续创建一条规则来指定需要写入的数据:

  1. 转到 Dashboard 数据集成 -> 规则页面。
  2. 点击页面右上角的创建。
  3. 输入规则 ID my_rule,在 SQL 编辑器中输入规则,此处选择将 t/# 主题的 MQTT 消息发送到 Webhook,此处规则 SQL 如下:
SELECT 
  *
FROM
  "t/#"
1
2
3
4
  1. 添加动作,在动作下拉框中选择 使用数据桥接转发 选项,选择先前创建好的 Webhook。
  2. 点击最下方创建按钮完成规则创建。

至此您已经完成整个创建过程,可以前往 数据集成 -> Flows 页面查看拓扑图,此时应当看到 t/# 主题的消息经过名为 my_rule 的规则处理,处理结果转发到 Webhook。

# 测试

使用 MQTTX 向 t/1 主题发布消息,此操作同时会触发上下线事件:

mqttx pub -i emqx_c -t t/1 -m '{ "msg": "hello Webhook" }'
1

查看 Webhook 运行统计,命中、发送成功次数均 +1。

查看消息是否已经转发到 HTTP 服务:

python3 http_server.py
 * Serving Flask app 'http_server' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)

got post request:  b'hello Webhook'
1
2
3
4
5
6
7
8
9