A Slack voice for each AI agent, and a charge tool with a paper trail
Six small Make scenarios that AI agents and other automations can call: five that post to Slack under a named persona, and one that charges an owner's saved card, only after a human has confirmed it.
Where this applies
Any business running AI agents that need a voice in Slack, and a guarded way to take a financial action.
- Slack posters, identity fixed in each
- 5
- runs across the six
- 224
- idempotency key per charge, required
- 1
The problem
A business running several AI agents wants each to speak in its own voice in Slack, so a person reading a channel knows at a glance which role is talking.
It also wants one agent to be able to take a real financial action: charging a saved card for an approved expense. That is the opposite of a casual message, and has to be safe to retry, traceable and impossible to do silently.
What we built
One poster per persona, with identity fixed in the scenario
Slack lets a bot message carry its own name and icon. Rather than one scenario taking the persona as a parameter, each persona has its own tiny scenario with the name and icon fixed in it, so an agent can only speak as the role it was given the endpoint for. (One earlier webhook version let the caller override the persona; the newer posters do not.) The five posters share one Slack connection and one module configuration and differ only in trigger and persona.
The pattern improved as it was reused
The first poster was a webhook bound to one channel. It became channel-aware, keeping the old channel as the default so existing callers did not break, then a webhook to any channel with the persona overridable. The latest posters are on-demand scenarios with a declared interface (channel and text required, thread optional), so there is no public URL to guard, inputs are validated and an agent can discover how to call them.
Two deliberate attitudes to failure
The any-channel webhook poster has an Ignore handler, added after a channel-not-found failure, with a label saying why: one bad channel must not halt the poster. The on-demand posters have none, and say so in their labels, so a failed post is a failed run the caller can see and handle.
A charge tool that cannot double-charge
The charge scenario takes ten typed inputs (customer, payment method, amount in cents, description, an idempotency key, property, reason, requester, confirmer and the Slack thread) and creates and confirms an off-session payment in one call. The idempotency key is required, so a retried call cannot charge twice; a specific payment method is required, never a default; and the metadata written on the charge links it back to the property, the reason and the approving Slack thread.
The human gate lives outside it
The scenario does not decide whether a charge is allowed. The confirmation happens in Slack, in the calling agent's flow, and the scenario records who confirmed it. Its errors are deliberately not suppressed, because a swallowed charge failure is the dangerous kind.
The outcome
Across the six scenarios: 224 runs and 346 operations in Make's counters, with eight errors: seven were a bot not yet invited to a channel while the posters were being set up, and one was a restricted API key lacking a permission on the charge tool's first call. The charge tool has since succeeded.
The five posters have posted without fault since setup; the newest ran twelve times with no failures.
The result is a small, readable set of tools in which the dangerous one is the most constrained.
Where it stops
Three of the posters are identical apart from name and icon, and one webhook poster is a subset of another, so they could be collapsed into one with persona inputs, at the cost of letting a caller choose its identity. A post only works if the bot has been invited to the channel. The charge tool fixes a single currency and takes amounts in cents, so a caller sending whole currency units would be wrong by a hundred. Usage so far is light, and who calls these scenarios is not visible from inside them.
Built with
- Make.com
- Slack
- Stripe
- Webhooks
Patterns used
- Identity fixed per endpoint
- Typed on-demand interface
- Errors surface by design
- Idempotency key
Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy
Have something shaped like this?
If any part of the above resembles a problem you are living with, a short call is the fastest way to find out whether it is the same problem underneath.
What happens on the call
- 15 minutes, no deck
- We map the process on the call
- A written scope, or an honest no