Payloads personalizados de agentes virtuais

O payload personalizado do Dialogflow CX permite melhorar a experiência do agente virtual além do chat e das interações baseadas em texto simples. Ao usar payloads personalizados no Dialogflow CX, você pode configurar o agente virtual para renderizar respostas e citações personalizadas.

Tipos de mensagens de resposta personalizadas

As respostas personalizadas permitem renderizar os seguintes tipos de mensagens:

  • Texto

  • Botões in-line

  • Botões fixos

  • Imagens

  • Vídeos

  • Documentos

  • Visualizações complexas (combinação de um ou mais tipos de mensagens)

As ações personalizadas permitem que os agentes virtuais realizem as seguintes ações:

  • Escalonamentos para agentes humanos

  • Transferências planejadas para agentes humanos

  • Encerrar a sessão de suporte

Payload da Contact Center AI Platform (CCAI Platform)

Para ser usado no Dialogflow CX como payload personalizado. O exemplo a seguir demonstra o formato das respostas no webSDK usando o Dialogflow CX.

{
  "ujet": {
    "type": "text|inline_button|sticky_button|image|video|document|complex|action",
    "action": "escalation|end",
    "title": "message displayed on the top of the message",
    "escalation_reason": "by_consumer|by_virtual_agent",
    "session_variable": {
      "capture_target": "payload|end_user_response",
      "capture_key": "key",
      "payload": {
      }
    },
    "messages": [
      "Hello",
      "How can I help you?"
    ],
    "buttons": [
      {
        "title": "Button 1",
        "action": "quick_reply"
      },
      {
        "title": "Button 2",
        "action": "quick_reply"
      }
    ],
    "images": [
      {
        "url": "https://image.url",
        "text": "an alternate text for an image for when failed to load an image"
      },
      {
        "url": "https://image.url",
        "text": "an alternate text for an image"
      }
    ],
    "videos": [
      {
        "url": "https://video.url",
        "text": "an alternate text for a video for when failed to load a video"
      },
      {
        "url": "https://video.url",
        "text": "an alternate text for a video"
      }
    ],
    "documents": [
      {
        "url": "https://document.url",
        "text": "an alternate text for a document for when failed to load a document"
      },
      {
        "url": "https://document.url",
        "text": "an alternate text for a document"
      }
    ],
    "components": [
      {
        "type": "text",
        "messages": [
          "We need the information for helping you.",
          "Could you please choose the following options?"
        ]
      },
      {
        "type": "inline_button",
        "buttons": [
          {
            "title": "Button 1",
            "action": "quick_reply"
          },
          {
            "title": "Button 2",
            "action": "quick_reply"
          }
        ]
      },
      {
        "type": "image",
        "images": [
          {
            "url": "https://image.url",
            "text": "an alternate text for an image for when failed to load an image"
          },
          {
            "url": "https://image.url",
            "text": "an alternate text for an image"
          }
        ]
      }
    ]
  }
}

Formato de mensagem de chat para payload personalizado

Usado com o SDK da plataforma CCAI para mostrar uma UI adequada. É o mesmo formato de payload personalizado do Dialogflow CX, mas não tem o campo "ujet" na raiz.

Consulte os exemplos a seguir para mais detalhes.

Exemplos

As seções a seguir incluem payloads de exemplo que podem ser usados no Dialogflow CX.

Texto

{
  "ujet": {
    "type": "text",
    "messages": [
      "Hello",
      "How can I help you?"
    ]
  }
}

Escalonamento para a mesma fila

Pelo agente virtual:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_virtual_agent"
  }
}

Pelo usuário final:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_consumer"
  }
}

O valor escalation_reason é informado nos painéis.

Escalonamento para a fila segmentada

Pelo agente virtual:

{
  "ujet": {
    "type": "action",
    "action": "escalation",
    "escalation_reason": "by_virtual_agent",
    "menu_id": 100,
    "language": "ko"
  }
}

Pelo usuário final:

{
  "ujet": {
      "type": "action",
      "action": "escalation",
      "escalation_reason": "by_consumer",
      "menu_id": 100,
      "language": "ko"
  }
}

