我正在尋找一個可以安排學校課程的網路應用程式,以便在上課時間開始時,該功能應該等待 5 分鐘,然后檢查他是否將此會議標記為已完成;如果沒有,我們將發送一封電子郵件通知老師他/她錯過了會議。
我的問題是,當用戶添加班級會議時,如何啟動計時器,以及如何使其重復,以便每天同時重復?
注意:我希望通過 Cloud Functions 來完成。另外,如果這會有所不同,我正在使用 Firebase
uj5u.com熱心網友回復:
我建議您使用以下文章中描述的技術,而不是在給定的時間間隔運行計劃的 Cloud Functions,以“計劃 Cloud Functions 在未來使用 Cloud Tasks 運行”。
如文章中所述,這特別適合您的情況,因為:
計劃函式只能以每分鐘一次的頻率運行。 這意味著它可能會比您希望的執行時間晚一分鐘,這可能是一個不可接受的延遲。
您可能會為無用的、重復的函式呼叫和可能沒有作業可做的調度程式查詢付費。
使用本文中描述的技術,您可以在保存會議時設定云函式的確切執行時間,以驗證是否達到 5 分鐘延遲。
如果會議被取消,只需按照名為“但如果我需要取消任務怎么辦?”的部分進行操作。在文章中。
對于重復方面(請參閱我在您的問題下的評論),我將在會議創建演算法中對其進行管理。如果需要重復會議,只需創建具有不同時間和日期的同一會議的多個實體,并管理每個實體的計時器。
根據您的評論更新:
對于給定會議的調度執行,只需計算對應于 <會議時間 5 分鐘> 的時間,以紀元秒表示該時間并將其傳遞給與 Cloud Task 一起使用的配置物件。
const task = {
httpRequest: {
httpMethod: 'POST',
url,
body: Buffer.from(JSON.stringify(payload)).toString('base64'),
headers: {
'Content-Type': 'application/json',
},
},
scheduleTime: {
seconds: ... // Here your time in epoch seconds
}
}
要檢查用戶是否參加了會議,只需在 HTTPS Cloud Function 中實作所需的業務邏輯即可。遵循以下業務邏輯:
export const firestoreTtlCallback =
functions.https.onRequest(async (req, res) => {
const payload = req.body as ExpirationTaskPayload
try {
// Get the path of the meeting doc
const meetingPath = payload.docPath
// Check if the meeting doc is flagged as finished
const meetingSnapshot = await admin.firestore().doc(payload.docPath).get();
if (!meetingSnapshot.get('finished')) { // If the field finished is not set to true
// Send an email
// I recommend to use the corresponding extension
// See this article: https://medium.com/firebase-tips-tricks/how-to-send-e-mails-using-firebase-extensions-a10d7cd685c2
}
res.send(200)
}
catch (error) {
console.error(error)
res.status(500).send(error)
}
})
uj5u.com熱心網友回復:
您可以使用將定期運行的Firebase 計劃函式startTime并查詢自.
然后你沒有啟動任何計時器。相反,您可以使用startTime并將其與當前時間進行比較,以檢查會議是否已被標記。這可能不是實時的。例如,假設您的函式在 8:00、8:05 等每 5 分鐘運行一次,會議安排在7:588:05,您的電子郵件將在 8:05 發送。即你的間隔越大,延遲越大。
5 分鐘的間隔應該每天觸發 288 次該功能,并且可以一次向多個用戶發送電子郵件,而不是使用諸如Cloud Tasks之類的東西來使其實時并為每次會議觸發一個功能。
您可以使用新的Cloud Tasks 集成輕松在佇列中添加任務。
您必須更新用戶在檔案中將會議標記為開始/完成的時間,以免不必要地向他們發送電子郵件。
對于定期會議用例,您可以存盤一個欄位meetingType(“一次性”或“重復”)并在當前會議時間完成后使用云功能更新同一檔案,或者為每個會議單獨創建一個檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507503.html
標籤:Google Cloud Collective 火力基地 谷歌云火库 谷歌云功能 云 计划任务
