AWRA OpsHub Search

Two Producers, One Hook

Two entirely separate parts of the product post to the same webhook, and they obey different rules about when to send. One is filtered by the tick boxes on the settings screen and the other is not, which reads as a bug and is the correct behaviour.

Integrations & Data AWRA OpsHub Team 12 min read

A webhook is usually described as if one thing sends to it. In practice a mature system has several parts that want to tell the outside world something, and if they all reach the same address then the question of what may be sent has to be answered separately by each of them. Here there are three producers on one hook, they answer that question differently, and the difference between two of them is the most likely source of a confused support ticket in the whole connector.

Three things send to your Zap

The first is notifications. Something happens in the business, the system raises a notification, and that notification is offered to every channel the workspace has connected — chat, messaging, push, and the automation platforms.

The second is the workflow engine. A rule somebody built says when a purchase order is approved, send an event to Zapier, and that action fires as part of the rule.

The third is the connection test, which is an ordinary send with different words in it.

All three arrive at the same address, in the same envelope, and each names itself in the event field — so a scenario can tell a notification from a workflow action from a test by reading one value.

A comparison of the notification path and the workflow path into the same webhook, showing which gates each one passes.
The same webhook, the same envelope, two different sets of rules. The third row is the one that produces support tickets.

The tick boxes only govern one of them

The settings screen offers seven modules to select, and a notification is forwarded only if its module is among them. That is the filter, and it works exactly as it looks.

A workflow action does not consult it. A rule that names this connector fires whether or not the module is ticked, and the only thing checked is that the connection exists and is switched on.

Which is worth stating clearly because the first reaction to it is that something is broken. You untick inventory, events keep arriving, and the screen says inventory is off.

The tick boxes are a subscription. A workflow rule is an instruction. An instruction does not need a subscription.

The reasoning holds up. The module list exists because notifications happen whether you want them forwarded or not — the system raises them as a consequence of ordinary work, so somebody has to choose which ones leave. A workflow action is the opposite: it exists because a person built a rule whose entire purpose is to send this event to this platform. Filtering it through a module subscription would mean a rule that does nothing, silently, with both screens looking correct.

The distinction to keep hold of: one path is a firehose you filter, the other is a pipe somebody laid deliberately. They should not be governed by the same control, and the switch that governs both is the connection's own on and off.

And only one of them tells you what happened

The second asymmetry is about reporting, and it runs the other way.

A workflow action records its outcome. The send returns a result, the workflow run log gets a line, and it distinguishes three states: sent, refused by the platform with the status it gave, or skipped because the connection was absent or switched off. Somebody debugging a rule can see which.

A notification forward does not. It is queued, it sends, and the result is discarded. There is no per-notification record of whether the automation platform accepted it.

That is a defensible position for a courtesy channel — the notification itself is the record and forwarding is a copy — and it is honest to say that the two paths give you different amounts of information about the same operation. A failed workflow send is visible in the run log; a failed notification forward is visible in the application log and nowhere a customer looks.

Making the notification path report per-event outcomes the way the workflow path does is a contained piece of work, and it is the one improvement in this connector that would change how it feels to operate rather than how it behaves.

Why the envelope is built in one place

A structural detail that is easy to miss and is the reason two producers can share a hook safely.

The eight-field payload is assembled inside the sending service, not at either call site. Each producer hands over a title, a body and whatever context it happens to have, and the service fills in every field of the envelope — supplying nothing where a producer supplied nothing.

This matters because one of the two producers actively strips empty values out of what it passes. On its own that would be a payload with missing keys, which is precisely the thing that breaks a scenario built against an earlier sample. Because the envelope is rebuilt centrally, it cannot be: the keys are put back, holding nothing.

That is the general lesson worth carrying to any fan-out. A payload contract enforced at the call sites is a contract enforced N times, and the copy that gets it wrong is the one added last by somebody who did not know there was a contract. Build the envelope once, downstream of everybody.

One consequence to know when writing a scenario: a workflow event supplies no module and no category, so those two fields arrive empty on that path. The keys are there, as always — filter on the event field rather than on the module if your scenario handles both kinds.

Nine channels, each isolated

The notification path is worth one more paragraph, because the automation platforms are the ninth of nine channels a single notification is offered to.

Each of those nine is invoked inside its own guard. A failure in any one is logged and stepped over, and the remaining eight are still offered the notification.

The failure this prevents is the sort that only appears under load and is miserable to diagnose: one platform having a bad afternoon, and the symptom being that chat messages stopped arriving. Or worse — a channel throwing during the creation of a notification and taking the operation that raised it down with it, so an automation outage becomes a workspace unable to approve purchase orders.

The rule is simple and worth applying anywhere a record has side effects: a copy of an event must not be able to fail the event.

What is in place

How three producers share one webhook

One envelope, built centrally

Every producer hands over content and the sending service assembles all eight fields, so no call site can emit a payload of a different shape.

Built in

Producers named in the event field

A notification, a workflow action and a connection test each identify themselves, so one scenario can handle all three and filter on one value.

