Configurar especificação de origem para Origens de Autoatendimento (SDK em Lote)
Criado para:
- Desenvolvedor
As especificações do Source contêm informações específicas de uma origem, incluindo atributos pertencentes à categoria de uma origem, status beta e ícone de catálogo. Eles também contêm informações úteis, como parâmetros de URL, conteúdo, cabeçalho e agendamento. As especificações do Source também descrevem o esquema dos parâmetros necessários para criar uma conexão de origem a partir de uma conexão de base. O esquema é necessário para criar uma conexão de origem.
Consulte o apêndice para obter um exemplo de uma especificação de origem totalmente preenchida.
"sourceSpec": {
"attributes": {
"uiAttributes": {
"isSource": true,
"isPreview": true,
"isBeta": true,
"category": {
"key": "protocols"
},
"icon": {
"key": "genericRestIcon"
},
"description": {
"key": "genericRestDescription"
},
"label": {
"key": "genericRestLabel"
}
},
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Defines static and user input parameters to fetch resource values.",
"properties": {
"urlParams": {
"type": "object",
"properties": {
"host": {
"type": "string",
"description": "Enter resource url host path.",
"example": "https://{domain}.api.mailchimp.com"
},
"path": {
"type": "string",
"description": "Enter resource path",
"example": "/3.0/reports/campaignId/email-activity"
},
"method": {
"type": "string",
"description": "HTTP method type.",
"enum": [
"GET",
"POST"
]
},
"queryParams": {
"type": "object",
"description": "The query parameters in json format",
}
},
"required": [
"host",
"path",
"method"
]
},
"headerParams": {
"type": "object",
"description": "The header parameters in json format",
},
"contentPath": {
"type": "object",
"description": "The parameters required for main collection content.",
"properties": {
"path": {
"description": "The path to the main content.",
"type": "string",
"example": "$.emails"
},
"skipAttributes": {
"type": "array",
"description": "The list of attributes that needs to be skipped while fattening the array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"keepAttributes": {
"type": "array",
"description": "The list of attributes that needs to be kept while fattening the array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"overrideWrapperAttribute": {
"type": "string",
"description": "The new name to be used for the root content path node.",
"example": "email"
}
},
"required": [
"path"
]
},
"explodeEntityPath": {
"type": "object",
"description": "The parameters required for the sub-array content.",
"properties": {
"path": {
"description": "The path to the sub-array content.",
"type": "string",
"example": "$.email.activity"
},
"skipAttributes": {
"type": "array",
"description": "The list of attributes that needs to be skipped while fattening sub-array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"keepAttributes": {
"type": "array",
"description": "The list of attributes that needs to be kept while fattening the sub-array.",
"example": "[total_items]",
"items": {
"type": "string"
}
},
"overrideWrapperAttribute": {
"type": "string",
"description": "The new name to be used for the root content path node.",
"example": "activity"
}
},
"required": [
"path"
]
},
"paginationParams": {
"type": "object",
"description": "The parameters required to fetch data using pagination.",
"properties": {
"type": {
"description": "The pagination fetch type.",
"type": "string",
"enum": [
"OFFSET",
"POINTER"
]
},
"limitName": {
"type": "string",
"description": "The limit property name",
"example": "limit or count"
},
"limitValue": {
"type": "integer",
"description": "The number of records to fetch per page.",
"example": "limit=10 or count=10"
},
"offsetName": {
"type": "string",
"description": "The offset property name",
"example": "offset"
},
"pointerPath": {
"type": "string",
"description": "The path to pointer property",
"example": "$.paging.next"
}
},
"required": [
"type",
"limitName",
"limitValue"
]
},
"scheduleParams": {
"type": "object",
"description": "The parameters required to fetch data for batch schedule.",
"properties": {
"scheduleStartParamName": {
"type": "string",
"description": "The order property name to get the order by date."
},
"scheduleEndParamName": {
"type": "string",
"description": "The order property name to get the order by date."
},
"scheduleStartParamFormat": {
"type": "string",
"description": "The order property name to get the order by date.",
"example": "yyyy-MM-ddTHH:mm:ssZ"
},
"scheduleEndParamFormat": {
"type": "string",
"description": "The order property name to get the order by date.",
"example": "yyyy-MM-ddTHH:mm:ssZ"
}
},
"required": [
"scheduleStartParamName",
"scheduleEndParamName"
]
}
},
"required": [
"urlParams",
"contentPath",
"paginationParams",
"scheduleParams"
]
}
},
}
Propriedade | Descrição | Exemplo |
---|---|---|
sourceSpec.attributes | Contém informações sobre a fonte específica da interface do usuário ou da API. | |
sourceSpec.attributes.uiAttributes | Exibe informações sobre a origem específica da interface do usuário. | |
sourceSpec.attributes.uiAttributes.isBeta | Um atributo booleano que indica se a fonte requer mais feedback dos clientes para ser adicionada à funcionalidade. |
|
sourceSpec.attributes.uiAttributes.category | Define a categoria da origem. |
|
sourceSpec.attributes.uiAttributes.icon | Define o ícone usado para a renderização da origem na interface do usuário do Experience Platform. | mailchimp-icon.svg |
sourceSpec.attributes.uiAttributes.description | Exibe uma breve descrição da origem. | |
sourceSpec.attributes.uiAttributes.label | Exibe o rótulo a ser usado para a renderização da origem na interface do Experience Platform. | |
sourceSpec.attributes.spec.properties.urlParams | Contém informações sobre o caminho de recurso do URL, o método e os parâmetros de consulta compatíveis. | |
sourceSpec.attributes.spec.properties.urlParams.properties.path | Define o caminho do recurso do qual buscar os dados. | /3.0/reports/${campaignId}/email-activity |
sourceSpec.attributes.spec.properties.urlParams.properties.method | Define o método HTTP a ser usado para fazer a solicitação ao recurso para buscar dados. | GET , POST |
sourceSpec.attributes.spec.properties.urlParams.properties.queryParams | Define os parâmetros de consulta compatíveis que podem ser usados para anexar o URL de origem ao fazer uma solicitação para buscar dados. Observação: qualquer valor de parâmetro fornecido pelo usuário deve ser formatado como um espaço reservado. Por exemplo: ${USER_PARAMETER} . | "queryParams" : {"key" : "value", "key1" : "value1"} será anexado à URL de origem como: /?key=value&key1=value1 |
sourceSpec.attributes.spec.properties.spec.properties.headerParams | Define cabeçalhos que precisam ser fornecidos na solicitação HTTP para o URL de origem ao buscar dados. | "headerParams" : {"Content-Type" : "application/json", "x-api-key" : "key"} |
sourceSpec.attributes.spec.properties.bodyParams | Esse atributo pode ser configurado para enviar o corpo HTTP por meio de uma solicitação POST. | |
sourceSpec.attributes.spec.properties.contentPath | Define o nó que contém a lista de itens que devem ser assimilados na Experience Platform. Esse atributo deve seguir a sintaxe de caminho JSON válida e apontar para uma matriz específica. | Exiba a seção de recursos adicionais para obter um exemplo do recurso contido em um caminho de conteúdo. |
sourceSpec.attributes.spec.properties.contentPath.path | O caminho que aponta para os registros de coleção a serem assimilados na Experience Platform. | $.emails |
sourceSpec.attributes.spec.properties.contentPath.skipAttributes | Essa propriedade permite identificar itens específicos do recurso identificado no caminho do conteúdo que devem ser excluídos de serem assimilados. | [total_items] |
sourceSpec.attributes.spec.properties.contentPath.keepAttributes | Essa propriedade permite especificar explicitamente os atributos individuais que você deseja manter. | [total_items] |
sourceSpec.attributes.spec.properties.contentPath.overrideWrapperAttribute | Esta propriedade permite que você substitua o valor do nome de atributo especificado em contentPath . | email |
sourceSpec.attributes.spec.properties.explodeEntityPath | Essa propriedade permite nivelar duas matrizes e transformar dados de recursos em recursos do Experience Platform. | |
sourceSpec.attributes.spec.properties.explodeEntityPath.path | O caminho que aponta para os registros de coleção que você deseja nivelar. | $.email.activity |
sourceSpec.attributes.spec.properties.explodeEntityPath.skipAttributes | Essa propriedade permite identificar itens específicos do recurso identificado no caminho da entidade que devem ser excluídos da assimilação. | [total_items] |
sourceSpec.attributes.spec.properties.explodeEntityPath.keepAttributes | Essa propriedade permite especificar explicitamente os atributos individuais que você deseja manter. | [total_items] |
sourceSpec.attributes.spec.properties.explodeEntityPath.overrideWrapperAttribute | Esta propriedade permite que você substitua o valor do nome de atributo especificado em explodeEntityPath . | activity |
sourceSpec.attributes.spec.properties.paginationParams | Define os parâmetros ou campos que devem ser fornecidos para obter um link para a próxima página da resposta da página atual do usuário ou ao criar um URL da próxima página. | |
sourceSpec.attributes.spec.properties.paginationParams.type | Exibe o tipo de paginação suportada para a sua origem. |
|
sourceSpec.attributes.spec.properties.paginationParams.limitName | O nome do limite pelo qual a API pode especificar o número de registros a serem buscados em uma página. | limit ou count |
sourceSpec.attributes.spec.properties.paginationParams.limitValue | O número de registros a serem buscados em uma página. | limit=10 ou count=10 |
sourceSpec.attributes.spec.properties.paginationParams.offSetName | O nome do atributo offset. Isso é necessário se o tipo de paginação for definido como offset . | offset |
sourceSpec.attributes.spec.properties.paginationParams.pointerPath | O nome do atributo de ponteiro. Isso requer o caminho json para o atributo que apontará para a próxima página. Isso é necessário se o tipo de paginação for definido como pointer . | pointer |
sourceSpec.attributes.spec.properties.scheduleParams | Contém parâmetros que definem formatos de agendamento compatíveis com a sua origem. Os parâmetros de agendamento incluem startTime e endTime , que permitem definir intervalos de tempo específicos para execuções em lote, o que garante que os registros buscados em uma execução em lote anterior não sejam buscados novamente. | |
sourceSpec.attributes.spec.properties.scheduleParams.scheduleStartParamName | Define o nome do parâmetro da hora inicial | since_last_changed |
sourceSpec.attributes.spec.properties.scheduleParams.scheduleEndParamName | Define o nome do parâmetro da hora final | before_last_changed |
sourceSpec.attributes.spec.properties.scheduleParams.scheduleStartParamFormat | Define o formato com suporte para o scheduleStartParamName . | yyyy-MM-ddTHH:mm:ssZ |
sourceSpec.attributes.spec.properties.scheduleParams.scheduleEndParamFormat | Define o formato com suporte para o scheduleEndParamName . | yyyy-MM-ddTHH:mm:ssZ |
sourceSpec.spec.properties | Define os parâmetros fornecidos pelo usuário para buscar valores do recurso. | Consulte os recursos adicionais para obter um exemplo de parâmetros inseridos pelo usuário para spec.properties . |
Recursos adicionais
As seções a seguir fornecem informações sobre as configurações adicionais que você pode fazer no sourceSpec
, incluindo o agendamento avançado e esquemas personalizados.
Exemplo de caminho de conteúdo
Este é um exemplo do conteúdo da propriedade contentPath
em uma especificação de conexão MailChimp Members.
"contentPath": {
"path": "$.members",
"skipAttributes": [
"_links",
"total_items",
"list_id"
],
"overrideWrapperAttribute": "member"
}
spec.properties
exemplo de entrada de usuário
Veja a seguir um exemplo de um spec.properties
fornecido pelo usuário usando uma especificação de conexão MailChimp Members.
Neste exemplo, listId
é fornecido como parte de urlParams.path
. Se você precisar recuperar listId
de um cliente, defina-o também como parte de spec.properties
.
"urlParams": {
"path": "/3.0/lists/${listId}/members",
"method": "GET"
}
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Define user input parameters to fetch resource values.",
"properties": {
"listId": {
"type": "string",
"description": "listId for which members need to fetch."
}
}
}
Exemplo de especificação do Source
Esta é uma especificação de origem concluída usando MailChimp Members:
"sourceSpec": {
"attributes": {
"uiAttributes": {
"isSource": true,
"isPreview": true,
"isBeta": true,
"category": {
"key": "marketingAutomation"
},
"icon": {
"key": "mailchimpMembersIcon"
},
"description": {
"key": "mailchimpMembersDescription"
},
"label": {
"key": "mailchimpMembersLabel"
}
},
"urlParams": {
"host": "https://{domain}.api.mailchimp.com",
"path": "/3.0/lists/${listId}/members",
"method": "GET"
},
"contentPath": {
"path": "$.members",
"skipAttributes": [
"_links",
"total_items",
"list_id"
],
"overrideWrapperAttribute": "member"
},
"paginationParams": {
"type": "OFFSET",
"limitName": "count",
"limitValue": "100",
"offSetName": "offset"
},
"scheduleParams": {
"scheduleStartParamName": "since_last_changed",
"scheduleEndParamName": "before_last_changed",
"scheduleStartParamFormat": "yyyy-MM-ddTHH:mm:ss:fffffffK",
"scheduleEndParamFormat": "yyyy-MM-ddTHH:mm:ss:fffffffK"
}
},
"spec": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"description": "Define user input parameters to fetch resource values.",
"properties": {
"listId": {
"type": "string",
"description": "listId for which members need to fetch."
}
}
}
}
Configurar tipos de paginação diferentes para a origem
A seguir estão exemplos de outros tipos de paginação compatíveis com Origens de Autoatendimento (SDK em Lote):
Esse tipo de paginação permite analisar os resultados especificando um índice de onde iniciar o array resultante e um limite para quantos resultados são retornados. Por exemplo:
"paginationParams": {
"type": "OFFSET",
"limitName": "limit",
"limitValue": "4",
"offSetName": "offset",
"endConditionName": "$.hasMore",
"endConditionValue": "Const:false"
}
type
limitName
limitValue
offSetName
offset
.endConditionName
endConditionValue
Esse tipo de paginação permite usar uma variável pointer
para apontar para um item específico que precisa ser enviado com uma solicitação. A paginação de tipo de ponteiro requer um caminho na carga que aponte para a próxima página. Por exemplo:
{
"type": "POINTER",
"limitName": "limit",
"limitValue": 1,
"pointerPath": "paging.next"
}
type
limitName
limitValue
pointerPath
Um tipo de token de continuação de paginação retorna um token de sequência de caracteres que significa a existência de mais itens que não puderam ser retornados, devido a um número máximo predeterminado de itens que podem ser retornados em uma única resposta.
Uma origem que oferece suporte ao tipo de paginação de token de continuação pode ter um parâmetro de paginação semelhante a:
"paginationParams": {
"type": "CONTINUATION_TOKEN",
"continuationTokenPath": "$.meta.after_cursor",
"parameterType": "QUERYPARAM",
"parameterName": "page[after]",
"delayRequestMillis": "850"
}
type
continuationTokenPath
parameterType
parameterType
define onde parameterName
deve ser adicionado. O tipo QUERYPARAM
permite anexar sua consulta com o parameterName
. O HEADERPARAM
permite que você adicione o parameterName
à sua solicitação de cabeçalho.parameterName
{PARAMETER_NAME}={CONTINUATION_TOKEN}
.delayRequestMillis
delayRequestMillis
na paginação permite controlar a taxa de solicitações feitas na origem. Algumas origens podem ter um limite para o número de solicitações que podem ser feitas por minuto. Por exemplo, Zendesk tem um limite de 100 solicitações por minuto e definir delayRequestMillis
como 850
permite que você configure a fonte para fazer chamadas a apenas 80 solicitações por minuto, bem abaixo do limite de 100 solicitações por minuto.Este é um exemplo de uma resposta retornada usando o tipo de token de continuação de paginação:
{
"results": [
{
"id": 5624716025745,
"url": "https://dev.zendesk.com/api/v2/users/5624716025745.json",
"name": "newinctest@zenaep.com",
"email": "newinctest@zenaep.com",
"created_at": "2022-04-22T10:27:30Z",
}
],
"facets": null,
"meta": {
"has_more": false,
"after_cursor": "eyJmaWVsZCI6ImNyZWF0ZWRfYXQiLCJk",
"before_cursor": null
},
"links": {
"prev": null,
"next": "https://dev.zendesk.com/api/v2/search/export.json?filter%5Btype%5D=user&page%5Bafter%5D=eyJmaWVsZCI6"
}
}
O tipo de paginação PAGE
permite percorrer os dados de retorno pelo número de páginas começando de zero. Ao usar a paginação do tipo PAGE
, você deve fornecer o número de registros fornecidos em uma única página.
"paginationParams": {
"type": "PAGE",
"limitName": "pageSize",
"limitValue": 100,
"initialPageIndex": 1,
"endPageIndex": "headers.x-pagecount",
"pageParamName": "pageNumber",
"maximumRequest": 10000
}
type
limitName
limitValue
initialPageIndex
endPageIndex
PAGE
. O valor do índice da página final pode ser o número da última página ou um valor de expressão do tipo string do cabeçalho de resposta. Por exemplo, você pode usar headers.x-pagecount
para atribuir um índice de página final ao valor x-pagecount
dos cabeçalhos de resposta. Observação: x-pagecount
é um cabeçalho de resposta obrigatório para algumas fontes e contém o número de valor de páginas a serem assimiladas.pageParamName
https://abc.com?pageIndex=1
retornaria a segunda página de uma carga de retorno de API.maximumRequest
O tipo de paginação NONE
pode ser usado para fontes que não oferecem suporte a nenhum dos tipos de paginação disponíveis. As fontes que usam o tipo de paginação de NONE
simplesmente retornam todos os registros recuperáveis quando uma solicitação GET é feita.
"paginationParams": {
"type": "NONE"
}
Programação avançada para Origens de Autoatendimento (SDK em Lote)
Configure a programação incremental e de preenchimento retroativo da origem usando a programação avançada. A propriedade incremental
permite configurar um agendamento no qual sua origem assimilará somente registros novos ou modificados, enquanto a propriedade backfill
permite criar um agendamento para assimilar dados históricos.
Com a programação avançada, você pode usar expressões e funções específicas da origem para configurar programações incrementais e de preenchimento retroativo. No exemplo abaixo, a origem Zendesk requer que o agendamento incremental seja formatado como type:user updated > {START_TIME} updated < {END_TIME}
e o preenchimento retroativo como type:user updated < {END_TIME}
.
"scheduleParams": {
"type": "ADVANCE",
"paramFormat": "yyyy-MM-ddTHH:mm:ssK",
"incremental": "type:user updated > {START_TIME} updated < {END_TIME}",
"backfill": "type:user updated < {END_TIME}"
}
scheduleParams.type
ADVANCE
para usar o tipo de agendamento avançado.scheduleParams.paramFormat
scheduleStartParamFormat
e scheduleEndParamFormat
da sua origem.scheduleParams.incremental
scheduleParams.backfill
Depois de configurar o agendamento avançado, consulte scheduleParams
na seção URL, corpo ou parâmetros de cabeçalho, dependendo do que a sua fonte específica suporta. No exemplo abaixo, {SCHEDULE_QUERY}
é um espaço reservado usado para especificar onde as expressões de agendamento de preenchimento retroativo e incremental serão usadas. No caso de uma origem Zendesk, query
é usado em queryParams
para especificar o agendamento avançado.
"urlParams": {
"path": "/api/v2/search/export@{if(empty(coalesce(pipeline()?.parameters?.ingestionStart,'')),'?query=type:user&filter[type]=user&','')}",
"method": "GET",
"queryParams": {
"query": "{SCHEDULE_QUERY}",
"filter[type]": "user"
}
}
Adicione um esquema personalizado para definir os atributos dinâmicos de sua fonte
Você pode incluir um esquema personalizado em seu sourceSpec
para definir todos os atributos necessários para sua origem, inclusive os atributos dinâmicos que você possa precisar. Você pode atualizar a especificação de conexão correspondente da sua origem fazendo uma solicitação PUT para o ponto de extremidade /connectionSpecs
da API Flow Service e, ao mesmo tempo, fornecendo seu esquema personalizado na seção sourceSpec
da sua especificação de conexão.
Este é um exemplo de um esquema personalizado que você pode adicionar à especificação de conexão da origem:
"schema": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"organization_id": {
"type": "integer",
"minimum": -9007199254740992,
"maximum": 9007199254740991
}
"active": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"email": {
"type": "string"
},
"iana_time_zone": {
"type": "string"
},
"id": {
"type": "integer"
},
"locale": {
"type": "string"
},
"locale_id": {
"type": "integer"
},
"moderator": {
"type": "boolean"
},
"name": {
"type": "string"
},
"only_private_comments": {
"type": "boolean"
},
"report_csv": {
"type": "boolean"
},
"restricted_agent": {
"type": "boolean"
},
"result_type": {
"type": "string"
},
"role": {
"type": "integer"
},
"shared": {
"type": "boolean"
},
"shared_agent": {
"type": "boolean"
},
"suspended": {
"type": "boolean"
},
"ticket_restriction": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"two_factor_auth_enabled": {
"type": "boolean"
},
"updated_at": {
"type": "string"
},
"url": {
"type": "string"
},
"verified": {
"type": "boolean"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}
}
Próximas etapas
Com as especificações de origem preenchidas, você pode continuar a configurar as especificações de exploração para a origem que deseja integrar ao Experience Platform. Consulte o documento sobre configuração das especificações de exploração para obter mais informações.