从服务器发送一批活动到Mixpanel。
请求格式
每个请求都会将一批事件摄入Mixpanel。我们最多接受2000年的事件和2MB未压缩的每个请求。事件是请求主体的一部分。我们支持内容类型应用程序/JSON
或者应用程序/X-NDJSON
:
[{{“ event”:“ cignup”,“ properties”:{“ time”:1618716477000,“ distract_id”:“ 91304156-CAFC-4673-A237-6237-623D1129C801”,“-95b84f09b9e4“,”由“:“ friend”,“ url”:“ www.jy710.com/signup”}}}}},{“ event”:“ pasking”,“ properties”:{“ time”:1618716477000,“ dimption” dimpply_id dimption_id“:“ 91304156-CAFC-4673-A237-623D1129C801”,“” $ INSERT_ID:“ 935D87B1-00CD-41B7-BE34-BE34-B94-B98D98DDDD08B42
{“事件”:“注册”,“属性”:{“ time”:1618716477000,“ distract_id”:“ 91304156-CAFC-4673-A237-6237-623D1129C801”,“95b84f09b9e4“,”由“:“ friend”,“ url”:“ www.jy710.com/signup”}}}} {“ event”:“购买”,“ properties”:{“ time”:1618716477000,“ dimpply_id”:91304156-CAFC-4673-A237-623D1129C801“,” $ insert_id”:
我们也支持内容编码:GZIP
减少网络出口。
验证
/导入需要所有者或管理员服务帐户。project_id,服务帐户用户名和服务帐户密码需要身份验证请求。
注意: /导入也支持项目秘密出于遗产原因。如果您不指定project_id,我们将使用秘密验证。
验证
/导入验证提供的事件并返回400状态代码,如果任何事件的失败验证,并带有错误的详细信息。如果某些事件通过验证,而其他事件失败了,我们将摄取通过验证的事件。当您在生产中遇到400个错误时,只需记录JSON响应,因为它将包含$ insert_id
无效事件的s,可用于调试。
高级要求
- 每个事件必须正确格式化JSON。
- 每个事件都必须包含事件名称,时间,独立_id和$ insert_id。这些用于重写事件,以便可以安全地进行此端点。
- 每个事件必须小于未压缩JSON的1MB。
- 每个事件必须具有不到255个属性。
- 所有嵌套对象属性必须少于255个键,而最大嵌套深度为3。
- 所有数组属性都必须少于255个元素。
事件的示例
{“ event”:“注册”,“属性”:{“ time”:1618716477000,“ distract_id”:“ 91304156-CAFC-4673-A237-6237-623D1129C801”,“-95b84f09b9e4“,” ip”:“ 136.24.0.114”,“由“:”:“ friend”,“ url”,“ url”:“ www.jy710.com/signup”,}}}
事件
这是事件的名称。如果您要从数据仓库中加载数据,我们建议将表名称作为事件的名称。
我们建议将唯一事件名称的数量保持相对较小,并使用属性用于事件附加的任何可变上下文。例如,我们建议您建议跟踪一个称为“注册”的事件,并拥有具有“付费”帐户类型“付费”或“免费”的事件,而不是跟踪名称“付费注册”和“免费注册”的事件。
特性
这是代表事件的所有属性的JSON对象。如果您要从数据仓库中加载数据,我们建议使用列名作为属性名称。
properties.time
自时代以来,事件发生的时间,以秒或毫秒为单位。我们需要时间的价值。我们将拒绝以1971-01-01之前或将来超过1小时的时间值的时间值,如我们的服务器所测量的。
properties.distinct_id
DISTINAL_ID标识执行事件的用户。必须在每个事件上指定独特的_id,因为Mixpanel正确有效地执行行为分析(唯一用户,funnels,保留,同伙)至关重要。
如果事件与任何用户没有关联,请将Distract_id设置为空字符串。所有行为分析将排除具有空白的事件。
为了防止意外实施错误,我们不允许以下值对Distination_ID:
-00000000-0000-0000-0000-0000-000000000000000000000000000000000000000000000000000000000000000000000000000000来
属性。$ insert_id
我们要求在每个事件中指定$ insert_id。$ insert_id为活动提供了一个唯一的标识符,我们将其用于重复数据删除。具有相同值的事件(事件,时间,独特的_id,$ insert_id)被视为重复项,其中只有一个会在查询中浮出水面。
$ insert_ids必须≤36个字节,并且仅包含字母数字字符或“ - ”。我们还从上面提供的Distine_ID的无效ID列表中不允许$ insert_id的任何值。
验证错误的示例
{“代码”:400,“ error”:“请求中的某些数据点失败验证”,“ failed_records”:[{“ index”:0,“ $ insert_id”:“ 8A666058C-A56D-4EF6-4EF6-4EF6-8123-28123-28123-28B7C9F7E82F”,“ field”:“ properties.time”,“ message”:“ properties.time'无效:必须指定为秒,因为epoch“ epoch”},{“ index”:3,“ $ insert_id”:“ 29fc2962-6d9c-455D-95AD-95B84F09B9E4“,“ field”:“ properties.utm_source”,“ message”:“ properties.utm_source无效:字符串应有效UTF8”},],“ NUM_RECORDS_IMPORTED”要求” }
当批处理中的任何单个事件都没有通过验证,我们将返回400个状态代码和看起来像以上的响应。
FAILED_RECORDS
包括每个失败事件的一行,并提供有关我们发现的错误的详细信息。如果某些行通过了验证,我们将摄取它们并将其归还计数num_records_imported
。
地理浓缩
如果您提供财产IP
使用IP地址,MixPanel将自动进行GeoIP查找并替换IP
具有地理财产(城市,国家,地区)的财产。这些属性可以在我们的UI中使用,以从地理上进行细分事件。
这是充实前后事件的一个例子:
{“ event”:“注册”,“属性”:{“ time”:1618716477000,“ distract_id”:“ 91304156-CAFC-4673-A237-6237-623D1129C801”,“-95b84f09b9e4“,” ip”:“ 136.24.0.114”,“由“:”:“ friend”,“ url”,“ url”:“ www.jy710.com/signup”,}}}
{“ event”:“注册”,“属性”:{“ time”:1618716477000,“ distract_id”:“ 91304156-CAFC-4673-A237-6237-623D1129C801”,“-95b84f09b9e4“,”由“:”:“ friend”,“ url”:“ www.jy710.com/signup”,“ $ city”:“ san Francisco”,“ $ region”,“ california”:“ california”,“ mp_country_code”:“}}}
费率限制
为了确保实时摄入和服务质量,我们的速率限制为2GB的未压缩JSON/分钟或每秒〜30K事件,以1分钟的滚动测量。
我们建议以下有关将数据大规模发送到我们的API时:
- 与并发客户端尽快发送数据,直到服务器返回429。我们看到了最佳结果,每批次的10-20个并发客户端发送2K事件。
- 当您看到429s时,请使用抖动的指数退缩战略。我们建议从2s的退缩开始,然后将后退加倍,直到60年代,以1-5秒的抖动。
- 我们建议GZIP压缩并使用
内容编码:GZIP
减少网络出口和转移时间。 - 在极少数情况下,我们的API返回502或503状态代码,我们建议采用与429s相同的指数退回策略。
- 请不要重试验证错误(400个状态代码),因为它们将始终如一地失败并计入速率限制。
如果您是企业客户,并且需要更高的限制1次回填,请与您的Project_ID和用例联系您的销售代表。
常见问题
所有事件都需要$ insert_id。这使得重试 /进口请求是安全的。如果您的事件尚未具有唯一的ID(例如:A UUID/GUID),我们建议计算一组属性的哈希,这些属性使事件在语义上唯一(例如:Distract_id + Timestamp +其他属性)并使用该哈希作为$ insert_id的前36个字符。
我们将所有字符串截断为255个字符。这是我们对通常发生的各种情况的建议:
- URL:我们建议解析URL并跟踪其单个组件(主机,路径,URL参数)作为属性。这在分析中更有用,因为您可以通过主机名或特定URL参数进行分割事件。
- JSON编码的字符串:有时长字符串可能是编码为字符串的JSON对象。我们建议对JSON进行解析,并将其放入属性中以发送活动。同样,这在分析中更有用,因为您可以通过JSON中的任何键过滤或分解。
- 免费文本 /用户生成的内容:一些长字段可能包括全文(例如:搜索词或注释)。如果此属性对分析不起作用,我们建议将其从跟踪到Mixpanel排除在外,以避免意外发送任何PII。
向导
请参阅我们的云摄入指南,例如使用此API以集成Google Pub/sub,,,,亚马逊S3, 或者Google云存储。