O valor escalation_reason é informado nos painéis.

Finalizar conversa

{
  "ujet": {
    "type": "action",
    "action": "end"
  }
}

Botão in-line

{
  "ujet": {
    "type": "inline_button",
    "title": "Select a menu",
    "buttons": [
      {
        "title": "Lorem Ipsum",
        "action": "quick_reply"
      },
      {
        "title": "Lorem Ipsum Dolor Sit Amet",
        "action": "escalation"
      }
    ]
  }
}

Exemplo

Exemplo de botão inline

Botão fixo

{
  "ujet": {
    "type": "sticky_button",
    "title": "Select a menu",
    "buttons": [
      {
        "title": "Lorem Ipsum",
        "action": "quick_reply"
      },
      {
        "title": "Lorem Ipsum Dolor Sit Amet",
        "action": "escalation"
      }
    ]
  }
}

Exemplo

Exemplo de botão fixo

Visualização da imagem

{
  "ujet": {
    "type": "image",
    "title": "Please see the following images",
    "images": [
      {
        "url": "https://image1.url",
        "text": "an alternate text for an image for when failed to load an image"
      },
      {
        "url": "https://image2.url",
        "text": "an alternate text for an image"
      }
    ]
  }
}

Exibição de vídeo

{
  "ujet": {
    "type": "video",
    "title": "Please see the following videos",
    "videos": [
      {
        "url": "https://video1.url",
        "text": "an alternate text for a video for when failed to load a video"
      },
      {
        "url": "https://video2.url",
        "text": "an alternate text for a video"
      }
    ]
  }
}

Visualização do documento

{
  "ujet": {
    "type": "document",
    "title": "Please see the following document",
    "documents": [
      {
        "url": "https://document1.url",
        "text": "an alternate text for a document for when failed to load a document"
      },
      {
        "url": "https://document2.url",
        "text": "an alternate text for a document"
      }
    ]
  }
}

Visualização complexa

{
  "ujet": {
    "type": "complex",
    "type": "Welcome to CCAI Platform world!",
    "components": [
      {
        "type": "text",
        "messages": [
          "We need the information for helping you.",
          "Could you please choose the following options?"
        ]
      },
      {
        "type": "inline_button",
        "buttons": [
          {
            "title": "Button 1",
            "action": "quick_reply"
          },
          {
            "title": "Button 2",
            "action": "quick_reply"
          }
        ]
      },
      {
        "type": "image",
        "images": [
          {
            "url": "https://image1.url",
            "text": "an alternate text for an image for when failed to load an image"
          },
          {
            "url": "https://image2.url",
            "text": "an alternate text for an image"
          }
        ]
      }
    ]
  }
}

Como configurar um payload personalizado no Dialogflow

Para mais informações sobre como configurar o payload personalizado usando Dialogflow, consulte os recursos Respostas de payload personalizadas (Dialogflow ES) ou Payload personalizado (Dialogflow CX).

Para mais informações, consulte Variáveis de sessão personalizadas para processamento de payload personalizado.

Transferência de agente virtual para um número de telefone ou endpoint SIP

Você pode usar payloads personalizados do Dialogflow CX para transferir chamadas de um agente virtual de voz para o número de telefone ou endpoint SIP especificado. Se a conexão for estabelecida, o agente virtual será removido da chamada, e ela vai continuar. Se a conexão falhar, uma mensagem de falha de transferência será reproduzida, e a chamada vai continuar com o agente virtual.

As transferências de agentes virtuais funcionam para chamadas internas e externas. As transferências de agentes virtuais são registradas como Planned Transfers nos relatórios.

Transferir uma chamada para um número de telefone

Para transferir uma chamada de um agente virtual para um número de telefone, use um payload do Dialogflow CX semelhante ao exemplo de código a seguir:

{
  "ujet": {
    "type": "action",
    "action": "deflection",
    "deflection_type" : "phone",
    "phone_number": "+16509424879"
  }
}

Transferir uma chamada para um endpoint SIP

