Your AI Connector Docs

API אנשי קשר

איש קשר הוא אדם בודד שאליו אתה שולח הודעות — השם שלו, מספר הטלפון, האימייל, הערוץ, תגיות, שדות מותאמים אישית, והרשימות והקמפיינים שאליהם הוא שייך. ה-API של אנשי הקשר מאפשר לך ליצור אנשי קשר, לחפש אותם, לעדכן אותם, לתייג אותם, לייבא אותם בכמות גדולה ולהסיר אותם, וכל זאת מבלי להשתמש בלוח הבקרה.

כל הנתיבים בדף זה הם יחסיים לכתובת ה-URL הבסיסית:

https://api.youraiconnector.com/v1

לכן /contacts משמעו https://api.youraiconnector.com/v1/contacts.

חדש ב-API? קרא תחילה את גישה ל-API — הוא מכסה כיצד ליצור את מפתח ה-API שלך, שלוש הדרכים לאימות, מגבלות קצב, ופורמט השגיאות. כל מה שמופיע בדף זה מניח שכבר יש לך מפתח API פעיל.


אודות מזהי אנשי קשר

לכל איש קשר יש מזהה (ID) ייחודי. המזהה שאתה מקבל בחזרה כאשר אתה יוצר איש קשר (ב-data.contactId) הוא אותו מזהה שבו תשתמש בכל מקום אחר — כדי לשלוף, לעדכן, לתייג, לשלוח הודעה או למחוק את איש הקשר הזה. שמור אותו פעם אחת והשתמש בו שוב.

אינך חייב ליצור איש קשר כדי לקבל את המזהה שלו. באפשרותך גם לחפש אותו לפי מספר טלפון או אימייל (ראה קבלת איש קשר), או לדפדף בין כל אנשי הקשר שלך (ראה רשימת אנשי קשר). כל אחת מהפעולות הללו מחזירה את אותו מזהה.


יצירת איש קשר

POST /contacts

מוסיף איש קשר חדש לחשבונך. נדרש מספר טלפון עם קידומת מדינה — אימייל בלבד אינו מספיק. כל השאר הוא אופציונלי.

באפשרותך להוסיף את איש הקשר החדש ישירות לרשימה אחת או יותר באמצעות listId (רשימה בודדת) או listIds (מערך). אם שניהם נשלחים, listIds גובר.

כל שדה שתשלח שאינו אחד משדות היצירה הסטנדרטיים המפורטים בטבלת השדות של יצירת איש קשר להלן (phoneNumber, firstName, lastName, email, channel, is_bot_active, is_private, lead_profile, listId, listIds, custom_fields) נשמר אוטומטית כשדה מותאם אישית — כך שמטען (payload) שטוח מכלי כמו Make או Zapier עובד ללא צורך בקינון. ניתן גם להעביר אובייקט custom_fields מפורש.

שדה נדרש תיאור
phoneNumber כן מספר הטלפון של איש הקשר, עם קידומת מדינה (למשל +15551234567).
firstName לא שם פרטי.
lastName לא שם משפחה.
email לא כתובת אימייל.
channel לא ערוץ הודעות. אחד מ-whatsapp, sms, whatsapp_web. ברירת המחדל היא whatsapp.
is_bot_active לא האם העוזר הווירטואלי (AI) משיב לאיש קשר זה. ברירת המחדל היא true.
is_private לא סמן את איש הקשר כפרטי. כאשר true, העוזר הווירטואלי כבוי עבורו. ברירת המחדל היא false.
lead_profile לא הערות בטקסט חופשי על הליד.
listId לא מזהה רשימה בודד להוספת איש הקשר אליה.
listIds לא מערך של מזהי רשימות להוספת איש הקשר אליהן (גובר על listId).
custom_fields לא אובייקט של שדות מפתח/ערך משלך. באפשרותך גם להעביר אותם כמפתחות ברמה העליונה.

cURL

curl -X POST "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+15551234567",
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane@example.com",
    "is_bot_active": true,
    "listIds": ["list123", "list456"]
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/contacts", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    phoneNumber: "+15551234567",
    firstName: "Jane",
    lastName: "Smith",
    email: "jane@example.com",
    is_bot_active: true,
    listIds: ["list123", "list456"],
  }),
});
const data = await res.json();
console.log(data.data.contactId);

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/contacts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "phoneNumber": "+15551234567",
        "firstName": "Jane",
        "lastName": "Smith",
        "email": "jane@example.com",
        "is_bot_active": True,
        "listIds": ["list123", "list456"],
    },
)
print(res.json()["data"]["contactId"])

תגובה

{
  "success": true,
  "data": {
    "message": "Successfully created new contact",
    "contactId": "contact_abc123",
    "listsAdded": ["list123", "list456"]
  }
}

המזהה של איש הקשר החדש נמצא ב-data.contactId. הרשימות שאליהן הוא נוסף מוחזרות ב-data.listsAdded.

כפילויות לא נוצרות. אם איש קשר עם אותו מספר טלפון כבר קיים, קריאת היצירה לא תיצור אותו ולא תחזיר אותו. התגובה חוזרת עם סטטוס HTTP 200 ו-error_code של 409 בגוף התגובה, לכן בצע הסתעפות לפי error_code במקום לפי סטטוס ה-HTTP:

{ "success": false, "error_code": 409, "error": "A contact with this phone number already exists for the current user." }

כדי לעבוד עם איש קשר קיים לאחר error_code של 409, חפש אותו באמצעות קבלת איש קשר לפי טלפון או אימיילGET /contacts?phoneNumber=... — והשתמש מחדש במזהה (ID) שהוא מחזיר.

איותים שונים ב-WhatsApp נחשבים לאותו מספר. במדינות מסוימות יש שני איותים תקפים לאותו קו נייד, ו-WhatsApp עשויה לדווח על כל אחד מהם: מקסיקו (+52… והגרסה הישנה +521…), ברזיל (עם או בלי הספרה התשיעית) וארגנטינה (עם או בלי ה-9 אחרי ה-+54). בדיקת הכפילויות בעת יצירה ו-GET /contacts?phoneNumber= תואמת את שני האיותים, כך שתקבל בחזרה את איש הקשר הקיים ללא קשר לצורה שבה שלחת אותו. ה-phone_number שנשמר באיש הקשר לעולם אינו נכתב מחדש.


קבלת איש קשר לפי טלפון או אימייל

GET /contacts?phoneNumber=... או GET /contacts?email=...

מחפש איש קשר בודד ומחזיר את אובייקט איש הקשר המלא והמועשר — כולל הרשימות, התגיות והקמפיינים שלו שנפתרו לזוגות { id, name }, בתוספת ההודעה האחרונה שהוחלפה.

העבר או את phoneNumber (בפורמט בינלאומי) או את email. אם לא תעביר אף אחד מהם, נקודת קצה זו תעבור למצב רשימת אנשי קשר במקום זאת.

cURL

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?phoneNumber=%2B15551234567&apiKey=YOUR_API_KEY"

JavaScript

const phone = encodeURIComponent("+15551234567");
const res = await fetch(`https://api.youraiconnector.com/v1/contacts?phoneNumber=${phone}`, {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.contact);

Python

import requests

res = requests.get(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"phoneNumber": "+15551234567"},
)
print(res.json()["contact"])

תגובה

