如何更改 Post-Created Webhook 事件的负载

你好。

我想在发生主题生成事件时自定义 webhook 的 payload 值。

例如…

AS-IS

{
  "post": {
    "id": 19,
    "name": "user",
    "username": "user",
    "avatar_template": "/letter_avatar_proxy/v2/letter/u/c0e974/{size}.png",
    "created_at": "2018-07-20T06:24:33.205Z",
    "cooked": "<p>Cool, now i have you, haha</p>",
    "post_number": 6,
    "post_type": 1,
    "updated_at": "2018-07-20T06:24:33.205Z",
    "reply_count": 0,
    "reply_to_post_number": null,
    "quote_count": 0,
    "avg_time": null,
    "incoming_link_count": 0,
    "reads": 0,
    "score": 0,
    "topic_id": 11,
    "topic_slug": "this-is-new-topic",
    "topic_title": "This is new topic",
    "display_username": "user",
    "primary_group_name": null,
    "version": 1,
    "user_title": null,
    "moderator": false,
    "admin": true,
    "staff": true,
    "user_id": 1,
    "hidden": false,
    "trust_level": 1,
    "deleted_at": null,
    "user_deleted": false,
    "edit_reason": null,
    "wiki": false,
    "topic_posts_count": 6
  }
}

TO-BE

{
   "topic_title": "This is new topic"
}

请问如何实现?

我也有类似的需求。也感到困惑。目前没有什么好办法。

嘿,Discourse 中没有内置的方法只发送 webhook payload 的一小部分,但有几个想法可能会奏效:

  • 您可以在中间设置一个小的代理(比如一个微小的 Node.js 或 Python 端点),它接收完整的 webhook,只剥离 topic_title 之外的所有内容,然后转发出去。这非常灵活,而且不修改 Discourse 本身。

  • 或者,如果您愿意,一个微小的 Discourse 插件可以监听 on(:post_created) 并只发送您关心的字段。只需几行 Ruby 代码即可完成。

  • 另一个“偷懒”的选项是让像 Zapier 或 n8n 这样的工具获取完整的 payload,并在其到达您的最终系统之前进行映射/过滤。

没什么花哨的,只是如果我只需要 topic_title,我会尝试的几种方法 :slightly_smiling_face: