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

# Genesys Cloud Integration

> Connect a Genesys Cloud voice flow to Cekura to run phone-based simulations and pull the Genesys transcript, wrap-up codes, and knowledge suggestions into every result.

export const CopyPageButton = () => {
  if (typeof window !== 'undefined') {
    setTimeout(function () {
      if (document.getElementById('ck-tools')) return;
      var anchor = document.getElementById('content-area') || document.querySelector('.mdx-content');
      if (!anchor) return;
      if (!document.getElementById('ck-style')) {
        var s = document.createElement('style');
        s.id = 'ck-style';
        s.textContent = '#ck-tools{position:absolute;top:6px;right:0;z-index:100;font-family:inherit;}' + '.ck-row{display:inline-flex;align-items:stretch;border:1px solid rgba(0,0,0,0.15);border-radius:8px;overflow:hidden;background:#fff;}' + ':root.dark .ck-row{background:rgba(255,255,255,0.06);border-color:rgba(255,255,255,0.12);}' + '.ck-btn{padding:5px 12px;border:none;background:none;cursor:pointer;font-size:13px;font-weight:500;font-family:inherit;color:#374151;}' + ':root.dark .ck-btn{color:#d1d5db;}' + '.ck-btn:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-btn:hover{background:rgba(255,255,255,0.06);}' + '.ck-chevron{padding:5px 8px;border:none;background:none;cursor:pointer;font-size:14px;font-family:inherit;color:#374151;}' + ':root.dark .ck-chevron{color:#d1d5db;}' + '.ck-chevron:hover{background:rgba(0,0,0,0.04);}' + ':root.dark .ck-chevron:hover{background:rgba(255,255,255,0.06);}' + '.ck-divider{width:1px;background:rgba(0,0,0,0.12);flex-shrink:0;}' + ':root.dark .ck-divider{background:rgba(255,255,255,0.12);}' + '.ck-dd{position:absolute;top:calc(100% + 4px);right:0;min-width:180px;background:#fff;border:1px solid rgba(0,0,0,0.12);border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.1);padding:4px;display:none;z-index:200;}' + ':root.dark .ck-dd{background:#1f2937;border-color:rgba(255,255,255,0.1);box-shadow:0 4px 16px rgba(0,0,0,0.35);}' + '.ck-item{display:block;width:100%;padding:7px 12px;border:none;background:none;border-radius:6px;cursor:pointer;font-size:13px;font-family:inherit;text-align:left;color:#374151;}' + ':root.dark .ck-item{color:#d1d5db;}' + '.ck-item:hover{background:rgba(0,0,0,0.05);}' + ':root.dark .ck-item:hover{background:rgba(255,255,255,0.07);}';
        document.head.appendChild(s);
      }
      var wrap = document.createElement('div');
      wrap.id = 'ck-tools';
      var row = document.createElement('div');
      row.className = 'ck-row';
      var mainBtn = document.createElement('button');
      mainBtn.className = 'ck-btn';
      mainBtn.textContent = 'Copy page';
      var divider = document.createElement('span');
      divider.className = 'ck-divider';
      var chevron = document.createElement('button');
      chevron.className = 'ck-chevron';
      chevron.textContent = '▾';
      var dd = document.createElement('div');
      dd.className = 'ck-dd';
      function closeDD() {
        dd.style.display = 'none';
      }
      function openDD() {
        dd.style.display = 'block';
      }
      chevron.onclick = function (e) {
        e.stopPropagation();
        if (dd.style.display === 'block') {
          closeDD();
        } else {
          openDD();
        }
      };
      document.addEventListener('click', function (e) {
        if (!e.target.closest('#ck-tools')) {
          closeDD();
        }
      });
      document.addEventListener('keydown', function (e) {
        if (e.key === 'Escape') {
          closeDD();
        }
      });
      function makeItem(label, fn) {
        var b = document.createElement('button');
        b.className = 'ck-item';
        b.textContent = label;
        b.onclick = function () {
          fn();
          closeDD();
        };
        return b;
      }
      function getMarkdown() {
        var walk = function (node) {
          if (!node) return '';
          if (node.nodeType === 3) return node.textContent || '';
          if (node.nodeType !== 1) return '';
          var tag = node.tagName.toLowerCase();
          var skip = ['script', 'style', 'svg', 'noscript', 'button', 'iframe'];
          if (skip.indexOf(tag) !== -1) return '';
          if (node.id === 'ck-tools') return '';
          var ch = Array.from(node.childNodes).map(walk).join('');
          if (tag === 'h1') return '\n# ' + ch.trim() + '\n\n';
          if (tag === 'h2') return '\n## ' + ch.trim() + '\n\n';
          if (tag === 'h3') return '\n### ' + ch.trim() + '\n\n';
          if (tag === 'p') return '\n' + ch.trim() + '\n\n';
          if (tag === 'pre') return '\n```\n' + node.textContent.trim() + '\n```\n\n';
          if (tag === 'li') return '- ' + ch.trim() + '\n';
          if (tag === 'code') return '`' + ch.trim() + '`';
          return ch;
        };
        var content = document.querySelector('.mdx-content') || document.getElementById('content-area') || document.body;
        return walk(content).replace(/\n\n\n+/g, '\n\n').trim();
      }
      function copyMd() {
        var md = getMarkdown();
        navigator.clipboard.writeText(md).then(function () {
          mainBtn.textContent = 'Copied!';
          setTimeout(function () {
            mainBtn.textContent = 'Copy page';
          }, 2000);
        });
      }
      function viewMd() {
        var md = getMarkdown();
        var safe = md.split('&').join('&amp;').split('<').join('&lt;').split('>').join('&gt;');
        var html = '<!DOCTYPE html><html><head><meta charset="utf-8"><style>body{font-family:monospace;max-width:860px;margin:40px auto;padding:0 24px;line-height:1.7;white-space:pre-wrap;word-wrap:break-word}</style></head><body>' + safe + '</body></html>';
        window.open(URL.createObjectURL(new Blob([html], {
          type: 'text/html'
        })), '_blank');
      }
      function openClaude() {
        var prompt = 'Can you read this Cekura docs page ' + window.location.href + ' so I can ask you questions?';
        window.open('https://claude.ai/new?q=' + encodeURIComponent(prompt), '_blank');
      }
      mainBtn.onclick = copyMd;
      dd.appendChild(makeItem('Copy page', copyMd));
      dd.appendChild(makeItem('View as Markdown', viewMd));
      dd.appendChild(makeItem('Open in Claude', openClaude));
      row.appendChild(mainBtn);
      row.appendChild(divider);
      row.appendChild(chevron);
      wrap.appendChild(row);
      wrap.appendChild(dd);
      anchor.style.position = 'relative';
      anchor.insertBefore(wrap, anchor.firstChild);
    }, 50);
  }
  return null;
};