{
  "success": true,
  "contactId": "contact_abc123",
  "contact": {
    "id": "contact_abc123",
    "firstName": "Jane",
    "lastName": "Smith",
    "email": "jane@example.com",
    "phoneNumber": "+15551234567",
    "channel": "whatsapp",
    "isBotActive": true,
    "isPrivate": false,
    "doNotDisturb": false,
    "lead_profile": null,
    "avatarUrl": "https://example.com/photo.jpg",
    "customFields": {},
    "lists": [{ "id": "list123", "name": "VIP customers" }],
    "tags": [{ "id": "tagHotLead", "name": "Hot lead" }],
    "campaigns": [{ "id": "campaign789", "name": "Spring promo" }],
    "currentCampaign": { "id": "campaign789", "name": "Spring promo" },
    "lastMessage": {
      "direction": "inbound",
      "body": "Sounds good, thanks!",
      "status": "received",
      "timestamp": "2026-06-09T10:21:00.000Z"
    }
  }
}

מזהה איש הקשר מוחזר גם ברמה העליונה (contactId) וגם בתוך האובייקט (contact.id). אם אין התאמה, תקבל 404 עם { "success": false, "message": "Contact not found" }.

avatarUrl היא תמונת הפרופיל של איש הקשר, שנלקחה מ-WhatsApp או מ-Meta כאשר הם שולחים לך הודעה. היא לקריאה בלבד: לא ניתן להגדיר אותה, והיא null עבור אנשי קשר שאין להם תמונה או שפונים אליך בערוץ שאינו משתף תמונה כזו. התייחס לקישור כאל זמני במקום לשמור אותו, מכיוון שחלק מקישורי התמונות הללו פגים ומתרעננים באופן אוטומטי. (בנקודת הקצה של הרשימה להלן, אותו ערך נקרא avatar_url.)

מספרי טלפון בכתובות URL. סימן + במחרוזת שאילתה חייב להיות מקודד כ-URL בתור %2B, אחרת הוא ייקרא כרווח. הדוגמאות לעיל עושות זאת עבורך.


קבלת איש קשר לפי מזהה (ID)

GET /contacts/{contactId}

כאשר יש לך כבר את המזהה (ID) של איש קשר, ניתן לשלוף אותו ישירות. מבנה התגובה זהה לזה של החיפוש לעיל.

cURL

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.contact);

Python

import requests

res = requests.get(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["contact"])

מזהה איש קשר שאינו קיים בחשבון שלך יחזיר 404.


קבלת נתוני סטטיסטיקה של איש קשר

GET /contacts/{contactId}/stats

מחזיר נתונים סטטיסטיים מצטברים של הודעות עבור איש קשר אחד: סך הכל, תשובות של בינה מלאכותית לעומת אנושיות, קרדיטים שנוצלו, וחותמות זמן של ההודעה הראשונה והאחרונה.

cURL

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.totalMessages, data.creditsUsed);

Python

import requests

res = requests.get(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["totalMessages"], data["creditsUsed"])

תגובה

{
  "success": true,
  "totalMessages": 48,
  "sent": 21,
  "received": 27,
  "aiReplies": 18,
  "humanReplies": 3,
  "creditsUsed": 34,
  "botMessageCount": 18,
  "firstMessageAt": "2026-05-01T09:00:00.000Z",
  "lastMessageAt": "2026-06-09T10:21:00.000Z"
}

botMessageCount הוא אותו מונה הודעות בינה מלאכותית שכפתור ה-“איפוס” בתוך האפליקציה עבור איש קשר מאפס. creditsUsed הוא סך הקרדיטים המצטבר עבור איש קשר זה, ולא רק המספרים של תגובה זו. מזהה איש קשר שאינו קיים בחשבונך יחזיר 404.


רשימת אנשי קשר

GET /contacts

קרא ל-GET /contacts ללא phoneNumber או email כדי לדפדף בין כל אנשי הקשר שלך, מהחדש לישן. כל דף מחזיר סיכומים תמציתיים של אנשי קשר (רשימות, תגיות וקמפיינים מוחזרים כמערכי מזהים במקום כאובייקטים מלאים) ו-next_cursor.

פרמטר שאילתה תיאור
limit גודל דף. ברירת המחדל היא 50, המקסימום הוא 100.
cursor הערך next_cursor מהדף הקודם. השמט אותו בדף הראשון.
listId אופציונלי. החזר רק אנשי קשר השייכים לרשימה זו.

כדי לעבור על כל הדפים: בצע את הקריאה הראשונה ללא סמן (cursor), ולאחר מכן המשך להעביר את ה-next_cursor שהוחזר כ-cursor. עצור כאשר next_cursor הוא null — זה אומר שאין יותר תוצאות.

cURL

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?limit=50&apiKey=YOUR_API_KEY"

# next page:
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?limit=50&cursor=contact_abc123&apiKey=YOUR_API_KEY"

JavaScript

async function listAllContacts() {
  const all = [];
  let cursor = null;
  do {
    const url = new URL("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts");
    url.searchParams.set("limit", "100");
    if (cursor) url.searchParams.set("cursor", cursor);
    const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
    const data = await res.json();
    all.push(...data.contacts);
    cursor = data.next_cursor;
  } while (cursor);
  return all;
}

Python

import requests

def list_all_contacts():
    all_contacts = []
    cursor = None
    while True:
        params = {"limit": 100}
        if cursor:
            params["cursor"] = cursor
        res = requests.get(
            "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
            headers={"X-API-Key": "YOUR_API_KEY"},
            params=params,
        )
        data = res.json()
        all_contacts.extend(data["contacts"])
        cursor = data["next_cursor"]
        if not cursor:
            break
    return all_contacts

תגובה

{
  "success": true,
  "contacts": [
    {
      "id": "contact_abc123",
      "first_name": "Jane",
      "last_name": "Smith",
      "email": "jane@example.com",
      "phone_number": "+15551234567",
      "channel": "whatsapp",
      "is_bot_active": true,
      "is_private": false,
      "do_not_disturb": false,
      "avatar_url": "https://example.com/photo.jpg",
      "custom_fields": {},
      "created_at": "2026-06-01T09:00:00.000Z",
      "list_ids": ["list123"],
      "tag_ids": ["tagHotLead"],
      "campaign_ids": ["campaign789"],
      "current_campaign_id": "campaign789"
    }
  ],
  "next_cursor": "contact_abc123"
}

הערה: סינון לפי listId שאינו קיים בחשבונך יחזיר 404. cursor לא תקין יחזיר 400.


ספירת אנשי קשר

GET /contacts/count

מחזירה כמה אנשי קשר תואמים למסנן מסוים, בתוספת פירוט לפי ערוץ, ללא צורך בדפדוף ביניהם. זוהי הקריאה המתאימה לכל שאלה מסוג “כמה יש” — עבור אריח בלוח בקרה, אוטומציה, או שאילתה ל-Champ. כל המסננים הם אופציונליים, ושילוב של כמה מהם יצמצם את הספירה (איש קשר חייב להתאים לכל אחד מהמסננים שתשלח).

פרמטר שאילתה תיאור
agentId רק אנשי קשר שהוקצו לסוכן AI זה. העבר none עבור אנשי קשר ללא סוכן מוקצה (אלו נענים על ידי סוכן ברירת המחדל של הערוץ).
channel רק אנשי קשר בערוץ זה, למשל whatsapp, messenger, instagram, sms, email, chat_widget.
tag רק אנשי קשר הנושאים תגית זו, לפי שם התגית (אין חשיבות לאותיות גדולות/קטנות). שם תגית שאינו קיים יחזיר 404.
listId רק אנשי קשר ברשימה זו.
botActive true או false — רק אנשי קשר שהעוזר ה-AI שלהם פעיל או כבוי.
status רק אנשי קשר עם סטטוס זה, למשל Lead.
rules אובייקט חוקי JSON מקודד ב-URL, המשתמש באותו מבנה כמו רשימה חכמה (ראה מבנה ה-smart_rules בהמשך). לא ניתן לשילוב עם המסננים האחרים.