Você pode transferir uma chamada de um agente virtual para um endpoint SIP com um tempo limite de chamada opcional.

Tempo limite de chamada

Para configurar um tempo limite de chamada, adicione o campo sip_ring_timeout. Isso dá às chamadas para extensões internas ou destinos de comunicações unificadas (UC) tempo suficiente para serem atendidas antes da desconexão. Isso funciona apenas para usuários do Twilio. O Twilio adiciona aproximadamente cinco segundos ao tempo limite de chamada configurado.

Exemplo

Para transferir uma chamada de um agente virtual para um endpoint SIP, use um payload do Dialogflow semelhante ao exemplo de código a seguir:

{
  "ujet": {
    "type": "action",
    "action": "deflection",
    "deflection_type" : "sip",
    "sip_uri": "SIP_ENDPOINT",
    "sip_ring_timeout": SIP_RINGING_TIMEOUT
  }
}

Substitua:

  • SIP_ENDPOINT: o endpoint SIP para transferir a chamada. Ele deve ser semelhante a sip:1-999-123-4567@voip-provider.example.net.

  • SIP_RINGING_TIMEOUT: opcional: o número de segundos que a chamada toca antes de expirar. Valores válidos: de 10 a 600, inclusive. Se você definir um valor fora desse intervalo, o sistema vai usar o tempo limite de chamada padrão de 30 segundos. Padrão: 30 segundos.

Transferir uma chamada para um endpoint SIP usando o método SIP REFER

Para transferir uma chamada de um agente virtual para um endpoint SIP usando o método SIP REFER, use um payload do Dialogflow CX semelhante ao exemplo de código a seguir. Com o método SIP REFER, é possível transmitir informações úteis usando as propriedades do cabeçalho.

{
    "ujet": {
       "type": "action",
       "action": "deflection",
       "deflection_type" : "sip"
       "sip_uri": "sip:1-999-123-4567@voip-provider.example.net"
       "sip_refer": true
       "sip_parameters": {
       "x-header": "value",
       "x-header": "value"
       }
    }
}

Variáveis de sessão personalizadas para processamento de payload personalizado

Use variáveis de sessão personalizadas para capturar valores da resposta de intent e da resposta do usuário final. Em seguida, colete todos eles e faça o upload para o CRM como um comentário. Para mais informações, consulte Payload do Dialogflow para variáveis de sessão personalizadas.

Capturar da resposta do usuário final

Fluxo

  1. A plataforma CCAI solicita a resposta ao Dialogflow CX.

    O Dialogflow CX pode fazer um callback para o servidor do cliente por fulfillment.

    O servidor do cliente precisa preencher o campo session_variable na resposta.

  2. O Dialogflow CX retorna a resposta com o payload personalizado, incluindo o campo session_variable com capture_target = end_user_response.

  3. Um usuário final envia uma mensagem.

  4. A plataforma CCAI mantém a mensagem do usuário final enviada na etapa anterior.

  5. A plataforma CCAI vai postar todas as variáveis de sessão capturadas na sessão de chat no CRM como um comentário quando um agente virtual sair de um chat.

Formato de payload personalizado

{
  "ujet": {
    "session_variable": {
      "capture_target": "end_user_response",
      "capture_key": "key"
    }
  }
}

A próxima mensagem do usuário final imediatamente após um agente virtual enviar um payload personalizado será capturada como uma variável de sessão com a chave "key".

Capturar da resposta de intent

Fluxo

  1. A plataforma CCAI solicita a resposta ao Dialogflow CX.

    1. O Dialogflow CX pode fazer um callback para o servidor do cliente por fulfillment.

    2. O servidor do cliente precisa preencher o campo session_variable na resposta.

  2. O Dialogflow CX retorna a resposta com o payload personalizado incluindo session_variable campo com capture_target = "payload".

  3. O servidor da plataforma CCAI mantém o objeto payload na etapa 2.

A plataforma CCAI vai postar todas as variáveis de sessão capturadas na sessão de chat no CRM como um comentário quando um agente virtual sair de um chat.

Formato de payload personalizado

