Uau! Construiți-vă integrarea WhatsApp. Începeți gratuit. Înregistrați-vă acum
Check-in remote la hotel · caz de utilizare WhatsApp API

Răspunde cu un cod de ușă pe WhatsApp după încărcarea actului de identitate

Oaspeții finalizează check-in-ul remote când codul de acces la ușă ajunge în același chat după ce trimit pașaportul sau actul de identitate. Când documentul ajunge pe canalul hotelului, backend-ul tău poate prelua fișierul, îl poate accepta față de rezervare și poate trimite codul ca text obișnuit de chat prin Whapi.Cloud. Acest caz arată integratorilor cum să implementeze acel flux prin WhatsApp API.

Declanșat de un document inbound pe messages.post Codul de ușă este trimis ca text de chat către oaspete
Laptop de hotel cu o rezervare lângă un telefon cu chat WhatsApp unde documentul de pașaport al oaspetelui stă deasupra răspunsului cu codul de acces la ușă.
Caz de utilizare

Când să folosești acest flux

Pașaportul sau actul de identitate ajunge ca document WhatsApp

Folosește acest flux când un oaspete cu rezervare trimite scanarea sau fotografia ca document inbound pe canalul proprietății, nu când personalul încă strânge acte pe hârtie la recepție pentru fiecare sosire.

Codul de ușă trebuie să aștepte acceptarea documentului

Folosește acest flux când backend-ul tău trebuie să genereze și să trimită codul de acces abia după ce fișierul este preluat și asociat rezervării — nu un cod trimis înainte ca identitatea să fie acceptată.

Sosirile târzii sau nesupravegheate tot au nevoie de acces

Folosește acest flux când proprietatea trebuie să elibereze un cod de ușă în chat pentru check-in după program sau remote, fără a ține o recepție completă online pentru fiecare sosire.

Chat WhatsApp pe un telefon care arată documentul de pașaport al oaspetelui deasupra unui răspuns cu codul de acces la ușa hotelului.
Experiența clientului

Oaspetele primește codul de ușă în chat

Înainte de automatizare, oaspetele așteaptă la ușă sau scrie la recepție în timp ce cineva găsește rezervarea, verifică pașaportul și tastează un cod de acces manual — adesea după program.

După ce fluxul rulează, oaspetele vede codul de acces la ușă în același chat WhatsApp unde a trimis actul de identitate. Integratorii construiesc acest rezultat cu WhatsApp API.

Flux de lucru

De la actul de identitate la codul de ușă

1

Document inbound al oaspetelui

Canalul publică un webhook messages.post cu type document (pașaport sau act de identitate). Payload-ul poartă document.id ca MediaID, opțional document.link când Auto Download este activat, și from / chat_id al oaspetelui. Whapi.Cloud nu rulează logica ta de rezervare sau de broască.

2

Preia fișierul de identitate încărcat

GET /media/{MediaID}

getMedia descarcă fișierul din stocarea cloud după MediaID ca backend-ul tău să îl poată accepta față de rezervare. Dacă Auto Download a expus deja un link util, poți prelua acel URL în schimb, dar acest job denumește în continuare pasul de preluare după MediaID.

3

Trimite codul de acces la ușă

POST /messages/text

După ce own_backend acceptă documentul și generează codul, sendMessageText publică acel cod ca text obișnuit către telefonul sau chat id-ul oaspetelui.

Ai nevoie de urmărirea livrării? Un răspuns de trimitere reușit nu dovedește că oaspetele are deja codul de ușă. Urmărește ack-urile ulterioare pe webhook-urile de livrare. Află despre starea livrării →

Cerințe preliminare

Înainte să rulezi fluxul

Conectează numărul WhatsApp pe care oaspeții îl folosesc pentru documentele de check-in și autentifică fiecare cerere cu tokenul API al acelui număr. Potrivirea rezervărilor, generarea codului de ușă și alertele către recepție rămân pe backend-ul tău.