שלח ללא מסננים כלל ותקבל את המספר הכולל של אנשי הקשר בחשבונך.

cURL

# everything
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count?apiKey=YOUR_API_KEY"

# only the contacts one agent handles on Messenger
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count?agentId=agent_xyz789&channel=messenger&apiKey=YOUR_API_KEY"

JavaScript

const url = new URL("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count");
url.searchParams.set("agentId", "agent_xyz789");
url.searchParams.set("channel", "messenger");

const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const data = await res.json();
console.log(data.total);

Python

import requests

res = requests.get(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"agentId": "agent_xyz789", "channel": "messenger"},
)
data = res.json()
print(data["total"])

תגובה

{
  "success": true,
  "total": 3423,
  "by_channel": { "messenger": 2744, "instagram": 667, "none": 12 },
  "filters": { "agentId": "agent_xyz789" }
}

by_channel מפצלת את אותו סך כולל לפי ערוץ; אנשי קשר שאינם נמצאים באף ערוץ נספרים תחת none. filters מחזירה את המסננים שהוחלו, כך שתוכל לוודא שהקריאה ביצעה את מה שהתכוונת.

הערה: שליחת rules יחד עם כל מסנן אחר, או ערך rules שאינו JSON תקין, תחזיר 400. שם תגית או מזהה רשימה שאינם קיימים בחשבונך יחזירו 404.


עדכון איש קשר

PUT /contacts/{contactId}

מעדכן איש קשר קיים. רק השדות שתכלול ישתנו — השאר בחוץ כל מה שאינך רוצה לשנות. עליך לשלוח לפחות שדה אחד, אחרת תקבל 400 (“אין שדות לעדכון”).

שדה תיאור
firstName שם פרטי.
lastName שם משפחה.
email כתובת אימייל.
is_bot_active האם העוזר הדיגיטלי משיב לאיש קשר זה.
is_private סימון כפרטי. הגדרת ערך זה ל-true גם מכבה את העוזר הדיגיטלי.
do_not_disturb השהיית פנייה אוטומטית לאיש קשר זה. בנוסף, מפסיק את העוזר הדיגיטלי מלהשיב.
follow_ups_disabled עצירת כל המעקבים האוטומטיים עבור איש קשר זה (מהירים, מחזוריים ולידים קרים) בזמן שהעוזר הדיגיטלי ממשיך להשיב להודעות שהם שולחים. שימושי לאחר שמישהו ביצע רכישה. נשאר כבוי עד שתגדיר זאת בחזרה ל-false.
lead_profile הערות ליד בטקסט חופשי.
custom_fields אובייקט של שדות מותאמים אישית. ממוזג לפי מפתח — רק המפתחות שאתה שולח נכתבים, שאר השדות המותאמים אישית הקיימים נשמרים. ניתן גם להעביר מפתחות של שדות מותאמים אישית ברמה העליונה.

cURL

curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "firstName": "Jane", "do_not_disturb": true }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
  method: "PUT",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ firstName: "Jane", do_not_disturb: true }),
});
const data = await res.json();
console.log(data.message);

Python

import requests

res = requests.put(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"firstName": "Jane", "do_not_disturb": True},
)
print(res.json()["message"])

תגובה

{
  "success": true,
  "message": "Contact updated successfully"
}

שדות מותאמים אישית ממוזגים, לא מוחלפים. שליחת { "custom_fields": { "tier": "gold" } } רק מגדירה את tier — כל שדה מותאם אישית אחר באיש הקשר יישאר בדיוק כפי שהיה. כדי להסיר שדה מותאם אישית לחלוטין מכל אנשי הקשר, השתמש ב-מחיקת שדה מותאם אישית.


הוספה או הסרה של תגיות

POST /contacts/{contactId}/tags

מוסיף ו/או מסיר תגיות מאיש קשר בודד בקריאה אחת. העבר מזהי תגיות ב-addTagIds וב-removeTagIds. לפחות אחד מהשניים חייב להיות לא ריק.

התגיות חייבות כבר להיות קיימות בחשבונך — צור אותן תחילה דרך נקודת הקצה של תגיות. אם איש הקשר או אחת התגיות המוזכרות אינם קיימים, תקבל 404.

שדה תיאור
addTagIds מערך של מזהי תגיות להוספה לאיש הקשר.
removeTagIds מערך של מזהי תגיות להסרה מאיש הקשר.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "addTagIds": ["tagHotLead"], "removeTagIds": ["tagColdLead"] }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    addTagIds: ["tagHotLead"],
    removeTagIds: ["tagColdLead"],
  }),
});
const data = await res.json();
console.log(data.added, data.removed);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"addTagIds": ["tagHotLead"], "removeTagIds": ["tagColdLead"]},
)
data = res.json()
print(data["added"], data["removed"])

תגובה

{
  "success": true,
  "contact_id": "contact_abc123",
  "added": 1,
  "removed": 1
}

ניהול ספריית התגיות שלך

נקודות קצה אלו מנהלות את התגית עצמה — שינוי שם או מחיקה שלה מהחשבון שלך — בניגוד להחלה או הסרה של תגית מאיש קשר אחד (ראה הוספה או הסרה של תגיות לעיל). לכל תגית בחשבונך יש מזהה (tagId): זה שמוצג במנהל התגיות בלוח הבקרה שלך, וזה שמוחזר כ-data.tag_id כאשר אתה יוצר תגית עם POST /tags וגוף JSON של { "name": "..." } (ללא phoneNumber, email, או contactId).

עדכון תגית

PUT /tags/{tagId}

שלח רק את השדות שברצונך לשנות.

שדה תיאור
name שם התגית.
curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags/tagHotLead?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Hot lead (Q3)" }'

תגובה

{ "success": true, "tag_id": "tagHotLead" }

tagId שאינו קיים בחשבונך יחזיר 404.

מחיקת תגית

DELETE /tags/{tagId}

מוחק תגית אחת לפי מזהה. פעולה זו אינה ניתנת לביטול — אנשי קשר הנושאים את התגית פשוט יאבדו אותה. מחיקת תגית שכבר אינה קיימת (או מעולם לא הייתה קיימת) תחזיר 200 עם deleted: 0 במקום 404, מכיוון שאין מה למנות.

curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags/tagColdLead?apiKey=YOUR_API_KEY"

תגובה

{ "success": true, "deleted": 1 }

מחיקת מספר תגיות בבת אחת

DELETE /tags

שדה תיאור
tagIds מערך של מזהי תגיות למחיקה (עד 1000).
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "tagIds": ["tagColdLead", "tagUnsubscribed"] }'

תגובה

{ "success": true, "deleted": 2 }

מזהים שאינם קיימים, או ששייכים לחשבון אחר, ידולגו בשקט ולא ייספרו ב-deleted.


הגדרת דגל בכמות גדולה

POST /contacts/bulk-flag

מגדיר דגל בוליאני אחד עבור אנשי קשר רבים בבת אחת. עד 500 מזהי אנשי קשר לכל בקשה. מזהים שאינם קיימים בחשבונך ידולגו וייספרו ב-skipped.

