Skip to main content

Criar tarefa HTTP

Durante a execução do seu plano, você pode criar uma tarefa para enviar solicitações HTTP a um ponto de extremidade de aplicativo de terceiros. Por exemplo, quando uma tarefa anterior é executada com sucesso, você pode enviar uma mensagem HTTP para um ponto de extremidade designado com informações sobre essa tarefa.

  • Uma tarefa HTTP é uma solicitação entre o Alteryx Analytics Cloud (AAC) e outro aplicativo. Essas solicitações são entregues usando HTTP e podem ser interpretadas pelo aplicativo de recebimento para realizar uma ação.

    Nota

    Seu aplicativo de recebimento pode exigir que você inclua o número de porta e host ou o endereço IP da plataforma na lista de permissões. Consulte a documentação do seu aplicativo.

  • Uma tarefa HTTP é um dos tipos de tarefa disponíveis em um plano. Para obter mais informações, vá para Página "Exibição do plano" .

Limitações

  • Certificados de segurança personalizados não podem ser usados.

  • As solicitações baseadas em HTTP têm um tempo limite de 30 segundos.

Pré-requisitos

Requisitos para o aplicativo de recebimento

Para enviar uma solicitação HTTP a um aplicativo de destino, este aplicativo deve estar configurado para receber a solicitação:

  • Solicitações de fora do domínio do aplicativo devem estar habilitadas.

    Nota

    Seu aplicativo de recebimento pode exigir que você inclua o número de porta e host ou o endereço IP da plataforma na lista de permissões. Consulte a documentação do seu aplicativo.

  • É necessário adquirir o URL do ponto de extremidade para o qual enviar a solicitação HTTP.

  • É necessário adquirir todos os cabeçalhos HTTP que devem ser inseridos com cada solicitação HTTP.

  • Se o pedido tiver de ser assinado, é necessária configuração adicional. Os detalhes estão abaixo.

Criar tarefa

  1. Arraste e solte a tarefa HTTP do painel esquerdo para a tela do plano.

  2. No painel direito, selecione Tarefa HTTP . O painel de tarefas HTTP é exibido.

PlanViewPage-ViewForHTTPTask.png

Figura: tarefa HTTP

Configurar tarefa

  1. Defina os parâmetros obrigatórios. Para obter mais informações sobre parâmetros, vá para Exibição do plano para tarefas HTTP .

  2. Você pode especificar informações de metadados do plano nos valores de cabeçalho e no corpo da solicitação. Para obter mais informações, vá para Referências de metadados do plano .

  3. Para testar a conexão, clique em Testar . Uma mensagem de sucesso é exibida.

    Dica

    Um código de status 200 indica que o teste foi bem-sucedido.

    Dica

    Você pode usar o método GET para fins de teste. Uma solicitação GET não altera nenhum dado na plataforma de destino, mas pode permitir que você especifique elementos no corpo da solicitação.

  4. Para adicionar a tarefa, clique em Salvar .

Renomear tarefa

Para renomear a tarefa, clique no menu "Mais" > Editar no painel direito.

Dica

Uma boa nomenclatura pode incluir o ponto de extremidade e o método da plataforma de destino, bem como os propósitos da tarefa em seu plano.

Excluir tarefa

Para excluir a tarefa, clique no menu "Mais" > Excluir . Confirme que deseja excluir a tarefa.

Atenção

Essa etapa não pode ser desfeita.

Referências de metadados do plano

Dentro da mensagem de suas outras tarefas, você pode referenciar metadados sobre o plano, suas tarefas e sua execução. Para obter mais informações, vá para Referências de metadados do plano .

Exemplos

Mensagem do canal do Slack

Dica

As tarefas do Slack agora são um recurso com suporte do produto. Para obter mais informações, acesse Criar tarefa do Slack .

Você pode criar uma tarefa HTTP para entregar uma mensagem de texto a um canal do Slack de sua escolha.

Pré-requisitos

Configure sua instalação do Slack para receber mensagens HTTP:

  1. Se necessário, crie um canal do Slack para receber suas mensagens.

  2. Crie um aplicativo.

  3. Ative mensagens HTTP de entrada para o seu aplicativo.

  4. Especifique o canal para receber as mensagens de entrada.

  5. Copie o URL para a solicitação HTTP de entrada a partir da instrução cURL.

Definir a tarefa HTTP

