Skip to content

Conecte-se à API de dados de clientes da Movable Ink

A integração da API de dados de clientes da Braze e da Movable Ink permite que os profissionais de marketing ativem os dados de eventos de clientes armazenados na Braze para gerar conteúdo personalizado na Movable Ink.

A Movable Ink é capaz de ingerir eventos comportamentais da Braze por meio de sua API de dados de clientes. Os eventos serão armazenados nos perfis de usuário com base no ID de usuário exclusivo (UUID) que é passado para a Movable Ink.

Para saber mais sobre o Stories, a API de dados de clientes da Movable Ink e como a Movable Ink aproveita os dados comportamentais, visite os seguintes artigos da central de suporte:

Pré-requisitos

Integração

Etapa 1: Criar uma campanha de webhook na Braze

Etapa 1a: Criar uma nova campanha

  1. Na Braze, crie uma campanha de webhook.
  2. Dê um nome e uma descrição opcional à sua campanha.
  3. Selecione Blank Template como seu modelo.

Etapa 1b: Adicione suas credenciais da API de dados de clientes

  1. No campo Webhook URL, insira o URL do endpoint da Movable Ink.

Guia Redigir do criador do webhook na Braze com o URL do endpoint da Movable Ink e o corpo da solicitação definido como pares de chave/valor JSON.

  1. Selecione a guia Settings.
  2. Adicione os seguintes cabeçalhos de solicitação como pares de chave-valor:

Guia Configurações do criador do webhook na Braze com pares de chave-valor para Content-Type e Authorization.

Etapa 1c: Configure sua carga útil

  1. Retorne à guia Compose.
  2. Para o Request Body, crie seu próprio corpo de solicitação com pares de chave-valor JSON ou insira a carga útil do evento como texto bruto. Consulte as cargas úteis de exemplo para ver exemplos de eventos padrão de e-commerce.

Guia Redigir do criador do webhook na Braze com pares de chave-valor JSON para ID, registro de data e hora, ID do usuário e tipo de evento.

Etapa 1d: Teste seu webhook

Será necessário compartilhar uma carga útil de exemplo com a equipe de experiência do cliente da Movable Ink. Você pode gerar essa carga útil na guia Test com base na carga útil que você construiu.

Para testar seu webhook, faça o seguinte:

  1. Selecione a guia Test.
  2. Pré-visualize a mensagem como um usuário para ver uma amostra da carga útil do evento para esse usuário. Você pode escolher entre pré-visualizar como usuário aleatório, usuário específico ou usuário personalizado.
  3. Se tudo estiver correto, clique em Send test para enviar uma solicitação de teste.

Mensagem de resposta do webhook na Braze mostrando uma resposta 200 OK.

Etapa 2: Finalize a configuração da sua campanha

Etapa 2a: Agende sua campanha

Quando terminar de redigir e testar o webhook, agende sua campanha.

A Braze oferece suporte a entregas agendadas, baseadas em ação e disparadas por API. A entrega baseada em ação é geralmente a melhor opção para a maioria dos casos de uso de eventos comportamentais. Em caso de dúvidas sobre o que faz sentido para o seu caso de uso, entre em contato com os gerentes de sucesso do cliente da Braze e da Movable Ink.

Para entrega baseada em ação:

  1. Especifique a ação-gatilho. Esse é o evento que disparará o webhook para a Movable Ink.
  2. Certifique-se de que a Agendar postergação esteja definida como Immediately. Os dados do evento devem ser enviados à Movable Ink imediatamente após a ocorrência do evento, sem postergação.
  3. Defina a duração da campanha especificando uma hora de início. É provável que um horário de término não seja aplicável, mas ele pode ser definido se necessário para o caso de uso.

Etapa 2b: Especifique seu público

Em seguida, determine quais usuários você deseja direcionar para essa campanha. Para obter detalhes, consulte Direcionamento de usuários.

Certifique-se de não usar testes A/B em sua campanha, desmarcando a caixa de seleção Control Group. Se um grupo de controle for incluído, uma porcentagem dos usuários não terá dados enviados para a Movable Ink. Todo o seu público deve ir para a variante em vez do grupo de controle.

Painel de testes A/B em uma Campaign da Braze com 100% de distribuição de variantes atribuída à Variante 1 e nenhum grupo de controle.