שדה תיאור
contactIds מערך של מזהי אנשי קשר לעדכון (מקסימום 500).
field איזה דגל להגדיר. אחד מ-bot_active (עוזר AI מופעל/כבוי), dnd (השהיית פנייה אוטומטית), spam, private.
value הערך הבוליאני להגדרת הדגל.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contactIds": ["contactId1", "contactId2"],
    "field": "bot_active",
    "value": false
  }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    contactIds: ["contactId1", "contactId2"],
    field: "bot_active",
    value: false,
  }),
});
const data = await res.json();
console.log(data.updated, data.skipped);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "contactIds": ["contactId1", "contactId2"],
        "field": "bot_active",
        "value": False,
    },
)
data = res.json()
print(data["updated"], data["skipped"])

תגובה

{
  "success": true,
  "updated": 2,
  "skipped": 0
}

ייבוא מרוכז של אנשי קשר

POST /contacts/import

יוצר עד 500 אנשי קשר בקריאה אחת מתוך מערך JSON. כל רשומה זקוקה ל-phone_number בפורמט בינלאומי; כל השאר אופציונלי. רשומות עם מספרי טלפון לא תקינים או ערוצים שאינם נתמכים מדלגים עליהן (הן לא נוצרות), וכל רשומה שנדלגה מדווחת עם האינדקס והסיבה שלה — כך שתוכל לתקן רק את הכשלים ולנסות שוב.

מספרי טלפון שכבר קיימים בחשבונך נדלגים כ-duplicate כברירת מחדל. שלח updateExisting: true כדי לעדכן את אנשי הקשר האלה במקום זאת: השדות הקיימים ברשומה דורסים את פרטי איש הקשר (first_name, last_name, email, lead_profile, ו-custom_fields ממוזגים מפתח לפי מפתח), tags מתווספים, ואיש הקשר מתווסף ל-listId. ערוץ, מספר טלפון ודגלי בוט לעולם לא משתנים באיש קשר קיים.

באפשרותך להוסיף באופן אופציונלי כל איש קשר מיובא (או מעודכן) לרשימה עם listId, להגדיר defaultChannel לרשומות שלא מציינות אחד כזה, ולתייג רשומות עם tags (שמות תגיות — תגיות חסרות נוצרות, קיימות מותאמות ללא תלות באותיות רישיות/קטנות).

שדות ברמה העליונה

שדה חובה תיאור
contacts כן מערך של רשומות אנשי קשר (מקסימום 500).
listId לא רשימה להוספת כל איש קשר מיובא (ומעודכן). חייבת להיות רשימה בחשבונך.
defaultChannel לא ערוץ המוחל על רשומות שמשמיטות את channel. אחד מ-whatsapp, sms, whatsapp_web. ברירת המחדל היא whatsapp.
updateExisting לא true לעדכון אנשי קשר שמספר הטלפון שלהם כבר קיים במקום לדלג עליהם כ-duplicate. ברירת המחדל היא false.

שדות לכל רשומה

שדה חובה תיאור
phone_number כן מספר טלפון בפורמט בינלאומי (+ מוביל מתווסף אם חסר).
first_name לא שם פרטי.
last_name לא שם משפחה.
email לא כתובת אימייל.
channel לא אחד מ-whatsapp, sms, whatsapp_web. חוזר ל-defaultChannel במקרה של חוסר.
is_bot_active לא האם עוזר ה-AI משיב. ברירת המחדל היא true.
is_private לא סימון כפרטי. ברירת המחדל היא false.
lead_profile לא הערות ליד בטקסט חופשי.
custom_fields לא אובייקט של מפתחות וערכים של שדות מותאמים אישית.
tags לא מערך של שמות תגיות (גם מחרוזת "a; b" בודדת עובדת). תגיות שלא קיימות נוצרות; קיימות מותאמות ללא תלות באותיות רישיות/קטנות. מקסימום 25 לרשומה.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contacts": [
      { "phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee", "tags": ["vip", "newsletter"] },
      { "phone_number": "+12025551235", "first_name": "Bob" }
    ],
    "listId": "list123",
    "defaultChannel": "whatsapp_web",
    "updateExisting": true
  }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    contacts: [
      { phone_number: "+12025551234", first_name: "Ann", last_name: "Lee", tags: ["vip", "newsletter"] },
      { phone_number: "+12025551235", first_name: "Bob" },
    ],
    listId: "list123",
    defaultChannel: "whatsapp_web",
    updateExisting: true,
  }),
});
const data = await res.json();
console.log(`Imported ${data.imported}, updated ${data.updated}, skipped ${data.skipped.length}`);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "contacts": [
            {"phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee", "tags": ["vip", "newsletter"]},
            {"phone_number": "+12025551235", "first_name": "Bob"},
        ],
        "listId": "list123",
        "defaultChannel": "whatsapp_web",
        "updateExisting": True,
    },
)
data = res.json()
print(f"Imported {data['imported']}, updated {data['updated']}, skipped {len(data['skipped'])}")

תגובה

{
  "success": true,
  "imported": 2,
  "contact_ids": ["contact_abc123", "contact_def456"],
  "updated": 0,
  "updated_contact_ids": [],
  "skipped": []
}

אם לא ניתן ליצור רשומות מסוימות, הן יופיעו ב-skipped עם הסיבה (כאן ללא updateExisting, לכן המספר הקיים נדלג):

{
  "success": true,
  "imported": 1,
  "contact_ids": ["contact_abc123"],
  "updated": 0,
  "updated_contact_ids": [],
  "skipped": [
    { "index": 1, "phone_number": "+12025551235", "reason": "duplicate" }
  ]
}

עם updateExisting: true אותה בקשה מדווחת על איש הקשר הקיים תחת updated / updated_contact_ids במקום זאת.

סיבות אפשריות לדילוג: invalid_record, missing_phone_number, invalid_phone_number, invalid_channel, duplicate_in_request, duplicate, contact_limit_reached, create_failed.

מגבלות תוכנית. אם מגבלת אנשי הקשר בתוכנית שלך אינה מאפשרת כמות כזו של אנשי קשר חדשים, הבקשה כולה נדחית מראש עם 403. אם המגבלה מגיעה במהלך התהליך, הרשומות הנותרות יוחזרו כרשומות שדלגו עליהן עם הסיבה contact_limit_reached.


ייבוא אנשי קשר מקובץ CSV

עבור ייבוא גדול יותר ממה ש-ייבוא מרוכז תומך בו (עד כ-50,000 שורות), יש להוסיף לתור משימת ייבוא אסינכרונית עבור קובץ CSV שכבר נמצא באחסון החשבון שלך, ולאחר מכן לבצע תשאול (poll) עד לסיומה.

התחלת הייבוא

POST /contacts/import-csv

שדה חובה תיאור
csvStoragePath כן נתיב האחסון של קובץ ה-CSV, תחת users/{your account id}/imports/, שמסתיים ב-.csv.
listName כן יוצר (או משתמש מחדש ב-) רשימה עם שם זה ומוסיף אליה כל איש קשר מיובא.
existingListRefs לא מערך של מזהי רשימות קיימות שגם אליהן יתווסף כל איש קשר מיובא.
defaultChannel לא ערוץ המוחל על שורות שלא מציינות ערוץ.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "csvStoragePath": "users/abc123/imports/leads.csv",
    "listName": "Webinar signups"
  }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    csvStoragePath: "users/abc123/imports/leads.csv",
    listName: "Webinar signups",
  }),
});
const data = await res.json();
console.log(data.job_id);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "csvStoragePath": "users/abc123/imports/leads.csv",
        "listName": "Webinar signups",
    },
)
job_id = res.json()["job_id"]

תגובה (202 — הייבוא בתור, טרם הסתיים)

{
  "success": true,
  "job_id": "csvimp_abc123",
  "status": "queued"
}

