> ## Documentation Index
> Fetch the complete documentation index at: https://docs.salesfinity.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Set up a playbook that learns from your calls

> Have Ari review recent calls on a schedule and update your battle cards with what worked, so every rep gets the better line on the next call.

export const AiPrompt = ({children, label = "Prompt"}) => {
  const body = useRef(null);
  const [copied, setCopied] = useState(false);
  const copy = () => {
    const text = body.current ? body.current.innerText.trim() : "";
    if (!navigator.clipboard) return;
    navigator.clipboard.writeText(text).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    }).catch(() => {});
  };
  return <div className="sf-prompt not-prose">
      <div className="sf-prompt-head">
        <span className="sf-prompt-label">
          <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
            <path d="M12 3l1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9z" />
          </svg>
          {label}
        </span>
        <button type="button" className="sf-prompt-copy" onClick={copy} aria-label={copied ? "Copied" : "Copy prompt"}>
          {copied ? <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" />
            </svg> : <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
              <rect x="9" y="9" width="12" height="12" rx="2" />
              <path d="M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1" />
            </svg>}
          <span>{copied ? "Copied" : "Copy"}</span>
        </button>
      </div>
      <div className="sf-prompt-body" ref={body}>
        {children}
      </div>
    </div>;
};

Your best rep finds an answer that works. Normally it stays in their head until you hear it in a
call review, write it down and run a training session. This page shows how to make that loop run
on its own.

<Steps>
  <Step title="Your reps make their calls">
    Salesfinity records them and keeps the transcripts, outcomes and scorecards.
  </Step>

  <Step title="Ari reviews the calls on a schedule">
    It looks at which objections came up, which answers kept the prospect talking, and which
    ended the call.
  </Step>

  <Step title="Ari updates your battle cards">
    It rewrites the cards that need it and adds a card for an objection you don't cover yet.
  </Step>

  <Step title="Every rep gets the new line on the next call">
    [Live Assist](/live-assist/overview) reads your battle cards at the start of each call, so the
    updated line is what shows on screen when a prospect pushes back.
  </Step>
</Steps>

<Note>
  You need a plan that includes [Ari](/ari/overview), which is Enterprise and Enterprise+. For the
  cards to show up during the call, your team also needs [Live Assist](/live-assist/overview), an
  add-on your CSM turns on.
</Note>

## Before you start

<Check>Your team records calls, so there are transcripts for Ari to read.</Check>
<Check>You have a few weeks of answered calls. Scored calls work best, because Ari can see what went well.</Check>
<Check>You know which outcomes count as a win for you, such as a meeting or a referral.</Check>

## 1. Write your first cards from past calls

If you have no battle cards yet, or the ones you have are out of date, start with a one-off
request. Open Ari and ask:

<AiPrompt>
  Look at our last 30 scored calls. Find the objections that came up most, and what worked and what didn't when reps answered them. Create a battle card for each objection, with the answer that worked best written as one short line a rep can say.
</AiPrompt>

Read what Ari wrote on the **Battlecards** page under **Analytics**, and edit anything that doesn't
sound like your team. See [Set up battle cards](/coaching/battle-cards).

## 2. Make it a standing job

Now give Ari the upkeep. Open **Ari's jobs** in the sidebar. In **Tell Ari what to do**, describe
the job in your own words:

<AiPrompt>
  Every day at 7am, review yesterday's connected cold calls. Find the objections that came up most and the answers that led to a meeting or a referral. Update our battle cards with what worked. Add a new card only when an objection came up at least three times and no card covers it. Then tell me what you changed and why.
</AiPrompt>

Ari sets this up as an **On a schedule** job. Use **Try it once** first: Ari does the job once
with you, so you see exactly what it would change before it runs on its own.

Then choose the job's permission. This decides whether a changed card reaches your reps before
you have seen it.

| Permission | What happens to your battle cards |
| - | - |
| **Manual** | Ari asks before every change. Each battle card edit waits under **Needs you** until you approve it. |
| **Auto approval** | Ari updates battle cards on its own. It still asks before sends and CRM changes. |
| **Skip all permissions** | Ari doesn't ask. Only paid lookups and deletes still do. |

<Warning>
  With **Auto approval**, nobody checks a card before reps see its line on a live call. Start with
  **Manual**, and switch once you trust what the job writes.
</Warning>

Last, choose where Ari tells you what it did: **Slack** or **The app**. Slack needs
[Ari connected to your workspace](/ari/slack-setup).

## 3. Check what changed

Open the job in **Ari's jobs** to see its history: every run, and what it did. Have the job report
to Slack if your team leads live there, so a changed card never surprises anyone.

## Keep the playbook tight

A few rules keep a self-updating playbook useful. Put them in the routine's task, or in a
[skill](/ari/skills) the routine follows.

* **One objection per card.** Live Assist shows the name of the card a line came from, so a clear
  name such as "Already have a dialer" tells the rep and you why the line appeared.
* **Lead with the line.** Put the one sentence you want reps to say at the top of the card.
* **No invented proof.** Tell Ari to use only numbers and customer names that appear in your calls
  or your own material. Live Assist drops a line that quotes a number it can't find there.
* **Update, don't pile up.** Ask Ari to rewrite the existing card for an objection rather than add
  a second one.
* **Never delete without asking.** Say so in the task.

## Next steps

<CardGroup cols={2}>
  <Card title="Set up battle cards" icon="shield-halved" href="/coaching/battle-cards">
    Write and edit the cards yourself.
  </Card>

  <Card title="Give Ari a standing job" icon="clock" href="/ari/responsibilities-and-routines">
    Schedules, triggers and where Ari reports.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.