Parâmetro

Descrição

Nome

Este nome aparece apenas no AAC.

Método

Selecione o método POST .

URL

Cole o URL que você copiou do Slack.

Cabeçalhos

Copie os cabeçalhos de conteúdo do comando do cURL do Slack:

key: Content-Type
value: application/json

Corpo

{"text":"Your job has completed."}
Verificar
  1. Clique em Testar para validar que essa tarefa funcionará.

  2. Execute um trabalho e verifique se há uma mensagem no canal do Slack.

Exemplos de metadados do plano

Você pode referenciar informações de metadados da definição do plano e da execução atual do plano como parte da solicitação de sua tarefa HTTP.

Observações:

  • Só é possível inserir referências de metadados para tarefas que já ocorreram na execução do plano antes do início da tarefa HTTP.

  • Cada tarefa na execução atual é referenciada usando um código de duas letras. Exemplo:

    {{$http_xx.name}}
    
Sintaxe

A referência de metadados de um plano é construída usando a seguinte sintaxe. Na caixa de texto apropriada, insira um dos seguintes valores:

Dica

Comece digitando $ , que fornece acesso a uma árvore de referências para cada um dos tipos de referência de metadados. A sintaxe final está anotada acima.

Planos:

Informações de metadados da definição do plano ou da execução atual do plano:

