🪝

Webhooks

HMAC署名付きHTTPSコールバックでアクティベーション、レンタル、ウォレットイベントを受信。

なぜWebhook

ポーリングは無駄です:秒以下のポーリングはレート制限、数秒間隔のポーリングは遅延を増します。Webhookはイベント発生の瞬間にプッシュします。

登録

Account → Webhooks → New endpoint:HTTPS URL、イベントタイプ、再試行戦略(exponential / linear / none)。署名シークレットは一度だけ表示されます。

イベント

  • activation.sms_received — 受信SMSがアクティベーションに一致
  • activation.expired — ウィンドウがコードなしで終了
  • activation.finished — アクティベーション確認
  • rent.sms_received — レンタル番号への受信SMS
  • wallet.credited / wallet.debited — お金の動き
  • support.message.received — サポートスレッドのエージェント返信

Payload

{
  "event": "activation.sms_received",
  "delivery_id": "b7e2c1a0-9f3d-4c5e-8a1b-2d3e4f5a6b7c",
  "created_at": "2026-05-26T14:30:14Z",
  "data": { "order_id": "9a1f2c3d-4e5b-6a7c-8d9e-0f1a2b3c4d5e", "phone": "+380635551822", "code": "123456", "service": "telegram" }
}

署名検証

ヘッダー:X-Eveses-Signature: sha256=<hmac> (timestamp in X-Eveses-Timestamp)。HMAC-SHA256を <ts>.<raw-body> にあなたのシークレットで計算。

$ts  = $_SERVER['HTTP_X_EVESES_TIMESTAMP'] ?? '';
$sig = $_SERVER['HTTP_X_EVESES_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $ts . '.' . file_get_contents('php://input'), $secret);
if (!hash_equals($expected, $sig) || abs(time() - (int) $ts) > 300) { http_response_code(401); exit; }

5分以上前のリクエストはすべて拒否(リプレイウィンドウ)。

再試行

失敗した配信(non-2xx または10秒以内に応答なし)は戦略に従って再試行。Exponential:30s、2min、10min、1h、6h、その後dead。ダッシュボードから手動リプレイ可能。