<CopyPageButton />

## Overview

Cekura tests Genesys Cloud voice agents over the phone. Cekura dials the number that routes to your Genesys flow, runs the scenario as a simulated caller, and then connects to your Genesys Cloud org to fetch that conversation. The result shows the transcript produced by Genesys **Speech and Text Analytics**, alongside the conversation's wrap-up codes, summary, and any Agent Copilot knowledge-article suggestions.

<Note>
  Genesys Cloud connects over **telephony only**. Cekura enables the telephony connection automatically once the Genesys credentials are saved.
</Note>

## Prerequisites

* A Genesys Cloud organization with **Speech and Text Analytics** voice transcription enabled for the queue or flow you want to test. Without transcription, Genesys has no transcript for Cekura to import.
* A phone number in Genesys that routes to the flow or bot under test.
* A Genesys Cloud **OAuth client** using the **Client Credentials** grant (created below).

## Create an OAuth client in Genesys Cloud

<Steps>
  <Step title="Create a role for Cekura">
    In Genesys Cloud, go to **Admin → People & Permissions → Roles / Permissions** and create a role that can read conversations. At minimum it needs:

    * **Analytics → Conversation Detail → View** (find conversations by time window and phone number)
    * **Conversation → Communication → View** (read conversation details)
    * **Speech and Text Analytics → Data → View** (download the transcript)

    Optionally add permissions to view conversation **summaries** and Agent Copilot **suggestions** so wrap-up codes and knowledge articles appear in Cekura results.
  </Step>

  <Step title="Add the OAuth client">
    Go to **Admin → Integrations → OAuth** and click **Add Client**. Set the **Grant Type** to **Client Credentials**, assign the role from the previous step, and save.
  </Step>

  <Step title="Copy the credentials">
    Copy the **Client ID** and **Client Secret**. The secret is shown once, so store it before leaving the page.
  </Step>

  <Step title="Note your region">
    Your region is the Genesys Cloud domain you log in to, for example `mypurecloud.com`, `usw2.pure.cloud`, `cac1.pure.cloud`, `mypurecloud.ie`, or `apne2.pure.cloud`.

    Enter only the domain. Do not include `https://`, `api.`, or `login.`.
  </Step>
</Steps>

## Connect Genesys in Cekura

<Steps>
  <Step title="Select Genesys">
    In Cekura, go to **Agents**, create an agent, and select **Genesys** as the provider. If you don't see it, click **More options** to expand the full provider list.

    <img src="https://mintcdn.com/vocera/ihQ4Mjq9tR9bVk9s/images/genesys/select-provider.png?fit=max&auto=format&n=ihQ4Mjq9tR9bVk9s&q=85&s=e783456f66f6fcfc51e952589e0baba1" alt="Genesys selected in the Cekura provider grid" width="981" height="315" data-path="images/genesys/select-provider.png" />
  </Step>

  <Step title="Enter the Genesys credentials">
    Fill in the three fields:

    | Field                     | Value                                                            |
    | ------------------------- | ---------------------------------------------------------------- |
    | **Genesys Client Secret** | The OAuth client secret. Stored encrypted and never shown again. |
    | **Genesys Client ID**     | The OAuth client ID.                                             |
    | **Genesys Region**        | Your Genesys Cloud domain, such as `usw2.pure.cloud`.            |

    <img src="https://mintcdn.com/vocera/ihQ4Mjq9tR9bVk9s/images/genesys/integration-settings.png?fit=max&auto=format&n=ihQ4Mjq9tR9bVk9s&q=85&s=8a17952cd1326bc9a28783ecb059ea09" alt="Genesys Client Secret, Client ID, and Region fields in Cekura Integration Settings" width="969" height="417" data-path="images/genesys/integration-settings.png" />
  </Step>

  <Step title="Add the phone number">
    Under **Telephony Settings**, enter the Genesys phone number that routes to the flow you want to test. Telephony is the only connection type for Genesys and is enabled automatically. Leave **Inbound** on so Cekura dials your number.

    <img src="https://mintcdn.com/vocera/ihQ4Mjq9tR9bVk9s/images/genesys/telephony-settings.png?fit=max&auto=format&n=ihQ4Mjq9tR9bVk9s&q=85&s=6bbdc93a9f52c80685e409ebca618b0a" alt="Telephony Settings with the Genesys phone number and Inbound enabled" width="930" height="329" data-path="images/genesys/telephony-settings.png" />
  </Step>

  <Step title="Save the agent">
    Save the agent. The secret field shows **API Key Configured** once it is stored; use **Update** to rotate it later.

    <img src="https://mintcdn.com/vocera/ihQ4Mjq9tR9bVk9s/images/genesys/settings-configured.png?fit=max&auto=format&n=ihQ4Mjq9tR9bVk9s&q=85&s=c2e6caea02c91b70f30e47a54d1fb65a" alt="Saved Genesys integration settings showing the stored client secret" width="549" height="438" data-path="images/genesys/settings-configured.png" />
  </Step>
</Steps>

## Run a test

Open an evaluator, click **Run**, and start the run using the **Telephony** connection. Cekura dials your Genesys number and plays the scenario as the caller.

When the call ends, Cekura:

1. Waits for Genesys Speech and Text Analytics to finish processing the conversation. This usually takes a minute or two.
2. Searches your Genesys org for conversations that started around the same time and involved the phone number Cekura used.
3. Confirms the match by comparing the call duration and the conversation content, so parallel test calls to the same number are each paired with the right Genesys conversation.
4. Downloads the transcript and attaches the Genesys conversation ID to the result.

The result then shows the Genesys transcript, with Genesys **Agent** turns labeled **Main Agent** and **Customer** turns labeled **Testing Agent**. The conversation's reason, resolution, follow-up, wrap-up codes, and any knowledge-article suggestions are stored with the result's provider data.

<Note>
  If Cekura cannot find a matching conversation, the result keeps Cekura's own transcript of the call. See the troubleshooting section below.
</Note>

## Troubleshooting

* **Authentication fails**: check that the region is only the domain (for example `usw2.pure.cloud`), and that the OAuth client uses the Client Credentials grant with a role assigned.
* **No Genesys transcript on the result**: make sure voice transcription is enabled in Speech and Text Analytics for the queue or flow that handled the call, and that the role can view Speech and Text Analytics data.
* **Conversation not matched**: Cekura matches on the phone number it dialed from and the call's start time. Confirm the number under **Telephony Settings** routes to the flow you tested, and that the Genesys conversation shows the Cekura number as the caller.

## Configure through the API

When creating or updating an agent through the [API](/api-reference/test_framework/create-agent), set the provider to `genesys` and pass the credentials:

```json theme={null}
{
  "assistant_provider": "genesys",
  "transcript_provider": "genesys",
  "genesys_client_secret": "<client-secret>",
  "genesys_data": {
    "client_id": "<client-id>",
    "region": "usw2.pure.cloud"
  },
  "contact_number": "+15551234567"
}
```

The response never returns the secret. Use the read-only `genesys_client_secret_configured` field to check whether one is stored.
