实时验证错误和警告

本页面列出了实时公交 Feed 的验证错误和警告,以及有关如何排查这些问题的提示。

实时验证错误

为了向乘客提供准确的信息,请务必修复实时 Feed 中的所有验证错误。

如需调试实时验证错误,请使用下表中的信息。

  • “枚举值”列会提供实时 Feed 中问题的简称,该名称会显示在公交合作伙伴信息中心的验证报告中。
  • “错误消息”列提供显示在公交合作伙伴信息中心的验证报告中的消息。它会汇总错误。
  • “问题排查提示”列提供了解决错误需要执行的主要步骤。
枚举值 错误消息 问题排查提示
PROTO_MISSING_FIELDS_ERROR 二进制协议缓冲区缺少字段“%(field)”。 在文本编辑器中打开该文件,并验证 Feed 是否包含 FeedMessage 协议缓冲区中标记为必需的所有字段。
PROTO_ASCII_ERROR 无法解析 ASCII 协议缓冲区。错误:%(field) 在文本编辑器中打开该文件,验证 Feed 是否包含所有必填字段以及是否使用了正确的语法。
PROTO_PARSE_ERROR 无法解析二进制协议缓冲区。 在文本编辑器中打开该文件,并验证 Feed 是否可以解析为 FeedMessage。您可以在 Feed 示例中找到代码示例。
URL_DNS_ERROR 网址的 DNS 错误。 验证互联网连接和 DNS 设置。
FETCHER_CONNECTION_ERROR 无法连接到 网址。 验证您提供用于提取的网址。请确保网址正确无误。
CUSTOM_PARSE_ERROR 未能解析自定义格式 Feed:%(value_string) 在文本编辑器中验证文件内容。确认文件可正确生成,且在传输过程中未损坏。如果错误仍然存在,请与您的 Google 公交代表联系以寻求帮助。
FEED_TOO_OLD Feed 时间戳 %(timestamp) (%(timestamp_string)) 已过去 %(diff_time) 秒 (%(difftime_string))。当前时间为 %(localtime) (%(localtime_string))。已舍弃 Feed。 确认没有人报告过有关提取 Feed 的其他问题。定期生成 Feed 并及时更新数据。确保 Feed 时间戳正确表示 Feed 创建时间(从纪元起经过的秒数,采用世界协调时间 [UTC] 时区)。
FETCHER_HTTP_ERROR HTTP 错误:%(value) 验证返回的 HTTP 错误代码,并相应地调查问题。
FULL_DATASET_REQUIRED 仅支持 FULL_DATASET 个 Feed。 incrementality 的值设置为 FULL_DATASET
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE Feed 时间戳始终是未来的 %(diff_time) 秒 (%(difftime_string))。 请务必提供采用世界协调时间 (UTC) 时区的时间戳,以从公元纪年开始计算的秒数表示。请检查服务器的时钟,确保它们全部同步,例如与 NTP 同步。
INVALID_TIMESTAMP_RANGE Feed 时间戳值超出范围 (%(timestamp))。 提供一个 Feed 时间戳,表示 Feed 创建时间(纪元后的秒数,采用世界协调时间 [UTC] 时区)。
PROTO_ENCODING_UNKNOWN Feed 编码未知。 使用正确的编码配置 Feed。您的最终 Feed 必须是二进制格式,但您可以使用 ASCII 格式进行测试。
VEHICLE_POSITION_INTERNAL_ERROR 未能将 %(trip_id)VehiclePosition 转换为 TripUpdate,并显示一般错误“%(value_string)”。 此错误表示 VehiclePosition 未用于估算 TripUpdate。请与您的 Google 公交代表联系以寻求帮助。

实时验证警告

要提高 Feed 数据质量,请务必修复表明您的实时 Feed 可能存在问题的验证警告。

如需调试实时验证警告,请搜索下表中的条目。

  • “枚举值”列会提供实时 Feed 中问题的简称,该名称会显示在公交合作伙伴信息中心的验证报告中。
  • “警告或信息消息”列提供了在公交合作伙伴信息中心的验证报告中显示的消息。警告或信息的摘要。
  • “问题排查提示”列提供了解决警告所需的主要步骤。
