> For the complete documentation index, see [llms.txt](https://docs.usepylon.com/pylon-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.usepylon.com/pylon-docs/support-workflows/ticket-forms.md).

# Ticket Forms

Let your customers submit structured tickets across different channels.

<figure><img src="https://982123570-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9hXBoCTTNw5flARlUVJf%2Fuploads%2FeYpBFHks8aBQbNNiU7oS%2Fimage.png?alt=media&amp;token=20473eb2-f9e3-494c-8189-85a0efeb8798" alt=""><figcaption><p>Web form example</p></figcaption></figure>

## Setup <a href="#setup" id="setup"></a>

1. Visit the [Ticket forms page](https://app.usepylon.com/settings/ticket-forms) (**Settings > Communications > Ticket forms**) and create a form. To start from an existing form, open its menu and choose **Duplicate**.
2. On the **Form fields** tab, choose the form's **Allowed platforms** and add fields. Supported platforms are:
   * **Web**: public link, customer portal, knowledge base, and chat widget
   * **Slack**
   * **Microsoft Teams**

<figure><img src="https://982123570-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9hXBoCTTNw5flARlUVJf%2Fuploads%2FTT8uDZayVilXSVki0RyH%2FScreenshot%202025-06-23%20at%201.51.34%E2%80%AFPM.png?alt=media&amp;token=331035f4-b1d6-49ca-b511-04bf9f0941a6" alt=""><figcaption></figcaption></figure>

3. Now that your form is configured, configure its usage within your desired channels.
   1. [Customer Portal](https://app.usepylon.com/customer-portal?page=forms): Under **Settings > Customers > Customer portal > Ticket forms**, choose which sets of forms are visible to which sets of users.
   2. Public: Share the public link to your form. You can also embed it on your site or app if you put the form link in an iframe. In the form's **Web settings**, turn on "Allow anyone on the internet to access URL" under **Enable public access**.
   3. [Chat Widget](https://app.usepylon.com/settings/chat-widget): Under **Settings > Communications > Chat widget**, open your widget and go to the **Modules** tab. In the **Ticket forms** section, create form sets and use filters to decide which forms each set of users sees.
   4. Slack: Use [Triggers](/pylon-docs/platform/triggers.md) to configure when a form gets sent out in Slack. Use our default recipe as a starting point!

      <figure><img src="https://982123570-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9hXBoCTTNw5flARlUVJf%2Fuploads%2Fu89H2BMjTS6Ers2prX3T%2FCleanShot%202025-02-15%20at%2018.16.55.png?alt=media&amp;token=986d1c57-bb9a-4fae-9e31-5ca52828c7c9" alt=""><figcaption></figcaption></figure>
   5. Microsoft Teams: Use [Triggers](/pylon-docs/platform/triggers.md) with the **Send form** action and a Microsoft Teams source condition to send the form in Teams channels and chats. The form appears as an Adaptive Card. Only forms with **Allow on Microsoft Teams** turned on can be sent.

### Fields

* **Default fields**: name and email (always on web forms), plus subject, description, and CCs. You can also add any issue field.
* **File upload** lets customers attach files to web form submissions. A form can have more than one file upload field. File upload isn't supported on Slack, so a form with a file upload field can't also be allowed on Slack.
* Slack forms collect the customer's name and email automatically. Required fields are optional when a form is sent over Slack.
* Microsoft Teams forms show the form's supported issue fields. Adjust how they appear on the **Microsoft Teams settings** tab.

### Web Settings

The **Web settings** tab controls how the form behaves on the web:

* **Email**: the email address that web submissions are forwarded to. Required for web forms.
* **Description**: optional text shown to customers above the form.
* **Form slug**: the slug used in the form's URL and in chat widget forms.
* **Enable public access**: lets anyone with the link open the form.
* **AI search**: suggests answers based on the form's Subject or Description field. The form must include at least one of those fields.
* **Email notifications**: emails the customer when they submit the form and when an agent replies.
* **Submission email**: sends the customer an email immediately after they submit. Email notifications must be on.

### Submission Email

When **Submission email** is on, customize the email under **Submission email settings**:

* **Subject**, **Title**, and **Description**. Type `{` to insert variables.
* **Hide form fields in email**: send a generic confirmation with a link to the portal instead of the submitted answers. This prevents the form content from being used for phishing.

A preview of the email appears next to the settings.

### Conditional Fields

For web-based forms, you can add conditional fields. This allows you to prompt the user for additional information based on their answer to a given question.

<figure><img src="https://982123570-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9hXBoCTTNw5flARlUVJf%2Fuploads%2FbuO5RwCFSo4qTthUzSfx%2FCleanShot%202025-03-08%20at%2012.43.16%402x.png?alt=media&amp;token=7ca4917a-a7ca-4a69-b1a1-a4cf3db95f1e" alt=""><figcaption></figcaption></figure>

### AI Form Suggestion

AI Form Suggestions can automatically suggest relevant knowledge base articles to users as they fill out ticket forms. Turn this on with the **AI search** setting in the form's **Web settings**.

<figure><img src="https://982123570-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F9hXBoCTTNw5flARlUVJf%2Fuploads%2F8wyMj1pdpUWjTJrNeZBB%2FAI%20Form%20suggestions.png?alt=media&amp;token=b5ab3ef3-dcc9-4116-90c7-bd6edc6bd278" alt="" width="563"><figcaption></figcaption></figure>

## How submissions are matched to contacts and accounts

Pylon files each web submission under a contact and account based on where the form was submitted:

* **Public link or embedded form**: Pylon uses the email entered on the form.
* **Customer portal**: Pylon uses the signed-in contact and the account they're viewing in the portal.
* **Chat widget**: Pylon uses the widget user's `email`, plus `account_id` or `account_external_id` if you pass them. See [How Pylon matches widget users to contacts and accounts](/pylon-docs/chat-widget/chat-setup.md#how-pylon-matches-widget-users-to-contacts-and-accounts).

If a contact already has the email, Pylon uses it and files the issue under the contact's account. Otherwise, Pylon creates a contact in the account whose domains include the email's domain. If no account matches, Pylon creates an account from the domain. It doesn't do this for personal email domains like gmail.com, or when **Suppress automatic account creation** is on in **Settings > Customers > Account configuration**. In those cases the contact has no account.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.usepylon.com/pylon-docs/support-workflows/ticket-forms.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
