Reference

Connectors

On this page

Connectors bring data into a Conclude app from outside the chat platform — email, web forms, ticketing systems — or push enrichment data into an agent’s context.

Email connector

Receives inbound email and turns each message into an activity.

emailConnector:
  id: support@acme.io           # the inbound address (assigned on install)
  from: support@acme.io         # optional, sender on outbound replies
  replyTo: support@acme.io      # optional
  primaryLanguage: en
  supportedLanguages: [en, fr]
  attributeMap:
    - external: subject
      internal: title
    - external: body
      internal: body
    - external: from.email
      internal: contactEmail
  preprocess:
    instructions: |
      Extract the customer's intent in one sentence.
    output: summary             # writes the LLM output to this attribute
  summarize:
    instructions: |
      Summarize this thread for the support team.
    output: summary
YAML keyTypePurpose
idstringAssigned inbound address (read-only after install)
disabledboolTurn the connector off without removing config
fromstringOutbound sender address; defaults to id
replyTostringOutbound reply-to header
attributeMaplistMaps email fields (subject, body, from.email, etc.) to attributes
preprocessobjectOptional LLM step on each inbound email (instructions, output attribute)
summarizeobjectOptional LLM summary written into an attribute
primaryLanguagestringBest-guess for the customer’s language
supportedLanguageslistLanguages the agent can reply in

The activity’s reply-to thread is the email conversation; outbound replies go to the original sender unless from/replyTo overrides apply.

Web connector

Receives inbound HTTP form posts and turns each post into an activity. Pair with a hosted form or an in-app widget.

webConnector:
  id: contact-form              # assigned on install
  domain: acme.com,acme.io      # CORS allowlist (comma-separated)
  attributeMap:
    - external: name
      internal: contactName
    - external: email
      internal: contactEmail
    - external: message
      internal: body
  logMessage: true              # log each accepted submission
  logJunk: false                # log rejected (junk-filtered) submissions
YAML keyTypePurpose
idstringConnector identifier; part of the inbound URL
disabledboolTurn off without removing config
domainstringComma-separated CORS-allowed origins
attributeMaplistForm field → activity attribute mapping
logMessageboolLog every accepted submission
logJunkboolLog rejected submissions (rate-limited, spam-filtered)

Use settings.rateLimit to throttle inbound traffic per minute.

Jira connector

Sync activities with a Jira project.

jira:
  subdomain: acme               # Jira instance: acme.atlassian.net
  projectKey: SUP
  syncOnlyPinnedComments: false # if true, only pinned comments sync to Jira
YAML keyTypeRequiredPurpose
subdomainstring✓Jira instance subdomain
projectKeystring✓Project key (e.g. SUP)
disabledbool—Turn off without removing config
syncOnlyPinnedCommentsbool—Restrict comment sync to pinned-only

OAuth for the Jira instance is configured via the integrations UI, not in the YAML. For how activity states map to Jira status categories, see Statuses and states.

Zendesk integration

zendesk:
  subdomain: acme               # acme.zendesk.com
  tag: conclude-managed
  triage:
    members: ${owner}
    alert: "#triage"
  attributeMap:
    - external: subject
      internal: title
    - external: description
      internal: body
YAML keyTypeRequiredPurpose
subdomainstring✓Zendesk instance subdomain
tagstring—Tag applied to managed Zendesk tickets
triageobject—Routing rules (members + alert) for incoming tickets
attributeMaplist—Zendesk field → attribute mapping
disabledbool—Turn off without removing config

For how Conclude statuses map to Zendesk ticket statuses (both directions), see Statuses and states.

Lookup endpoint

A lookup endpoint enriches an agent’s prompt context with external data (CRM record, customer tier, account history). Conclude POSTs to the URL with the triggering event and basic activity info, and includes the response body in the agent’s prompt.

lookup:
  url: https://crm.example.com/conclude-enrich
  secret: crm_api_token         # references a Secret by name
  on: [onCreate, onComment]     # events that fire the lookup
  timeout: 5s
YAML keyTypeRequiredPurpose
urlstring✓HTTPS endpoint (HTTP rejected; private IPs rejected)
onlist✓Events that trigger the lookup (onCreate, onComment, onEdit, onConclude)
secretstring—Name of a Secret holding a bearer token (sent as Authorization: Bearer <token>)
timeoutstring—Request timeout (5s, 10s…); default 5 s, max 30 s

Request body (JSON):

{"event": "onCreate", "activity": {"title": "...", "email": "..."}}

Response: any text/JSON, truncated to 4 KB. Returned verbatim as agent context under a ## Customer context section.

Safety: URL must be HTTPS; the resolved IP must not be loopback, link-local, or RFC1918 private. Errors and timeouts are logged but never block the agent’s reply.

Attribute map syntax

All connectors use the same attributeMap: shape:

attributeMap:
  - external: <inbound field path>  # e.g. "subject", "from.email", "fields.summary"
    internal: <attribute name>      # must exist in the app's attributes

The field path interpretation is connector-specific (email field names, form field names, Jira/Zendesk field paths).