From Slack to Salesforce in One Heartbeat
A step-by-step walkthrough of a real customer interaction, from initial message to resolution, showing how channels, integrations, and memory work together.
The best way to understand what an agent does is to watch one work. This post walks through a real scenario: a customer inquiry that arrives on Slack and is resolved in under thirty seconds, touching four different systems along the way. No human intervention required.
The Setup
Acme Corp uses HeartBeatAgents to power their customer-facing support channel on Slack. Their agent, "Aria," is connected to Slack (for communication), HubSpot (for CRM data), Stripe (for billing and order information), and Google Workspace (for internal documentation). Aria's standing orders define her as a senior support specialist with authorization to process refunds under $100 and access to the full customer knowledge base.
It is 2:47 PM on a Tuesday. A message arrives in the #support channel.
Step 1: Message Received
Customer (Slack): "Hey, I was charged twice for my last order. Order #4821. Can someone help?"
The Slack channel adapter captures this message and normalizes it. The system identifies the sender as Jamie Park, maps their Slack user ID to their internal customer profile, and loads Aria's standing orders. Processing begins.
Step 2: Memory Retrieval
Before responding, Aria queries her memory system. The episodic memory search returns two prior conversations with Jamie. One about a feature question three weeks ago, and one about onboarding two months ago. Both were resolved positively. The semantic memory search reveals a stored fact: "Jamie Park, Acme Corp Professional plan, renewal date April 15." No procedural memory matches for duplicate charges specifically, but there is a stored procedure for general refund processing.
This context shapes Aria's approach. She knows Jamie is an established customer with a positive interaction history. No need for extensive identity verification beyond what Slack already provides.
Step 3: CRM Lookup
Aria invokes the hubspot_get_contact tool with Jamie's email address. HubSpot returns the full contact record: Professional plan, account in good standing, 14 months as a customer, no open tickets. The contact record confirms the Slack identity match.
Step 4: Order Verification
Next, Aria calls stripe_get_charge with the order reference #4821. Stripe returns the charge details: $49.00, processed February 8, payment method ending in 4242. Aria then calls stripe_list_charges with a filter for Jamie's customer ID and the date range around the order. The result confirms the problem: there are two charges of $49.00 on February 8, both referencing order #4821. The duplicate is clear.
Step 5: Resolution
Aria's standing orders authorize refunds under $100 without human approval. The duplicate charge of $49.00 qualifies. Aria invokes stripe_create_refund for the second charge. Stripe confirms the refund has been initiated. It will appear on Jamie's statement within 5-10 business days.
Step 6: Response
Aria composes her response, incorporating all the context she has gathered:
"Hi Jamie! I looked into this and confirmed that order #4821 was indeed charged twice: two charges of $49.00 on February 8. I have processed a refund for the duplicate charge. It should appear on your card ending in 4242 within 5-10 business days. Sorry for the inconvenience, and let me know if there is anything else I can help with!"
This response is specific, actionable, and complete. Jamie does not need to provide additional information. Jamie does not need to wait for a human agent. The issue is resolved.
Step 7: Memory Update
After the response is sent, the memory pipeline processes the interaction. A new episodic memory is stored: the full conversation with Jamie about the duplicate charge, including all tool invocations and their results. A new semantic memory is extracted: "Jamie Park experienced a duplicate charge on order #4821 in February 2025; refund processed." The procedural memory for refund processing is updated with this successful execution, slightly increasing its confidence score.
If Jamie comes back next week with a different question, Aria will remember this interaction and the resolution. If another customer reports a duplicate charge, Aria's procedural memory will guide her through the same efficient resolution flow.
What Happened Under the Hood
Total elapsed time from message receipt to response: 8.3 seconds. In those 8.3 seconds, the system:
- Received and normalized a Slack message
- Retrieved the customer's identity and loaded agent context
- Queried three memory types for relevant prior context
- Made one API call to HubSpot (CRM lookup)
- Made two API calls to Stripe (charge lookup, charge listing)
- Made one API call to Stripe (refund creation)
- Generated a contextual, specific response
- Validated the response against standing orders
- Delivered the response via Slack
- Extracted and stored new memories
Four systems. Ten operations. 8.3 seconds. No human in the loop.
Why This Matters
A human agent handling this same request would need to: read the Slack message, open HubSpot, search for Jamie's record, open Stripe, find the order, verify the duplicate, process the refund, switch back to Slack, and type a response. That takes 3-5 minutes on a good day, and that assumes the human agent has access to all four systems and knows how to navigate each one.
Now multiply by fifty similar requests per day. The math is straightforward. An agent does not just handle this faster. It handles it more consistently. Every response follows the same verification process. Every refund goes through the same authorization check. There is no variance based on which human happened to pick up the ticket, whether they were having a good day, or whether they remembered to check the CRM before responding.
This is one scenario. One customer. One request. In production, Aria handles hundreds of interactions per day across Slack, email, and web chat, each one following the same pattern of contextual reasoning, tool orchestration, and memory-informed response. That is the power of an autonomous agent: reliable, consistent, always available, and getting better with every interaction.