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

# Thoughtly AI integration

> Use the native Thoughtly integration to call other Thoughtly agents, share context across workflows, and chain voice interactions without external glue code.

export const IntegrationPage = ({actions, triggers, name, domain, logoOverride}) => {
  const logoOverrides = {
    acuity: 'https://cdn.thoughtly.com/integrations/acuity_scheduling.svg',
    acuityscheduling: 'https://cdn.thoughtly.com/integrations/acuity_scheduling.svg',
    'cal.com': 'https://cdn.thoughtly.com/integrations/cal.com.svg',
    calcom: 'https://cdn.thoughtly.com/integrations/cal.com.svg',
    cal: 'https://cdn.thoughtly.com/integrations/cal.com.svg',
    'fence flow': 'https://cdn.thought.ly/integrations/fence-flow.png',
    fenceflow: 'https://cdn.thought.ly/integrations/fence-flow.png',
    gohighlevel: 'https://cdn.thought.ly/integrations/highlevel.png',
    highlevel: 'https://cdn.thought.ly/integrations/highlevel.png',
    hubspot: 'https://cdn.thought.ly/integrations/hubspot.png',
    keap: 'https://cdn.thoughtly.com/integrations/keap.svg',
    mindbody: 'https://cdn.thoughtly.com/integrations/mindbody.svg',
    pipedrive: 'https://cdn.thoughtly.com/integrations/pipedrive.svg',
    salesforce: 'https://cdn.thoughtly.com/integrations/salesforce.svg',
    slack: 'https://cdn.thoughtly.com/integrations/slack.svg',
    smartsheet: 'https://cdn.thoughtly.com/integrations/smartsheet.svg',
    trello: 'https://cdn.thoughtly.com/integrations/trello.svg',
    zendesk: 'https://cdn.thoughtly.com/integrations/zendesk.svg',
    zoho: 'https://cdn.thoughtly.com/integrations/zoho.svg',
    zoom: 'https://cdn.thoughtly.com/integrations/zoom.svg',
    gmail: 'https://cdn.thoughtly.com/integrations/google-mail.png'
  };
  const normalizeKey = value => (value || '').toString().trim().toLowerCase();
  const normalizeHost = value => {
    if (!value) {
      return '';
    }
    const cleaned = value.replace(/^https?:\/\//, '').replace(/^[^@]+@/, '');
    return cleaned.split(/[/?#]/)[0];
  };
  const getLogoSrc = ({name: logoName, domain: logoDomain, logoOverride}) => {
    if (logoOverride) {
      return logoOverride;
    }
    const nameKey = normalizeKey(logoName);
    const host = normalizeHost(logoDomain);
    const hostKey = normalizeKey(host);
    const hostBase = hostKey.split('.').slice(-2, -1)[0] || '';
    return logoOverrides[nameKey] || logoOverrides[nameKey.replace(/\s+/g, '')] || logoOverrides[hostKey] || logoOverrides[hostBase] || (logoDomain ? `https://logo.clearbit.com/${logoDomain}` : undefined);
  };
  return <div>
		<div className="flex flex-row items-center h-10 pb-4">
			<img src={getLogoSrc({
    name,
    domain,
    logoOverride
  })} className="w-5 rounded-md mr-2 h-5" />
			<div className="text-xl">
				Integrate with <a href={`https://${domain}`} target={"_blank"}><span className="font-bold">{name}</span></a>
			</div>
		</div>

		By integrating Thoughtly with {name}, you can automate tasks and workflows before, during, and after calls. To integrate with {name}, head to the <a href="https://app.thoughtly.com/integration" target="_blank">Integrations</a> page and follow the instructions.

		{triggers && <div>
				<hr />
				<h3>Triggers</h3>

				Triggers are available via <a href="/automations/triggers">Automations</a>. You can use them to start your Automations, such as for initiating a call or sending an SMS.

				{triggers.map(trigger => <div className="text-sm">
						<h4 className="text-gray-600 text-md">{trigger.name}</h4>

						{trigger.description}
					</div>)}
			</div>}

		{actions && actions.length > 0 && <div>
				<hr />
				<h3>Actions</h3>

				Actions are available both via <a href="/agents/nodes">Mid-Call Actions</a> and <a href="/automations/actions">Automations</a>. You can give your Voice Agents access to these Actions so they can perform tasks in {name} during a call, or use them in Automations to automate tasks before and after calls.

				{actions.map((action, i) => <div key={i} className="text-sm">
						<h4 className={`text-gray-600 ${action.deprecated ? 'line-through text-red-500' : ''}`}>
							<span className="text-gray-600">{action.name}</span>
							{action.deprecated && <span className="ml-3 text-xs">(Deprecated)</span>}
						</h4>
						<p className={action.deprecated ? 'text-gray-400' : ''}>
							{action.description}
						</p>
					</div>)}
			</div>}
	</div>;
};

<IntegrationPage
  name="Thoughtly"
  domain="thoughtly.com"
  triggers={[
	{
		"name": "On Call Completed",
		"description": "Triggered when a call is completed."
	},
	{
		"name": "On Inbound Call",
		"description": "Triggered when an inbound call is received."
	},
	{
		"name": "Recurring Schedule",
		"description": "Triggered on the schedule you define."
	},
	{
		"name": "Incoming Webhook",
		"description": "Triggered when a webhook is received."
	}
]}
  actions={[
    {
        "name": "Create or Update Contact",
		"description": "Create a new contact or update an existing one."
	},
	{
		"name": "Call Contact",
		"description": "Start a call with a Thoughtly contact."
	},
	{
		"name": "Add Tags to Contact",
		"description": "Add tags to a contact."
	},
	{
		"name": "Add Attributes to Contact",
		"description": "Add attributes to a contact."
	},
	{
		"name": "Add Source to Genius",
		"description": "Add a new source to Genius."
	},
	{
		"name": "Edit Genius Source",
		"description": "Edit an existing Genius source."
	},
	{
		"name": "Delete Genius Source",
		"description": "Delete a Genius source."
	},
	{
		"name": "Get Genius Source Content",
		"description": "Retrieve the content of a Genius source."
	},
	{
		"name": "Connect Inbound Call",
		"description": "Connect an inbound call after pre-call automation."
	},
	{
		"name": "Call Phone Number",
		"description": "Call a phone number directly."
	},
	{
		"name": "Send SMS",
		"description": "Send an SMS message."
	},
	{
		"name": "Get Contact by Phone Number",
		"description": "Find a contact by phone number."
	},
	{
		"name": "Add Disposition",
		"description": "Add a disposition to a completed call."
	},
	{
		"name": "Get All Contacts",
		"description": "List all contacts."
	},
	{
		"name": "Extract Fields",
		"description": "Extract structured fields from text with AI."
	},
	{
		"name": "Custom Prompt",
		"description": "Run a custom AI prompt to generate output."
	},
	{
		"name": "Filter",
		"description": "Filter items based on conditions."
	},
	{
		"name": "If Else",
		"description": "Branch on a true or false condition."
	},
	{
		"name": "Switch",
		"description": "Branch on multiple cases."
	},
	{
		"name": "Random Outcome",
		"description": "Split the flow randomly by percentage."
	},
	{
		"name": "Loop on Items",
		"description": "Iterate over items in a list."
	},
	{
		"name": "Delay For",
		"description": "Pause the workflow for a set duration."
	},
	{
		"name": "Delay Until",
		"description": "Pause the workflow until a specific timestamp."
	},
	{
		"name": "Get Current Time",
		"description": "Return the current time."
	},
	{
		"name": "Convert Timezone",
		"description": "Convert timestamps between timezones."
	},
	{
		"name": "Get Current Date",
		"description": "Return today's date."
	},
	{
		"name": "Get Current Date and Time",
		"description": "Return the current timestamp."
	},
	{
		"name": "Convert Date and Time Format",
		"description": "Convert date and time formats."
	},
	{
		"name": "Get Website Content",
		"description": "Fetch and parse content from a URL."
	},
	{
		"name": "Send Webhook",
		"description": "Send a webhook with a payload."
	}
]}
/>
