Especificações de modelo para destinos criados com o Destination SDK
Use a parte de especificação do modelo da configuração do servidor de destino para definir como formatar as solicitações HTTP enviadas para o seu destino.
Em uma especificação de modelo, é possível definir como transformar campos de atributo de perfil entre o esquema XDM e o formato compatível com sua plataforma.
As especificações do modelo fazem parte da configuração do servidor de destino para destinos em tempo real (transmissão).
Para entender onde esse componente se encaixa em uma integração criada com o Destination SDK, consulte o diagrama na documentação de opções de configuração ou consulte o guia sobre como usar o Destination SDK para configurar um destino de streaming.
Você pode configurar as especificações do modelo para o seu destino por meio do ponto de extremidade /authoring/destination-servers. Consulte as seguintes páginas de referência de API para obter exemplos detalhados de chamadas de API, onde é possível configurar os componentes mostrados nesta página.
Tipos de integração compatíveis supported-integration-types
Consulte a tabela abaixo para obter detalhes sobre quais tipos de integrações suportam a funcionalidade descrita nesta página.
Configurar uma especificação de modelo configure-template-spec
O Adobe usa uma linguagem de modelo semelhante a Jinja para transformar os campos do esquema XDM em um formato compatível com seu destino.
Para obter mais informações sobre a transformação, visite os links abaixo:
Veja abaixo um exemplo de um modelo de solicitação HTTP, juntamente com descrições de cada parâmetro individual.
{
"httpTemplate":{
"httpMethod":"POST",
"requestBody":{
"templatingStrategy":"PEBBLE_V1",
"value":"{ \"attributes\": [ {% for ns in [\"external_id\", \"yourdestination_id\"] %} {% if input.profile.identityMap[ns] is not empty and first_namespace_encountered %} , {% endif %} {% set first_namespace_encountered = true %} {% for identity in input.profile.identityMap[ns]%} { \"{{ ns }}\": \"{{ identity.id }}\" {% if hasSegments(input.profile.segmentMembership) %} , \"AEPSegments\": { \"add\": [ {% for namespace in input.profile.segmentMembership %} {% for segment in input.profile.segmentMembership[namespace.key] %} {% if (segment.value.status == \"realized\" or segment.value.status == \"existing\") and destination.namespaceSegmentAliases[namespace.key][segment.key] is defined %} {% if added_segment_found %} , {% endif %} {% set added_segment_found = true %} \"{{ destination.namespaceSegmentAliases[namespace.key][segment.key] }}\" {% endif %} {% endfor %} {% endfor %} ], \"remove\": [ {% for namespace in input.profile.segmentMembership %} {% for segment in input.profile.segmentMembership[namespace.key] %} {% if segment.value.status == \"exited\" and destination.namespaceSegmentAliases[namespace.key][segment.key] is defined %} {% if removed_segment_found %} , {% endif %} {% set removed_segment_found = true %} \"{{ destination.namespaceSegmentAliases[namespace.key][segment.key] }}\" {% endif %} {% endfor %} {% endfor %} ] } {% set removed_segment_found = false %} {% set added_segment_found = false %} {% endif %} {% if input.profile.attributes is not empty %} , {% endif %} {% for attribute in input.profile.attributes %} \"{{ attribute.key }}\": {% if attribute.value is empty %} null {% else %} \"{{ attribute.value.value }}\" {% endif %} {% if not loop.last%} , {% endif %} {% endfor %} } {% if not loop.last %} , {% endif %} {% endfor %} {% endfor %} ] }"
},
"contentType":"application/json"
}
}
httpMethodGET, PUT, POST, DELETE, PATCH.templatingStrategyPEBBLE_V1.valuePara obter informações sobre como gravar o modelo, leia a seção sobre usando o modelo.
Para obter mais informações sobre o escape de caracteres, consulte o padrão RFC JSON, seção sete.
Para obter um exemplo de uma transformação simples, consulte a transformação atributos de perfil.
contentTypeapplication/json.Conversão de um modelo para oferecer suporte a públicos externos template-converter-tool
Os modelos mais antigos somente leem a associação de público do namespace ups. Atualize esses modelos para iterar em todos os namespaces em segmentMembership, para que eles também leiam a associação para públicos-alvo externos.
Para obter informações sobre como configurar o destino para oferecer suporte a públicos externos, consulte Configurar suporte para públicos externos.
Use a ferramenta Conversor de Modelos para converter automaticamente seu modelo existente. A ferramenta substitui um modelo que lê somente o namespace ups em um modelo que repete todos os namespaces em segmentMembership, incluindo públicos externos.
Baixar a ferramenta Conversor de modelos
A ferramenta requer o Java Runtime Environment (JRE) 11 ou posterior. Ela é compatível com dois modos:
-
Modo CLI (Command Line Interface, interface de linha de comando): execute a ferramenta a partir de um terminal e transmita o modelo existente como um parâmetro.
code language-shell java -jar templates-converter-cli.jar "your-existing-template-string"A ferramenta imprime o modelo convertido no terminal.
-
Modo de interface do usuário: execute a ferramenta com uma interface gráfica. Esse modo requer o JavaFX SDK, que está incluído no arquivo baixado.
code language-shell java --module-path="./javafx-sdk-17.0.7/lib" --add-modules=javafx.controls,javafx.fxml -jar templates-converter-ui.jar
Depois de converter o modelo, teste-o em vários perfis de amostra usando a API de modelo de renderização para confirmar se ele ainda é renderizado corretamente antes de adicioná-lo à configuração do servidor de destino.
Configurar cabeçalhos de solicitação headers
Além do corpo da solicitação, é possível adicionar cabeçalhos HTTP personalizados às chamadas que o Experience Platform faz ao seu destino. Cada entrada de cabeçalho usa os mesmos campos templatingStrategy e value que outros campos de modelos no servidor de destino.
"httpTemplate": {
"httpMethod": "POST",
"headers": [
{
"header": "Authorization",
"value": {
"templatingStrategy": "PEBBLE_V1",
"value": "Basic {{ (authData.username + ':' + authData.password) | base64encode }}"
}
},
{
"header": "x-integration",
"value": {
"templatingStrategy": "PEBBLE_V1",
"value": "{{customerData.integrationId}}"
}
},
{
"header": "Amazon-Advertising-API-ClientId",
"value": {
"templatingStrategy": "PEBBLE_V1",
"value": "{{authData.clientId}}"
}
},
{
"header": "Accept",
"value": {
"templatingStrategy": "NONE",
"value": "application/json"
}
}
]
}
headerAuthorization, Content-Type, ou um cabeçalho personalizado.value.templatingStrategyPEBBLE_V1 quando o valor do cabeçalho for dinâmico ou usar expressões Pebble. Use NONE para valores estáticos.value.value{{customerData.integrationId}}, {{authData.clientId}} ou {{ (authData.username + ':' + authData.password) | base64encode }}.Algumas APIs de parceiros exigem um cabeçalho personalizado preenchido com um valor das credenciais de autenticação fornecidas pelos clientes, em vez do cabeçalho Authorization padrão. O cabeçalho Amazon-Advertising-API-ClientId mostrado acima é um exemplo desse padrão, em que o valor do cabeçalho vem diretamente de um campo authData.
value é uma cadeia de caracteres simples em vez de um objeto com campos templatingStrategy e value. Para ver um exemplo, consulte gerenciamento de metadados de público-alvo.Para destinos que usam autenticação Básica, que exigem um cabeçalho codificado em Base64 personalizado, consulte Personalizar o cabeçalho de autenticação Básica.
Próximas etapas next-steps
Depois de ler este artigo, você terá que entender melhor o que é uma especificação de modelo e como configurá-la.
Para saber mais sobre os outros componentes do servidor de destino, consulte os seguintes artigos: