Wow! WhatsApp entegrasyonunuzu oluşturun. Ücretsiz başlayın. Şimdi Kaydol
Dosyalar için WhatsApp API

Ödeme sonrası bir WhatsApp sohbetinde makbuz dosyası

Ödeyen kişi, birinin dosyayı elle eklemesini beklemek yerine makbuz dosyasını alır. Ödeme onaylandığında backend'iniz bu dosyayı yükleyip Whapi.Cloud üzerinden gönderebilir. Bu kullanım örneği, entegratörlere akışı WhatsApp API ile nasıl kuracaklarını gösterir.

Ödeme webhook'unuz tetikler Kişisel sohbet, grup değil
Ödemesi onaylanmış bir siparişin yanında, WhatsApp sohbetinde ödeyen kişinin aldığı makbuz dosyasını gösteren bir telefon.
Kullanım örneği

Bu akışı ne zaman kullanın

Ödeme zaten onaylandı

Tetikleyici tamamlanmış bir ödemeyse bu akışı kullanın, terk edilmiş bir sepet değil.

Makbuz kişisel sohbete gider

Ödeyen kişi makbuzu kişisel sohbette dosya olarak almalıysa bu akışı kullanın; grup dosyası veya grup daveti değil.

Dosya zaten servisinizde

Ödeme webhook'unuz ve kendi backend'iniz makbuz dosyası ile ödeyen kişinin numarasını zaten tutuyorsa bu akışı kullanın.

Ödeyen kişinin aldığı makbuz dosyasını gösteren bir telefondaki WhatsApp sohbeti.
Müşteri deneyimi

Ödeyen kişi dosyayı sohbette alır

Otomasyondan önce ekip makbuzu indirir ve dosyayı WhatsApp'ta elle gönderir; alıcı bekler ve bazı makbuzlar hiç gitmez.

Akış çalıştıktan sonra ödeyen kişi makbuz dosyasını kişisel WhatsApp sohbetinde görür. Entegratörler bu sonucu WhatsApp API ile kurar.

Akış

Ödenmiş siparişten makbuz dosyasına

1

Ödeme onaylandı

Backend'iniz ödeme webhook'unu alır ve makbuz dosyası ile ödeyen kişinin numarası zaten ondadır. Whapi.Cloud ödemeyi tahsil etmez.

2

Makbuz dosyasını yükleyin

POST /media

uploadMedia makbuz dosyasını saklar ve sonraki çağrının kullandığı media id değerini döndürür.

3

Makbuz belgesini gönderin

POST /messages/document

sendMessageDocument bu belgeyi ödeyen kişinin numarasına, kişisel sohbete gönderir.

Teslimatı izlemeniz mi gerekiyor? Başarılı bir gönderim yanıtı, ödeyen kişinin makbuz dosyasını aldığı anlamına gelmez. Teslimat durumu hakkında bilgi alın →

Ön koşullar

Akışı çalıştırmadan önce

Makbuzu gönderen WhatsApp numarasını bağlayın ve her isteği o numaranın API belirteciyle doğrulayın. Ödeme webhook'u ve makbuz dosyası sizin backend'inizde kalır.

İsteğe bağlı — bu akışta derinleşin

API uygulaması

Dosyayı gönderen çağrılar

Backend'inizde ödenmiş sipariş, makbuz dosyası ve ödeyen kişinin numarası zaten var. Önce dosyayı saklayın, sonra bu kişisel sohbete belge olarak gönderin.

whapi.cloud üzerinde kaydolduktan sonra API belirtecinizi ücretsiz alın ve örneklerdeki Your_Token yerine bu belirteci kullanın.

Makbuz dosyasını yükleyin

Makbuz dosyasını saklayın ve belge gönderiminin ihtiyaç duyduğu media id değerini alın.

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))
}

Makbuz belgesini gönderin

Bu makbuzu ödeyen kişinin kişisel sohbetine belge olarak gönderin.

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))
}
Teslimat

Makbuzun ne zaman ulaştığını bilin