העברת הקובץ לאחסון. נקודת קצה זו מתחילה ועוקבת אחר משימת הייבוא; היא אינה מקבלת העלאה בעצמה. קובץ ה-CSV צריך כבר להימצא ב-csvStoragePath לפני הקריאה אליה — כלי ייבוא ה-CSV של לוח הבקרה מבצע זאת כצעד ראשון.

בדיקת סטטוס משימת הייבוא

GET /contacts/import-csv/{jobId}

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv/csvimp_abc123?apiKey=YOUR_API_KEY"

תגובה

{
  "success": true,
  "job_id": "csvimp_abc123",
  "status": "completed",
  "imported": 812,
  "updated": 0,
  "skipped": 14,
  "errors": [],
  "error_message": null
}

status עובר דרך queuedprocessingcompleted, או failed עם הסיבה ב-error_message. jobId שאינו קיים בחשבונך יחזיר 404.


ייצוא אנשי קשר

מפעיל ייצוא CSV אסינכרוני של אנשי הקשר שלך ומחזיר משימה שעליך לתשאל כדי לבדוק את השלמתה.

התחלת הייצוא

POST /contacts/export

שדה חובה תיאור
listId לא ייצוא אנשי קשר השייכים לרשימה זו בלבד.
contactIds לא ייצוא מזהי אנשי קשר ספציפיים אלו בלבד.

השארת שני השדות ריקים תייצא את כל אנשי הקשר בחשבון שלך.

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "listId": "list123" }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ listId: "list123" }),
});
const data = await res.json();
console.log(data.job_id);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"listId": "list123"},
)
job_id = res.json()["job_id"]

תגובה (202 — הייצוא בתור)

{
  "success": true,
  "job_id": "export_abc123",
  "status": "queued"
}

סקירת מצב משימת הייצוא

GET /contacts/export/{jobId}

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export/export_abc123?apiKey=YOUR_API_KEY"

תגובה

{
  "success": true,
  "job_id": "export_abc123",
  "status": "completed",
  "export_id": "exp_xyz789",
  "contact_count": 812,
  "error_message": null
}

ברגע ש-status יהיה "completed", תקבל export_id ו-contact_count. הורדת קובץ ה-CSV שנוצר מתבצעת מדף הייצוא בלוח הבקרה שלך.


שלח הודעה לאיש קשר

POST /contacts/{contactId}/send-message

שולח הודעה לאיש קשר קיים בערוץ שבו הוא כבר נמצא. ההודעה מתווספת לתור ונשלחת ברקע — התגובה מאשרת שהיא התקבלה, לא שהיא כבר נמסרה.

שדה נדרש תיאור
body כן טקסט ההודעה לשליחה.
mediaUrl לא כתובת URL של קובץ מדיה לצירוף.
mediaContentType לא סוג MIME של המדיה המצורפת (למשל image/jpeg).

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "body": "Hi! Your appointment is confirmed." }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ body: "Hi! Your appointment is confirmed." }),
});
const data = await res.json();
console.log(data.messageId);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"body": "Hi! Your appointment is confirmed."},
)
print(res.json()["messageId"])

תגובה

{
  "success": true,
  "messageId": "aB3dE5fG7hI9jK1lM2nO",
  "contactId": "contact_abc123",
  "channel": "whatsapp",
  "message": "Message created successfully. Delivery is being processed."
}

לא ניתן לשלוח כרגע? אם איש הקשר הפעיל מצב ‘נא לא להפריע’ או מצב פרטי, או שאינו נמצא בערוץ שיכול לקבל הודעות יוצאות, הבקשה תידחה עם 422 ו-error הסברי.

לשליחה לפי מספר טלפון, מזהה אינסטגרם או זהות ערוץ אחרת במקום לפי מזהה איש קשר — ולמידע נוסף על הודעות באופן כללי — עיינו ב-Messages API.


הקצאת סוכן בינה מלאכותית לאיש קשר

POST /contacts/{contactId}/assign-agent

מעביר שיחה קיימת לסוכן בינה מלאכותית אחר, החל מההודעה הבאה ואילך. פעולה זו זהה ל-הקצאת סוכן בינה מלאכותית בתפריט הצ’אט, וזהה לשלב שבו משתמשת הפעולה הקצאת סוכן בינה מלאכותית או קמפיין באוטומציות.

שדה חובה תיאור
agentId כן המזהה (ID) של סוכן הבינה המלאכותית שאמור להשתלט על השיחה, או null כדי לנקות את ההקצאה כך שהשיחה תחזור לתיבת הדואר הנכנס של הצוות שלך.
triggerAIResponse לא true גורם לסוכן שהוקצה זה עתה להשיב להודעות האחרונות שלא נענו של איש הקשר באופן מיידי. ברירת המחדל היא false.

זהירות עם triggerAIResponse: true — פעולה זו שולחת לאיש הקשר הודעה באותו רגע, לכן השתמש בה רק כאשר ברצונך שהם יקבלו הודעה עכשיו. ב-Messenger וב-Instagram הודעה זו תיכשל אם איש הקשר כתב לך לאחרונה לפני יותר מ-24 שעות.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "agentId": "agent_xyz789" }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ agentId: "agent_xyz789" }),
});
const data = await res.json();
console.log(data.data.agentId);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"agentId": "agent_xyz789"},
)
print(res.json()["data"]["agentId"])

תגובה

{
  "success": true,
  "data": {
    "contactId": "contact_abc123",
    "agentId": "agent_xyz789",
    "aiResponseTriggered": false
  }
}

הסוכן חייב להשתייך לאותו חשבון כמו איש הקשר; אחרת הבקשה תידחה עם 404 או 403. ניתן למצוא מזהי סוכנים בדף סוכני בינה מלאכותית (ה-URL של כל סוכן מסתיים במזהה שלו).


הקצאת סוכן AI למספר רב של אנשי קשר

POST /contacts/bulk-assign-agent

מעבירה שיחות רבות לסוכן AI אחר בקריאה אחת — או מנקה את ההקצאה עבור כולם עם null. זהו שינוי ניתוב בלבד: לא נשלחת הודעה והסוכן לא משיב לאף אחד. כל איש קשר פשוט מקבל את הסוכן החדש בפעם הבאה שהוא כותב. (זו הסיבה שאין כאן triggerAIResponse).

שדה נדרש תיאור
agentId כן סוכן ה-AI שצריך להשתלט, או null כדי לנקות את ההקצאה.
contactIds אחד משלושתם עד 500 מזהי אנשי קשר להעברה.
filter אחד משלושתם בחר את אנשי הקשר בשרת במקום לרשום אותם, מהחדש לישן. מקבל את אותם מפתחות כמו מסנני נקודת הקצה של הספירה: agentId (או none), channel, tag, listId, botActive, status.
rules אחד משלושתם אובייקט חוקי רשימה חכמה — ראה מבנה ה-smart_rules.
limit לא כמה אנשי קשר להעביר בקריאה זו כאשר אתה בוחר עם filter או rules. 1 עד 500, ברירת המחדל היא 500.

שלח בדיוק אחד מ-contactIds, filter או rules.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agentId": "agent_xyz789",
    "filter": { "agentId": "agent_abc123", "channel": "messenger" }
  }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    agentId: "agent_xyz789",
    filter: { agentId: "agent_abc123", channel: "messenger" },
  }),
});
const data = await res.json();
console.log(data.updated, data.remaining);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "agentId": "agent_xyz789",
        "filter": {"agentId": "agent_abc123", "channel": "messenger"},
    },
)
data = res.json()
print(data["updated"], data["remaining"])

