UI ๋ชจ๋“ˆ ๋ฐ ์ปค๋„ฅํ„ฐ ๊ตฌํ˜„

Agent Assist๋Š” Agent Assist ๊ธฐ๋Šฅ์„ UI์— ํ†ตํ•ฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋งž์ถค์„ค์ • ๊ฐ€๋Šฅํ•œ UI ๊ตฌ์„ฑ์š”์†Œ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฝ์ž…ํ•˜์—ฌ ์—์ด์ „ํŠธ์—๊ฒŒ Agent Assist ์ถ”์ฒœ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. LivePerson์— ๋ชจ๋“ˆ์„ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ตฌ์ฒด์ ์ธ ์•ˆ๋‚ด๋Š” LivePerson ํŠœํ† ๋ฆฌ์–ผ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

Agent Assist ๊ธฐ๋Šฅ

๋‹ค์Œ์€ UI ๋ชจ๋“ˆ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” Agent Assist ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

UI ๋ชจ๋“ˆ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๋Œ€ํ™” ํ”„๋กœํ•„์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

UI ๋ชจ๋“ˆ ๊ตฌํ˜„

UI์— Agent Assist ๋ชจ๋“ˆ์„ ํ†ตํ•ฉํ•˜๋Š” ๊ธฐ๋ณธ ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ์ปจํ…Œ์ด๋„ˆ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์„ ํƒํ•œ ๋ชจ๋“  ์ƒ๋‹ด ์ง€์› ๊ธฐ๋Šฅ์„ ๋‹จ์ผ ํŒจ๋„์— ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๊ตฌ์„ฑ์„ ๋งž์ถค์„ค์ •ํ•˜๋ ค๋ฉด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. UI ๊ตฌ์„ฑ์š”์†Œ์™€ ์ƒ๋‹ด์‚ฌ ๋ฐ์Šคํฌํ†ฑ ๊ฐ„์˜ ํ†ต์‹ ์€ UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋ชจ๋“  ํ†ต์‹ ์€ ๋งž์ถค ์ด๋ฒคํŠธ๋ฅผ ๋””์ŠคํŒจ์น˜ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Agent Assist๋Š” Genesys Cloud, LivePerson, Twilio, Salesforce์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. UI ๋ชจ๋“ˆ์„ ๋‹ค๋ฅธ ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•˜๋ ค๋ฉด ์ž์ฒด ์ปค๋„ฅํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งž์ถค UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํŒŒ์ผ ๋ฒ„์ „

์ตœ์‹  ๋ฒ„์ „์„ ์ง€์ •ํ•˜์—ฌ gstatic ํŒŒ์ผ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    <script src="https://www.gstatic.com/agent-assist-ui-modules/v1/container.js"></script>

์ •ํ™•ํ•œ ๋ฒ„์ „์„ ์ง€์ •ํ•˜์—ฌ gstatic ํŒŒ์ผ์˜ ํŠน์ • ์•ˆ์ •ํ™” ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    <script src="https://www.gstatic.com/agent-assist-ui-modules/v1.7/container.js"></script>

์ตœ์‹  ๋ฒ„์ „:

      Container: v1.12
      Container: v2.0
      Common: v1.6
      Knowledge assist: v1.1
      Generative knowledge assist: v2.9
      Smart reply: v1.4
      Summarization: v1.3
      Transcript: v1.3

๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ

๊ด€๋ฆฌํ˜• ์ปจํ…Œ์ด๋„ˆ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์„ ํƒํ•œ Agent Assist ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ํŒจ๋„์— ๋ Œ๋”๋งํ•˜๋Š” ๋‹จ์ผ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจ๋„์€ ์ปค๋„ฅํ„ฐ ๋กœ๋“œ ๋ฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋น„๋กฏํ•œ ๋ชจ๋“  ๊ณต์œ  ๋ชจ๋“ˆ ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. LivePerson๊ณผ ๊ฐ™์€ ์„œ๋“œ ํŒŒํ‹ฐ ์ƒ๋‹ด์‚ฌ ๋ฐ์Šคํฌํ†ฑ์— ๋ชจ๋“ˆ์„ ํ†ตํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ ๋˜๋Š” UI์—์„œ ์ƒ๋‹ด์‚ฌ ์ง€์› ๊ธฐ๋Šฅ์ด ๋ Œ๋”๋ง๋˜๋Š” ๋ฐฉ์‹์„ ์ตœ์†Œํ•œ์œผ๋กœ ๋งž์ถค์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋ฉด ํ•„์š”ํ•œ ๋ชจ๋“  ์ข…์† ํ•ญ๋ชฉ์ด ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ๋Š” ํ•˜๋‚˜์˜ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•„์š”ํ•˜๋ฉฐ, ์‚ฌ์šฉ๋˜๋Š” Agent Assist ๊ธฐ๋Šฅ์˜ ์ˆ˜๋Š” ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    <script src="https://www.gstatic.com/agent-assist-ui-modules/v1/container.js"></script>

์š”์†Œ ํƒœ๊ทธ ์ด๋ฆ„:

    <agent-assist-ui-modules>

์ดˆ๊ธฐํ™” ์˜ˆ:

    const uiModulesEl = document.createElement('agent-assist-ui-modules');
    uiModulesEl.setAttribute('features', 'SMART_REPLY,ARTICLE_SUGGESTION');
    uiModulesEl.setAttribute('conversation-profile', 'projects/my-project/locations/global/conversationProfiles/123');
    uiModulesEl.setAttribute('auth-token', authToken);
    uiModulesEl.setAttribute('channel', 'chat');
    uiModulesEl.setAttribute('custom-api-endpoint', 'https://my-dialogflow-proxy-service.com');
    uiModulesEl.setAttribute('dark-mode-background', '#000000');
    hostElement.appendChild(uiModulesEl);

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ตฌ์„ฑ์š”์†Œ API ๋ฌธ์„œ ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ฐœ๋ณ„ ๊ตฌ์„ฑ์š”์†Œ

๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ ๋Œ€์‹  ์ƒ๋‹ด์‚ฌ ์ง€์› UI ๋ชจ๋“ˆ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ชจ๋“ˆ์„ ํŽ˜์ด์ง€์˜ ๋‹ค๋ฅธ ์„น์…˜์— ๋ Œ๋”๋งํ•ด์•ผ ํ•˜๋Š” ๋งž์ถค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ƒ๋‹นํ•œ ๋งž์ถค์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ๊ฐ ๊ธฐ๋Šฅ๋ณ„ UI ๋ชจ๋“ˆ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ ๊ตฌํ˜„

์ปจํ…Œ์ด๋„ˆ ๋ฒ„์ „ 1์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ UI ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์—ญ UiModulesConnector ํด๋ž˜์Šค๋ฅผ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

    <script src="https://www.gstatic.com/agent-assist-ui-modules/v1/common.js"></script>

๋ฐฉ๋ฒ•:

    constructor(): void;
    init(config: ConnectorConfig): void;
    disconnect(): void;
    setAuthToken(token: string): void;

๋‹ค์Œ์€ ์ปค๋„ฅํ„ฐ ๊ตฌ์„ฑ ๊ฐ์ฒด์˜ ์ „์ฒด TypeScript ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ง€์›๋˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋งž์ถค UI ๋ชจ๋“ˆ ์ปค๋„ฅํ„ฐ๋ฅผ ๋งŒ๋“  ๊ฒฝ์šฐ agentDesktop๋ฅผ Custom๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ์ง€์›๋˜๋Š” ์ƒ๋‹ด์‚ฌ ๋ฐ์Šคํฌํ†ฑ ์‹œ์Šคํ…œ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

interface ConnectorConfig {
  /** Communication mode for the UI modules application. */
  channel: 'chat'|'voice';

  /** Agent desktop to use. */
  agentDesktop: 'LivePerson' | 'GenesysCloud' | 'SalesForce' | 'GenesysEngageWwe' | 'Custom';

  /** Conversation profile name to use. */
  conversationProfileName: string;

  /** API Connector config. */
  apiConfig: {
    /**
     * Authentication token to attach to outgoing requests. Should be a valid
     * OAuth token for Dialogflow API, or any other token for custom API
     * endpoints.
     */
    authToken: string;

    /**
     * Specifies a custom proxy server to call instead of calling the Dialogflow
     * API directly.
     */
    customApiEndpoint?: string;

    /** API key to use. */
    apiKey?: string;

    /**
     * Additional HTTP headers to include in the Dialogflow/proxy server API
     * request.
     */
    headers?: Array;
  }

  /** Event-based connector config. Set this for voice conversations. */
  eventBasedConfig?: {
    /**
     * Transport protocol to use for updates. Defaults to 'websocket' if none is
     * specified.
     */
    transport?: 'websocket'|'polling';

    /** Event-based library to use (i.e., Socket.io). */
    library?: 'SocketIo';

    /** Endpoint to which the connection will be established. */
    notifierServerEndpoint: string;
  }
}

์ธ์Šคํ„ด์Šคํ™” ์˜ˆ์‹œ:

const connector = new UiModulesConnector();

connector.init({
  channel: 'chat',
  agentDesktop: 'Custom',
  conversationProfileName: 'projects/my-project/locations/global/conversationProfiles/123',
  apiConfig: {
    authToken: 'abc123',
    customApiEndpoint: 'https://my-dialogflow-proxy-server.com',
  }
});

๊ฐ€๊ฒฉ ๋ฉด์ฑ…์กฐํ•ญ

UI ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์„œ๋น„์Šค์™€ ๊ด€๋ จ๋œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.