Post Destroyed Webhook Event

I am currently using v2.3.0.beta2 +46

I have a webhook setup for post events. The only event I do not appear to see is post_destroyed. I have testing deleting and restoring multiple posts and I see every post_recovered event, but I do not see any events for the post being deleted.

To reproduce, create a webhook and enable post events. Delete a post on a topic that would trigger that webhook and see no delete event created.

Can you repro this @vinothkannans?

No, this is working fine for me in latest version. Iā€™m able to see triggered post_destroyed events in URL /admin/api/web_hooks/1/events. @thisnthat did you checked the events list page?

3 Likes

I have, this is the process I used to test it with a snippet of the header and payload of each event

I created the post

Header

User-Agent: Discourse/2.3.0.beta2
X-Discourse-Event-Id: 90
X-Discourse-Event-Type: post
X-Discourse-Event: post_created

Payload

{
  "post": {
    "id": 44144,
    ...
    "deleted_at": null,

I deleted the post and no event was triggered

I restored the post

Header

User-Agent: Discourse/2.3.0.beta2
X-Discourse-Event-Id: 91
X-Discourse-Event-Type: post
X-Discourse-Event: post_recovered

Payload

{
  "post": {
    "id": 44144,
    ...
    "deleted_at": null,

I deleted it again ā€“ No event

I edited the post

Header

User-Agent: Discourse/2.3.0.beta2
X-Discourse-Event-Id: 92
X-Discourse-Event-Type: post
X-Discourse-Event: post_edited

Payload

{
  "post": {
    "id": 44144,
    ....
    "deleted_at": "2019-02-28T17:07:28.427Z",

I restored the post

Header

User-Agent: Discourse/2.3.0.beta2
X-Discourse-Event-Id: 93
X-Discourse-Event-Type: post
X-Discourse-Event: post_recovered

Payload

{
  "post": {
    "id": 44144,
    ...
    "deleted_at": null,

I will recommend you to look at the URL /admin/api/web_hooks/WEBHOOK_ID/events for more info. If a triggered webhook event is failed then it will have the details. Also look at the /logs at the time of post_destroyed event. If you provide more details about the fail it will help me to debug the issue.

3 Likes

I have reviewed /admin/api/web_hooks/WEBHOOK_ID/events and the details of the events are in my previous post. Event id 90 was apost_ create, 91 post_recovered, 92 post_edited, 93 post recovered.

I tested again this morning. I reviewed the logs rails/production.log, rails/production_errors.log, rails/unicorn.stderr.log, rails/unicorn.stdout.log,

This is a snippet from the access logs for the previously mentioned events

[28/Feb/2019:17:04:50 +0000] "POST /posts HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "posts/create" 200 1517 "***/t/testing-discord-bot/10137/17" 1.268 1.268 "Thisnthat"
[28/Feb/2019:17:04:55 +0000] "PUT /posts/44144/recover HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "posts/recover" 200 1516 "***/t/testing-discord-bot/10137/16" 0.404 0.407 "Thisnthat"
[28/Feb/2019:17:07:28 +0000] "DELETE /posts/44144 HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "posts/destroy" 200 902 "***/t/testing-discord-bot/10137/16" 0.316 0.319 "Thisnthat"
[28/Feb/2019:17:07:35 +0000] "PUT /posts/44144 HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "posts/update" 200 1957 "***/t/testing-discord-bot/10137/16" 0.844 0.845 "Thisnthat"
[28/Feb/2019:17:12:55 +0000] "PUT /posts/44144/recover HTTP/2.0" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36" "posts/recover" 200 1602 "***/t/testing-discord-bot/10137/18" 0.520 0.520 "Thisnthat"

I also checked the /logs/ page and there was nothing related to this. To be sure I cleared the logs and tested it again and no error logs were generated.

I was able to track down the cause of this issue. The webhook I am using depends on a specific tag.

The issue appears to be in lib/post_destroyer.rb. tag_ids is not set on delete webhook events like it is when going through enqueue_post_hooks on the WebHook class. After making the following change, my destroy events started working correctly.

I replaced

    WebHook.enqueue_hooks(:post, :post_destroyed,
      id: @post.id,
      category_id: @post&.topic&.category_id,
      payload: payload
    ) if WebHook.active_web_hooks(:post).exists?

with

    WebHook.enqueue_hooks(:post, :post_destroyed,
      id: @post.id,
      category_id: @post&.topic&.category_id,
      tag_ids: @post&.topic&.tags&.pluck(:id),
      payload: payload
    ) if WebHook.active_web_hooks(:post).exists?
6 Likes

Thanks for the report. This is fixed in the commit

https://github.com/discourse/discourse/commit/167d85c21fd1d0ecab206c4cb45384bae41f259c

3 Likes

This topic was automatically closed after 4 days. New replies are no longer allowed.