Skip to content

Webhooks

Webhooks praneša jūsų sistemai apie SMS įvykius realiu laiku. Kai įvyksta įvykis, mes siunčiame HTTP POST užklausą į jūsų sukonfigūruotą endpoint su JSON duomenimis, aprašančiais įvykį.

Įvykio tipasAprašymas
SMS pristatymo patvirtinimasSuaktyvinamas, kai pasikeičia išsiųsto SMS pristatymo būsena (pristatyta, nepavyko, pasibaigė galiojimas ir kt.)
Gautas SMSSuaktyvinamas, kai SMS gaunamas į jūsų dedikuotą virtualų numerį

Norėdami konfigūruoti webhooks, eikite į Nustatymai → Webhooks savo darbo erdvėje ir pridėkite savo endpoint URL. Galite:

  • Įjungti konkrečius įvykių tipus kiekvienam endpoint
  • Pridėti pasirenkamą slaptąjį raktą HMAC parašo validavimui
  • Pridėti aprašymą, padedantį identifikuoti endpoint

Visi webhooks siunčiami kaip HTTP POST užklausos su JSON turiniu, įvyniotų į standartinį voką.

JSON duomenys

id
required
string
Unikalus šio webhook įvykio identifikatorius.
timestamp
required
string
format: date-time (ISO 8601)
Kada įvyko įvykis.
workspaceId
required
string
Su šiuo įvykiu susieta darbo erdvės ID.
eventType
required
integer
Įvykio tipas: 1 - SMS pristatymo patvirtinimas, 2 - Gautas SMS.
data
required
object
Įvykio specifinis turinys (žr. žemiau).
{
"id": "evt_abc123",
"timestamp": "2025-01-15T10:30:00Z",
"workspaceId": "ws_xyz789",
"eventType": 1,
"data": {
// Įvykio specifinis turinys
}
}

Siunčiamas, kai pasikeičia išsiųsto SMS pristatymo būsena. Naudokite tai stebėti, ar žinutės buvo sėkmingai pristatytos gavėjams.

data objektas

messageId
required
string
Unikalus SMS žinutės identifikatorius.
clientReference
string
Jūsų pasirinktinė nuoroda, jei buvo pateikta siunčiant SMS.
deliveryStatus
required
string
Dabartinė žinutės pristatymo būsena.
errorCode
string
Klaidos kodas, jei žinutė nepavyko (žr. klaidos kodus žemiau).
processedAt
string
format: date-time (ISO 8601)
Kada žinutė buvo apdorota operatoriaus.
deliveredAt
string
format: date-time (ISO 8601)
Kada žinutė buvo pristatyta gavėjui.
{
"id": "evt_dr_123456",
"timestamp": "2025-01-15T10:30:00Z",
"workspaceId": "ws_xyz789",
"eventType": 1,
"data": {
"messageId": "12345678",
"clientReference": "uzsakymo-patvirtinimas-456",
"deliveryStatus": "Delivered",
"errorCode": null,
"processedAt": "2025-01-15T10:29:55Z",
"deliveredAt": "2025-01-15T10:30:00Z"
}
}
BūsenaGalutinėAprašymas
QueuedNeŽinutė laukia siuntimo eilėje
DispatchedNeŽinutė išsiųsta operatoriui
DeliveredTaipŽinutė sėkmingai pristatyta gavėjui
FailedTaipŽinutės pristatymas visam laikui nepavyko
ExpiredTaipŽinutės galiojimas pasibaigė prieš pristatymą (operatoriaus laikas baigėsi)
RejectedTaipŽinutė atmesta operatoriaus
CancelledTaipŽinutė atšaukta prieš pristatymą
DeletedTaipŽinutė ištrinta
UnknownNeBūsena negalėjo būti nustatyta

Kai deliveryStatus yra Failed arba Rejected, errorCode laukas pateikia papildomą informaciją.

