Payloads personalizados de agentes virtuais

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

Tipos de mensagens de resposta personalizadas

Com as respostas personalizadas, é possível renderizar os seguintes tipos de mensagens:

  • Texto

  • Botões in-line

  • Botões presos

  • Imagens

  • Vídeos

  • Documentos

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

Com as ações personalizadas, os agentes virtuais podem fazer o seguinte:

  • Encaminhamentos para agentes humanos

  • Transferências planejadas para agentes humanos

  • Encerrar sessão de suporte

Payload da Contact Center AI Platform (plataforma CCAI)

Para ser usado no Dialogflow CX como o 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 do chat para payload personalizado

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

Confira os exemplos a seguir para mais detalhes.

Exemplos

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

Texto

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

Encaminhamento para a mesma fila

Por agente virtual:

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

Por usuário final:

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

O valor escalation_reason é informado nos painéis.

Encaminhamento para a fila de destino

Por agente virtual:

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

Por 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.

Encerrar 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 de 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 seu payload personalizado usando o Dialogflow, consulte os recursos Respostas de payload personalizado (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 do agente virtual para um número de telefone ou endpoint SIP

É possível 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 ligação, que vai continuar. Se a conexão falhar, uma mensagem de falha na 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 uma carga útil 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

Para transferir uma chamada de um agente virtual para um endpoint SIP da maneira padrão, use uma carga útil do Dialogflow CX semelhante ao exemplo de código a seguir:

{
  "ujet": {
    "type": "action",
    "action": "deflection",
    "deflection_type" : "sip",
    "sip_uri": "sip:1-999-123-4567@voip-provider.example.net"
  }
}

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 da intenção e da resposta do usuário final. Em seguida, colete e faça upload de todas elas para o CRM como um comentário. Para mais informações, consulte Payload do Dialogflow para variáveis de sessão personalizadas.

Captura da resposta do usuário final

Flow

  1. A plataforma de 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 deve preencher o campo session_variable na resposta.

  2. O Dialogflow CX retorna a resposta com o payload personalizado, incluindo o campo session_variablecom 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 uma conversa.

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 uma carga útil personalizada será capturada como uma variável de sessão com a chave "key".

Capturar da resposta de intent

Flow

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

    1. O Dialogflow CX pode fazer uma chamada de volta para o servidor do cliente por fulfillment.

    2. O servidor do cliente deve 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 = "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 fiquem 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 Mostrar 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 Mostrar 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 deve coletar todas as variáveis de sessão internamente e fazer 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

Confira a seguir 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, as seguintes postagens de comentários são feitas no tíquete 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 corpo do texto.

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 abrir o link. 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 específico de payload do Dialogflow CX processa cards de conteúdo quando mensagens de usuários finais são recebidas pelo servidor do bot de chat. 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 conversas 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 seguinte formato 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 em 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, você pode 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:cria 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 em cards 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