Opțional — aprofundare pentru acest flux

  • Formate de payload pentru webhook-uri inbound: Vezi formatele
  • Prezentare generală a trimiterii de mesaje text și media: Deschide ghidul
  • Model eveniment → reacție: webhook la intrare, trimitere REST la ieșire: Citește articolul
Implementare API

Apelurile care preiau media și trimit codul

Webhook-ul tău a numit deja oaspetele și MediaID-ul documentului. Aceste apeluri preiau fișierul, apoi livrează codul de acces la ușă generat de backend după acceptare.

Obține tokenul API gratuit după ce te înregistrezi pe whapi.cloud și folosește-l în cod în loc de Your_Token din exemple.

Preia fișierul de identitate încărcat

Descarcă fișierul de pașaport sau act de identitate al oaspetelui după MediaID din webhook-ul documentului inbound, ca own_backend să îl poată accepta.

curl --request GET \
     --url https://gate.whapi.cloud/media/{MediaID} \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/media/{MediaID}",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/media/{MediaID}"
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token"
}

response = requests.get(url, headers=headers)
print(response.content)
const response = await fetch('https://gate.whapi.cloud/media/{MediaID}', {
  method: 'GET',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
  },
});

console.log(await response.arrayBuffer());
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/media/{MediaID}")
  .get()
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/media/{MediaID}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
var response = await client.GetAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://gate.whapi.cloud/media/{MediaID}", nil)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}

Trimite codul de acces la ușă

Trimite codul de acces la ușă generat ca text obișnuit de chat către același oaspete după ce documentul este acceptat.

curl --request POST \
     --url https://gate.whapi.cloud/messages/text \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "447123456789",
  "body": "Your door access code is 482915"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/text",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\",\"body\":\"Your door access code is 482915\"}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/messages/text"
payload = {
    "to": "447123456789",
    "body": "Your door access code is 482915"
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/messages/text', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
    to: '447123456789',
    body: 'Your door access code is 482915',
  }),
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\",\"body\":\"Your door access code is 482915\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/text")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/messages/text");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(new { to = "447123456789", body = "Your door access code is 482915" });
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{"to":"447123456789","body":"Your door access code is 482915"}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/text", bytes.NewReader(body))
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
Starea livrării

Când textul cu codul de ușă iese din pending

Un răspuns de trimitere reușit nu înseamnă că oaspetele are deja mesajul. Prima stare vizibilă înainte de un webhook este pending. Schimbările ulterioare de stare ajung doar pe statuses.post și statuses.put. Dacă starea rămâne pending și nu trece la sent, delivered sau un ack ulterior, mesajul nu a fost livrat — verifică payload-ul și permisiunea contului de a trimite acel tip.

  • Tratează un pending blocat ca nelivrat, nu ca un ceas sau o coadă care așteaptă un webhook.

  • Abonează-te la statuses.post și statuses.put când ai nevoie de confirmare sent, delivered sau read pentru textul cu codul de ușă.

  • Nu debloca accesul la proprietate și nu marca check-in-ul ca finalizat cât timp starea WhatsApp rămâne pending.

Ce să citești despre livrare și webhook-uri

Contactează suportul dacă ceva a mers greșit
Când ceva se strică

Gestionează eșecurile la fiecare pas

Dacă webhook-ul documentului nu are un MediaID util, getMedia eșuează sau fișierul a expirat, own_backend respinge documentul sau nu poate genera un cod, ori sendMessageText eșuează sau rămâne nelivrat, reîncearcă sau alertează recepția și nu trata check-in-ul ca finalizat.

Documentul a ajuns, dar oaspetele nu a primit niciodată codul?