תגובה

{
  "success": true,
  "agentId": "agent_xyz789",
  "matched": 3415,
  "updated": 500,
  "skipped": 0,
  "remaining": 2915,
  "filters": { "agentId": "agent_abc123" }
}

matched הוא כמה אנשי קשר נמצאו בבחירה בסך הכל, updated כמה הועברו על ידי קריאה זו, skipped כמה מהמזהים ששלחת לא נמצאו בחשבונך, ו-remaining כמה עדיין תואמים כעת לאחר סיום הקריאה.

העברת כולם. מכיוון שקריאה מעבירה לכל היותר 500 אנשי קשר, קבוצה גדולה דורשת מספר קריאות. השתמש במסנן שמפסיק להתאים לאיש קשר ברגע שהוא הועבר — למשל filter: { "agentId": "agent_abc123" } בזמן הקצאה ל-agent_xyz789 — וחזור על אותה קריאה בדיוק עד ש-remaining יחזור כ-0. כאשר אתה מעביר contactIds במקום זאת, remaining הוא תמיד 0.


שיוך איש קשר למחלקה

POST /contacts/{contactId}/department

“שייך ליד זה למכירות” — מתייק איש קשר תחת מחלקה בעלת שם, וברירת המחדל היא להעביר אותו למי שבאותה מחלקה יש כרגע הכי פחות אנשי קשר. פעולה זו נפרדת מ-שיוך סוכן בינה מלאכותית: מחלקה עונה על השאלה “איזה צוות אחראי על זה”, סוכן עונה על השאלה “איזו בינה מלאכותית עונה על זה”, והגדרה של אחד לעולם לא מוחקת את השני.

שדה חובה תיאור
department_id כן המחלקה שתחתיה יש לתייק את איש הקשר. העבר null כדי לנקות זאת.
hand_to_member לא העבר את איש הקשר גם לאדם העמוס פחות באותה מחלקה. ברירת המחדל היא true. לעולם לא יבוצע שיוך מחדש לאיש קשר שכבר שייך למישהו.

cURL

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "department_id": "dept_sales" }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department", {
  method: "POST",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ department_id: "dept_sales" }),
});
const data = await res.json();
console.log(data.assigned_to);

Python

import requests

res = requests.post(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"department_id": "dept_sales"},
)
print(res.json()["assigned_to"])

תגובה

{
  "success": true,
  "department_id": "dept_sales",
  "assigned_to": "member_uid_123"
}

assigned_to הוא null כאשר איש הקשר כבר היה שייך למישהו, או שהעברת hand_to_member: false.


קישור איש קשר בין ערוצים

“המשך ב-WhatsApp” (או ב-SMS) מוצא או יוצר את איש הקשר של אדם זה בערוץ מבוסס טלפון אחר ומקשר בין השניים, כך ששאר האפליקציה תזהה אותם כאותו אדם.

קישור לערוץ אחר

POST /contacts/{contactId}/link-channel

שדה חובה תיאור
channel כן הערוץ לקישור. אחד מתוך whatsapp, whatsapp_web, sms.
phoneNumber לא מספר טלפון לשימוש בערוץ החדש. כברירת מחדל משתמש במספר של איש הקשר המקורי.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/link-channel?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "channel": "sms" }'

תגובה

{
  "success": true,
  "data": {
    "contact_id": "contact_def456",
    "person_id": "person_xyz789",
    "created": true
  }
}

created מציין אם נוצר איש קשר חדש עבור ערוץ היעד או שנמצא איש קשר קיים וקושר. קריאה לפעולה זו פעם שנייה היא בטוחה — היא מחזירה את אותו contact_id עם created: false במקום ליצור כפילות.

422 פירושו שהחשבון אינו יכול לבצע קישור זה כרגע: איש הקשר כבר נמצא במשפחת ערוצים זו, אין לו מספר טלפון לשימוש, או שאין שולח מחובר עבור ערוץ היעד. 409 פירושו ששני אנשי הקשר כבר מקושרים לשני אנשים שונים — יש לבטל תחילה את הקישור של אחד מהם.

הצגת רשימת השיחות המקושרות של איש קשר

GET /contacts/{contactId}/linked

מחזיר את השיחות האחרות השייכות לאותו אדם כמו איש קשר זה. איש קשר שאינו מקושר יחזיר מערך ריק, לא 404 — “לאדם זה אין ערוצים אחרים” הוא מצב תקין.

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/linked?apiKey=YOUR_API_KEY"

תגובה

{
  "success": true,
  "data": [
    {
      "contact_id": "contact_def456",
      "channel": "sms",
      "custom_channel": null,
      "first_name": "Jane",
      "last_name": "Smith",
      "phone_number": "+15551234567",
      "last_message": "Sounds good, thanks!",
      "last_message_timestamp": "2026-06-09T10:21:00.000Z",
      "linked_from": {
        "contact_id": "contact_abc123",
        "channel": "whatsapp",
        "linked_at": "2026-06-01T09:00:00.000Z",
        "reason": "continue_on_channel"
      }
    }
  ]
}

ביטול קישור של איש קשר

DELETE /contacts/{contactId}/link

מסיר את איש הקשר הזה מהאדם שאליו הוא משויך, באופן חד-צדדי — כל אנשי הקשר האחרים שעדיין מקושרים לאותו אדם שומרים על הקישור שלהם, כך שביטול קישור של אחד מתוך שלושה אינו מפרק את הקבוצה.

curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/link?apiKey=YOUR_API_KEY"

תגובה

{ "success": true }

שליפת תמונת פרופיל של איש קשר

POST /contacts/{contactId}/profile-pic

שולף (ומשמור במטמון) את תמונת הפרופיל של איש הקשר ב-WhatsApp או ב-Meta לפי דרישה — אותה תמונה שמוחזרת כ-avatarUrl ב-קבלת איש קשר, לאחר רענון.

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/profile-pic?apiKey=YOUR_API_KEY"

תגובה

{
  "success": true,
  "avatar_url": "https://example.com/photo.jpg",
  "cached": false
}

cached: true פירושו שה-URL הגיע משליפה אחרונה ולא מחיפוש טרי אצל הספק — תמונות נשמרות במטמון למשך 7 ימים, ואיש קשר שהספק מדווח שאין לו תמונה זמינה נשמר במטמון כלא זמין למשך 24 שעות. כאשר אין תמונה לשליפה, avatar_url מושמט ו-message מסביר מדוע.


תיוג אוטומטי של אנשי קשר באמצעות בינה מלאכותית

מריץ את חוקי התיוג של החשבון שלך על היסטוריית השיחות המלאה של איש קשר אחד או יותר ומחיל (או מסיר) תגיות בדיוק כמו התיוג בזמן אמת שפועל במהלך צ’אט חי — אותם חוקים, אותה עלות קרדיט לכל תגית.

התחלת הרצה

POST /contacts/auto-tag

שדה חובה תיאור
scope כן "contacts" כדי לתייג אנשי קשר ספציפיים, או "agent" כדי לתייג כל שיחה שמטופלת כרגע על ידי סוכן בינה מלאכותית אחד.
contact_ids חובה כאשר scope הוא "contacts" מערך של מזהי אנשי קשר, 1 עד 500.
agent_id חובה כאשר scope הוא "agent" סוכן הבינה המלאכותית שהשיחות שלו יתויגו. כאשר scope הוא "contacts", שדה זה הוא אופציונלי ורק מצמצם את חוקי התיוג של הסוכן שיופעלו.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/auto-tag?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scope": "contacts", "contact_ids": ["contact_abc123", "contact_def456"] }'

