Order fulfillment request and cancellation webhooks not called by Shopify

The Complect Fulfill: CargoWise app we have in deployment is no longer receiving webhook calls for order fulfillment requests or cancellations.

The webhook was previously being called by Shopify, but this is no longer the case. Thankfully we have a scheduled job that runs periodically that looks for any fulfillment requests and cancellations that may have dropped through the cracks, so the app functionality is still working though delayed in actioning.

The lack of webhook calls doesn’t give a good experience for the app users though. For example, when requesting a cancellation a panel pops up in the UI which just remains in the spinning status due to the webhook not being called:

The app webhook endpoint is still available at <callback_url>/fulfillment_order_notification in alignment with the documented requirements.

In the partner dashboard no failed webhook calls are showing, or indeed any history around calling the fulfillment order notification webhook at all:

Any suggestions around what may be going wrong and how to correct the issue?

Just as I posted this, I did receive an alert email from Shopify stating there is an issue:

Fulfillment requests from shop [REDACTED] to fulfillment service Method - CHC failed. The maximum number of retries (19) has been reached and the request will not be retried.

But there’s no server logs indicating that Shopify is hitting the app with these webhook calls, and there’s still nothing in the partner dashboard indicating there’s any failed calls to this webhook.

While investigating further, I noticed that the webhooks for another fulfillment service registered by the app were working without issue. These fulfillment services had both been created using GraphQL calls. I made a change to the location name in the app which forced a fulfillmentServiceUpdate mutation call (updating both the $name and $callbackUrl parameters) which seems to have restored the required webhook plumbing behind the scenes.

I imagine touching the $callbackUrl triggered something in Shopify’s backend that fixed the issue.