👩‍💻
Manual de Integração
  • 🏠Início
  • 🔗Webhooks
    • Habilitando
    • Tipos de webhook
  • 🌐API
    • Autenticacão
    • Utilizacão
  • 💬Flow
    • Gatilhos
      • Frases de treino (PLN)
      • Anúncios da META
      • Webhooks
        • RD Marketing
        • Customizado
    • Integrações nativas
      • Configurando RD CRM
      • Configurando Pipedrive
      • Configurando Nectar CRM
      • Configurando RD Marketing
    • Captura de dados
    • Variáveis de contato
    • Validação e formatação de captura
    • Utilizando dados do contato
    • Requisição HTTP
      • Retorno vinculado à Suri
      • Retorno livre
      • Retorno de lista
    • Múltiplas etapas
  • 🧠Intenção de IA (legado)
    • Resumão
    • Exemplo de uso 1: segunda via
    • Fluxo Suri vs. Fluxo Externo
    • Exemplo de uso 2: formulário
  • ❓FAQ
Powered by GitBook
On this page
  1. Flow
  2. Requisição HTTP

Retorno vinculado à Suri

PreviousRequisição HTTPNextRetorno livre

Last updated 7 months ago

Por padrão, ao executar uma ação de Requisição HTTP, a Suri não espera uma resposta específica, apenas continua o fluxo executando as demais ações, se existirem. Porém existem algumas situações que desejamos utilizar o retorno de tal chamada HTTP de forma mais inteligente dentro do próprio Flow. Abaixo temos um exemplo para ilustrar:

Quero utilizar o Suri Flow para enviar um boleto de segunda via da fatura para meus clientes. Estou utilizando a ação de Requisição HTTP em meu Flow, onde envio os dados do contato para a API e lá consigo saber o último boleto em aberto, mas como faço para enviar de volta para o contato?

É uma situação interessante e bem comum: você deseja que o retorno da sua chamada HTTP seja uma resposta para seu contato - nesse caso, o boleto em PDF que o mesmo solicitou no fluxo. Para isso, basta marcar a opção "O retorno da requisição insere uma ação" na configuração da ação HTTP, como ilustrado abaixo:

Isso indicará à Suri que ela pode esperar um retorno do tipo FlowAction, que é uma ação executada pelo Flow de envio de mensagem ao contato. Retornando uma ação, ela é inserida no fluxo atual sem comprometer a experiência do fluxo e permitindo um leque de opções.

Existem diversos tipos de ação que podemos usar como resposta e iremos falar mais sobre elas mais abaixo, mas já adiantando, ainda utilizando o exemplo do boleto em PDF, sua API deve retornar um objeto do tipo FlowActionSendMediacontendo a url do boleto em questão., que será enviado ao contato que o solicitou.

Note que assim que marcamos a opção, aparece um banner amarelo indicando que as ações posteriores podem sofrer alterações. Isso é apenas um alerta indicando que, dependendo do tipo de FlowAction retornado, as demais ações do fluxo podem não ser executadas. Por exemplo, se sua API retornar com um FlowActiondo tipo "Envio de texto", tudo ok, as ações posteriores irão ser executadas normalmente após a ação de texto inserida ser executada. Mas se sua API retornar um FlowActiondo tipo "Transferir para atendimento humano", aí não faria sentido executar ações posteriores, pois a ação de transferir é uma ação de redirecionamento, que encerra o fluxo atual. Portanto a Suri apenas ignora as próximas ações e transfere o contato para atendimento humano.

Caso sua API apresente falha e não consiga retornar nenhum dado ou retorne um FlowActioninválido, não se preocupe: isso não irá quebrar o fluxo da Suri. O flow irá continuar normalmente, enviando as demais ações, caso existam, e registrando o erro em nossos logs para fins de consulta.

Modelos de FlowAction

Atualmente temos suporte aos seguintes FlowAction 's como resposta de requisição HTTP:

  • FlowActionSendText: Envio de texto

  • FlowActionSendMedia: Envio de mídia (imagem, vídeo, áudio ou documento)

  • FlowActionSendLocation: Envio de localização

  • FlowActionCapture: Captura de dado

  • FlowActionRequestAgent: Transferir para atendimento humano

  • FlowActionGoToFlow: Transferir para outro fluxo

Segue abaixo uma definição de todos os modelos listados:

  • FlowActionSendText: Envio de texto

{
    text: string, // Texto a ser enviado
    delay: number // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
    type: 0, // 0 para tipo Texto. Não alterar
}
  • FlowActionSendMedia: Envio de mídia (imagem, vídeo, áudio ou documento)

{
    mediaType: number, // 0 para áudio, 1 para documento, 2 para imagem, 3 para vídeo
    url: string, // URL do arquivo
    fileName: string, // Nome do arquivo
    caption: string, // Opcional. Descrição do arquivo (texto menor a ser enviado junto)
    delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
    type: 1 // 1 para tipo Mídia. Não alterar
}
  • FlowActionSendLocation: Envio de localização

{
    latitude: number, // Latitude
    longitude: number, // Longitude
    name: string, // Obrigatório. Nome para a localização, exemplo: Trabalho
    address: string, // Opcional. Breve descrição do endereço, exemplo: Av. Dom Manuel, 1020
    delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
    type: 2 // 2 para tipo Localização. Não alterar
}
  • FlowActionRequestAgent: Transferir para atendimento humano

