Uau! Construiți-vă integrarea WhatsApp. Începeți gratuit. Înregistrați-vă acum
API WhatsApp pentru fișiere

Un fișier de chitanță într-un chat WhatsApp după plată

Cel care a plătit primește fișierul chitanței în loc să aștepte ca cineva să îl atașeze. Când plata este confirmată, backend-ul tău poate încărca fișierul și îl poate trimite prin Whapi.Cloud. Acest caz de utilizare arată integratorilor cum să implementeze fluxul cu API-ul WhatsApp.

Pornit de webhook-ul tău de plată Chat personal, nu un grup
O plată confirmată lângă un telefon al cărui chat WhatsApp arată fișierul chitanței primit de cel care a plătit.
Caz de utilizare

Când să folosești acest flux

Plata a fost deja confirmată

Folosește acest flux când declanșatorul este o plată finalizată, nu un coș abandonat.

Chitanța merge într-un chat personal

Folosește acest flux când cel care a plătit trebuie să primească chitanța ca fișier într-un chat personal, nu un fișier de grup și nu o invitație în grup.

Serviciul tău are deja fișierul

Folosește acest flux când webhook-ul de plată și propriul tău backend au deja fișierul chitanței și numărul celui care a plătit.

Chat WhatsApp pe un telefon care arată fișierul chitanței primit de cel care a plătit.
Experiența clientului

Cel care a plătit primește fișierul în chat

Înainte de automatizare, echipa descarcă chitanța și trimite fișierul pe WhatsApp manual, așa că cumpărătorul așteaptă și unele chitanțe nu pleacă niciodată.

După ce fluxul rulează, cel care a plătit vede fișierul chitanței în chatul personal WhatsApp. Integratorii construiesc acest rezultat cu API-ul WhatsApp.

Flux

De la o comandă plătită la un fișier de chitanță

1

Plata a fost confirmată

Backend-ul tău primește webhook-ul de plată confirmată și are deja fișierul chitanței și numărul celui care a plătit. Whapi.Cloud nu încasează plata.

2

Încarcă fișierul chitanței

POST /media

uploadMedia păstrează fișierul chitanței și întoarce id-ul media folosit de apelul următor.

3

Trimite documentul chitanței

POST /messages/document

sendMessageDocument trimite acel document către numărul celui care a plătit, într-un chat personal.

Ai nevoie să urmărești livrarea? Un răspuns reușit la trimitere nu înseamnă că cel care a plătit are deja fișierul chitanței. Află despre starea livrării →

Cerințe

Înainte să rulezi fluxul

Conectează numărul de WhatsApp care trimite chitanța și autentifică fiecare cerere cu tokenul API al acelui număr. Webhook-ul de plată și fișierul chitanței rămân în backend-ul tău.

Opțional — intră mai adânc în acest flux

Implementarea API

Apeluri care trimit fișierul

Backend-ul tău are deja comanda plătită, fișierul chitanței și numărul celui care a plătit. Păstrează fișierul întâi, apoi trimite-l ca document în acel chat personal.

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

Încarcă fișierul chitanței

Păstrează fișierul chitanței și ia id-ul media de care are nevoie trimiterea documentului.

curl --request POST \
     --url https://gate.whapi.cloud/media \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/pdf' \
     --data-binary @receipt.pdf
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/media",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => file_get_contents("receipt.pdf"),
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/pdf"
  ],
]);

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

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

with open("receipt.pdf", "rb") as receipt:
    response = requests.post(url, data=receipt, headers=headers)

print(response.text)
import { readFile } from 'node:fs/promises';

const body = await readFile('receipt.pdf');
const response = await fetch('https://gate.whapi.cloud/media', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/pdf',
  },
  body,
});

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

RequestBody body = RequestBody.create(new File("receipt.pdf"), MediaType.parse("application/pdf"));
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/media")
  .post(body)
  .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");
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/pdf");
request.AddParameter("application/pdf", File.ReadAllBytes("receipt.pdf"), ParameterType.RequestBody);
var response = await client.PostAsync(request);

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

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

func main() {
	file, _ := os.Open("receipt.pdf")
	defer file.Close()
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/media", file)
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/pdf")

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

Trimite documentul chitanței

Trimite acea chitanță ca document în chatul personal al celui care a plătit.

curl --request POST \
     --url https://gate.whapi.cloud/messages/document \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "447123456789",
  "media": "MEDIA_ID",
  "filename": "receipt.pdf"
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/document",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\",\"media\":\"MEDIA_ID\",\"filename\":\"receipt.pdf\"}",
  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/document"
payload = {
    "to": "447123456789",
    "media": "MEDIA_ID",
    "filename": "receipt.pdf"
}
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/document', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
    to: '447123456789',
    media: 'MEDIA_ID',
    filename: 'receipt.pdf',
  }),
});

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

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\",\"media\":\"MEDIA_ID\",\"filename\":\"receipt.pdf\"}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/document")
  .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/document");
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", media = "MEDIA_ID", filename = "receipt.pdf" });
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","media":"MEDIA_ID","filename":"receipt.pdf"}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/document", 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))
}
Livrare

Află când chitanța a fost livrată

Un răspuns reușit la trimitere nu înseamnă că cel care a plătit are deja chitanța. Primul status vizibil înainte de un webhook este pending. Schimbările ulterioare ajung doar pe statuses.post și statuses.put. Dacă statusul rămâne pending și nu trece la sent, delivered sau o confirmare ulterioară, mesajul nu a fost livrat. Verifică payload-ul și permisiunea contului de a trimite acel tip.

  • Un răspuns de la sendMessageDocument nu dovedește că cel care a plătit are fișierul.

  • Un pending care nu avansează înseamnă că chitanța nu a fost livrată.

  • Urmărește statuses.post și statuses.put pentru confirmările ulterioare.

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

Contactează suportul dacă ceva nu a mers
Când ceva se strică

Tratează eșecurile la fiecare pas

Dacă trimiterea documentului este respinsă sau nu este livrată, cel care a plătit nu primește chitanța. Reîncearcă trimiterea sau alertează echipa și nu număra chitanța ca livrată.

Plata a reușit, dar chitanța a eșuat?

Trimiterea documentului poate fi respinsă sau nelivrată după ce plata a fost deja confirmată. Reîncearcă sendMessageDocument sau alertează echipa și nu număra chitanța ca livrată. Clienții spun adesea că suportul nostru răspunde. Nu ezita să ceri ajutor.

Contactează suportul dacă ceva nu a mers

Depanează după pasul API

Status Ce înseamnă Ce să faci
400 Wrong request parameters
401 Need channel authorization for upload media
500 Internal Error
Status Ce înseamnă Ce să faci
400 Wrong request parameters
401 Need channel authorization for send message
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient
404 Media with specified id not found
413 Request media too large
415 Unsupported media type
429 Too many requests
500 Internal Error
FAQ

Întrebări pe care le pun integratorii

Nu. Chitanța merge într-un chat personal. Nu este un fișier pentru un grup existent.
Nu. Conținutul este fișierul chitanței, nu o invitație în grup.
Dacă trimiterea documentului este respinsă sau nu este livrată, reîncearcă trimiterea sau alertează echipa și nu număra chitanța ca livrată.
Nu. Declanșatorul este o plată finalizată, nu un coș abandonat.
Nu. Încarci chitanța pe care o ai deja și trimiți acel document. Trimiterea nu așteaptă un corp de mesaj scris dinainte și nu adaugă o taxă pentru acel corp.
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ă