# Create a Custom App

### Prerequisites:

The following shows the general steps/activities that will be carried out in setting up this integration. **Note:** It is advisable to use same E-Mail for signup across the 3 channels below. Step 1 -3 below are compulsory.

1. [Sign up for Google Account](/ixhc/connections/google-oauth-2.0-integration.md) (Part of pre-requisites)
2. [Sign up for iX Hello platform](https://bots.ixhhello.com) (Part of pre-requisites)
3. [Create a custom app in iX Hello.](/ixhc/general/ix-hello-studio-mode.md)
4. Publish the app and Test

### Let's Create a Custom App:

1. Fill following details in the Add Custom window and click ‘Save’.
   1. **Name:** GoogleOAuth Assistant Demo
   2. **Custom Skill Type:** Search
   3. **Category:** GoogleOAuth Assistant Demo\_2512041349
   4. Set this app as the Gen AI-App&#x20;
   5. Click Save

<figure><img src="/files/8ducUriiilhCbdVLK0lS" alt="" width="563"><figcaption></figcaption></figure>

#### Create Data Source:

In the top menu tabs, select “Data Sources” then “Create New Data Source”. Provide the following details:

#### Data Source 1: Gen AI&#x20;

Name: GenAIZendeskAssitant-DS

Integration Configuration: Gen AI

Click: Save

<figure><img src="/files/2biNHw9FCgvOzBUhMCoa" alt="" width="563"><figcaption></figcaption></figure>

#### DataSource 2: Zendesk

Name: GoogleCalendar-DS

Integration Configuration: Rest API Service : Google AI API

Click: Save

<figure><img src="/files/LHplT8BfIFyZPfAhSakY" alt="" width="563"><figcaption></figcaption></figure>

## Create Methods to fetch the data from Google Account

Next step is to create Methods. Methods allows you to fetch data from Google Account.

iX Hello platform currently supports following Google Account methods:

getByIdMethods

listEventsMethods

addEventMethods

deleteEventMethods

PutEventMethods

PostEventMethod

PatchEventMethod

For this document, we’ll create only few methods. Users can refer to the appendix to explore all other supported methods.

### Method 1: getByIdMethod

This method requires three parameters. Please review the information below.

| Method Name           | <p>You can give any name. This name will be displayed in the methods list. </p><p><strong>getByIdMethod</strong></p> |
| --------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Request Type          | <p><strong>Get</strong></p><p>This is the method that you are using</p>                                              |
| Method Path           | /events/{{id}}                                                                                                       |
| Query Path            | <p>?</p><p>It indicates that the method can return one or more records</p>                                           |
| Result Type           | Record                                                                                                               |
| Empty Result Template | No results. How else can I help you?                                                                                 |
| Valid Result Template | Event found with status {{status}}\n{{summary}}\n{{description}}\n{{start}} {{end}} How else can I help you?         |

<figure><img src="/files/gdqTiSw7a8dyIfXvX4Wp" alt="" width="563"><figcaption></figcaption></figure>

#### Sample Response

<figure><img src="/files/xeNaacjHIPqEjM2lHq8J" alt=""><figcaption></figcaption></figure>

### Method 2: listEventsMethod

This method requires three parameters. Please review the information below.

| Method Name           | <p>You can give any name. This name will be displayed in the methods list. </p><p><strong>listEventsMethod</strong></p> |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| Request Type          | <p><strong>Get</strong></p><p>This is the method that you are using</p>                                                 |
| Method Path           | /events                                                                                                                 |
| Query Path            | <p>?</p><p>It indicates that the method can return one or more records</p>                                              |
| Result Type           | ListOfRecord                                                                                                            |
| Record Limit          | 10                                                                                                                      |
| Record JsonPath       | $.items\[\*]                                                                                                            |
| Record Template       | **{{summary}}** \[{{status}}] {{description}} {{start}} - {{end}}\n                                                     |
| Empty Result Template | Found the following records: {{Records}}                                                                                |
| Valid Result Template | {{Records}}                                                                                                             |

<figure><img src="/files/KzjErZmRxvSR6VfoLNyV" alt="" width="563"><figcaption></figcaption></figure>

#### Sample Response

<figure><img src="/files/pNfJdKYFfzFCbUmtgK8j" alt=""><figcaption></figcaption></figure>

### Method 3: listEventsMethod

#### Parameters:

This method requires three parameters. Please review the information below.

| DateEnd          | 2025-12-20T17:30:00+08:00 |
| ---------------- | ------------------------- |
| DateStart        | 2025-12-06T17:30:00+08:00 |
| EventDescription | iX Hello - Testing        |
| EventName        | iX Hello - Conf           |

Other than these parameters, provide following standard inputs:

| Method Name           | <p>You can give any name. This name will be displayed in the methods list. </p><p><strong>addEventMethod</strong></p>                            |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| Request Type          | <p><strong>POST</strong></p><p>This is the method that you are using</p>                                                                         |
| Method Path           | /events                                                                                                                                          |
| Query Path            | <p>?</p><p>It indicates that the method can return one or more records</p>                                                                       |
| Request Body          | {"summary": "{{EventName}}","description": "{{EventDescription}}","start": { "dateTime": "{{DateStart}}" },"end": { "dateTime": "{{DateEnd}}" }} |
| Result Type           | Record                                                                                                                                           |
| Empty Result Template | Failed to create event. How else can I help you?                                                                                                 |
| Valid Result Template | Meeting created with id {{id}}. How else can I help you?                                                                                         |

<figure><img src="/files/9mj36GOPhP79hxurFYHj" alt="" width="563"><figcaption></figcaption></figure>

#### Sample Response:

<figure><img src="/files/B5X3EXf4KiJDXw8e2Mlx" alt="" width="563"><figcaption></figcaption></figure>

### Method 4: Gen AI

* Name: Chat Completion RAG
* Request Type: chatcompletion-rag
* Parameters
  * Model: Select your preferred Generative AI model (e.g., Azure gpt-4o).
  * System Message: Provide instructions for the bot’s behavior:
  * *This is a sample prompt/system message, this can be configured as per the use case need.*

{% code overflow="wrap" %}

```
I am a concise and focused assistant, providing accurate information based solely on the provided google integrated methods. I aim to deliver clear and relevant answers to your queries from the google integrated methods.
```

{% endcode %}

* UserQuestion: {{UserInput}}
* Streaming: False
* SessionTime: 10
* OrganizationID: {{Context.OrganizationID}}
* EmployeeID: {{Context.OrganizationID}}

<figure><img src="/files/pMGlwtxQrgDqwrZ0xAjT" alt="" width="563"><figcaption></figcaption></figure>

Configure Method Output:

* Result Type: ListofRecords
* Record Limit: 10

<figure><img src="/files/o2vULMaavxggneITB623" alt=""><figcaption></figcaption></figure>

* Configure Method Result:
  * Record JsonPath: $.choices\[0].message
  * Valid Result Template: {{Records}}&#x20;
  * Record Template: {{content}}
  * Empty Result Template: "Is there anything else I can assist you with?"
* Uncheck: Automatically prompt for next question
* Save & Test
  * Click Save & Test. This will initiate a test API call.

<figure><img src="/files/yIGbQKWyls6Thjiwgt6B" alt=""><figcaption></figcaption></figure>

#### Sample Response

<figure><img src="/files/f3Luqu0U1EG0xc9ZJID3" alt=""><figcaption></figcaption></figure>

### Create New Intent

1. Click Create New Intent.
2. Enter Intent Details as Follows:

| Name                       | addEventIntent                |
| -------------------------- | ----------------------------- |
| Intent Type                | Search                        |
| Intent Action              | Execute Method                |
| Data Source                | GoogleCalendar-DS             |
| Data Source Method         | addEventMethod                |
| Dialog Delegation Strategy | Fallback To Skill             |
| Action                     | Save the intent configuration |

<figure><img src="/files/n6Lf0T4VKdiMqFdKfZVT" alt="" width="563"><figcaption></figcaption></figure>

#### Similarly Create the Intents for rest of the Methods created:

* chatCompletionMethod  - chatintent
* getByIdMethod - getByIdIntent
* ListEventsMethod - ListEventsIntent

### Slot: CreateNewTicketIntent

Parameter 1: DateEnd

Parameter 2 : DateStart

Parameter 3: EventDescription

Parameter 4: EventName

| Name                         | DateEnd                                                                                                                    | DateStart                     | EventDescription              | EventName                     |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------- | ----------------------------- |
| Description                  | DateEnd                                                                                                                    | DateStart                     | EventDescription              | EventName                     |
| Slot Order (Sequence Number) | 1                                                                                                                          | 2                             | 3                             | 4                             |
| Reprompt Message             | (Its a message that the use will be asked when the slot cannot be retrieved in an utterance) Please provide ticket subject | -                             | -                             | -                             |
| Type                         | Date                                                                                                                       | Date                          | Text                          | Text                          |
| Custom App                   | GoogleOAuth Assistant Demo                                                                                                 | GoogleOAuth Assistant Demo    | GoogleOAuth Assistant Demo    | GoogleOAuth Assistant Demo    |
| Intent                       | addEventIntent                                                                                                             | addEventIntent                | addEventIntent                | addEventIntent                |
| Enable                       | Is Required                                                                                                                | Is Required                   | Is Required                   | Is Required                   |
| Action                       | Save the intent configuration                                                                                              | Save the intent configuration | Save the intent configuration | Save the intent configuration |

<figure><img src="/files/BuFx8oejRyilOJwepm2O" alt=""><figcaption></figcaption></figure>

**Create rest of the slots as per the parameters suggested in the Methods.**

### Utterance

1. Navigate to Utterances

* In your Custom App, go to the Utterances tab.

Create New Utterance: Enter Intent Details as Follows:

<table data-header-hidden><thead><tr><th>Parameter</th><th>Info</th><th>Info</th><th width="160">Info</th><th>Info</th></tr></thead><tbody><tr><td>Utterances/ Value</td><td>Create Event, Meetings, Add event, new event, Tasks</td><td>Ask any thing ?</td><td>ID of the event, Provide your ID, Existing event ID, ID, please share your ID</td><td>list the events</td></tr><tr><td>Custom App</td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td></tr><tr><td>Intent</td><td>addEventIntent</td><td>chatintent</td><td>getByIdIntent</td><td>ListEventsIntent</td></tr><tr><td>Action</td><td>Save the intent configuration</td><td>Save the intent configuration</td><td>Save the intent configuration</td><td>Save the intent configuration</td></tr></tbody></table>

<figure><img src="/files/smtkA3eNsub6YY4XuJfB" alt=""><figcaption></figcaption></figure>

**Create rest of the Utterances as per the Intents created.**

### Input Configuration

1. For Generative AI Intent

* Navigate to Input Configuration
* In your Custom App, go to the Input Configuration tab.

<table data-header-hidden><thead><tr><th>Parameter</th><th>Info</th><th>Info</th><th width="141">Info</th><th>Info</th></tr></thead><tbody><tr><td>Name</td><td>addEventInput</td><td>getByIdInput</td><td>ChatInput</td><td>ListEventInput</td></tr><tr><td>Description </td><td>Create an Event</td><td>ID of the event</td><td>UserInput</td><td>ListEventInput</td></tr><tr><td>Custom Skill </td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td><td>GoogleOAuth Assistant Demo</td></tr><tr><td>Custom Intent</td><td>addEventIntent</td><td>getByIdIntent</td><td>getClosedStatusTicketsIntent</td><td>ListEventIntent</td></tr><tr><td>Data Source </td><td>GoogleCalendar-DS</td><td>GoogleCalendar-DS</td><td>GoogleCalendar-DS</td><td>GoogleCalendar-DS</td></tr><tr><td>Data Source Method</td><td>addEventMethod</td><td>getByIdMethod</td><td>chatCompletionMethod</td><td>ListEventMethod</td></tr><tr><td>Enable Gen AI Toggle Button</td><td>Yes</td><td>Yes</td><td>No</td><td>Yes</td></tr><tr><td>Action</td><td>Save the intent configuration</td><td>Save the intent configuration</td><td>Save the intent configuration</td><td>Save the intent configuration</td></tr></tbody></table>

## Test the App

Click on the three dots under "Action." A dropdown menu will appear; select the "Test" option to test the application.

<figure><img src="/files/1xYgZiYYAuO6nh4GWpxS" alt=""><figcaption></figcaption></figure>

Click the "Test" option to access the chat widget. Here, you'll see the bot's name and a welcome message, allowing you to start your conversation with the bot.

<figure><img src="/files/3qXijIiZJvJ7ynIagd9f" alt="" width="401"><figcaption></figcaption></figure>

Congratulations! You have successfully completed building a custom app using Google OAuth 2.0.


---

# Agent Instructions: Querying This Documentation

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ixhello.com/ixhc/connections/google-oauth-2.0-integration/create-a-custom-app.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