Etapa 2c: Escolha eventos de conversão (opcional)

Se desejar, você pode atribuir eventos de conversão a essa campanha na Braze.

No entanto, como o webhook destina-se apenas ao envio de dados, a atribuição nesse nível é provavelmente menos útil do que analisar a atribuição no nível da campanha depois que os dados comportamentais da Braze são usados para personalizar o conteúdo.

Etapa 3: Lance a campanha

Revise a configuração do webhook e lance sua campanha.

Considerações

Alinhamento em um identificador de usuário exclusivo

Certifique-se de que o valor do identificador exclusivo de usuário (UUID) que você está usando como mi_u esteja disponível na Braze e possa ser incluído nas cargas úteis do evento enviadas à Movable Ink.

Isso garante que os eventos comportamentais que a Movable Ink referencia ao gerar uma imagem sejam associados ao mesmo cliente para o qual receberam os eventos comportamentais. Se o valor do UUID não for o mesmo que o external_id da Braze, o UUID deverá ser capturado e passado para a Braze como atributo ou nas propriedades de um evento da Braze para utilizar esse identificador.

A Braze rastreia o comportamento do usuário em várias plataformas (como web e app para dispositivos móveis), portanto, um único usuário pode ter várias IDs anônimas distintas. Essas IDs podem ser mescladas no perfil de usuário único conhecido do Stories quando um evento identify é enviado à Movable Ink, desde que o evento identify inclua um identificador anônimo e o identificador único conhecido.

Quando a Movable Ink receber um user_id para um único usuário, todos os eventos futuros desse usuário deverão incluir o mesmo user_id.

Compartilhamento de cargas úteis de eventos com a Movable Ink

Antes de configurar o conector para a API de dados de clientes da Movable Ink, compartilhe as cargas úteis do evento com a equipe de experiência do cliente da Movable Ink. Isso permite que a Movable Ink mapeie seus eventos para o esquema de eventos deles e evitará qualquer chamada de API rejeitada ou com falha.

Você pode gerar uma carga útil de evento na Braze usando qualquer propriedade de evento. Gere uma carga útil de exemplo para um usuário aleatório ou pesquisando um ID de usuário específico. Consulte a Etapa 1d acima para obter detalhes.

Compartilhe essa carga útil de exemplo com a equipe de experiência do cliente da Movable Ink. Verifique se não há informações confidenciais de identificação pessoal na carga útil de exemplo (como endereço de e-mail, número de telefone ou datas de nascimento completas).

Para saber mais sobre as propriedades de eventos personalizados e o formato esperado dos dados contidos nas propriedades, consulte Propriedades de eventos personalizados.

Usuários conhecidos versus anônimos

Na Braze, os eventos podem ser registrados em um perfil de usuário anônimo. Os identificadores vinculados ao perfil do usuário durante o registro de eventos dependem de como o usuário foi criado (por meio do SDK da Braze ou das APIs) e do estágio atual do ciclo de vida do usuário.

Encaminhar eventos da Braze apenas para usuários conhecidos

Na sua campanha de webhook, use o filtro External User ID para direcionar apenas os usuários que tenham um external_id com o filtro External User ID is not blank.

Encaminhar eventos da Braze para usuários anônimos e conhecidos

Se quiser encaminhar eventos da Braze de usuários anônimos (usuários antes que um external_id seja atribuído ao perfil deles), será necessário decidir qual identificador usar como anonymous_id para a Movable Ink até que um external_id fique disponível. Escolha um anonymous_id que permanecerá constante no seu perfil de usuário da Braze. Você pode usar a lógica Liquid no corpo do webhook para decidir se deve passar um anonymous_id ou um user_id.

Para saber mais, consulte os exemplos de webhooks em cargas úteis de exemplo.

Exemplos de cargas úteis