{
  "ujet": {
    "session_variable": {
      "capture_target": "payload",
      "capture_type": [
        "comment",
        "agent"
      ],
      "payload": {
        "status": "STATUS",
        "order_id": "ORDER_ID",
        "personal_id": "PERSONAL_ID"
      },
        "invisible_to_agent": ["INVISIBLE_TO_AGENT"],
        "display_order_in_adapter": ["DISPLAY_ORDER_IN_ADAPTER"]
    }
  }
}

Substitua:

  • STATUS: o status do pedido

  • ORDER_ID: o ID do pedido

  • PERSONAL_ID: um identificador do usuário final.

  • INVISIBLE_TO_AGENT: uma matriz de propriedades que você não quer que sejam visíveis no adaptador do agente. Por exemplo, um valor de "personal_id" aqui impediria que a propriedade personal_id fosse exibida no adaptador do agente. Para mais informações, consulte Exibir variáveis de sessão do agente virtual.

  • DISPLAY_ORDER_IN_ADAPTER: uma matriz de propriedades para especificar a ordem em que as variáveis de sessão devem aparecer no adaptador do agente e nos registros do CRM. Para mais informações, consulte Exibir variáveis de sessão do agente virtual.

Upload de variáveis de sessão personalizadas no CRM

Para cada variável de sessão, o servidor precisa coletar todas as variáveis de sessão internamente e fazer o upload delas no CRM quando um agente virtual sair.

Exemplo de mensagem do CRM

    ###########################

    Chat ID: 1
    Menu ID: 1
    Chatbot Platform: Platform Name
    Chatbot Workflow: Workflow Name
    Virtual Agent: Virtual Agent Name

    ###########################

    Intent: Intent Captured from End User Response
    Captured At: 2020-06-25 14:54:19

    Captured Variables
    request: Cancel Order

    ###########################

    Intent: Intent Captured from Payload
    Captured At: 2020-06-25 14:58:23

    Captured Variables
    status: Cancelled
    order_id: #12345

    ###########################

Exemplo de cenário

A seguir, apresentamos um exemplo de conversa que mostra as diferentes etapas e as mensagens trocadas entre o agente virtual e o usuário final.

Etapa 1

Mensagem de chat do agente virtual

How can I help you? (Button) Show my orders (Button) Cancel an order

Resposta de intent (payload personalizado)

{
  "ujet": {
    "type": "inline_button",
    "title": "How can I help you?",
    "buttons": [
      {
        "title": "Show my orders",
        "action": "quick_reply"
      },
      {
        "title": "Cancel an order",
        "action": "quick_reply"
      }
    ]
  }
}

Variável de sessão capturada

Nenhum

Etapa 2

Mensagem de chat do usuário final

Click "Cancel an order" button.

Variável de sessão capturada

Nenhum

Etapa 3

Mensagem de chat do agente virtual

Can you provide the order id please

Resposta de intent (payload personalizado)

{
  "ujet": {
    "type": "text"
    "messages": [
      "Can you provide the order id please"
    ],
    "session_variable": {
       "capture_target": "end_user_response",
       "capture_key": "order_id";
    }
  }
}

Variável de sessão capturada

Nenhum

Etapa 4

Mensagem de chat do usuário final

Order id is #12345

Variável de sessão capturada

order_id: "Order ID is #12345"

Etapa 5

Mensagem de chat do agente virtual

Order #12345 is cancelled. Do you need anything else?

Resposta de intent (payload personalizado)

{
  "ujet": {
    "type": "text",
    "messages": [
      "Order #12345 is canceled.",
      "Do you need anything else?"
    ],
    "session_variable": {
      "capture_target": "payload",
      "capture_type": [
        "agent",
        "comment",
        "event"
      ],
      "payload": {
        "order_id": "#12345",
        "order_status": "cancelled"
      }
    }
  }
}

Variável de sessão capturada

order_id: "#12345", order_status: canceled

Etapa 6

Mensagem de chat do usuário final

I would like to speak with a human agent.

Etapa 7

Mensagem de chat do agente virtual

Virtual Agent is left from the conversation.

