Przejdź do głównej treści

Kontakty

API Kontaktow umozliwia weryfikacje numerow telefonow na WhatsApp, pobieranie informacji o kontaktach i pobieranie zdjec profilowych. Jest to szczegolnie przydatne do walidacji numerow przed wysylaniem wiadomosci i wzbogacania danych kontaktowych. Wszystkie endpointy kontaktow sa przypisane do konkretnej instancji:
/api/instances/{instanceId}/contacts/...

Sprawdzanie istnienia numeru

Zweryfikuj, czy numer telefonu jest zarejestrowany na WhatsApp przed wyslaniem wiadomosci. Zapobiega to nieudanym dostarczeniom i zmarnowanym wywolaniom API.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/check?phone=5511999998888" \
  -H "X-Api-Key: YOUR_API_KEY"
Odpowiedz (numer istnieje):
{
  "data": {
    "exists": true,
    "phone": "5511999998888",
    "chat_id": "[email protected]"
  }
}
Odpowiedz (numer nie istnieje):
{
  "data": {
    "exists": false,
    "phone": "5511999998888",
    "chat_id": null
  }
}
Uzyj tego endpointu do walidacji numerow przed wysylaniem wiadomosci. Oszczedza to limit wiadomosci i zapobiega zdarzeniom webhook message.failed.

Pobieranie wszystkich kontaktow

Pobierz pelna liste kontaktow dla polaczonego konta WhatsApp.
curl https://api.wappfy.io/api/instances/inst_abc123/contacts \
  -H "X-Api-Key: YOUR_API_KEY"
Odpowiedz:
{
  "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
    }
  ]
}

Pola kontaktu

PoleOpis
idIdentyfikator WhatsApp kontaktu (numer telefonu + @s.whatsapp.net).
nameNazwa kontaktu zapisana w ksiazce adresowej telefonu. Moze byc null, jesli nie jest zapisany.
short_nameKrotka nazwa z ksiazki adresowej.
push_nameNazwa, ktora kontakt sam ustawil na WhatsApp.
is_businessCzy jest to konto WhatsApp Business.
Pole name pochodzi z ksiazki adresowej Twojego telefonu. Jesli kontakt nie jest zapisany, dostepna bedzie tylko wartosc push_name (ustawiona przez samego kontaktu).

Informacje o kontakcie

Pobierz szczegolowe informacje o konkretnym kontakcie.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/[email protected]" \
  -H "X-Api-Key: YOUR_API_KEY"
Odpowiedz:
{
  "data": {
    "id": "[email protected]",
    "name": "Maria Silva",
    "short_name": "Maria",
    "push_name": "Mari",
    "is_business": false
  }
}

Zdjecie profilowe

Pobierz URL zdjecia profilowego WhatsApp kontaktu.
curl "https://api.wappfy.io/api/instances/inst_abc123/contacts/[email protected]/profile-picture" \
  -H "X-Api-Key: YOUR_API_KEY"
Odpowiedz:
{
  "data": {
    "profile_picture_url": "https://pps.whatsapp.net/v/t61.24694-24/..."
  }
}
Adresy URL zdjec profilowych sa tymczasowe i wygasaja po pewnym czasie. Nie przechowuj ich na stale — pobieraj swiezy URL, gdy jest potrzebny.
Jesli kontakt nie ma zdjecia profilowego lub ograniczyl widocznosc w ustawieniach prywatnosci, profile_picture_url bedzie rowne null:
{
  "data": {
    "profile_picture_url": null
  }
}

Typowe wzorce

Walidacja przed wyslaniem

Zawsze sprawdzaj, czy numer istnieje na WhatsApp przed wyslaniem wiadomosci, aby uniknac niepotrzebnych niepowodzen:
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();
}

Budowanie katalogu kontaktow

Pobierz wszystkie kontakty i wzbogac je o zdjecia profilowe:
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;
}
Przy pobieraniu zdjec profilowych dla wielu kontaktow dodaj opoznienie miedzy zapytaniami, aby nie przekroczyc limitow zapytan. Powyzszy przyklad uzywa opoznienia 200ms.

Informacje o endpointach

MetodaEndpointOpis
GET/api/instances/{id}/contactsLista wszystkich kontaktow
GET/api/instances/{id}/contacts/check?phone={phone}Sprawdz, czy numer istnieje na WhatsApp
GET/api/instances/{id}/contacts/{contactId}Informacje o kontakcie
GET/api/instances/{id}/contacts/{contactId}/profile-pictureZdjecie profilowe

Obsluga bledow

Kod statusuOpis
400Nieprawidlowy format numeru telefonu. Uzyj samych cyfr, z kodem kraju (np. 5511999998888).
404Instancja nie znaleziona lub kontakt nie znaleziony.
429Przekroczono limit zapytan. Zobacz Limity zapytan.