Başarılı bir gönderim yanıtı, makbuzun ödeyen kişiye ulaştığı anlamına gelmez. Webhook'tan önce görünen ilk durum pending değeridir. Sonraki değişiklikler yalnızca statuses.post ve statuses.put üzerinde gelir. Durum pending olarak kalır ve sent, delivered veya sonraki bir ack değerine geçmezse mesaj ulaşmamıştır. Yükü ve hesabın bu türü gönderme iznini kontrol edin.

  • sendMessageDocument yanıtı, dosyanın ödeyen kişide olduğunu kanıtlamaz.

  • İlerlemeyen bir pending, makbuzun ulaşmadığı anlamına gelir.

  • Sonraki ack değerleri için statuses.post ve statuses.put olaylarını izleyin.

Teslimat ve webhook hakkında ne okumalı

Bir şey ters giderse destekle iletişime geçin
Bir şey bozulduğunda

Hataları her adımda ele alın

Belge gönderimi reddedilirse veya ulaşmazsa ödeyen kişi makbuzu almaz. Gönderimi yeniden deneyin veya ekibi uyarın ve makbuzu ulaşmış saymayın.

Ödeme geçti, makbuz gitmedi mi?

Ödeme onaylandıktan sonra belge gönderimi reddedilebilir veya ulaşmayabilir. sendMessageDocument çağrısını yeniden deneyin veya ekibi uyarın ve makbuzu ulaşmış saymayın. Müşteriler desteğimizin yanıt verdiğini sık söyler. Yardım istemekten çekinmeyin.

Bir şey ters giderse destekle iletişime geçin

API adımına göre sorun giderin

Durum Ne anlama gelir Ne yapmalı
400 Wrong request parameters
401 Need channel authorization for upload media
500 Internal Error
Durum Ne anlama gelir Ne yapmalı
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
SSS

Entegratörlerin sorduğu sorular

Hayır. Makbuz kişisel sohbete gider. Mevcut bir gruba dosya değildir.
Hayır. İçerik makbuz dosyasıdır, grup daveti değil.
Belge gönderimi reddedilirse veya ulaşmazsa gönderimi yeniden deneyin veya ekibi uyarın ve makbuzu ulaşmış saymayın.
Hayır. Tetikleyici tamamlanmış bir ödemedir, terk edilmiş bir sepet değil.
Hayır. Elinizdeki makbuzu yükler ve bu belgeyi gönderirsiniz. Gönderim önceden yazılmış bir mesaj gövdesini beklemez ve bu gövde için ek ücret eklemez.
Desteklenen WhatsApp Özellikleri

WhatsApp otomasyonları oluşturmak için ihtiyacınız olan her şey

Whapi.Cloud; mesajlaşma, medya, gruplar, kanallar, webhook’lar ve daha fazlası dahil olmak üzere WhatsApp’ın tüm özelliklerine erişim sağlar. Özellik kısıtlamaları olmadan botlar, otomasyonlar ve entegrasyonlar oluşturun.

Geliştiricilerin tercihi

3.300+ geliştirici ve SaaS ekibi tarafından güveniliyor

Dünya genelindeki geliştiriciler, otomasyonlar, botlar, CRM entegrasyonları, toplu mesaj araçları ve gelişmiş WhatsApp iş akışları oluşturmak için Whapi.Cloud'a güveniyor. Altyapımız her ay yüksek kararlılıkla milyonlarca API isteği işliyor — ve bu sayı giderek artıyor.

Özellik simgesi

5,5K+

aktif API kanalı

Özellik simgesi

21M+

aylık API isteği

“Her şey basit, sezgisel ve kullanımı kolay. Dokümantasyon net ve gerekli tüm bilgiler elimizin altında. Harika iş.”

Roberto K. / Web Geliştirici

“WhatsApp'ı n8n kullanarak iş akışlarımıza sadece birkaç dakikada bağladık. Kod yok, karmaşa yok — her şey ilk denemede çalıştı.”

Martin P. / Geliştirici

“Whapi.Cloud, müşteri iletişimimizin önemli bir parçası haline geldi. Ürün güncellemelerini, sipariş bildirimlerini ve destek mesajlarını Meta şablonlarına veya onaylara ihtiyaç duymadan otomatikleştirdik.”

Oscar T. / CTO

Dekoratif balon