本頁面提供 Realtime 大眾運輸動態饋給的驗證錯誤和警告清單,以及排解這些問題的訣竅。
Realtime 驗證錯誤
為了向乘客提供準確資訊,請務必修正 Realtime 動態饋給中的任何驗證錯誤。
如要對 Realtime 驗證錯誤進行偵錯,請使用下表中的資訊。
- 「列舉值」欄提供 Realtime 動態饋給問題的簡稱,這項資訊會顯示在大眾運輸合作夥伴資訊主頁的驗證報表中。
- 「錯誤訊息」欄提供的訊息會顯示在大眾運輸合作夥伴資訊主頁的驗證報表中,亦即錯誤的摘要。
- 「疑難排解訣竅」欄提供解決錯誤所需採取的主要步驟。
| 列舉值 | 錯誤訊息 | 疑難排解訣竅 | 
|---|---|---|
| PROTO_MISSING_FIELDS_ERROR | 二進位通訊協定緩衝區缺少 %(field) 欄位。 | 使用文字編輯器開啟檔案,並確認動態饋給包含 FeedMessage通訊協定緩衝區中標示為必要的所有欄位。 | 
| PROTO_ASCII_ERROR | 無法剖析 ASCII 通訊協定緩衝區。錯誤:%(field)。 | 使用文字編輯器開啟檔案,並確認動態饋給包含所有必要欄位,且使用正確的語法。 | 
| PROTO_PARSE_ERROR | 無法剖析二進位通訊協定緩衝區。 | 使用文字編輯器開啟檔案,並確認動態饋給可剖析為 FeedMessage。您可以在「動態饋給範例」一文中找到程式碼範例。 | 
| URL_DNS_ERROR | 網址發生 DNS 錯誤。 | 檢查網路連線和 DNS 設定。 | 
| FETCHER_CONNECTION_ERROR | 無法連線至網址。 | 檢查指定用於擷取的網址,必須正確無誤。 | 
| CUSTOM_PARSE_ERROR | 無法剖析自訂格式動態饋給:%(value_string) | 使用文字編輯器檢查檔案內容,確認產生的檔案正確無誤,在傳輸過程中未損毀。如果錯誤持續發生,請聯絡 Google 大眾運輸代表尋求協助。 | 
| FEED_TOO_OLD | 動態饋給時間戳記 %(timestamp) (%(timestamp_string)) 比現在早 %(diff_time) 秒 (%(difftime_string))。目前時間是 %(localtime) (%(localtime_string))。已捨棄動態饋給。 | 確認沒有與擷取動態饋給相關的其他問題。定期產生動態饋給並持續更新資料。確認動態饋給時間戳記正確代表從 Epoch 紀元時間 (時區以世界標準時間為準) 起算的動態饋給建立時間 (以秒為單位)。 | 
| FETCHER_HTTP_ERROR | HTTP 錯誤:%(value)。 | 檢查傳回的 HTTP 錯誤代碼,並據此調查問題。 | 
| FULL_DATASET_REQUIRED | 僅支援 FULL_DATASET動態饋給。 | 將 incrementality的值設為FULL_DATASET。 | 
| FEED_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE | 動態饋給時間戳記持續比現在晚 %(diff_time) 秒 (%(difftime_string))。 | 請務必提供時區以世界標準時間為準的時間戳記 (從 Epoch 紀元時間起算,以秒為單位)。檢查伺服器的時鐘並確認皆已同步,例如與 NTP 同步。 | 
| INVALID_TIMESTAMP_RANGE | 動態饋給時間戳記值超出範圍 (%(timestamp))。 | 提供的動態饋給時間戳記,必須能代表從 Epoch 紀元時間 (時區以世界標準時間為準) 起算的動態饋給建立時間 (以秒為單位)。 | 
| PROTO_ENCODING_UNKNOWN | 動態饋給編碼不明。 | 使用正確編碼設定動態饋給。最終動態饋給必須是二進位格式,但您可以使用 ASCII 格式進行測試。 | 
| VEHICLE_POSITION_INTERNAL_ERROR | %(trip_id) 的 VehiclePosition無法轉換為TripUpdate,發生一般錯誤「%(value_string)」。 | 這項錯誤代表沒有使用 VehiclePosition來預估TripUpdate。請聯絡 Google 大眾運輸代表尋求協助。 | 
Realtime 驗證警告
如要提高動態饋給資料品質,請務必修正指出 Realtime 動態饋給可能發生問題的驗證警告。
如要對 Realtime 驗證警告進行偵錯,請搜尋下表中的項目。
- 「列舉值」欄提供 Realtime 動態饋給問題的簡稱,這項資訊會顯示在大眾運輸合作夥伴資訊主頁的驗證報表中。
- 「警告或資訊訊息」欄提供的訊息會顯示在大眾運輸合作夥伴資訊主頁的驗證報表中,亦即警告或資訊的摘要。
- 「疑難排解訣竅」欄提供解決警告所需採取的主要步驟。
| 列舉值 | 警告或資訊訊息 | 疑難排解訣竅 | 
|---|---|---|
| TRIP_UPDATE_SOME_STU_NOT_MATCHED | 有效 StopTimeUpdates的 %(value) (已指定trip_id「%(trip_id)」) 無法與 GTFS 行程比對。舉例來說,position:%(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 動態饋給比對。 | 確認靜態時間表正確無誤,並補上缺少的路線資訊。新的靜態時間表上線後,請修正 Realtime 動態饋給中的 route_id參照。 | 
| INVALID_ALERT_STOP_NOT_MATCHED | 已捨棄快訊: stop_id「%(stop_id)」無法與 GTFS 動態饋給比對。 | 確認靜態時間表正確無誤,並補上缺少的停靠站資訊。新的靜態時間表上線後,請修正 Realtime 動態饋給中的 stop_id參照。 | 
| INVALID_ALERT_TRIP_NOT_MATCHED | 已捨棄快訊: trip_id「%(trip_id)」無法與 GTFS 動態饋給比對。 | 確認靜態時間表正確無誤,並補上缺少的行程資訊。新的靜態時間表上線後,請修正 Realtime 動態饋給中的 trip_id參照。 | 
| STOP_TIME_UPDATE_PREMATURE_ARRIVAL | 行程「%(trip_id)」( stop_id「%(stop_id)」和stop_sequence%(next_seq)) 的StopTimeUpdate抵達時間,比先前的StopTimeUpdate(stop_id「%(other_id)」和stop_sequence%(prev_seq)) 早了 %(value) 秒。 | 檢查指定 stop_id或先前 ID 的抵達和出發時間,並修正不正確的值,確保時間不會減少。 | 
| INVALID_ALERT_NO_INFORMED_ENTITIES | 請至少提供一個知情實體。 | 在快訊中加入相關的 informed_entity。 | 
| PROTO_ENCODING_MISMATCH | 設定的 proto 編碼與收到的編碼不同。 | 使用正確的格式提供動態饋給。如果問題仍未解決,請聯絡 Google 大眾運輸代表尋求協助。 | 
| STOP_TIME_UPDATE_PREMATURE_DEPARTURE | 行程「%(trip_id)」( stop_id「%(stop_id)」和stop_sequence%(next_seq)) 的StopTimeUpdate出發時間,比先前的StopTimeUpdate(stop_id「%(other_id)」和stop_sequence%(prev_seq)) 早了 %(value) 秒。 | 檢查指定 stop_id或先前 ID 的出發時間,並修正不正確的值,確保出發時間不會減少。 | 
| DETOUR_MUST_SPECIFY_TIME | 行程「%(trip_id)」(通過停靠站「%(stop_id)」) 的改道必須指定絕對時間。 | 針對指定的 trip_id,在受影響的stop_id加入確切時間。 | 
| ENTITY_MUST_HAVE_ALERTS | 實體必須有快訊。 | 確認動態饋給內容完整,且每則 FeedEntity訊息都含有服務快訊的相關資訊。 | 
| ENTITY_MUST_HAVE_POSITIONS | 實體必須有位置。 | 確認動態饋給內容完整,且每則 FeedEntity訊息都含有車輛位置資訊。 | 
| ENTITY_MUST_HAVE_UPDATES | 實體必須有行程更新。 | 確認動態饋給內容完整,且每則 FeedEntity訊息都含有行程更新的相關資訊。 | 
| TIMESTAMP_FUTURE | 動態饋給時間戳記「%(timestamp)」(%(timestamp_string)) 比現在晚 %(diff_time) 秒 (%(difftime_string))。目前使用 %(localtime) (%(localtime_string)) 的擷取時間戳記。 | 請務必提供時區以世界標準時間為準的時間戳記 (從 Epoch 紀元時間起算,以秒為單位)。檢查伺服器的時鐘並確認皆已同步,例如與 NTP 同步。 | 
| TIMESTAMP_PAST | 動態饋給時間戳記「%(timestamp)」(%(timestamp_string)) 比現在早 %(diff_time) 秒 (%(difftime_string))。目前使用 %(localtime) (%(localtime_string)) 的擷取時間戳記。 | 更頻繁地重新產生 Realtime 動態饋給,即使內容維持不變或空白也一樣。 | 
| NO_VALID_TEXT | 欄位「%(field)」沒有有效的翻譯。 | 檢查 TranslatedString訊息並修正任何相關問題,例如HTML_TAGS_FOUND、INVALID_URL_LENGTH、INVALID_TEXT_LENGTH和INVALID_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_id的delay欄位,並修正不正確的值。 | 
| INVALID_TRIP_UPDATE_EVENT_TIME | 停靠事件時間無效:%(timestamp)。 | 僅為正在進行或即將進行的行程加入 TripUpdates。 | 
| INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME | 沒有提供出發所需的 time和delay。 | 在每則 StopTimeEvent訊息中加入time和/或delay欄位。如果沒有可用的資訊,請略過departure欄位。 | 
| INVALID_TRIP_UPDATE_ARRIVAL_NO_TIME | 沒有提供抵達所需的 time和delay。 | 在每則 StopTimeEvent訊息中加入time和/或delay欄位。如果沒有可用的資訊,請略過arrival欄位。 | 
| MISSING_CONTENT_AND_EFFECT | 沒有有效內容或影響。 | 在快訊中加入 effect、header_text或description_text。如果沒有可用資訊,請改為移除alert。 | 
| CUSTOM_PARSE_WARNING | 剖析自訂格式動態饋給時部分失敗:%(value_string) | 這項錯誤代表系統無法剖析一部分的 Realtime 動態饋給。請使用文字編輯器檢查動態饋給內容,或是重新上傳動態饋給。如果錯誤持續發生,請聯絡 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欄位的值正確無誤,且與目前 Static 動態饋給中同一個stop_id和trip_id的stop_sequence相符。 | 
| INVALID_STOP_STOP_ID | 已捨棄 StopTimeUpdate:行程「%(trip_id)」的stop_id「%(stop_id)」無法與 GTFS 動態饋給比對。stop_sequence[如有] %(value)。 | 檢查靜態動態饋給是否正確。如有需要,請修正行程中 stop_times.txt內stop_id的值,等待新版 Static 動態饋給上線,然後更新 Realtime 動態饋給中的stop_id參照。 | 
| INVALID_STOP_SEQUENCE_ID | 已捨棄 StopTimeUpdate:行程「%(trip_id)」內的stop_sequence%(value) 無法與 GTFS 動態饋給比對。 | 檢查靜態動態饋給是否正確。如有需要,請修正 stop_sequence的值,等待新版 Static 動態饋給上線,然後更新 Realtime 動態饋給中的stop_sequence參照。 | 
| INVALID_TRIP_UPDATE_ORDER | 已捨棄 StopTimeUpdate:trip_id「%(trip_id)」違反stop_sequence順序 (stop_id[如有]「%(stop_id)」、stop_sequence%(prev_seq) 後面接著 %(next_seq))。 | 請務必使用 stop_sequence設定StopTimeUpdates的順序。 | 
| FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST | 動態饋給時間戳記持續比現在早 %(diff_time) 秒 (%(difftime_string))。 | 確認時間戳記值是在以世界標準時間為準的時區 (從 Epoch 紀元時間起算,以秒為單位)。確認伺服器的時鐘保持同步,例如與 NTP 同步。請務必定期更新動態饋給。 | 
| TIMESTAMP_MISSING | 動態饋給的 FeedHeader缺少timestamp欄位。 | 設定 FeedHeader中的timestamp欄位 (時區以世界標準時間為準,從 Epoch 紀元時間起算,以秒為單位)。時間戳記必須正確代表動態饋給產生時間。 | 
| ENTITY_MORE_THAN_ONCE | FeedEntity的 ID 在動態饋給中重複出現。 | 確認動態饋給中的所有實體 ID 皆不重複。 | 
| PROTO_ASCII_HAS_BOM | 提供的動態饋給是以位元組順序標示 (BOM) 開頭。 | 移除位元組順序標示。確認文字格式的通訊協定緩衝區採用 UTF-8 編碼,且不含 BOM。建議您改以二進位格式提供通訊協定緩衝區。 | 
| TRIP_UPDATE_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE | 某項行程更新的 timestamp持續比現在晚 %(diff_time) 秒 (%(difftime_string))。 | 確認 timestamp值採用時區以世界標準時間為準的格式 (從 Epoch 紀元時間起算,以秒為單位)。確認伺服器的時鐘保持同步,例如與 NTP 同步。針對超過一小時前完成的行程,從動態饋給中移除TripUpdates。 | 
| VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE | 時間戳記持續比現在晚 %(diff_time) 秒 (%(difftime_string))。 | 確認 timestamp值採用時區以世界標準時間為準的格式 (從 Epoch 紀元時間起算,以秒為單位)。確認伺服器的時鐘保持同步,例如與 NTP 同步。 | 
| VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_PAST | timestamp持續比現在早 %(diff_time) 秒 (%(difftime_string))。 | 確認 timestamp值採用時區以世界標準時間為準的格式 (從 Epoch 紀元時間起算,以秒為單位)。確認伺服器的時鐘保持同步,例如與 NTP 同步。針對超過一小時前完成的行程,從動態饋給中移除VehiclePositions。 | 
| UNKNOWN_TRIP_ID | GTFS Static 動態饋給無法辨識行程 ID「%(trip_id)」。 | 檢查 Static 動態饋給,確認其中包含正確的最新資訊。確認使用正確版本的 Static 動態饋給,必要時也可以上傳正確版本。在 TripDescriptor中提供正確的現有trip_id。 | 
| TRIP_OUTSIDE_SERVICE_WINDOW | ID 為「%(trip_id)」的行程在指定時間不提供服務。 | 檢查靜態動態饋給是否正確。請補上缺少的行程資訊,等待新版靜態動態饋給上線,然後修正 Realtime 動態饋給中的 trip_id參照。 | 
| AMBIGUOUS_TRIP_DESCRIPTOR | TripDescriptor模稜兩可,無法解析特定時間的單一行程。 | 如果行程以頻率為準,請務必在 TripDescriptor中提供有效的start_time值和start_date值。 | 
| INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP | TripUpdate時間戳記 %(timestamp) (%(timestamp_string)) 比現在晚 %(diff_time) 秒 (%(difftime_string)),而動態饋給時間戳記是 %(localtime) (%(localtime_string))。 | 確認時鐘來源已設定正確的時間,且所有時區轉換程序都正確執行。 Vehicle.Position.timestamp欄位必須採用時區以世界標準時間為準的格式 (從 Epoch 紀元時間起算,以秒為單位)。 | 
| INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP | VehiclePosition時間戳記 %(timestamp) (%(timestamp_string)) 比現在晚 %(diff_time) 秒 (%(difftime_string)),而動態饋給時間戳記是 %(localtime) (%(localtime_string))。 | 確認時鐘來源已設定正確的時間,且所有時區轉換程序都正確執行。 Vehicle.Position.timestamp欄位必須採用時區以世界標準時間為準的格式 (從 Epoch 紀元時間起算,以秒為單位)。 | 
| INVALID_VEHICLE_POSITION_STALE_TIMESTAMP | VehiclePosition時間戳記 %(timestamp) (%(timestamp_string)) 比現在早 %(diff_time) 秒 (%(difftime_string)),而動態饋給時間戳記是 %(localtime) (%(localtime_string))。 | 從動態饋給中移除不提供服務的車輛,並確認時鐘已同步,且時區轉換正確無誤。 | 
| INVALID_ALERT_TIME_RANGE_END_PAST | 時間範圍已於超過一個月前結束:%(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)。 | 檢查 Realtime 動態饋給與目前上線的 Static 動態饋給是否相符。確認 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 | 已捨棄行程更新:表示 trip_id「%(trip_id)」和開始時間與 ID 為 %(value_string) 的其他實體相同。 | 確認每趟實際旅程最多只能有一個 TripUpdate,且動態饋給內的TripDescriptor不得重複。 | 
| INVALID_TRIP_UPDATE_MISSING_CONTENT | 已排定 trip_id「%(trip_id)」的行程更新,必須指定至少一項包含資料的停靠時間更新,或是指定延遲時間。 | 提供下列其中一項資訊: 
 | 
| TRIP_UPDATE_SUSPICIOUS_DELAY | trip_id「%(trip_id)」的行程含有疑似不合理的延遲時間 (%(difftime_string))。 | 確認已明確定義 TripDescription,必須設有trip_id、start_date和start_time。確認StopTimeUpdates的時間值與指定行程相符。檢查是否有任何時區不符的問題,例如start_date和start_time是否位於當地時區,但FeedMessage中的所有整數時間欄位都是從 Epoch 紀元時間起算,且以秒為單位。 | 
| TRIP_UPDATE_OBSOLETE | trip_id「%(trip_id)」的行程已於 %(difftime_string) 前結束。 | 在行程抵達最終停靠站的幾分鐘後,從動態饋給中移除行程。 | 
| UNSUPPORTED_ADDED_WITH_BLOCK_TRANSFER | 在設有排程轉乘的行程 %(trip_id) 中,系統不支援 schedule_relationship為ADDED的TripDescriptor。 | 只有在表示獨立行程時,才能在 ScheduleRelationship中使用ADDED值。 | 
| UNSUPPORTED_ADDED_WITHOUT_TIMES | 在未指定時間的行程 %(trip_id) 中, TripDescriptor的schedule_relationship為ADDED。 | 提供 start_date和start_time來表示新增的行程何時開始。 | 
| TRIP_UPDATE_TOO_OLD | TripUpdate時間戳記 %(timestamp) (%(timestamp_string)) 比現在早 %(diff_time) 秒 (%(difftime_string))。目前時間是 %(localtime) (%(localtime_string))。已捨棄TripUpdate。 | 定期產生動態饋給並持續更新資料。確認 TripUpdate時間戳記正確無誤,從 Epoch 紀元時間起算,以秒為單位,且採用時區以世界標準時間為準的格式。在行程抵達最終停靠站的幾分鐘後,從動態饋給中移除行程。 | 
| INVALID_TRIP_UPDATE_DELAY_USAGE | TripUpdate的delay欄位與StopTimeUpdates中的時間一併指定。 | 僅使用下列其中一個選項提供時間資訊,不要兩者並用: 
 | 
| INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING | VehiclePosition缺少車輛 ID。 | 提供車輛 ID。確認在車輛提供服務的所有動態饋給版本中,這個值保持不變。 | 
| INVALID_VEHICLE_POSITION_INVALID_POSITION | VehiclePosition缺少有效的位置資訊。 | 在 latitude和longitude欄位中提供有效的值。 | 
| INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING | 缺少 VehiclePosition時間戳記。 | 提供 VehiclePosition資訊收集時間的時間戳記值 (從 Epoch 紀元時間起算,以秒為單位,且採用時區以世界標準時間為準的格式)。 |