API

Webhooks

Un webhook es una solicitud HTTP que FoodSoul envía a la dirección de su sistema cuando ocurre un evento en la cuenta: un nuevo pedido, un cambio de estado, una reseña y otros.

La suscripción con dirección y eventos se crea mediante el método:

POST Crear una suscripción a webhook

La dirección es la URL de la suscripción, el método es POST.

Formato, firma y repeticiones

Cuerpo de la solicitud del webhook. Cada solicitud es un POST con Content-Type: application/json al URL de la suscripción. El URL debe comenzar con https.
Encabezados: X-Webhook-Event — código del evento, X-Webhook-ID — event_uuid, X-Webhook-Signature — sha256= y HMAC-SHA256 del cuerpo original de la solicitud en hexadecimal con el secreto de la sucursal (webhooks_subscriptions.generate_secret).
Verifique la firma usando el cuerpo original antes de analizar el JSON: hash_equals(hash_hmac('sha256', $body, $secret), substr($signature, 7)). La firma no contiene marca de tiempo, el canal está protegido por HTTPS.
La entrega se considera aceptada con cualquier respuesta 2xx dentro de 10 segundos. No se siguen redirecciones. De lo contrario, la entrega se reintenta: 7 intentos, el primero inmediatamente, luego después de 1, 5, 15, 60, 180 y 360 minutos. Todos los intentos de una entrega contienen el mismo X-Webhook-ID. El reenvío manual desde el registro (webhooks_logs.resend) contiene el mismo X-Webhook-ID — use este valor para omitir entregas ya procesadas.
20 entregas fallidas consecutivas desactivan la suscripción (blocked), y el propietario y el administrador del sistema de la cuenta reciben un correo electrónico. webhooks_subscriptions.unblock reactiva la suscripción.
El cuerpo contiene los datos del evento: el cliente, la reseña y la tarjeta del pedido se transmiten completos. El saldo de bonificación no se transmite: es común para el grupo de redes y debe obtenerse a través del API.

Encabezados

X-Webhook-Eventstringobligatorio

Ejemplo: order.created

X-Webhook-IDstringobligatorio

Ejemplo: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

X-Webhook-Signaturestringobligatorio

Ejemplo: sha256=9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Eventos

  • client.registered
  • client.updated
  • client.bonuses_changed
  • order.created
  • order.status_changed
  • order.payment_status_changed
  • feedback.created
  • courier.assigned
  • item.stop_list_changed
  • branch.work_status_changed

Cuerpo de la solicitud

object (WebhookPayload)
eventstringobligatorio

Valores:client.registeredclient.updatedclient.bonuses_changedorder.createdorder.status_changedorder.payment_status_changedfeedback.createdcourier.assigneditem.stop_list_changedbranch.work_status_changed

Ejemplo: order.status_changed

event_uuidstringobligatorio

Ejemplo: 5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41

date_creationstring (DataTimeFormatSQL) obligatorio

Ejemplo: 2024-05-02 08:31:16

branch_idintegerobligatorio

Ejemplo: 8412

dataoneOfobligatorio
Una de las opciones
object (WebhookDataClientRegistered)

client.registered — nuevo teléfono o primer inicio de sesión de la cuenta en esta sucursal

client_branch_profile_idintegerobligatorio

Ejemplo: 730112

namestringpuede ser nulo

Ejemplo: John Doe

phonestringobligatorio

Teléfono en formato internacional, sin formato

Ejemplo: +79114579423

genderstringpuede ser nulo

Valores:womanman

Ejemplo: man

date_of_birthstringpuede ser nulo

Fecha de nacimiento en formato Y-m-d

Ejemplo: 1982-01-03

Ejemplo de cuerpo

{
  "event": "order.status_changed",
  "event_uuid": "5f0c6b1e-6a1d-4c1e-9d6b-3a7f0e2b8c41",
  "date_creation": "2024-05-02 08:31:16",
  "branch_id": 8412,
  "data": {
    "client_branch_profile_id": 730112,
    "name": "John Doe",
    "phone": "+79114579423",
    "gender": "man",
    "date_of_birth": "1982-01-03"
  }
}

Respuesta de su sistema

2XX

Aceptado

default

Не принято, доставка повторяется