{
    departmentId: string, // Opcional. ID do departamento para transferir
    agentId: string, // Opcional. ID do atendente para transferir
    delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
    type: 4 // 4 para tipo Transferência para atendimento humano. Não alterar
}
  • FlowActionGoToFlow: Transferir para outro fluxo

{
    flowId: string, // ID do flow a ser transferido
    delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
    type: 3 // 3 para Transferência de fluxo. Não alterar
}
    • Nome, E-mail, Telefone, Documento, Observação ou Variável de Texto Livre

    {
        property: number, // Propriedade a ser capturada. 0 para Nome, 1 para E-mail, 2 para Telefone, 3 para Documento de identificação, 4 para Observação, 100 para Variável
        alwaysCapture: boolean, // Padrão true. Se a Suri sempre deve tentar capturar o dado ou somente em caso de não capturado
        variableType: 0, // Não alterar. Forma de captura. 0 para Texto livre, 1 para Botões, 2 para Lista
        variableName?: string, // Opcional. Obrigatório se property = 4. Nome da variável a ser capturada
        messageQuestion: string, // Mensagem de pergunta para capturar o dado
        messageIfCaptured?: null, // Opcional. Mensagem para caso de campo já capturado
        messageAfterCapture?: string, // Opcional. Mensagem para enviar após captura
        delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
        type: 7 // 7 para Captura. Não alterar
    }
    • Variável com botões: lembrando que o máximo de botões é 3

    {
        property: 100, // Não alterar. Propriedade a ser capturada. 0 para Nome, 1 para E-mail, 2 para Telefone, 3 para Documento de identificação, 100 para Variável
        alwaysCapture: boolean, // Padrão true. Se a Suri sempre deve tentar capturar o dado ou somente em caso de não capturado
        variableType: 1, // Não alterar. Forma de captura. 0 para Texto livre, 1 para Botões, 2 para Lista
        variableTypeButtons: {
            ContentType: number, // Tipo de conteúdo do botão. 0 para Texto, 1 para Imagem, 2 para Vídeo, 3 para Arquivo
            Header: string, // Opcional. Texto a ser enviado acima do texto principal de pergunta
            Text: string, // Texto principal do botão, que geralmente é a pergunta.
            Caption: string, // Opcional. Texto a ser enviado após o texto principal de pergunta
            Url: string, // Opcional. URL da mídia a ser enviada, caso o ContentType seja diferente de Text
            FileName: string, // Opcional. Nome da mídia a ser enviada
            Buttons: { Title: string }[] // Botões a serem mostrados (máximo 3). O título do botão é também o valor a ser capturado na variável
        },
        variableName: string, // Nome da variável
        messageIfCaptured?: null, // Opcional. Mensagem para caso de campo já capturado
        messageIfNoOptionSelected?: string, // Opcional. Mensagem para enviar em caso de nenhuma opção selecionada
        messageAfterCapture?: string, // Opcional. Mensagem para enviar após captura
        delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
        type: 7 // 7 para Captura. Não alterar
    }
    • Variável com lista: lembrando que o máximo de opções em uma lista é 10, podendo ser divididas em no máximo 3 seções (divisões visuais no WhatsApp)

    {
        property: 100, // Não alterar. Propriedade a ser capturada. 0 para Nome, 1 para E-mail, 2 para Telefone, 3 para Documento de identificação, 100 para Variável
        alwaysCapture: boolean, // Padrão true. Se a Suri sempre deve tentar capturar o dado ou somente em caso de não capturado
        variableType: 2, // Não alterar. Forma de captura. 0 para Texto livre, 1 para Botões, 2 para Lista
        variableTypeList: {
            title: string, // Título da lista
            body: string, // Pergunta de captura
            buttonTitle: string, // Título do botão que abre a lista
            sections: {
                title: string, // Título da lista
                subtitle: string, // Opcional. Pequena descrição da seção
                options: {
                    title: string, // Título da opção da lista e valor a ser capturado após seleção
                    description: string // Opcional. Descrição do item da lista
                }[] // Opções da lista, no máximo 10 contando todas as seções, isto é, a soma de options de cada section não deve ultrapassar 10
            }[] // Seções da lista, no máximo 3
        },
        variableName: string, // Nome da variável
        messageIfCaptured?: null, // Opcional. Mensagem para caso de campo já capturado
        messageIfNoOptionSelected?: string, // Opcional. Mensagem para enviar em caso de nenhuma opção selecionada
        messageAfterCapture?: string, // Opcional. Mensagem para enviar após captura
        delay: number, // Opcional, padrão 0. Tempo de espera em segundos antes de executar a ação
        type: 7 // 7 para Captura. Não alterar
    }

FlowActionCapture: Captura de dado. Deixamos ele por último pois é o mais extenso. Lembrando que em caso de ele possui 3 subtipos: Texto livre, Botões e Lista.

Agora que você entendeu como funciona o tratamento de Retorno vinculado à Suri, te convidamos a conhecer um pouco mais sobre a maneira mais no-code de integrar: o tratamento de , onde a própria Suri consegue capturar os dados proveninentes de sua API, independente do formato em que estiverem.

💬
captura de Variável
Retorno livre