{
  "ujet": {
    "type": "escalation",
    "escalation_reason": "by_consumer"
  }
}

Upload de variáveis de sessão personalizadas no CRM

No cenário anterior, o seguinte comentário é postado no ticket do CRM:

    ---------------------------------

    Chat ID: 1
    Menu ID: 1
    Chatbot Platform: Platform Name
    Chatbot Workflow: Workflow Name
    Virtual Agent: Virtual Agent Name

    --------------------------------

    Intent: Intent Captured from End User Response
    Captured At: 2020-06-25 14:54:19

    Captured Variables
    order_id: Order id is #12345.

    --------------------------------

    Intent: Intent Captured from Payload
    Captured At: 2020-06-25 14:58:23

    Captured Variables
    order_id: #12345
    order_status: canceled

    --------------------------------

Configurar cards de conteúdo

Os cards de conteúdo mostram conteúdo conciso e visualmente atraente em um formato de card, criando interações mais simples para o usuário final consumir as informações apresentadas. É possível criar cards de conteúdo usando o Dialogflow CX e personalizá-los com títulos, subtítulos e texto do corpo.

O exemplo a seguir usa cards de conteúdo para mostrar opções de restaurantes ao usuário final:

Exemplo de card de conteúdo

Propriedades do card de conteúdo

Nome da propriedade Descrição Obrigatório Tipo
title O título do card. Sim String
subtitle O subtítulo do card. Não String
body A descrição do card de conteúdo. Sim String
link Um link de página da Web ou um link direto. O SDK vai usar os recursos do SO para abri-lo. Não String
event_params Um dicionário que contém informações extras sobre o evento de clique. O SDK vai usar isso. Não Dicionário

Payload do Dialogflow CX: adicionar validação e aceitar o tipo de card de conteúdo

Um tipo de payload específico do Dialogflow CX processa cards de conteúdo quando as mensagens dos usuários finais são recebidas pelo servidor do chatbot. Confira a seguir um exemplo de payload do Dialogflow CX:

{
  "ujet": {
    "type": "content_card",
    "cards": [
      {
        "title": "Title",
        "subtitle": "Subtitle",
        "body": "Body",
        "link": "app://page",
        "event_params": {} # for deep-link click event
      }
    ]
  }
}

Informações sobre cards de conteúdo no histórico de chat do CRM

As informações do título do card são registradas para acompanhar em quais cards o usuário final clicou. Essas informações são registradas no histórico de chat do CRM.

No exemplo a seguir, o histórico de mensagens de chat no CRM mostra a interação do card de conteúdo.

[Chat message history]
ID: 305   |   2023-07-06     PDT
--------------------------------------------------
[01:13:32     VA]     Welcome message

[01:14:35     Mobile U.]     Content Cards:
- Title 1
- Title 2

Registrar eventos de clique no título do card de conteúdo

Para registrar quando um usuário final clica no título de um card de conteúdo, use o formato a seguir para capturar o evento:

{end_user_name} clicked on the '{title}' card.
Note Title: Content Card click
Note Comment: 'John Doe' clicked on the 'See our new website' card.

Criar um evento de clique no card de conteúdo usando a API End User Event

Quando um usuário final clica no título de um card de conteúdo, é possível registrar esse evento enviando uma solicitação POST para o URL especificado junto com o título do card clicado.

Endpoint da API:POST /api/v2/chat/:id/end_user_event

Uso:criar um evento de clique no card de conteúdo.

URL:/api/v2/chats/:id/end_user_event

Método:POST

Parâmetros :

Campo Tipo Descrição
event objeto
event.name string Para eventos de clique no card de conteúdo, use content_card_clicked.
event.payload objeto
event.payload.title string Insira o título do card clicado.
(Opcional) end_user_name string Insira o nome do usuário final. Se deixado em branco, o nome será recuperado do CRM.

Exemplo de solicitação:

{
  "event": {
    "name": "content_card_clicked",
    "payload": {
      "title": "New our website"
    }
  },
  "end_user_name": "consumer 1"   ## optional
}

Resposta: Status: 202 Accepted