{{$plan
Informações do plano

O corpo de solicitação a seguir contém referências ao nome do plano, ao identificador de execução do plano e ao fluxo que acabou de ser executado:

{"text":"Plan: {{$plan.name}} 
RunId: {{$plan.runId}}
Flow: {{$flow_7p.name}}
Success."}
Informações de execução do plano

O corpo de solicitação a seguir contém informações de execução do plano usando carimbos de data/hora:

{"text":"Plan: {{$plan.name}} 
RunId: {{$plan.runId}}
- plan start: {{$plan.startTime}}
Running time: {{$plan.duration}}

Times:
- last task start: {{$flow_7p.startTime}}
- last task end: {{$flow_7p.endTime}}
"}
Informações da tarefa HTTP

Você pode referenciar informações de uma tarefa HTTP que já ocorreu:

{"text":"{{$http_qg.name}} returned {{$http_qg.statusCode}}."} 

Para obter mais informações, consulte Referências de metadados do plano .

Alimentar entradas de metadados para função de nuvem

Este exemplo demonstra como você pode usar uma tarefa HTTP para entregar metadados de plano para funções do AWS Lambda. Uma abordagem semelhante pode ser usada para funções do Google Cloud.

Neste caso, o valor de rowCount da execução da tarefa de fluxo é entregue via tarefa HTTP para uma função do AWS Lambda.

Passos gerais:

  1. Defina o seu plano.

  2. Tarefa de fluxo: execute o fluxo para gerar as saídas necessárias para a sua função do Lambda.

  3. Tarefa HTTP: gera uma solicitação HTTP cujo corpo inclui uma referência à variável de metadados rowCount. Corpo da solicitação:

    {
     "rowCount": "{{$flow_7p['My Flow Name'].output['My output name'].rowCount}}"
    }
  4. Funções do AWS Lambda: o seguinte é pseudocódigo para o Lambda:

    import json
    def lambda_handler(event, context):
      httpTaskBody = json.loads(event["body"])
      rowCount = httpTaskBody["rowCount"]
    
      return {
        'statusCode': 200,
        'body': json.dumps(rowCount)
      }
  5. Funções do Google Cloud: o seguinte é pseudocódigo para funções do Google Cloud:

    def get_row_count(request):
      request_json = request.get_json()
      if request_json and 'rowCount' in request_json:
            rowCount = request_json['rowCount']
        return rowCount
      return 'No rowCount attribute provided'

Verificar assinaturas

Atenção

Dependendo do aplicativo de destino, implementar a verificação de assinaturas pode exigir habilidades de desenvolvedor.

Opcionalmente, você pode configurar a plataforma para assinar as solicitações HTTP. Solicitações assinadas garantem que as solicitações são enviadas a partir plataforma, em vez de terceiros.

Abaixo, você pode revisar como a assinatura é criada, para que você possa configurar o aplicativo de recebimento a fim de processar corretamente a assinatura e a solicitação relacionada.

Cabeçalho da assinatura

As solicitações HTTP são assinadas inserindo o cabeçalho X-Webhook-Signature na solicitação. Essas assinaturas estão na seguinte forma:

X-Webhook-Signature: t=<timestamp>,sha256=<signature>

onde:

  • <timestamp> : carimbo de data/hora em que a assinatura foi enviada. O valor está na era UNIX.

  • <signature> : assinatura SHA256. A plataforma gera essa assinatura usando um código de autenticação de mensagem baseado em hash (HMAC) com SHA-256.

Mais informações sobre esses valores estão disponíveis abaixo.

Exemplo:

X-Webhook-Signature: t=1568818215724,sha256=55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a

Verificar as ferramentas do aplicativo

Dependendo do aplicativo, talvez seja necessário concluir um dos seguintes conjuntos de tarefas para verificar as assinaturas:

Nota

Pode ser que você precise colocar a plataforma na lista de permissões em seu aplicativo. Consulte a documentação do aplicativo para obter detalhes.

Pode ser necessário criar algum código personalizado para o seu aplicativo. Abaixo, você pode revisar detalhes sobre como fazer isso, incluindo um exemplo de JavaScript.

Processar solicitações assinadas

Carimbo de data/hora

O valor de carimbo de data/hora ( t=<timestamp> ) aparece no início do valor do cabeçalho para evitar ataques de repetição, onde um invasor pode interceptar um payload válido e sua assinatura e retransmiti-los.

  • Para evitar esses ataques, um carimbo de data/hora é incluído no cabeçalho da assinatura e também é incorporado como parte do payload assinado.

  • Como o carimbo de data/hora faz parte do payload assinado, um invasor não pode alterar o valor do carimbo de data/hora sem invalidar a assinatura.

    • Se a assinatura for válida, mas o carimbo de data/hora for muito antigo, você pode optar por rejeitar a solicitação.

    • Por exemplo, se você receber uma solicitação com um carimbo de data/hora que corresponde a uma hora atrás, provavelmente deverá rejeitar a solicitação.

  • Para obter mais informações sobre ataques de repetição, acesse https://en.wikipedia.org/wiki/Replay_attack .

Assinatura

A assinatura da tarefa inclui como parte de seu valor hash:

  • A chave secreta (inserida acima)

  • O valor do carimbo de data/hora

  • Dados da solicitação:

    • (POST/PUT/PATCH) – o corpo da solicitação

    • (GET/DELETE) – URL da solicitação

Passo 1 – Extrair o carimbo de data/hora e as assinaturas

Divida o cabeçalho X-Webhook-Signature :

  1. Divida os valores usando o caractere "," como separador.

  2. Divida cada uma das partes usando o caractere "=".

  3. Extraia os valores para o carimbo de data/hora e a assinatura. A partir do exemplo acima:

    1. carimbo de data/hora: 1568818215724

    2. assinatura: 55fa71b2e391cd3ccba8413fb51ad16984a38edb3cccfe81f381c4b8197ee07a

Passo 2 – Criar a assinatura esperada

No aplicativo de recebimento, você pode calcular novamente a assinatura para verificar se a solicitação foi enviada a partir da plataforma.

  1. Concatene o carimbo de data/hora, o caractere . e o corpo da solicitação (métodos POST/PUT/PATCH) ou o URL (métodos GET/DELETE).

  2. Suponha que o exemplo acima seja a assinatura para uma solicitação POST e que o corpo da solicitação seja test . O valor concatenado é o seguinte:

    1568818215724.test
  3. Agora você pode calcular o código de autenticação HMAC no seu aplicativo de recebimento. No exemplo JavaScript a seguir, o valor da chave secreta é mySecret :

    const crypto = require('crypto');
    
    const message = '1568818215724.test'; // as defined above
    
    const hmac = crypto.createHmac('sha256', 'mySecret');
    hmac.update(message)
    const expectedSignature = hmac.digest('hex');
Passo 3 – Comparar as assinaturas

O valor retornado pelo seu código e o valor incluído como a assinatura no cabeçalho X-Webhook-Signature devem ser comparados:

  • Se os valores não corresponderem, rejeite a solicitação.

  • Se os valores corresponderem, calcule a diferença entre o carimbo de data/hora atual e o carimbo de data/hora no cabeçalho. Se a diferença estiver fora do limite permitido, rejeite a solicitação.

  • Caso contrário, processe a solicitação normalmente em seu aplicativo.