Langsung ke konten utama

Kontak

API Kontak memungkinkan Anda memverifikasi nomor telepon di WhatsApp, mengambil informasi kontak, dan mendapatkan foto profil. Ini sangat berguna untuk memvalidasi nomor sebelum mengirim pesan dan memperkaya data kontak Anda. Semua endpoint kontak terikat pada instance tertentu:
/api/instances/{instanceId}/contacts/...

Memeriksa Keberadaan Nomor

Verifikasi apakah nomor telepon terdaftar di WhatsApp sebelum mengirim pesan. Ini mencegah pengiriman gagal dan panggilan API yang sia-sia.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/check?phone=5511999998888" \
  -H "X-Api-Key: YOUR_API_KEY"
Respons (nomor ada):
{
  "data": {
    "exists": true,
    "phone": "5511999998888",
    "chat_id": "[email protected]"
  }
}
Respons (nomor tidak ada):
{
  "data": {
    "exists": false,
    "phone": "5511999998888",
    "chat_id": null
  }
}
Gunakan endpoint ini untuk memvalidasi nomor sebelum mengirim pesan. Ini menghemat kuota pesan dan mencegah event webhook message.failed.

Mendapatkan Semua Kontak

Ambil seluruh daftar kontak untuk akun WhatsApp yang terhubung.
curl https://api.wappfy.io/api/instances/inst_abc123/contacts \
  -H "X-Api-Key: YOUR_API_KEY"
Respons:
{
  "data": [
    {
      "id": "[email protected]",
      "name": "Maria Silva",
      "short_name": "Maria",
      "push_name": "Mari",
      "is_business": false
    },
    {
      "id": "[email protected]",
      "name": "Carlos Oliveira",
      "short_name": "Carlos",
      "push_name": "Carlos",
      "is_business": true
    }
  ]
}

Field Kontak

FieldDeskripsi
idID WhatsApp kontak (nomor telepon + @s.whatsapp.net).
nameNama kontak yang tersimpan di buku alamat ponsel. Bisa null jika tidak disimpan.
short_nameNama pendek dari buku alamat.
push_nameNama yang ditetapkan kontak untuk diri mereka sendiri di WhatsApp.
is_businessApakah ini adalah akun WhatsApp Business.
Field name berasal dari buku alamat ponsel Anda. Jika kontak tidak disimpan, hanya push_name (ditetapkan oleh kontak itu sendiri) yang akan tersedia.

Mendapatkan Info Kontak

Ambil informasi detail tentang kontak tertentu.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/[email protected]" \
  -H "X-Api-Key: YOUR_API_KEY"
Respons:
{
  "data": {
    "id": "[email protected]",
    "name": "Maria Silva",
    "short_name": "Maria",
    "push_name": "Mari",
    "is_business": false
  }
}

Mendapatkan Foto Profil

Ambil URL foto profil WhatsApp kontak.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/[email protected]/profile-picture" \
  -H "X-Api-Key: YOUR_API_KEY"
Respons:
{
  "data": {
    "profile_picture_url": "https://pps.whatsapp.net/v/t61.24694-24/..."
  }
}
URL foto profil bersifat sementara dan kedaluwarsa setelah beberapa waktu. Jangan menyimpannya secara permanen — ambil URL baru saat diperlukan.
Jika kontak tidak memiliki foto profil atau telah membatasi visibilitas di pengaturan privasi, profile_picture_url akan bernilai null:
{
  "data": {
    "profile_picture_url": null
  }
}

Pola Umum

Validasi Sebelum Mengirim

Selalu periksa apakah nomor ada di WhatsApp sebelum mengirim pesan untuk menghindari kegagalan yang tidak perlu:
async function sendMessageSafely(instanceId, phone, text) {
  // Step 1: Check if the number is on WhatsApp
  const checkResponse = await fetch(
    `https://api.wappfy.io/api/instances/${instanceId}/contacts/check?phone=${phone}`,
    { headers: { "X-Api-Key": "YOUR_API_KEY" } }
  );
  const { data: checkResult } = await checkResponse.json();

  if (!checkResult.exists) {
    console.log(`${phone} is not on WhatsApp, skipping`);
    return null;
  }

  // Step 2: Send the message using the confirmed chat_id
  const sendResponse = await fetch(
    `https://api.wappfy.io/api/instances/${instanceId}/messages/send`,
    {
      method: "POST",
      headers: {
        "X-Api-Key": "YOUR_API_KEY",
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        chat_id: checkResult.chat_id,
        type: "text",
        text,
      }),
    }
  );

  return sendResponse.json();
}

Membangun Direktori Kontak

Ambil semua kontak dan perkaya dengan foto profil:
async function buildContactDirectory(instanceId) {
  // Get all contacts
  const contactsRes = await fetch(
    `https://api.wappfy.io/api/instances/${instanceId}/contacts`,
    { headers: { "X-Api-Key": "YOUR_API_KEY" } }
  );
  const { data: contacts } = await contactsRes.json();

  // Enrich with profile pictures (batch with delay to avoid rate limits)
  const enriched = [];
  for (const contact of contacts) {
    const picRes = await fetch(
      `https://api.wappfy.io/api/instances/${instanceId}/contacts/${contact.id}/profile-picture`,
      { headers: { "X-Api-Key": "YOUR_API_KEY" } }
    );
    const { data: pic } = await picRes.json();

    enriched.push({
      ...contact,
      profile_picture_url: pic.profile_picture_url,
    });

    // Small delay to respect rate limits
    await new Promise((r) => setTimeout(r, 200));
  }

  return enriched;
}
Saat mengambil foto profil untuk banyak kontak, tambahkan jeda antar permintaan agar tetap dalam batas laju. Contoh di atas menggunakan jeda 200ms.

Referensi Endpoint

MethodEndpointDeskripsi
GET/api/instances/{id}/contactsMelihat daftar semua kontak
GET/api/instances/{id}/contacts/check?phone={phone}Memeriksa apakah nomor ada di WhatsApp
GET/api/instances/{id}/contacts/{contactId}Mendapatkan info kontak
GET/api/instances/{id}/contacts/{contactId}/profile-pictureMendapatkan foto profil

Penanganan Error

Kode StatusDeskripsi
400Format nomor telepon tidak valid. Gunakan angka saja, dengan kode negara (misalnya, 5511999998888).
404Instance tidak ditemukan atau kontak tidak ditemukan.
429Batas laju terlampaui. Lihat Batas Laju.