枚举值 警告或信息性消息 问题排查提示
TRIP_UPDATE_SOME_STU_NOT_MATCHED 指定有效 StopTimeUpdates%(value)trip_id%(trip_id)”无法与 GTFS 行程匹配。例如:位置: %(index) stop_sequence: %(next_seq) stop_id: “%(stop_id)”。 请确保以正确的顺序提供 StopTimeUpdates
VEHICLE_POSITION_DUPLICATE_TRIP_BLOCK_TRANSFER 有多辆车报告了 $(trip_id)start_time $(timestamp_string) 块转移行程。 确保在特定开始时间只有一个车辆。
INVALID_ALERT_ROUTE_NOT_MATCHED 舍弃了提醒:route_id%(route_id)”无法与 GTFS Feed 匹配。 验证静态时间表是否正确,如果缺少路由信息,请添加路由信息。在新的静态时间表发布后,更正实时 Feed 中的 route_id 引用。
INVALID_ALERT_STOP_NOT_MATCHED 舍弃了提醒:stop_id%(stop_id)”无法与 GTFS Feed 匹配。 验证静态时间表是否正确,如果缺失车站信息,请添加车站信息。在新的静态时间表发布后,更正实时 Feed 中的 stop_id 引用。
INVALID_ALERT_TRIP_NOT_MATCHED 舍弃了提醒:trip_id%(trip_id)”无法与 GTFS Feed 匹配。 验证静态时间表是否正确,如果缺少行程信息,请添加这些信息。在新的静态时间表发布后,更正实时 Feed 中的 trip_id 引用。
STOP_TIME_UPDATE_PREMATURE_ARRIVAL 行程“%(trip_id)stop_id为“%(stop_id)”且 stop_sequence%(next_seq)StopTimeUpdate到站时间比前一个 StopTimeUpdatestop_id%(other_id)”和 stop_sequence %(prev_seq))提前 %(value) 秒。 查看指定stop_id或以前的 到达时间和出发时间。请修正错误的值,确保时间不会缩短。
INVALID_ALERT_NO_INFORMED_ENTITIES 应至少提供一个知情实体。 在提醒中添加相关的 informed_entity
PROTO_ENCODING_MISMATCH 配置的 proto 编码与收到的编码不同。 请以正确的格式提供 Feed。如果问题仍然存在,请与您的 Google 公交代表联系以寻求帮助。
STOP_TIME_UPDATE_PREMATURE_DEPARTURE stop_id为“%(stop_id)”且stop_sequence%(next_seq)的“%(trip_id)”行程的StopTimeUpdate发车时间比上一个StopTimeUpdate%(value) 秒,stop_id为“%(other_id)”且%(prev_seq)stop_sequence 查看给定 stop_id 或之前的出发时间。请更正不正确的值,以确保出发时间不会缩短。
DETOUR_MUST_SPECIFY_TIME 行程“%(trip_id)”到经停点“%(stop_id)”的绕行时间必须指定绝对时间。 包括受影响 stop_id 中指定 trip_id 的确切时间。
ENTITY_MUST_HAVE_ALERTS 实体必须有提醒。 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否都包含有关服务提醒的信息。
ENTITY_MUST_HAVE_POSITIONS 实体必须有位置。 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否包含车辆位置信息。
ENTITY_MUST_HAVE_UPDATES 实体必须有行程更新。 验证 Feed 内容是否完整,以及每条 FeedEntity 消息是否都包含行程更新相关信息。
TIMESTAMP_FUTURE Feed 时间戳 %(timestamp) (%(timestamp_string)) 是未来的 %(diff_time) 秒 (%(difftime_string))。使用的时间戳是 %(localtime) (%(localtime_string))。 请务必提供采用世界协调时间 (UTC) 时区的时间戳,以从公元纪年开始计算的秒数表示。请检查服务器的时钟,确保它们全部同步,例如与 NTP 同步。
TIMESTAMP_PAST Feed 时间戳 %(timestamp) (%(timestamp_string)) 是过去 %(diff_time) 秒 (%(difftime_string)) 的时间点。使用的用户获取时间戳是 %(localtime) (%(localtime_string))。 更频繁地重新生成实时 Feed,即使内容保持不变或为空也是如此。
NO_VALID_TEXT %(field)”字段没有有效的翻译。 查看 TranslatedString 消息并修复所有相关问题,例如 HTML_TAGS_FOUNDINVALID_URL_LENGTHINVALID_TEXT_LENGTHINVALID_URL
HTML_TAGS_FOUND 字段 %(field)(%(index)) 包含 HTML 标记。 从该字段中移除所有 HTML 标记。
INVALID_LANGUAGE 字段“%(field)”(%(index)) 包含无效的语言代码“%(language)”。 将语言字段设置为有效的 BCP-47 语言代码
INVALID_URL 字段“%(field)”(%(index)) 包含无效网址(应为绝对 http 或 https)。 添加提醒的有效网址。
INVALID_TEXT_LENGTH 字段 %(field) (%(index)) 的长度为 %(length)(最大值为 %(max_length))。 缩短提供的文本(通常在手机等小屏幕设备上显示)。如果您想向用户提供更多详细信息,请改为提供网址引用。
INVALID_URL_LENGTH 字段 %(field)(%(index)) 的网址长度为 %(length)(最多 %(max_length))。 请提供不超过限制的网址。
MULTIPLE_UNSPECIFIED_LANGUAGE 字段 %(field)(%(index)) 是重复翻译,未设置语言。 查看 TranslatedString 消息。为给出多个翻译的 language 字段设置正确的值。
INVALID_TRIP_UPDATE_DELAY 行程更新内的延迟时间无效:%(value) 请查看给定 entity_iddelay 字段,并更正错误的值。
INVALID_TRIP_UPDATE_EVENT_TIME 无效的停止事件时间:%(timestamp) 仅针对正在进行或近期进行的行程添加 TripUpdates
INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME timedelay 均未提供发车时间。 在每个 StopTimeEvent 消息中添加 time 字段和/或 delay 字段。如果没有可用的信息,请省略 departure 字段。
INVALID_TRIP_UPDATE_ARRIVAL_NO_TIME timedelay 均未提供到达时间。 在每个 StopTimeEvent 消息中添加 time 字段和/或 delay 字段。如果没有可用的信息,请省略 arrival 字段。
MISSING_CONTENT_AND_EFFECT 无有效内容或效果。 在提醒中添加 effectheader_textdescription_text。如果没有可用的信息,请改为移除 alert
CUSTOM_PARSE_WARNING 解析自定义格式 Feed 时出现部分失败:%(value_string) 此错误表示实时 Feed 中有部分数据无法解析。打开文本编辑器以验证 Feed 的内容,或重新上传 Feed。如果错误仍然存在,请与您的 Google 公交代表联系以寻求帮助。
VEHICLE_POSITION_BAD_START_TIME 指定的行程 $(trip_id) 的开始时间与车辆实际启动时间相差 %(diff_time) 秒。 指定接近行程实际开始时间的车辆开始时间。
INVALID_TRIP_UPDATE_INCONSISTENT_IDS stop_sequence %(value) 与行程“%(trip_id)”的站点“%(stop_id)”不匹配。请使用静态索引中的 stop_sequence %(next_seq) 替换该站点。 确保 stop_sequence 字段的值正确无误,并且与当前静态 Feed 中同一 stop_idtrip_idstop_sequence 一致。
INVALID_STOP_STOP_ID 已舍弃StopTimeUpdate:为行程“%(trip_id)”指定的stop_id%(stop_id)”无法与 GTFS Feed 匹配。 stop_sequence [如果存在] %(value) 验证静态 Feed 的准确性。如果需要,请为行程修正 stop_times.txtstop_id 的值。等待新版本的静态 Feed 上线。更新实时 Feed 中的 stop_id 引用。
INVALID_STOP_SEQUENCE_ID 已舍弃StopTimeUpdate:行程“%(trip_id)”中的stop_sequence %(value) 无法与 GTFS Feed 匹配。 验证静态 Feed 的准确性。如果需要,请修正 stop_sequence 的值。等待新版静态 Feed 上线。更新实时 Feed 中的 stop_sequence 引用。
INVALID_TRIP_UPDATE_ORDER 已舍弃StopTimeUpdatetrip_id%(trip_id)stop_id [如有]“%(stop_id)”“%(stop_id)”、stop_sequence %(prev_seq) 后跟 %(next_seq)stop_sequence订单违规行为。 请务必按 stop_sequence 设置 StopTimeUpdates 的顺序。
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST Feed 时间戳始终是过去 %(diff_time) 秒 (%(difftime_string)) 的过去。 确认时间戳值采用世界协调时间 (UTC) 时区,以纪元后的秒数表示。确认您的服务器的时钟已同步,例如与 NTP 同步。请务必定期更新 Feed。
TIMESTAMP_MISSING Feed 的 FeedHeader 缺少 timestamp 字段。 以世界协调时间 (UTC) 时区为准,在纪元后的秒数中填写 FeedHeader 中的 timestamp 字段。时间戳需要正确表示 Feed 生成时间。
ENTITY_MORE_THAN_ONCE FeedEntity的 ID 在 Feed 中多次出现。 确保 Feed 中的所有实体 ID 都是唯一的。
PROTO_ASCII_HAS_BOM 提供的 Feed 以字节顺序标记 (BOM) 开头。 移除字节顺序标记。确保文本格式的协议缓冲区采用 UTF-8 编码,不含 BOM。我们建议您改为提供二进制格式的协议缓冲区。
TRIP_UPDATE_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE 某些行程更新的 timestamp 会在将来持续 %(diff_time) 秒 (%(difftime_string))。 确认 timestamp 值的格式设置为世界协调时间 (UTC) 时区(从纪元起经过的秒数)。确认您的服务器的时钟已同步,例如与 NTP 同步。从超过一小时前完成的行程的 Feed 中移除 TripUpdates
VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE 时间戳始终是未来的 %(diff_time) 秒 (%(difftime_string))。 确认 timestamp 值的格式设置为世界协调时间 (UTC) 时区(从纪元起经过的秒数)。确认您的服务器的时钟已同步,例如与 NTP 同步。
VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_PAST timestamp 始终向前持续 %(diff_time) 秒 (%(difftime_string))。 确认 timestamp 值的格式设置为世界协调时间 (UTC) 时区(从纪元起经过的秒数)。确认您的服务器的时钟已同步,例如与 NTP 同步。从超过一小时前完成的行程的 Feed 中移除 VehiclePositions
UNKNOWN_TRIP_ID 静态 GTFS Feed 无法识别行程 ID“%(trip_id)”。 验证静态 Feed,确保其包含的正确且最新的信息。 请确保使用的是正确版本的静态 Feed,或在必要时上传正确的版本。在 TripDescriptor 中提供准确的现有 trip_id
TRIP_OUTSIDE_SERVICE_WINDOW ID 为“%(trip_id)”的行程在指定时间未在使用。 验证静态 Feed 的准确性。添加行程信息(如果缺失)。等待新版本的静态 Feed 上线。更正了实时 Feed 中的 trip_id 引用。
AMBIGUOUS_TRIP_DESCRIPTOR TripDescriptor 不明确,并且无法在特定时间解析单个行程。 如果行程基于频率,请务必在 TripDescriptor 中提供有效的 start_time 值和 start_date 值。
INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP 与 Feed 时间戳 %(localtime) (%(localtime_string)) 相比,TripUpdate 时间戳 %(timestamp) (%(timestamp_string)) 是未来的 %(diff_time) 秒 (%(difftime_string))。 验证时钟源的时间设置是否正确。验证所有时区转换是否都准确执行。Vehicle.Position.timestamp 字段需要采用世界协调时间 (UTC) 时区的格式,以从公元纪年开始计算的秒数表示。
INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP 与 Feed 时间戳 %(localtime) (%(localtime_string)) 相比,VehiclePosition 时间戳 %(timestamp) (%(timestamp_string)) 是未来的 %(diff_time) 秒 (%(difftime_string))。 验证时钟源的时间设置是否正确。验证所有时区转换是否都准确执行。Vehicle.Position.timestamp 字段需要采用世界协调时间 (UTC) 时区的格式,以从公元纪年开始计算的秒数表示。
INVALID_VEHICLE_POSITION_STALE_TIMESTAMP 与 Feed 时间戳 (%(localtime_string)) 相比,VehiclePosition 时间戳 %(timestamp) (%(timestamp_string)) 是过去 %(diff_time) 秒 (%(difftime_string)) 的时间点。%(localtime) 请从 Feed 中移除非服务车辆。验证时钟是否同步以及时区转换是否正确。
INVALID_ALERT_TIME_RANGE_END_PAST 时间范围在超过 1 个月前结束:%(time_end) 移除结束时间为过去时间且不再有效的提醒(或 active_periods)。
INVALID_ALERT_TIME_RANGE_ORDER 时间范围顺序反转:(%(time_start)%(time_end))。 验证 active_period 字段的值。这些字段的顺序可能是反转的。
INVALID_ALERT_TIME_RANGE_START_FUTURE 时间范围从现在起超过一年后开始:%(time_start) 在提醒中添加近期的 active_period 开始时间。
STOP_TIME_AND_DELAY_MISMATCH 在站“%(stop_id)”处的行程“%(trip_id)”指定的时间戳 %(timestamp) 和延迟 %(delay) 相互冲突。正在将延迟设置为 %(value) 验证实时 Feed 是否与当前实时静态 Feed 匹配。确保 StopTimeEvent 中的 delay 字段和 time 字段正确且一致。或者,完全省略 delay 字段,仅提供 time 字段。
INVALID_START_DATE 行程“%(trip_id)”的开始日期“%(value_string)”无效(假设今天为今天)。预期格式为“YYYYMMDD”。 验证指定行程的 start_date 的值。请确保值正确。
INVALID_START_TIME 行程“%(trip_id)”的开始时间“%(value_string)”无效。预期格式为“HH:MM:SS”。 验证指定行程的 start_time 的值和格式。请确保值和格式正确无误。
VEHICLE_POSITION_DUPLICATE_TRIP 有多辆车报告的行程 $(trip_id)start_time $(timestamp_string) 针对非基于频次的行程,更改行程的 start_time,并将 ScheduleRelationship 更改为 ADDED
VEHICLE_POSITION_CONVERTED_TO_ADDED 行程“$(trip_id)”的时间表关系已更改为“ADDED”行程。 此错误是另一个问题的副作用。请先解决该问题,再修复此错误。
INVALID_TRIP_UPDATE_MISSING_IDS 行程更新包含 stop_update,既不包含 stop_sequence,也不包含 stop_id StopTimeUpdate 消息中添加 stop_id 和/或 stop_sequence
MULTIPLE_ENTITIES_PER_TRIP 舍弃了行程更新:表示与开始时间相同的其他实体(ID 为 %(value_string))的 trip_id%(trip_id)”。 确保每个真实旅程最多只有一个 TripUpdate。确保 TripDescriptor 在 Feed 中是唯一的。
INVALID_TRIP_UPDATE_MISSING_CONTENT 针对计划trip_id%(trip_id)”的行程更新应至少指定一次包含数据的经停时间更新,或指定延迟。