Ține acceptarea rezervării separată de livrarea pe WhatsApp. Remediază un MediaID lipsă, reîncearcă getMedia sau sendMessageText, ori alertează recepția — nu debloca ușa și nu marca check-in-ul remote ca făcut cât timp oaspetele încă nu are cod. Dacă trimiterea tot eșuează după o reîncercare, contactează suportul Whapi cu id-ul canalului și id-ul cererii eșuate.

Contactează suportul dacă ceva a mers greșit

Depanează pe pasul API

Stare Ce înseamnă Ce să faci
400 Wrong request parameters Corectează parametrii greșiți pe calea MediaID înainte de a reîncerca.
404 Specified media not found Confirmă că MediaID-ul din webhook-ul documentului încă există în stocarea cloud, apoi reîncearcă sau cere oaspetelui să retrimită fișierul.
500 Internal Error
Stare Ce înseamnă Ce să faci
400 Wrong request parameters Corectează parametrii greșiți din corpul trimiterii înainte de a reîncerca.
401 Need channel authorization for send message Autorizează canalul pentru trimiterea de mesaje, apoi reîncearcă cu un token valid.
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient Confirmă că este permisă trimiterea către acest destinatar, apoi reîncearcă cu o valoare to corectată.
413 Request body too large
429 Too many requests Înceține și reîncearcă mai târziu după prea multe cereri.
500 Internal Error
Întrebări frecvente

Check-in remote și codul de ușă

Nu. Potrivirea pașaportului cu rezervarea, generarea codului de ușă, notificarea recepției și deschiderea ușii rămân pe backend-ul tău. Această pagină acoperă preluarea documentului WhatsApp și trimiterea textului cu codul de ușă.
Din webhook-ul documentului inbound. În exemplul operatorului, document.id este MediaID-ul trecut la getMedia. Când Auto Download este activat, același payload poate include și un document.link temporar pe care îl poți prelua direct.
Urmează failure_mode din catalog — nu marca check-in-ul ca finalizat, reîncearcă pasul eșuat sau alertează recepția și nu debloca accesul pentru acel oaspete cât timp preluarea media sau livrarea este defectă.
Nu. Acest job este check-in remote în ospitalitate după un act de identitate al oaspetelui într-un chat personal. Nu este o pagină oficială de verificare a identității și nici livrarea unui cod de login de unică folosință.
Povestea operatorului permite o fotografie sau o scanare a pașaportului. Configurează filtrele webhook pentru tipurile de atașamente acceptate de proprietate; tiparul de preluare și răspuns rămâne același odată ce ai un MediaID.
Funcționalități WhatsApp suportate

Tot ce ai nevoie pentru a construi automatizări pe WhatsApp

Whapi.Cloud îți oferă acces la un set complet de funcționalități WhatsApp — mesaje, media, grupuri, canale, webhook-uri și altele. Construiește boți, automatizări și integrări fără limitări de funcții.

Ales de dezvoltatori

De încredere pentru peste 3.300 de dezvoltatori și echipe SaaS

Dezvoltatori din întreaga lume se bazează pe Whapi.Cloud pentru a crea automatizări, boți, integrări CRM, instrumente de mesagerie în masă și fluxuri avansate WhatsApp. Infrastructura noastră procesează milioane de cereri API cu o stabilitate ridicată — iar numărul crește în fiecare lună.

Pictogramă funcționalitate

5,5K+

canale API active

Pictogramă funcționalitate

21M+

cereri API pe lună

„Totul este simplu, intuitiv și ușor de folosit. Documentația este clară, iar toate informațiile necesare sunt la îndemână. Foarte bine făcut.”

Roberto K. / Web Developer

„Am conectat WhatsApp la fluxurile noastre în n8n în doar câteva minute. Fără cod, fără complicații — totul a funcționat din prima.”

Martin P. / Developer

„Whapi.Cloud a devenit o parte esențială a comunicării cu clienții. Am automatizat actualizări de produse, notificări de comenzi și mesaje de suport — fără șabloane sau aprobări Meta.”

Oscar T. / CTO

Bulă decorativă