עבור איש קשר יחיד, ההרצה מתבצעת באופן מקוון (inline) ומחזירה את התוצאה מיד:

{ "success": true, "result": { "tags_applied": 2, "tags_removed": 0 } }

שני אנשי קשר או יותר (או scope: "agent") רצים כמשימת רקע ומחזירים 202 באופן מיידי:

{ "success": true, "run_id": "m1x2y3-a1b2c3d4", "total": 214 }

בדיקת מצב הרצה (Poll)

GET /contacts/auto-tag/run

מחזיר את ההרצה הנוכחית (או האחרונה ביותר) של החשבון, כך שתוכל לבדוק את ההתקדמות מבלי לעקוב אחר run_id בעצמך.

curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/auto-tag/run?apiKey=YOUR_API_KEY"

תגובה

{
  "success": true,
  "run": {
    "run_id": "m1x2y3-a1b2c3d4",
    "status": "running",
    "total": 214,
    "processed": 58,
    "tagged_contacts": 12,
    "tags_applied": 15,
    "tags_removed": 2,
    "credits_charged": 15
  }
}

run הוא null כאשר החשבון מעולם לא התחיל הרצה. status עובר מ-"running" ל-"completed" או ל-"failed".

רק הרצה מרוכזת אחת יכולה להיות בתהליך עבור חשבון בכל פעם — התחלת הרצה שנייה בזמן שאחרת פועלת תחזיר 409 עם error_code: "auto_tag_run_in_progress". סיום הקרדיטים בהרצה של איש קשר יחיד יחזיר 402 עם error_code: "insufficient_credits"; הרצה מרוכזת לעומת זאת תעצור את עצמה מוקדם ותדווח עד היכן הגיעה ב-run.


מחיקת איש קשר

DELETE /contacts/{contactId}

מוחק לצמיתות איש קשר אחד לפי מזהה, יחד עם היסטוריית ההודעות שלו. פעולה זו אינה ניתנת לביטול. כדי למחוק מספר אנשי קשר בקריאה אחת, השתמש ב-מחיקת אנשי קשר להלן.

cURL

curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
  method: "DELETE",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.success);

Python

import requests

res = requests.delete(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["success"])

תגובה

{
  "success": true
}

מזהה איש קשר שאינו קיים בחשבונך, או ששייך לחשבון אחר, יחזיר 404.


מחיקת אנשי קשר

DELETE /contacts

מוחק לצמיתות איש קשר אחד או יותר לפי מזהה בקריאה אחת (עד 500 מזהים). מזהים שאינם קיימים בחשבון שלכם ידולגו ויימנו ב-skipped. לא ניתן לבטל פעולה זו.

שדה תיאור
contactIds מערך של מזהי אנשי קשר למחיקה (מקסימום 500).

cURL

curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "contactIds": ["contactId1", "contactId2"] }'

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts", {
  method: "DELETE",
  headers: {
    "X-API-Key": "YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ contactIds: ["contactId1", "contactId2"] }),
});
const data = await res.json();
console.log(`Deleted ${data.deleted}, skipped ${data.skipped}`);

Python

import requests

res = requests.delete(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={"contactIds": ["contactId1", "contactId2"]},
)
data = res.json()
print(f"Deleted {data['deleted']}, skipped {data['skipped']}")

תגובה

{
  "success": true,
  "deleted": 2,
  "skipped": 0
}

מחיקת שדה מותאם אישית

DELETE /contacts/custom-fields/{fieldKey}

מסיר מפתח שדה מותאם אישית מכל איש קשר בחשבונך. השתמש באפשרות זו כדי לבצע ניקוי לאחר שינוי שם או הוצאה משימוש של שדה מותאם אישית. המפתח יכול להכיל אותיות, מספרים, קווים תחתונים ומקפים בלבד. מחזיר את מספר אנשי הקשר שעודכנו. פעולה זו אינה ניתנת לביטול.

cURL

curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh", {
  method: "DELETE",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(`Removed from ${data.updated} contacts`);

Python

import requests

res = requests.delete(
    "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
print(f"Removed from {res.json()['updated']} contacts")

תגובה

{
  "success": true,
  "updated": 42
}

הערה: מפתח שדה עם תווים שאינם נתמכים יחזיר 400.


רשימות

רשימות מקבצות אנשי קשר. רשימה היא או סטטית (אתה מחליט מי נמצא בה) או חכמה (החברות בה מחושבת מתוך כללים ומתעדכנת אוטומטית — ראה ארגון רשימות ואנשי קשר).

שדה תיאור
name חובה בעת יצירה. עד 100 תווים.
status live (ברירת מחדל) או draft. אותיות קטנות בלבד.
contact_ids מערך של מזהי אנשי קשר להוספה לרשימה. רשימות סטטיות בלבד.
type static (ברירת מחדל) או smart.
smart_rules קבוצת הכללים — חובה כאשר type הוא smart. ראה להלן.

יצירת רשימה

POST /lists

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Hot leads (active)",
        "type": "smart",
        "smart_rules": {
          "match": "all",
          "conditions": [
            { "field": "tags", "op": "has_any", "value": ["tagHotLead"] },
            { "field": "last_activity_at", "op": "within_last", "value": { "amount": 90, "unit": "days" } }
          ]
        }
      }'

תגובה

{
  "success": true,
  "list_id": "list_abc123",
  "evaluation": { "added": 3, "removed": 0, "total": 3 }
}

רשימה חכמה מוערכת בזמן אמת (inline), באותה בקשה, כך ש-evaluation מציג לך בדיוק מי נכלל בה. ברשימה סטטית, evaluation הוא null.

עדכון רשימה

PUT /lists/{listId}

שלח רק את השדות שאתה משנה. שינוי smart_rules מעריך מחדש את הרשימה באופן מיידי ומחזיר את אותו אובייקט evaluation.

curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists/list_abc123?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "smart_rules": { "match": "any", "conditions": [ { "field": "tags", "op": "has_any", "value": ["tagHotLead", "tagWebinar"] } ] } }'

ניתן להעביר רשימה בין שני הסוגים:

  • סטטית ← חכמה: שלח { "type": "smart", "smart_rules": { … } }. הכללים נכנסים לתוקף במקום.
  • חכמה ← סטטית: שלח { "type": "static" }. הכללים מוסרים וכל מי שנמצא ברשימה נשאר בה.

המבנה של smart_rules

{
  "match": "all",
  "conditions": [
    { "field": "tags", "op": "has_any", "value": ["tagHotLead"] },
    { "field": "channel", "op": "is_any", "value": ["whatsapp", "sms"] },
    { "field": "last_incoming_message_at", "op": "not_within_last", "value": { "amount": 7, "unit": "days" } },
    { "field": "created_at", "op": "after", "value": "2026-01-01" },
    { "field": "is_bot_active", "op": "is", "value": true },
    { "field": "email", "op": "is_set" },
    { "field": "custom_field", "key": "Plan", "op": "eq", "value": "pro" }
  ]
}
  • matchall (כל תנאי חייב להיות נכון) או any (לפחות אחד).
  • conditions — 1 עד 20 תנאים, כל אחד עם לכל היותר 100 ערכים, מחרוזות עד 200 תווים.