请提供以下任一项:

  • StopTimeUpdate(含数据)
  • TripUpdate.delay
TRIP_UPDATE_SUSPICIOUS_DELAY trip_id%(trip_id)”的行程包含 %(difftime_string) 的异常不合理延迟。 验证 TripDescription 是否明确定义,它需要 trip_idstart_datestart_time。验证 StopTimeUpdates 的时间值是否与指定行程匹配。检查是否存在任何时区不一致问题,例如,start_datestart_time 是否在本地时区,但 FeedMessage 中的所有整数时间字段都以纪元后的秒数表示。
TRIP_UPDATE_OBSOLETE trip_id%(trip_id)”的行程已于 %(difftime_string)前结束。 在行程到达终点几分钟后,从 Feed 中移除行程。
UNSUPPORTED_ADDED_WITH_BLOCK_TRANSFER 对于含块转移的行程 %(trip_id),不支持 schedule_relationshipADDEDTripDescriptor 仅使用 ScheduleRelationshipADDED 值来表示隔离的行程。
UNSUPPORTED_ADDED_WITHOUT_TIMES TripDescriptorschedule_relationshipADDED,针对未指定时间的行程 %(trip_id) 提供 start_datestart_time 来指示添加的行程的开始时间。
TRIP_UPDATE_TOO_OLD TripUpdate 时间戳 %(timestamp) (%(timestamp_string)) 已过去 %(diff_time) 秒 (%(difftime_string))。当前时间为 %(localtime) (%(localtime_string))。已舍弃 TripUpdate 定期生成 Feed 并及时更新数据。确保 TripUpdate 时间戳正确无误(纪元后的秒数),且采用 UTC 时区的格式。在行程到达终点几分钟后,从 Feed 中移除行程。
INVALID_TRIP_UPDATE_DELAY_USAGE TripUpdatedelay 字段与 StopTimeUpdates 中的时间一起指定。

仅使用以下其中一项(而不是两者)提供时间信息:

  • StopTimeUpdates
  • TripUpdate.delay
INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING VehiclePosition 缺少车辆标识符。 提供车辆标识符。请确保在使用车辆的所有 Feed 版本中,此值都是稳定的。
INVALID_VEHICLE_POSITION_INVALID_POSITION VehiclePosition 缺少有效的位置信息。 latitudelongitude 字段提供有效值。
INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING 缺少 VehiclePosition 时间戳。 提供收集 VehiclePosition 信息的时间戳值(采用 UTC 时区格式,以从公元纪年开始计算的秒数表示)。