【问题标题】:Segment.io HTTP API not collecting eventsSegment.io HTTP API 未收集事件
【发布时间】:2025-10-23 14:20:01
【问题描述】:

这个特定的Segment.io 的文档和帮助是有限且稀疏的,所以我希望可以在这里提问。

我刚刚设置了 Segment.io 工作区和 HTTP API 源

根据docs,我向https://api.segment.io/v1/trackhttps://api.segment.io/v1/page 端点发送了一些POST 请求(使用邮递员)。请求的结构如下:

curl -X POST \
  https://api.segment.io/v1/track \
  -H 'Accept: */*' \
  -H 'Authorization: My4w3s0m3k3y' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Host: api.segment.io' \
  -H 'Postman-Token: 474d7fbe-15af-43d2-b629-61e15945e662,2c3d5fbe-2c09-4fe6-b7ea-a04e3221201b' \
  -H 'User-Agent: PostmanRuntime/7.11.0' \
  -H 'accept-encoding: gzip, deflate' \
  -H 'cache-control: no-cache' \
  -H 'content-length: 117' \
  -d '{
  "userId": "abc123",
  "event": "My tests",
  "properties": {
    "name": "test 1"
  }
}'

全部返回 200 响应和以下消息:

{
    "success": true
}

但是,当我进入仪表板时,没有记录任何事件。

调试器也是空的

我在这里错过了什么?

【问题讨论】:

    标签: httprequest httpresponse segment-io httpapi


    【解决方案1】:

    您的写入密钥似乎不是 base64 编码的。当您对写入密钥进行编码时,请记住在其末尾添加:,然后再对其进行编码。

    此外,对于授权键:值,请务必在编码的写入键之前添加Basic。所以你的 Authorization key:value 看起来像:

    授权:基本{编码写入密钥}

    来自segment documentation的一个例子:

    实际上这意味着将Segment source Write Key'abc123'作为用户名,添加一个冒号,然后将密码字段留空。 base64编码后'abc123:'变成'YWJjMTIzOg==';这在授权标头中传递,如下所示:'Authorization: Basic YWJjMTIzOg=='。

    【讨论】:

      【解决方案2】:

      我一直在处理同样的问题。 正如托德所说,我找到了解决方案。

      你应该添加一个标题Authorization: Basic + base64 encoding write key

      因此,您查找 Segment source 设置并获取写入密钥。 之后,我使用online base64 encoding tool 对我的写密钥进行编码。 最后,您应该使用“Basic”和编码的写入密钥添加此标头(授权)。

      您应该能够在 Segment 网页的 Debugging 面板中看到跟踪的事件。

      我希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        你可以试试这个代码

        const { promisify } = require("util");
        
        var Analytics = require("analytics-node");
        var analytics = new Analytics("xxxxxxxxxxxxxxxxxxxxxxx", {
          flushAt: 1,
        });
        
        const [identify, track] = [
          analytics.identify.bind(analytics),
          analytics.track.bind(analytics),
        ].map(promisify);
        
        
         console.log("user id: ", req.body.event.app_user_id);
          let app_user_id = req.body.event.app_user_id;
          let period_type = req.body.event.period_type;
          let expiration_at_ms = req.body.event.expiration_at_ms;
          let ret = "Initial";
          try {
            await identify({
              userId: app_user_id,
              traits: {
                period_type: period_type,
                expiration_at_ms: expiration_at_ms,
              },
            });
            ret = "Done : Sengment done";
          } catch (err) {
            console.log("err: ", err);
            ret = "Error : " + err;
          }
        
          return {
            rafsan: ret,
          };
        

        【讨论】:

          【解决方案4】:

          尝试清除浏览器的缓存或使用其他浏览器。我遇到了同样的问题并为我工作。

          希望这会有所帮助。

          【讨论】: