競態條件
競態條件是一個概念,其中一個結果依賴於其他事件的順序或時間。例如,如果期望的事件序列是“事件A”,然後是“事件B”,但有時“事件A”先出現,有時“事件B”先出現,這就是所謂的競態條件。
針對新用戶
在Braze中,針對新創建用戶的消息最常見的競爭條件之一。這裏,事件的預期順序是:
- 創建一個用戶;
- 同一用戶立即成為消息的目標。
但是,在某些情況下,第二個事件會先觸發。這意味著消息試圖發送給尚未創建的用戶,因此用戶永遠不會收到消息。
使用多個API端點
如果你使用獨立的API端點來創建用戶和觸發畫布/活動,這也會導致這種競爭條件。當用戶信息通過用戶/跟蹤
端點,它可能偶爾需要幾秒鍾來處理。因此,當向用戶/跟蹤
而且消息端點同時,不能保證在發送消息之前更新用戶信息。如果這些請求是在同一個API調用中發出的,那麼應該沒有問題。注意,如果發送預定的消息API調用,這些請求必須是獨立的,並且必須在發送預定的API調用之前創建一個用戶。
如果用戶屬性通過SDK發送,或者在與事件相同的用戶/軌跡調用中發送,那麼Braze將在試圖發送任何消息之前自動處理這些屬性。
避免這種競爭狀態的一種方法是,在創建用戶和Canvas或活動瞄準該用戶之間添加一分鍾左右的延遲。
類似地,您可以使用屬性
對象來添加/創建/更新用戶,然後使用帆布/觸發/發送
或運動/觸發/發送
端點。此API調用將處理屬性
對象,然後再瞄準用戶。
包含在該對象中的屬性將在Braze開始發送戰役之前被處理。如果send_to_existing_only
Flag設置為false,並且external_user_id
在Braze的數據庫中不存在,Braze將為external_user_id
並在Braze開始發送活動之前處理用戶配置文件的相關屬性。還要注意,如果send_to_existing_only
Flag設置為false,則必須包含屬性對象以創建用戶。的send_to_existing_only
Flag不能與用戶別名一起使用。
匹配基於動作的觸發器和受眾過濾器
另一種常見的競態條件可能發生在配置基於動作的活動或Canvas時,其觸發器與觀眾過濾器相同(例如,更改屬性或執行自定義事件)。當用戶執行觸發事件時,他們可能不在觀眾中,這意味著他們不會收到活動或進入畫布。在這種情況下,Braze建議您避免配置觸發器來匹配您的受眾篩選器。