Built in

The module filter on the notification path

Notifications happen as a side effect of ordinary work, so which ones leave the building is a subscription the workspace controls.

Built in

No module filter on the workflow path

A rule that names this connector is itself the instruction to send, so it is governed by the connection being active rather than by a subscription.

Built in

Workflow sends recorded per run

The workflow log distinguishes sent, refused with the platform's status, and skipped because the connection was absent or off.

Built in

A missing workspace refused on the workflow path

An action that cannot determine whose connection to use fails rather than guessing, and says so in the run log.

Built in

An explicit workspace filter on both lookups

Neither path relies on ambient context, because both can run without a signed-in user behind them.

Built in

The connection re-read at send time

The notification job re-reads the connection inside the job, so one switched off between the event and the send does not fire.

Built in

Nine channels, nine guards

Each forward from a notification is isolated, so a failing platform cannot stop the other eight or fail the operation that raised it.

Built in

Both automation platforms independent

The connection is keyed on the workspace and the platform together, so a workspace can run both with different selections and neither affects the other.

Built in

A test that travels the real path

The connection test is an ordinary send, so a passing test exercises the same envelope, the same timeout and the same success rule as an event.

Built in

One bounded wait for everybody

Twelve seconds per send, wherever the send came from, so no producer can hold a request or a queue worker open.

Built in

Items three and four are the asymmetry this post is about, and items five and nine are the reason it is safe. The one thing on this list still worth building is the notification path reporting its own outcomes the way the workflow path already does.

Three positions held on purpose

  • A workflow action is not filtered by the module subscription. A rule whose whole purpose is to send an event to this platform should not be silently cancelled by a tick box on a different screen, which would produce a rule that appears to run and does nothing.
  • The envelope is assembled downstream of every producer. A payload contract enforced at each call site is enforced repeatedly and correctly until somebody adds a caller who did not know about it, and one of the two callers here already strips empty values.
  • A copy of an event must not be able to fail the event. Nine channels, nine independent guards, because an automation platform having a bad afternoon must not become a workspace that cannot approve a purchase order.

Five questions about a shared outbound webhook

What can send to this webhook?

A good answer sounds like

A list.

What ours actually is

Notifications, workflow actions and the connection test, each naming itself in the event field.

Do the module tick boxes filter everything?

A good answer sounds like

They should say which.

What ours actually is

Notifications only. A workflow action fires on the connection being active.

Can I see whether a send succeeded?

A good answer sounds like

For some paths.

What ours actually is

Workflow sends are recorded per run; notification forwards are not, and that is the honest gap.

Do all producers send the same shape?

A good answer sounds like

Yes.

What ours actually is

The envelope is built in the sending service, so no caller can emit a different one.

If the platform is down, what breaks?

A good answer sounds like

Nothing else.

What ours actually is

Each channel is isolated, so the other eight continue and the underlying operation is unaffected.

Our take

The interesting question about an outbound webhook is not what it sends but how many things send to it, because the moment there are two the rules stop being a property of the connector and become a property of each caller. Here one caller is filtered by a subscription and the other is not, and that will read as an inconsistency to anybody who finds it from the settings screen rather than from the code. It is the right asymmetry: a notification is something the system decided to say and a workflow action is something a person decided to say, and treating those as the same kind of traffic would mean either a firehose nobody asked for or a rule that quietly does nothing. What the two paths genuinely should share, and do not yet, is telling you whether the send worked.

Ask how many things send to that webhook

The answer is rarely one, and each of them has its own rule about when to send. Those rules are where the surprises live.

Talk through automation events

Frequently asked questions

I unticked a module but events still arrive at my Zap. Why?

The module tick boxes filter notifications. A workflow rule that names Zapier as an action is an instruction rather than a subscription, so it fires whenever the rule fires and the connection is active. Switching the connection off, or removing the action from the rule, stops it.

How do I tell a notification event from a workflow event in my Zap?

Read the event field. Notifications arrive as a notification event named after their module, workflow actions as a workflow event named after the rule's trigger, and the connection test names itself. Filtering on that field is the intended way to handle several kinds in one Zap.

Why are the module and category fields empty on some events?

A workflow event supplies neither, so both arrive empty. The keys are always present — every event carries the same eight fields — so filter on the event field rather than the module if your Zap handles both kinds.

Can I see whether a send reached Zapier?

For workflow actions, yes: the workflow run records sent, refused with the status Zapier returned, or skipped because the connection was missing or inactive. Notification forwards are not recorded per event today, which is the one gap worth closing here.

If Zapier is unavailable, does anything else stop working?

No. A notification is offered to each connected channel inside its own guard, so a failure is logged and stepped over — the other channels still receive it, and the operation that raised the notification is unaffected.

Help Center

Need a quick answer while you read?

Run inventory, procurement, assets, sales, and field work with approved AWRA guidance for setup, migration, integrations, security, pricing, and support.

Search all approved AWRA public help articles.

Open Help Center