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

# Call recording insight text action

> Perform an action based on a text selection on a call recording insight

<img className="dark:hidden" width="720" height="440" noZoom src="https://mintcdn.com/attio/2EyaTyByKNPeSVcd/images/text-selection-insight.png?fit=max&auto=format&n=2EyaTyByKNPeSVcd&q=85&s=9cfd4c214bd097eb35b3f801fbae831b" data-path="images/text-selection-insight.png" />

<img className="hidden dark:block" width="720" height="440" noZoom src="https://mintcdn.com/attio/2EyaTyByKNPeSVcd/images/text-selection-insight-dark.png?fit=max&auto=format&n=2EyaTyByKNPeSVcd&q=85&s=d267c2eeeaa91b79ecae6c8b75314bf1" data-path="images/text-selection-insight-dark.png" />

Call recording insight text actions are shown when a user selects text in a call recording insight.

Add one by creating an extension folder under `src/app/extensions/` whose `extension.tsx` default-exports a `defineExtension` call with `type: "call-recording-insight-text-action"`. See [App structure](./overview) for the discovery rules.

## Example

```tsx src/app/extensions/process-call-insights/extension.tsx theme={"system"}
import {Extensions, showDialog} from "attio/client"

import {ProcessCallInsightDialog} from "./process-call-insight-dialog"

export default Extensions.defineExtension({
  type: "call-recording-insight-text-action",
  id: "process-call-insights",
  label: "Process insights",
  onTrigger: async ({markdown, text}) => {
    await showDialog({
      title: "Process call insights",
      Dialog: ({hideDialog}) => {
        return <ProcessCallInsightDialog markdown={markdown} text={text} onDone={hideDialog} />
      },
    })
  },
})
```

## Arguments

<ParamField path="type" type="&#x22;call-recording-insight-text-action&#x22;" required>
  Identifies this extension as an action on text selected in a call recording insight.
</ParamField>

<ParamField path="id" type="string" required>
  The unique identifier for this call recording insight selection action.

  It is only used internally; never shown to the user.
</ParamField>

<ParamField path="label" type="string" required>
  A human-readable label of the call recording insight selection action that will be shown to the
  user when they make a text selection on a call recording insight.
</ParamField>

<ParamField path="icon" type="string">
  An [`AttioIcon`](../icons) to display beside the label.

  <Tip>
    If no `icon` prop is provided, it will default to your app's icon that you set up in the
    [Developer dashboard](https://build.attio.com).
  </Tip>
</ParamField>

<ParamField path="onTrigger" type="async (selection: {text: string; markdown: string}) => Promise<void>">
  The function to run when the action is triggered. You'll likely want to [show a
  dialog](../dialogs/show-dialog) or run a [server function](../server/server-functions) here.

  The function will be given an object containing:

  * `markdown` – a markdown representation of the text selected (e.g. may include bullet points)
  * `text` – the plain text of the text selected
</ParamField>