field op value
tags has_any, has_all, has_none מערך של מזהי תגיות
lists in_any, not_in_any מערך של מזהי רשימות (רשימות סטטיות בלבד — לא ניתן לבנות רשימה חכמה מרשימה חכמה אחרת)
channel is_any, is_none מערך של ערוצים
status is_any, is_none מערך של סטטוסים של אנשי קשר
created_at, last_activity_at, last_incoming_message_at, last_outgoing_message_at, first_ai_interaction_at, last_ai_interaction_at within_last, not_within_last { "amount": 1–3650, "unit": "hours" | "days" }
אותם שדות תאריך before, after תאריך ISO ("2026-01-01", מושווה כימים שלמים) או תאריך-שעה ISO מלא ("2026-01-01T14:30:00Z", מושווה לרגע המדויק)
אותם שדות תאריך is_set, not_set
has_interacted_with_ai is true / falsetrue מתאים לאנשי קשר שה-AI שלח להם הודעה לפחות פעם אחת (אי פעם)
is_bot_active, do_not_disturb, is_private, has_ever_responded is true / false
email, phone_number, first_name, last_name is_set, not_set, contains, not_contains מחרוזת עבור טפסי ה-contains
current_campaign_id, assigned_agent is_any, is_none, is_set, not_set מערך של מזהים עבור טפסי ה-is_any / is_none
custom_field (בתוספת key) eq, neq, contains, not_contains, is_set, not_set מחרוזת עבור טפסי הערך

not_within_last תואם גם לאנשי קשר שהתאריך עבורם מעולם לא הוגדר (“לפני יותר מ-N, או לעולם לא”), והשוואות טקסט מתעלמות מאותיות גדולות/קטנות.

מעורבות AI. has_interacted_with_ai הוא דגל לכל אורך החיים: true עבור כל איש קשר שה-AI שלך שלח לו הודעה אחת לפחות, false עבור כל השאר (כולל אנשי קשר שרק הצוות שלך ענה להם אי פעם). הוא מוטבע בהודעה הראשונה של ה-AI לאיש קשר ולעולם לא מתאפס, לכן כיבוי תשובות ה-AI של איש הקשר או העברתו לקמפיין אחר לא יאפסו אותו. עבור תקופה — “אנשי הקשר שה-AI שלי טיפל בהם החודש”, שאלת החיוב הרגילה — השתמש בטווחים מעל last_ai_interaction_at במקום:

{ "field": "last_ai_interaction_at", "op": "within_last", "value": { "amount": 30, "unit": "days" } }

אל תבלבל ביניהם לבין is_bot_active (ה-AI מורשה להשיב, לא שהוא אכן עשה זאת) או has_ever_responded (איש הקשר השיב, לכל אחד). אותן שתי חותמות מוחזרות על כל איש קשר כ-first_ai_interaction_at / last_ai_interaction_at, וכל מערכת הכללים עובדת גם על GET /contacts?rules=, כך שתוכל לספור התאמות מבלי ליצור רשימה.

תצוגה מקדימה של קבוצת חוקים

POST /lists/preview

סופר ודוגם את אנשי הקשר שקבוצת חוקים תתאים להם, מבלי ליצור או לשנות דבר. השתמש בזה כדי לבצע בדיקת תקינות לחוקים לפני שמירתם.

curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists/preview?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "smart_rules": { "match": "all", "conditions": [ { "field": "tags", "op": "has_any", "value": ["tagHotLead"] } ] } }'

תגובה

{
  "success": true,
  "count": 3,
  "sample": [
    {
      "id": "contact_abc123",
      "first_name": "Sofia",
      "last_name": "Martinez",
      "phone_number": "+31600000000",
      "email": "sofia@example.com",
      "channel": "whatsapp"
    }
  ]
}

sample מכיל עד 10 אנשי קשר, מהפעיל ביותר לראשון.

הרצה מחדש של רשימה חכמה כעת

POST /lists/{listId}/evaluate

מאלץ הערכה מחדש מיידית (זהה לפעולת רענן כעת בלוח הבקרה). רשימות חכמות מתעדכנות ממילא כאשר איש קשר משתנה, ובכל 15 דקות עבור חוקים מבוססי זמן, לכן פעולה זו נחוצה רק כאשר ברצונך לקבל את התוצאה ברגע זה.

תגובה

{
  "success": true,
  "list_id": "list_abc123",
  "evaluation": { "added": 2, "removed": 1, "total": 4 }
}

evaluation.skipped: true פירושו שהערכה נוספת של אותה רשימה כבר רצה וקריאה זו לא ביצעה דבר.

רשימות חכמות מסרבות לחברים שנבחרו ידנית

נקודות קצה של חברות מחזירות 409 עם "This is a smart list — its members are computed from its rules. Edit the rules instead." כאשר רשימת היעד היא חכמה. זה מכסה את POST /contacts/lists, DELETE /contacts/lists, POST /contacts/lists/batch, contact_ids ב-POST /lists וב-PUT /lists/{listId}, ובחירה ברשימה חכמה כיעד לייבוא CSV. שנה את החוקים במקום זאת.

קריאה ל-POST /lists/{listId}/evaluate ברשימה סטטית היא גם 409 — אין לה חוקים להרצה.


שגיאות ב-API של אנשי קשר

נקודות קצה (endpoints) של אנשי קשר מחזירות את מעטפת השגיאה הסטנדרטית:

{
  "success": false,
  "error": "Contact not found"
}

חלק מנקודות הקצה (endpoints) כוללות גם error_code, שבדרך כלל תואם לסטטוס ה-HTTP — החריג היחיד הוא מקרה של איש קשר כפול להלן, שבו סטטוס ה-HTTP הוא 200 ורק error_code נושא את ה-409. הקודים הספציפיים לנקודות קצה של אנשי קשר:

קוד מתי זה קורה בנקודת קצה של איש קשר
400 בקשה שגויה — שדה חסר/לא תקין, גוף ריק, סמן (cursor) שגוי, או מעל 500 מזהים באצווה.
402 אין מספיק קרדיטים להשלמת הרצת תיוג AI על איש קשר אחד (error_code: "insufficient_credits").
404 איש הקשר, הרשימה או התגית לא נמצאו בחשבונך.
409 איש קשר עם מספר טלפון זה כבר קיים (ביצירה). מוחזר כ-error_code בגוף הבקשה עם סטטוס HTTP של 200, לכן יש לבצע פיצול (branch) לפי error_code כאן. מוחזר גם כאשר הרצת תיוג אוטומטי מרוכז כבר נמצאת בעיצומה (error_code: "auto_tag_run_in_progress"), או כאשר קישור איש קשר לערוץ אחר יחבר שני אנשי קשר שכבר מקושרים לשני אנשים שונים.
422 איש הקשר אינו יכול לקבל הודעה כרגע (נא לא להפריע, פרטי, או ערוץ שאינו נתמך). בנקודת הקצה של קישור ערוץ, מכסה גם מצב של חוסר במספר טלפון, זיווג ערוצים לא נתמך, או חוסר בשולח מחובר עבור ערוץ היעד.

403 בנקודת קצה של איש קשר יכול גם להצביע על בעיית מגבלת אנשי קשר או הרשאת רשימה, ולאו דווקא על גישה במסגרת התוכנית. הקודים המשותפים שכל נקודת קצה יכולה להחזיר — 401, 403 (התוכנית שלך אינה כוללת גישת API), 429 (מגבלת קצב) ו-500 — מפורטים עם הנחיות לניסיון חוזר ב-שגיאות ועימוד.


צעדים הבאים

  • API של הודעות — שליחת הודעות לפי זהות ערוץ וניהול שיחות.
  • תיעוד API — רשימת נקודות קצה מלאה, כולל תגיות ורשימות.
  • גישת API — אימות, מגבלות קצב וטיפול בשגיאות.