跳到內容

Webhook 事件

Piora Webhook 讓你可以在特定事件發生時,接收即時的 HTTP 通知。你可以利用 Webhook 整合 Slack 通知、觸發下游流程、或建立自訂的自動化工作流程。

  1. 進入「設定」>「Webhook」
  2. 點選「新增 Webhook」
  3. 設定以下參數:
參數說明範例
URL接收通知的端點https://your-server.com/webhook
事件要監聽的事件類型選擇一個或多個
Secret簽名密鑰(用於驗證)自動產生或自訂
狀態啟用或停用啟用
事件說明
deployment.started部署開始
deployment.succeeded部署成功
deployment.failed部署失敗
deployment.rolled_back部署回滾
事件說明
application.created應用建立
application.deleted應用刪除
application.started應用啟動
application.stopped應用停止
application.crashed應用異常退出
事件說明
server.connected伺服器連線成功
server.disconnected伺服器連線中斷
server.alert伺服器告警(CPU、記憶體等)
事件說明
database.created資料庫建立
database.deleted資料庫刪除
backup.completed備份完成
backup.failed備份失敗

每個 Webhook 請求都是 POST 方法,包含 JSON 負載:

{
"event": "deployment.succeeded",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"application": {
"id": "app_xxxxxxxxxxxx",
"name": "my-web-app"
},
"deployment": {
"id": "deploy_xxxxxxxxxxxx",
"status": "succeeded",
"commit": "abc1234",
"branch": "main",
"duration": 45
},
"server": {
"id": "srv_xxxxxxxxxxxx",
"name": "production"
}
}
}

每個 Webhook 請求都包含簽名標頭,讓你驗證請求確實來自 Piora:

X-Piora-Signature: sha256=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
const crypto = require('crypto');
function verifyWebhook(payload, signature, secret) {
const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// Express.js 範例
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.headers['x-piora-signature'];
if (!verifyWebhook(req.body, signature, WEBHOOK_SECRET)) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(req.body);
// 處理事件...
res.status(200).send('OK');
});

如果你的 Webhook 端點回傳非 2xx 狀態碼,Piora 會自動重試:

重試次數等待時間
第 1 次1 分鐘後
第 2 次5 分鐘後
第 3 次30 分鐘後
第 4 次2 小時後
第 5 次12 小時後

超過 5 次重試後,該事件將被標記為失敗。

在控制面板中可以查看每個 Webhook 的發送記錄:

  • 發送時間
  • 事件類型
  • HTTP 狀態碼
  • 回應時間
  • 負載內容
  • 重試記錄