KodasPavadinimasAprašymas
400QueuedŽinutė vis dar eilėje
401DispatchedŽinutė išsiųsta
402MessageUnroutableNėra maršruto šiam tikslui
403InternalErrorĮvyko vidinė klaida
404TemporaryDeliveryFailureLaikina pristatymo klaida - gali kartoti
405UnmatchedParameterNetinkamas parametras užklausoje
406InternalExpiryŽinutės galiojimas pasibaigė viduje
407CancelledŽinutė atšaukta
408InternalRejectŽinutė atmesta viduje
410UnmatchedDefaultOriginatorSiuntėjo ID netinkamas šiam tikslui
411ExceededPartsLimitŽinutė viršijo maksimalų dalių limitą
412UnprovisionedRegionTikslo regionas nepalaikomas
413BlockedŽinutė užblokuota operatoriaus arba filtro

Siunčiamas, kai SMS gaunamas į jūsų dedikuotą virtualų numerį. Tai leidžia gauti atsakymus ir įgyvendinti dvipusę SMS komunikaciją.

data objektas

messageId
required
string
Unikalus gautos žinutės identifikatorius.
inboundNumber
required
string
format: E.164
Jūsų virtualus numeris, kuris gavo žinutę.
sender
required
string
format: E.164
Telefono numeris, kuris išsiuntė žinutę.
body
required
string
Gautos žinutės turinys.
receivedAt
required
string
format: date-time (ISO 8601)
Kada žinutė buvo gauta.
{
"id": "evt_in_789012",
"timestamp": "2025-01-15T14:22:30Z",
"workspaceId": "ws_xyz789",
"eventType": 2,
"data": {
"messageId": "inb_987654",
"inboundNumber": "+447700900100",
"sender": "+447700900123",
"body": "Taip, prašau patvirtinti mano susitikimą",
"receivedAt": "2025-01-15T14:22:30Z"
}
}

Jei konfigūruojate slaptąjį raktą savo webhook endpoint, mes įtraukiame HMAC-SHA256 parašą, kurį turėtumėte validuoti, kad įsitikintumėte užklausos autentiškumu.

AntraštėAprašymas
X-Webhook-SignatureBase64 koduotas HMAC-SHA256 parašas
X-Webhook-TimestampUnix laiko žymė (sekundėmis), kada webhook buvo išsiųstas

Parašas skaičiuojamas taip:

HMAC-SHA256(secret, timestamp + "." + payload)

Kur:

  • secret yra jūsų sukonfigūruotas webhook slaptasis raktas
  • timestamp yra reikšmė iš X-Webhook-Timestamp
  • payload yra neapdorotas JSON užklausos turinys
using System.Security.Cryptography;
using System.Text;
public bool ValidateWebhookSignature(
string payload,
string signature,
string timestamp,
string secret)
{
var signatureData = $"{timestamp}.{payload}";
using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(signatureData));
var expectedSignature = Convert.ToBase64String(hash);
return signature == expectedSignature;
}

Jei jūsų endpoint grąžina ne-2xx atsakymą arba baigiasi laikas, mes pakartosime pristatymą su eksponentiniu atidėjimu:

BandymasAtidėjimas
1Nedelsiant
25 minutės
315 minučių
41 valanda
54 valandos
68 valandos
712 valandų

Po 5 nuoseklių nesėkmių, webhook endpoint automatiškai išjungiamas, kad būtų išvengta tolesnių nesėkmingų pristatymų. Galite jį vėl įjungti iš webhook nustatymų puslapio, kai jūsų endpoint bus sveikas.


  1. Atsakykite greitai - Grąžinkite 2xx atsakymą kuo greičiau. Apdorokite webhook duomenis asinchroniškai, jei reikia.

  2. Tvarkykite dublikatus - Retais atvejais galite gauti tą patį webhook daugiau nei kartą. Naudokite id lauką dublikatų pašalinimui.

  3. Validuokite parašus - Visada validuokite HMAC parašą, kai sukonfigūruotas slaptasis raktas, kad užtikrintumėte užklausų autentiškumą.

  4. Naudokite HTTPS - Visada naudokite HTTPS endpoints, kad webhook duomenys būtų užšifruoti perdavimo metu.

  5. Stebėkite nesėkmes - Reguliariai tikrinkite savo webhook nustatymus, kad įsitikintumėte, jog endpoints nebuvo automatiškai išjungti dėl nesėkmių.