Evento de visualização de produto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  "events": [
    {
      "email": "[email protected]",
      "name": "Product Viewed",
      "time": "2023-12-06T19:20:45+01:00",
      "properties": {
        "categories": [
          {
            "id": "Bathroom",
            "url": "https://example.com/cat/bathroom"
          }
        ],
        "meta": {
          "color": "green"
        },
        "title": "All-Purpose Cleaning Wipes",
        "price": 1.99,
        "id": "56544",
        "url": "https://www.example.com/variants_id/5f08cb918dcc595aa74b0fbc"
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "anonymous_id": "123-abc-678",
  "event": "product_viewed",
  "properties": {
    "categories": [
      {
        "id": "Bathroom",
        "url": "https://example.com/cat/bathroom"
      }
    ],
    "meta": {
      "color": "green"
    },
    "title": "All-Purpose Cleaning Wipes",
    "price": 1.99,
    "id": "56544",
    "url": "https://www.example.com/variants_id/5f08cb918dcc595aa74b0fbc"
  },
  "timestamp": 1257894000000,
  "timezone": "America/New_York",
  "type": "track",
  "user_id": "5c3aa83113dd490100d3d8d7"
}'

Neste exemplo, um endereço de e-mail com hash é usado como anonymous_id para usuários sem external_id.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}

// Example of md5 hashing the email address to use as the anonymous_id
{% assign anon_id = {{${email_address}}} | md5 %}

// Condition logic to determine which identifier to use. If an external_id is available use that, otherwise use the anonymous_id
{% if {{${user_id}}} %}
{% capture user_identifier %}"user_id": "{{${user_id}}}"{% endcapture %}
{% else %}
{% capture user_identifier %}"anonymous_id": "{{anon_id}}"{% endcapture %}
{% endif %}

{
  {{user_identifier}}
  "event": "product_viewed",
  "properties": {
    "categories": [
      {
        "id": "{{event_properties.${categories}[0].id}}",
        "url": "{{event_properties.${categories}[0].url}}"
      }
    ],
    "meta": {
      "color": "{{event_properties.${meta}.color}}"
    },
    "title": "{{event_properties.${title}}}",
    "price": "{{event_properties.${price}}}",
    "id": "{{event_properties.${id}}}",
    "url": "{{event_properties.${url}}}"
  },
  "timestamp": "{{timestamp}}",
  "timezone": "{{${time_zone}}}",
  "type": "track",
}

Evento de visualização de categoria

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "events": [
    {
      "external_id": "123456789",
      "name": "Category Viewed",
      "time": "2023-12-06T19:20:45+01:00",
      "properties": {
        "id": "bathroom-1",
        "title": "Bathroom Stuff",
        "url": "https://www.example.com/categories/bathroom"
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "anonymous_id": "123-abc-678",
  "event": "category_viewed",
  "properties": {
    "id": "bathroom-1",
    "title": "Bathroom Stuff",
    "url": "https://www.example.com/categories/bathroom"
  },
  "timestamp": 1257894000000,
  "timezone": "America/New_York",
  "type": "track",
  "user_id": "5c3aa83113dd490100d3d8d7"
}'

Este exemplo mostra um webhook que rastreia eventos apenas para usuários conhecidos (usuários com external_id).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}

{
  "event": "category_viewed",
  "properties": {
    "id": "{{event_properties.${id}}}",
    "title": "{{event_properties.${title}}}",
    "url": "{{event_properties.${url}}}"
  },
  "timestamp": "{{timestamp}}",
  "timezone": "{{${time_zone}}}",
  "type": "track",
  "user_id": "{{${user_id}}}"
}

Evento de identificação

1
2
3
4
5
6
7
8
9
{
  "events": [
    {
      "external_id": "123456789",
      "name": "Account Created",
      "time": "2023-12-06T19:20:45+01:00"
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
curl --location --request POST 'https://collector.movableink-dmz.com/behavioral/{{key}}' \
--header 'Authorization: Basic {{authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "anonymous_id": "jg0iq5gd30dqpwn8zmx05p06mzjmjir4r8",
  "timestamp": 1257894000000,
  "timezone": "America/New_York",
  "type": "identify",
  "user_id": "mycustomerid123"
}'

Neste exemplo, um endereço de e-mail com hash é usado como anonymous_id para usuários sem external_id.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Converts the timestamp of "now" to seconds since 1970 and assigns it to a local variable "timestamp"
{% assign timestamp = "now" | date: "%s" %}

// Example of md5 hashing the email address to use as the anonymous_id
{% assign anon_id = {{${email_address}}} | md5 %}

{
  "anonymous_id": "{{anon_id}}",
  "timestamp": "{{timestamp}}",
  "timezone": "{{${time_zone}}}",
  "type": "identify",
  "user_id": "{{${user_id}}}"
}

New Stuff!