Campaigns API
קמפיין מרכז את כל מה שהבוט מבוסס ה-AI צריך כדי לתקשר עם אנשי הקשר שלך: ההנחיות שלו, הערוצים שבהם הוא פועל, שעות הפעילות שלו והתנהגות המעקב שלו. ה-API של הקמפיינים מאפשר לך להציג, ליצור, לעדכן, לשכפל, להפעיל, לארכב ולבצע כוונון עדין לקמפיינים ישירות מהקוד שלך במקום מלוח הבקרה.
כל נקודות הקצה להלן הן יחסיות לכתובת ה-URL הבסיסית https://api.youraiconnector.com/v1. כל בקשה חייבת לעבור אימות — עיין ב-API Access וב-Authentication כדי ללמוד כיצד להשיג ולהעביר את מפתח ה-API שלך. גישת API היא תכונה בתשלום; ללא גישה זו, בקשות יידחו עם 403.
שים לב: חלק מהדוגמאות מציגות את טופס השאילתה הפשוט
?apiKey=YOUR_API_KEY, ואחרות משתמשות בכותרתX-API-Key. שתיהן עובדות בכל מקום — השתמש במה שמתאים להגדרה שלך.
סוגי קמפיינים
כאשר יוצרים קמפיין, יש לבחור באחד מהסוגים הבאים:
| סוג | למה זה מיועד |
|---|---|
Incoming from Unknown Contacts |
הבוט משיב לאנשים ששולחים לך הודעה בפעם הראשונה. |
Outgoing |
הבוט מתחיל שיחות עם אנשי קשר שאתה מוסיף לקמפיין. |
Keywords |
לא פעיל - אין להשתמש. קמפיין מסוג Keywords אינו פעיל: הוא עדיין נתמך לצורך תאימות לאחור, אך הוא אינו גלוי לניתוב נכנס באף ערוץ ואף אחד לא קורא את מילות המפתח המפעילות שלו. השתמש בנקודת כניסה (Entry Point) מסוג מילת מפתח (Keyword) בסוכן AI במקום זאת. |
Combined |
שילוב של התנהגות נכנסת ויוצאת. |
אין חשיבות לרישיות (אותיות גדולות/קטנות). type, status, booking_provider, first_response_mode, bot.anthropic_model ו-bot.ai_speed מקבלים את כל סוגי הרישיות — "live", "Live" ו-"LIVE" הם אותו הדבר — והערך נשמר בצורתו הקנונית, שהיא הערך שיוחזר בעת קריאת הקמפיין. החריג היחיד הוא זוג ההשהיה: "Paused" ו-"paused" הם שני מצבים שונים באמת, לכן איות דו-משמעי כמו "PAUSED" נדחה עם 400 המנחה אותך לבחור באחד מהם.
שני מצבי ההשהיה
| סטטוס | מי כותב אותו | מה זה אומר |
|---|---|---|
Paused |
בדיקות הבטיחות של הפלטפורמה עצמה (מעורבות נמוכה, שגיאות שליחה חוזרות, הגעה למכסה) ומשטחי ה-Agents וה-Broadcasts החדשים יותר | הקמפיין מושהה. סריקה מתוזמנת יכולה לבטל השהיית בטיחות באופן אוטומטי ברגע שהסיבה נעלמת. |
paused |
כפתור ה-Pause בלוח הבקרה, יחד עם resumed ב-Resume |
אדם השהה זאת ידנית. שליחות מתוזמנות מפורקות ונבנות מחדש בעת החידוש. |
שניהם עוצרים את הקמפיין: ניתוב נכנס פועל רק כאשר הסטטוס הוא בדיוק Live. מה-API, השתמש ב-Paused כדי להשהות וב-Live כדי לחדש — זוג האותיות הקטנות קיים עבור כפתור לוח הבקרה ונשמר פעיל עבורו.
אף אחד מאלה אינו מה שקורה כאשר ה-AI מפסיק להשיב בתוך שיחה אחת. זהו מתג לכל איש קשר, is_bot_active על איש הקשר — מוגדר כאשר אדם משתלט, כאשר איש הקשר מבטל הסכמה, או כאשר ה-AI מסיים את הצ’אט. הסטטוס של הקמפיין עצמו נותר ללא שינוי, וכל שיחה אחרת בו ממשיכה לפעול. ראה השהיה או חידוש של ה-AI עבור איש קשר אחד.
יצירת קמפיין אינה קובעת מי עונה לערוץ. הניתוב מנוהל על ידי נקודות כניסה (Entry Points) בסוכן AI, לא על ידי קמפיינים. לכל ערוץ יש נקודת כניסה אחת המוגדרת כברירת מחדל לערוץ, המציינת את הסוכן שעונה לאנשי קשר חדשים ולא מוכרים בו: הגדר אותה באמצעות
PUT /entry-points/channel-defaults, בדוק אם הסולם פעיל עבור החשבון עםGET /entry-points/routing-status, נקה אותה עםDELETE /entry-points/channel-defaults.POST /channels/campaignעדיין כותב את מפת ניתוב הקמפיינים הישנה לפי ערוץ, אך מפה זו כבר אינה נבדקת עבור ניתוב נכנס באף חשבון; היא נשמרת לצורך שחזור בלבד. אל תבנה על בסיסה. ראה ניתוב ערוץ לקמפיין עבור שני הממשקים זה לצד זה.
רשימת קמפיינים
GET /campaigns
מחזיר את הקמפיינים שלך, מהחדש ביותר לישן ביותר. קמפיינים מאורכבים אינם נכללים אלא אם תעביר archived=true.
פרמטרים של שאילתה
| פרמטר | נדרש | תיאור |
|---|---|---|
limit |
לא | מספר מקסימלי של קמפיינים להחזרה. ברירת המחדל היא 50, המקסימום הוא 100. |
cursor |
לא | סמן דפדוף (Pagination cursor). העבר את הערך next_cursor מהתגובה הקודמת כדי לקבל את הדף הבא. |
archived |
לא | הגדר ל-true כדי לכלול קמפיינים מאורכבים. |
cURL
curl "https://api.youraiconnector.com/v1/campaigns?limit=20&apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/campaigns?limit=20", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.campaigns, data.next_cursor);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns",
params={"limit": 20},
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["campaigns"], data["next_cursor"])
תגובה
{
"success": true,
"campaigns": [
{
"id": "NBCXrhqGPSFsd6MV7pRo",
"name": "Inbound WhatsApp Leads",
"type": "Incoming from Unknown Contacts",
"status": "Live",
"enabled": true,
"archived": false,
"created_at": 1700000000000,
"ai_mode": true,
"language": "en",
"enabled_channels": ["whatsapp", "instagram"]
}
],
"next_cursor": "NBCXrhqGPSFsd6MV7pRo"
}
כאשר next_cursor הוא null, הגעת לעמוד האחרון.
קבלת קמפיין
GET /campaigns/{campaignId}
מחזיר את מסמך הקמפיין המלא, כולל הגדרות הבוט הפעיל (bot), הגדרות המשך, ערוצים מופעלים וכל מילת מפתח. חותמות זמן מוחזרות במילי-שניות של epoch.
cURL
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { campaign } = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
)
campaign = res.json()["campaign"]
תגובה
{
"success": true,
"campaign": {
"id": "NBCXrhqGPSFsd6MV7pRo",
"name": "Inbound WhatsApp Leads",
"type": "Incoming from Unknown Contacts",
"status": "Live",
"language": "en",
"ai_mode": true,
"enabled": true,
"archived": false,
"created_at": 1700000000000,
"enabled_channels": ["whatsapp", "instagram"],
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call.",
"ai_speed": "balanced",
"anthropic_model": "standard",
"max_messages": 20
}
}
}
הערה: קמפיין שבבעלות חשבון אחר מחזיר 404 Campaign not found (ולא 403), לכן לא ניתן לדעת אם מזהה קיים בחשבון אחר.
יצירת קמפיין
POST /campaigns
יוצר קמפיין חדש. name ו-type הם שדות חובה; כל השאר אופציונליים. ניתן לכלול כל שדה קמפיין אחר באותה בקשה — לדוגמה language, ai_mode, או אובייקט הגדרות bot מלא — והוא יישמר עם הקמפיין החדש. הבעלים וזמן היצירה נקבעים באופן אוטומטי.
שדות הבקשה
| שדה | חובה | תיאור |
|---|---|---|
name |
כן | שם הקמפיין. |
type |
כן | אחד מארבעת סוגי הקמפיינים שלעיל. |
language |
לא | השפה שבה הבוט משיב (למשל "en"). |
ai_mode |
לא | האם מצב AI מופעל (true/false). בקמפיין שנענה על ידי סוכן AI, קריאות מחזירות את מצב ה-Active של הסוכן במקום ערך שמור — ראו את ההערה תחת עדכון להלן. |
bot |
לא | אובייקט הגדרות הבוט (ראו שדות הגדרת בוט). |
list_id |
לא | מזהה (ID) של רשימת אנשי הקשר לצירוף. |
event_id |
לא | מזהה (ID) של סוג האירוע שה-AI רשאי לקבוע. |
event_ids |
לא | מספר סוגי אירועים בבת אחת, כמערך של מזהי סוגי אירועים — הראשון הוא ברירת המחדל. שלחו או את event_id או את event_ids, לא את שניהם. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/campaigns?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Spring Promo",
"type": "Outgoing",
"language": "en",
"ai_mode": true,
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call."
}
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/campaigns", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Spring Promo",
type: "Outgoing",
language: "en",
ai_mode: true,
bot: {
instructions: "Greet warmly and ask about their goals.",
goal: "Book a discovery call.",
},
}),
});
const { campaign_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/campaigns",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"name": "Spring Promo",
"type": "Outgoing",
"language": "en",
"ai_mode": True,
"bot": {
"instructions": "Greet warmly and ask about their goals.",
"goal": "Book a discovery call.",
},
},
)
campaign_id = res.json()["campaign_id"]
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
עדכון קמפיין
PUT /campaigns/{campaignId}
מעדכן קמפיין באופן חלקי — שלח רק את השדות שברצונך לשנות. זהו פועל העדכון הכללי היחיד; אין PATCH /campaigns/{campaignId} (שני נתיבי ה-PATCH הם מתגי ה-enable וה-archive המצומצמים).
אילו שדות ניתן לשנות. כל מה שעורך הקמפיין כותב, כולל name, status, type, language, ai_mode, enabled_channels, הגדרות הטריגר וה-drip, דגלי ההזמנות והמעקב, שדות הניטור של אינסטגרם/פייסבוק, וכל הגדרת ה-bot. זהות ובעלות נעולים לכל אורך חיי הקמפיין: user, id, ו-created_at נדחים, וכך גם כל שם שדה שה-endpoint אינו מזהה. הדחייה היא לפי בקשה, לא לפי שדה — מפתח אחד לא ידוע מחזיר 400 ושום דבר באותה בקשה לא נכתב.
ai_mode בקמפיין המגובה על ידי סוכן משקף את הסוכן. כאשר קמפיין נענה על ידי סוכן AI, קריאת הקמפיין מחזירה את ai_mode הנגזר מהמתג Active (פעיל) של אותו סוכן — המתג היחיד שקובע בפועל אם ה-AI ישיב. כתיבת ai_mode בקמפיין כזה תתקבל, אך לא תשנה את הערך שיוחזר בקריאה; במקום זאת, יש להפעיל או לכבות את מתג ה-Active של הסוכן (בלוח הבקרה, או דרך ה-API של הסוכנים). בקמפיינים קלאסיים ללא סוכן, ai_mode קורא וכותב את הערך השמור כפי שהיה קודם לכן.
שדות בוט מתמזגים, הם לא נדרסים. שלח הגדרות בוט כמפתחות עם נקודות ("bot.instructions": "...") או כאובייקט מקונן ("bot": { "instructions": "..." }) — שניהם כותבים עלה אחר עלה, כך שהשדות שאתה משמיט שומרים על הערכים הנוכחיים שלהם. bot.instructions, bot.goal, bot.rules, ו-bot.personality ניתנים כולם לעריכה בדרך זו, וכך גם כל הגדרת בוט אחרת המפורטת תחת שדות הגדרת בוט. אותו דבר חל על test_bot, frequency, ו-follow_up_config.
כדי להחליף הגדרת בוט באופן מלא — מחיקת כל שדה שאינך שולח — השתמש ב-bot_replace (או test_bot_replace) עם האובייקט המלא. לא ניתן לשלב החלפה ומיזוג עבור אותו אובייקט בבקשה אחת; זה מחזיר 400.
הערה: כתיבת bot.* דרך ה-API נכנסת לתוקף באופן מיידי בקמפיין החי. עורך לוח הבקרה עובד אחרת: עריכות שם נשמרות כטיוטה ועולות לאוויר רק כאשר הלקוח לוחץ על Publish. לכן, אם ללקוח יש שינויים בלוח הבקרה שלא פורסמו, הם יושבים ב-test_bot וקריאת API של bot מציגה נכון את מה שה-AI משתמש בו כרגע.
מספר שדות מוגדרים באמצעות מפתח ייעודי במקום להיכתב ישירות: השתמשו ב-list_id עבור רשימת אנשי הקשר, ב-event_id עבור סוג האירוע (או ב-event_ids, מערך סדור של מזהי סוגי אירועים, כדי לאפשר ל-AI לקבוע כמה — הראשון הוא ברירת המחדל; מערך ריק ינתק את כולם), וב-contact_ids (מערך של מזהי אנשי קשר) עבור אנשי הקשר של הקמפיין. רשומות בסיס הידע מנוהלות דרך ה-FAQs API, ולא דרך נקודת קצה זו.
תגיות מחליפות, הן לא מתמזגות. שלח את tags כמערך המלא והוא יהפוך לקבוצת התגיות של הקמפיין — ראה תגיות קמפיין עבור השדות ועבור נקודות הקצה שמוסיפות או עורכות תגית בודדת.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Spring Promo v2", "enabled_channels": ["whatsapp"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Spring Promo v2",
enabled_channels: ["whatsapp"],
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"name": "Spring Promo v2", "enabled_channels": ["whatsapp"]},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
מחיקת קמפיין
DELETE /campaigns/{campaignId}
מוחק קמפיין לצמיתות. פעולה זו אינה ניתנת לביטול — אם ייתכן שתזדקק לקמפיין שוב בעתיד, ארכב אותו במקום.
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
תגובה
{
"success": true
}
שכפול קמפיין
POST /campaigns/{campaignId}/duplicate
יוצר עותק של הקמפיין עם כל ההגדרות שלו כפי שהן. העותק מתחיל במצב מושבת ושמו מקבל סיומת (copy), כך שהוא לעולם לא ישלח הודעות עד שתפעיל אותו במפורש.
cURL
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { campaign_id } = await res.json();
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/duplicate",
headers={"X-API-Key": "YOUR_API_KEY"},
)
new_campaign_id = res.json()["campaign_id"]
תגובה
{
"success": true,
"campaign_id": "aZ9plnewCopyId01234"
}
עותקים כפולים בתוך חשבון אחד.
הפעלה או השבתה של קמפיין
PATCH /campaigns/{campaignId}/enabled
מפעיל או מכבה קמפיין. קמפיין מושבת מפסיק ליצור אינטראקציה עם אנשי קשר, אך שומר על כל הגדרות התצורה שלו.
שדות הבקשה
| שדה | נדרש | תיאור |
|---|---|---|
enabled |
כן | true כדי להפעיל, false כדי להשבית. חייב להיות בוליאני. |
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "enabled": true }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled",
{
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ enabled: true }),
}
);
const data = await res.json();
Python
import requests
res = requests.patch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/enabled",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"enabled": True},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"enabled": true
}
ארכוב או שחזור של קמפיין
PATCH /campaigns/{campaignId}/archived
מארכב או משחזר קמפיין. קמפיינים מאורכבים מוסתרים מרשימת הקמפיינים כברירת מחדל, אך שומרים על כל הנתונים שלהם וניתן לשחזר אותם בכל עת.
שדות הבקשה
| שדה | נדרש | תיאור |
|---|---|---|
archived |
כן | true כדי לארכב, false כדי לשחזר. חייב להיות בוליאני. |
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "archived": true }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived",
{
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ archived: true }),
}
);
const data = await res.json();
Python
import requests
res = requests.patch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/archived",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"archived": True},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"archived": true
}
עדכון הגדרות הבוט
PUT /campaigns/{campaignId}/bot-config
זוהי הדרך הבטוחה לשינוי הגדרות בוט בודדות. כל שדה שתשלח ימוזג לתוך הגדרות הבוט הקיימות, כך שכל שדה שתשמיט יישמר כפי שהיה. השתמש בשיטה זו במקום בנקודת הקצה של עדכון הקמפיין (campaign-update) בכל פעם שברצונך לבצע שינוי חלקי בלבד בבוט.
מפתחות שדות חייבים להכיל אותיות, מספרים, קווים תחתונים ומקפים בלבד.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instructions": "Always answer in a friendly, concise tone.",
"ai_speed": "balanced"
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
instructions: "Always answer in a friendly, concise tone.",
ai_speed: "balanced",
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/bot-config",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"instructions": "Always answer in a friendly, concise tone.",
"ai_speed": "balanced",
},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
שדות הגדרות הבוט
כל שדות הבוט הם אופציונליים. שלח רק את השדות שברצונך להגדיר. כל שדה בוט נוסף מעבר לאלו המפורטים כאן יתקבל ויישמר כפי שהוא.
| שדה | סוג | תיאור |
|---|---|---|
instructions |
string | ההנחיות העיקריות שמכוונות את אופן הדיבור של הבוט עם אנשי קשר. |
rules |
string | חוקים נוקשים שהבוט חייב לציית להם תמיד. |
goal |
string | התוצאה שהבוט צריך לשאוף אליה בכל שיחה. |
personality |
string | תיאור טון הדיבור והאישיות של הבוט. |
ai_speed |
string | כמה הסקה (reasoning) ה-AI מיישם לפני השבה. אחד מתוך fast, fast_thinker, balanced, thorough. |
anthropic_model |
string | רמת האיכות של ה-AI המשמשת לתשובות של קמפיין זה. אחד מתוך standard, economy (לא מומלץ), max, mini. max ו-mini נכנסים לתוקף רק בחשבונות הזכאים לרמות אלו. |
max_messages |
integer | מספר הודעות הבוט המקסימלי לכל שיחה. |
alert_human_when |
string | תנאים שבהם הבוט צריך להתריע בפני איש צוות אנושי. |
availability |
object | לוח הזמנים של שעות הפעילות של הבוט. ניתן להגדיר זאת כאן, או להשתמש ב-נקודת קצה של שעות פעילות הייעודית. |
follow_up_config |
object | הגדרת התנהגות המשך (Follow-up), נשמרת כפי שסופקה. |
הגדרת שעות הפעילות של הבוט
PUT /campaigns/{campaignId}/active-hours
מגדיר את לוח הזמנים של זמינות הבוט. מחוץ לחלונות הזמן שהוגדרו, הבוט לא ישיב באופן אוטומטי. פעולה זו כותבת את השדה availability בהגדרות הבוט.
שדות הבקשה
| שדה | נדרש | תיאור |
|---|---|---|
availability |
כן | אובייקט עם מפתחות לפי ימי השבוע. המפתחות המותרים הם monday עד sunday; כל מפתח אחר יחזיר 400. ימים שלא יצוינו יישארו ללא שינוי. |
כל יום בשבוע מכיל חלון זמן בודד או מערך של חלונות. לחלון יש start_time ו-end_time בפורמט HH:MM של 24 שעות.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"availability": {
"monday": { "start_time": "09:00", "end_time": "17:00" },
"tuesday": [
{ "start_time": "09:00", "end_time": "12:00" },
{ "start_time": "13:00", "end_time": "17:00" }
]
}
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
availability: {
monday: { start_time: "09:00", end_time: "17:00" },
tuesday: [
{ start_time: "09:00", end_time: "12:00" },
{ start_time: "13:00", end_time: "17:00" },
],
},
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/active-hours",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"availability": {
"monday": {"start_time": "09:00", "end_time": "17:00"},
"tuesday": [
{"start_time": "09:00", "end_time": "12:00"},
{"start_time": "13:00", "end_time": "17:00"},
],
}
},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
הצגת הפונקציות המותאמות אישית של קמפיין
GET /campaigns/{campaignId}/custom-functions
מחזיר את הפונקציות המותאמות אישית המקושרות לקמפיין זה, כשהן פתורות להגדרות מלאות. פונקציות מותאמות אישית הן פעולות HTTP חיצוניות שהבוט יכול להפעיל במהלך שיחה — למשל, בדיקת מלאי בחנות שלך או יצירת רשומה ב-CRM שלך.
cURL
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const { custom_functions } = await res.json();
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions",
headers={"X-API-Key": "YOUR_API_KEY"},
)
custom_functions = res.json()["custom_functions"]
תגובה
{
"success": true,
"custom_functions": [
{
"id": "fn_abc123",
"name": "check_stock",
"description": "Looks up whether a product is in stock.",
"url": "https://example.com/api/stock",
"method": "POST",
"input": [
{ "name": "sku", "type": "string" }
],
"ai_action": "Tell the customer whether the item is available.",
"created_at": 1700000000000,
"updated_at": 1700000500000
}
]
}
קישור פונקציה מותאמת אישית לקמפיין
POST /campaigns/{campaignId}/custom-functions
מקשר פונקציה מותאמת אישית קיימת לקמפיין זה, כך שהבוט יוכל להפעיל אותה במהלך שיחה. קישור פונקציה שכבר מקושרת לא מבצע שום פעולה.
| שדה | נדרש | תיאור |
|---|---|---|
custom_function_id |
כן | מזהה (ID) של הפונקציה המותאמת אישית לקישור. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "custom_function_id": "fn_abc123" }'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"custom_function_id": "fn_abc123"
}
ביטול קישור של פונקציה מותאמת אישית מקמפיין
DELETE /campaigns/{campaignId}/custom-functions/{customFunctionId}
ביטול קישור של פונקציה שאינה מקושרת לא מבצע שום פעולה.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/custom-functions/fn_abc123?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"custom_function_id": "fn_abc123"
}
קישור מקור בסיס ידע לקמפיין
POST /campaigns/{campaignId}/kb-sources
מקשר מקור בסיס ידע (שנוצר באמצעות API של שאלות נפוצות) לקמפיין זה, כך שהבוט יוכל להסתמך עליו בעת מתן תשובות. קישור מקור שכבר מקושר לא מבצע שום פעולה.
| שדה | נדרש | תיאור |
|---|---|---|
kb_source_id |
כן | מזהה (ID) של מקור בסיס הידע לקישור. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/kb-sources?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "kb_source_id": "kb_abc123" }'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"kb_source_id": "kb_abc123"
}
ביטול קישור של מקור בסיס ידע מקמפיין
DELETE /campaigns/{campaignId}/kb-sources/{kbSourceId}
ביטול קישור של מקור שאינו מקושר לא מבצע שום פעולה.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/kb-sources/kb_abc123?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"kb_source_id": "kb_abc123"
}
קישור שרת MCP לקמפיין
POST /campaigns/{campaignId}/mcp-servers
מקשר שרת MCP לקמפיין זה, ומעניק לבוט גישה לכלים של אותו שרת במהלך שיחה. קישור שרת שכבר מקושר לא מבצע שום פעולה.
| שדה | נדרש | תיאור |
|---|---|---|
mcp_server_id |
כן | מזהה שרת ה-MCP לקישור. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/mcp-servers?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "mcp_server_id": "mcp_abc123" }'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"mcp_server_id": "mcp_abc123"
}
ביטול קישור של שרת MCP מקמפיין
DELETE /campaigns/{campaignId}/mcp-servers/{mcpServerId}
ביטול קישור של שרת שאינו מקושר לא מבצע שום פעולה.
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/mcp-servers/mcp_abc123?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"mcp_server_id": "mcp_abc123"
}
ספריית המדיה של הקמפיין
ספריית המדיה מכילה תמונות, סרטונים, מסמכים והודעות קוליות שהבוט יכול לשלוח במהלך שיחה.
הצגת ספריית המדיה של קמפיין
GET /campaigns/{campaignId}/media-library
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"media_items": [
{
"id": "media_abc123",
"item_id": "media_abc123",
"title": "Pricing sheet",
"description": "Send when the contact asks about pricing.",
"media_url": "https://example.com/pricing.pdf",
"media_content_type": "application/pdf",
"type": "document",
"agent_id": "",
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"media_home": "campaign"
}
]
}
media_url הוא כתובת URL חתומה שנתפסה בזמן ההעלאה — ייתכן שהיא כבר פגה עד שתקרא אותה בחזרה; לוח הבקרה חותם אותה מחדש לפי דרישה.
העלאת פריט מדיה
POST /campaigns/{campaignId}/media-library
| שדה | נדרש | תיאור |
|---|---|---|
base64Data |
כן | הקובץ, מקודד ב-base64 (ללא קידומת data-URL). |
mimeType |
כן | סוג ה-MIME של הקובץ (למשל image/png). |
title |
כן | תווית קצרה המוצגת בספרייה ובהנחיית ה-AI. |
description |
כן | הוראה המציינת לבוט מתי לשלוח פריט זה. |
fileName |
לא | שם קובץ מקורי, משמש לבניית שם אובייקט האחסון. |
sendMessage |
לא | ניסוח מועדף שהבוט צריך להשתמש בו כשהוא שולח פריט זה. |
maxSendsPerConversation |
לא | מספר פעמים מקסימלי שהבוט רשאי לשלוח פריט זה לאיש קשר אחד בשיחה. ברירת המחדל היא 1. |
sendAsVoiceNote |
לא | עבור העלאת אודיו, המר אותו להודעה קולית ב-WhatsApp. ברירת המחדל היא false (נשמר כקובץ אודיו רגיל). |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"base64Data": "iVBORw0KGgoAAAANSUhEUgAA...",
"mimeType": "image/png",
"title": "Product photo",
"description": "Send when the contact asks what the product looks like."
}'
תגובה
{
"success": true,
"itemId": "media_abc123",
"mediaUrl": "https://example.com/product.png",
"storagePath": "ai_media/campaigns/NBCXrhqGPSFsd6MV7pRo/media_abc123.png",
"mediaContentType": "image/png",
"type": "image",
"isVoiceNote": false
}
עדכון פריט מדיה
PATCH /campaigns/{campaignId}/media-library/{itemId}
עורך את המטא-נתונים של הפריט בלבד — כדי להחליף את הקובץ עצמו, מחק את הפריט והעלה אחד חדש.
| שדה | תיאור |
|---|---|
title |
תווית קצרה. |
description |
הוראה לגבי מתי לשלוח. |
send_message |
ניסוח מועדף לשימוש על ידי הבוט. |
max_sends_per_conversation |
מספר שלם אי-שלילי, או null כדי לנקות את המכסה. |
curl -X PATCH "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library/media_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Updated pricing sheet" }'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"item_id": "media_abc123"
}
מחיקת פריט מדיה
DELETE /campaigns/{campaignId}/media-library/{itemId}
מחיקת פריט שכבר אינו קיים היא פעולה ללא השפעה (no-op).
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/media-library/media_abc123?apiKey=YOUR_API_KEY"
תגובה
{ "success": true, "deleted": true }
תגיות קמפיין
תגית קמפיין היא תווית שאתה מלמד את הבוט להחיל על איש קשר במהלך שיחה — hot-lead, not-interested, booked-a-call. לכל תגית יש שלושה חלקים:
| שדה | סוג | תיאור |
|---|---|---|
name |
string, נדרש | התווית עצמה. זה מה שהבוט מחיל על איש הקשר ומה שאתה מתאים אליו מאוחר יותר, לכן שמור עליו קצר ויציב. |
description |
string | ההוראה שאומרת לבוט מתי להחיל את התגית הזו. זה החלק שמבצע את העבודה — “האדם מאשר שהוא הצטרף לקהילה” יתקבל, “ליד חם” לא. |
webhook |
string | כתובת URL שמקבלת POST ברגע שהתגית מוחלת על איש קשר. השאר ריק אם אינך זקוק לכך. |
tag_id |
string | אופציונלי. מקשר את הערך הזה לתגית קיימת בחשבונך במקום ליצור חדשה. ספק זאת אם ברצונך להתייחס לתגית ספציפית זו מאוחר יותר באמצעות נקודות הקצה של תגית בודדת להלן. |
שמות תגיות חייבים להיות ייחודיים בתוך קמפיין. הבוט מחיל תגיות לפי שם, כך שלשני ערכים שחולקים שם אחד אין מנצח מוגדר.
הגדר את כל התגיות של קמפיין
PUT /campaigns/{campaignId} עם מערך tags.
פעולה זו מחליפה את התגיות של הקמפיין בדיוק במה שאתה שולח, שזה אותו דבר שהכרטיסייה ‘תגיות’ בלוח הבקרה עושה כשאתה שומר אותה. שלח את המערך המלא בכל פעם — תגית שאתה משמיט היא תגית שמחקת. שליחת [] מוחקת את כולן.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tags": [
{
"name": "hot-lead",
"description": "The person confirms they want to buy, or asks how to get started right away.",
"webhook": "https://example.com/hooks/campaign-events"
},
{
"name": "not-interested",
"description": "The person declines the offer or says they are not a fit."
}
]
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
tags: [
{
name: "hot-lead",
description:
"The person confirms they want to buy, or asks how to get started right away.",
webhook: "https://example.com/hooks/campaign-events",
},
{
name: "not-interested",
description: "The person declines the offer or says they are not a fit.",
},
],
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"tags": [
{
"name": "hot-lead",
"description": "The person confirms they want to buy, or asks how to get started right away.",
"webhook": "https://example.com/hooks/campaign-events",
},
{
"name": "not-interested",
"description": "The person declines the offer or says they are not a fit.",
},
]
},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
קרא את התגיות בחזרה עם GET /campaigns/{campaignId}.
הוסף תגית אחת
POST /campaigns/{campaignId}/tags
מוסיף תגית בודדת מבלי לשלוח מחדש את השאר. השתמש בזה כשאתה מוסיף לקבוצה שלא בנית בבקשה זו.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/tags?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tag": { "name": "booked-a-call", "description": "The person confirms a booked time." } }'
פרסום אותה תגית בדיוק פעמיים לא עושה דבר בפעם השנייה. פרסום אותו tag_id עם שם או תיאור שונים מוסיף ערך שני במקום לערוך את הראשון — השתמש בנקודת הקצה להלן כדי לערוך במקום.
עדכן או הסר תגית אחת
PUT /campaigns/{campaignId}/tags/{tagId}
DELETE /campaigns/{campaignId}/tags/{tagId}
אלו מתייחסים לרשומה אחת לפי ה-tag_id שלה, לכן הם עובדים רק על תגיות שנוצרו עם כזו. אם לתגית אין tag_id, שנה אותה באמצעות ה-PUT /campaigns/{campaignId} של המערך כולו לעיל.
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/tags/tag_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tag": { "name": "hot-lead", "description": "Updated instruction." } }'
tagId שאינו נמצא בקמפיין מחזיר 404 עם "Tag not found in campaign tags".
החלפת ערוצי קמפיין
POST /campaigns/{campaignId}/channels
מוסיף או מסיר ערוצים ממערך ה-enabled_channels של הקמפיין מבלי לשלוח מחדש את המערך כולו — בטוח יותר מאשר PUT /campaigns/{campaignId} כאשר ייתכן שגורם אחר עורך את הקמפיין באותו הזמן.
שלח החלפה בודדת או אצווה — לא את שניהם באותה בקשה:
{ "channel": "whatsapp", "action": "add" }
{ "add": ["whatsapp", "instagram"], "remove": ["sms"] }
| שדה | תיאור |
|---|---|
channel |
ערוץ אחד להחלפה. צרף עם action. |
action |
"add" או "remove". צרף עם channel. |
add |
מערך ערוצים להוספה. טופס אצווה — השתמש במקום channel/action. |
remove |
מערך ערוצים להסרה. טופס אצווה. |
ערוצים תקפים: whatsapp, whatsapp_web, sms, instagram, messenger, facebook, chat_widget, custom_channel, imessage, telegram, instagram_private, line, viber, tiktok, email, linkedin, skool.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/channels?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "whatsapp", "action": "add" }'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"added": ["whatsapp"],
"removed": []
}
פעולה זו משנה רק באילו ערוצים הקמפיין מפורסם — היא לא קובעת מי עונה לערוץ. ראה סוגי קמפיינים לעיל ו-ניתוב קמפיין לערוצים נכנסים להלן עבור כך.
תגובה להודעה פרטית (אינסטגרם ופייסבוק)
תגובה להודעה פרטית (Comment-to-DM) הופכת תגובה באחד הפוסטים שלך לשיחה פרטית: מישהו מגיב, הבוט שולח לו הודעה פרטית (DM), והקמפיין ממשיך את השיחה משם. התכונה מוגדרת במלואה דרך אובייקט הקמפיין, כך שאין לה ממשק משתמש ייעודי.
חבר תחילה את דף הפייסבוק — ראה חיבור ערוץ. לאחר מכן הגדר את השדות להלן באמצעות PUT /campaigns/{campaignId}.
הקמפיין חייב להיות
Live. ניטור תגובות אוסף רק קמפיינים שה-statusשלהם הואLive(ללא חשיבות לרישיות — ראה סוגי קמפיינים). כל סטטוס אחר משבית אותו בשקט, וסטטוס מומצא כמו"Active"נדחה כעת עם400במקום להישמר. סטטוסים תקפים כוללים אתDraft,Pending Approval,Scheduled,Live,Paused,Completed,Sentו-Failed.
שדות
| שדה | סוג | תיאור |
|---|---|---|
monitor_instagram_posts |
boolean | עקוב אחר כל פוסט באינסטגרם בדף המחובר. |
instagram_post_ids |
string[] | עקוב רק אחר פוסטים אלו באינסטגרם. השאר ריק כאשר monitor_instagram_posts מופעל. |
instagram_comment_delay_minutes |
number | המתן מספר דקות זה לאחר תגובה לפני שליחת ההודעה הישירה (DM). |
monitor_facebook_posts |
boolean | עקוב אחר כל פוסט בפייסבוק בדף המחובר. |
facebook_post_ids |
string[] | עקוב רק אחר פוסטים אלו בפייסבוק. |
facebook_comment_delay_minutes |
number | השהיה לפני שליחת ההודעה הישירה, בדקות. |
public_comment_reply_instructions |
string | הנחיה עבור התגובה הגלויה שנותרה על הפוסט עצמו. דורס את ברירת המחדל של הניסוח “בדוק את ההודעות הישירות שלך”. |
first_response_mode |
string | "ai" (ברירת מחדל) מייצר את ההודעה הישירה הראשונה ואת התגובה הציבורית. "exact_text" שולח את הניסוח שלך כפי שהוא, ללא יצירה על ידי בינה מלאכותית וללא חיוב קרדיט. |
first_response_exact_text |
string | ההודעה הישירה הראשונה כפי שהיא, בשימוש כאשר first_response_mode הוא "exact_text". נדרש כדי שמצב זה ייכנס לתוקף. |
first_response_exact_text_variants |
string[] | ניסוחים נוספים עבור ההודעה הישירה הראשונה. אחד נבחר באקראי עבור כל שליחה, כך שהודעות חוזרות אינן זהות בתוכנן. |
public_comment_reply_exact_text |
string | התגובה הציבורית כפי שהיא במצב "exact_text". השאר ריק כדי לדלג על התגובה הציבורית ולשלוח רק את ההודעה הישירה. |
public_comment_reply_exact_text_variants |
string[] | ניסוחים נוספים עבור התגובה הציבורית. |
monitor_instagram_followers |
boolean | התייחס לעוקב חדש כטריגר ושלח הודעה ישירה ראשונית (חשבונות אינסטגרם אישיים). |
follower_outreach_instructions |
string | הנחיה עבור הודעה ישירה ראשונית זו לעוקב חדש. |
respond_to_instagram_story_replies |
boolean | האם הבינה המלאכותית עונה לתגובות על הסטוריז שלך באינסטגרם. ברירת מחדל true. הגדר את false כדי שתגובות לסטורי יגיעו לצ’אט (עם הסטורי מצורף) ללא מענה של בינה מלאכותית. הגדרה חיה - אינה חלק מהטיוטה, לכן אין צורך לפרסם אותה. |
ניקוי שדה
שדות אלו מוסרים במקום להיות מוגדרים כ-null כאשר אתה שולח null, כך שהבוט חוזר לברירות המחדל שלו: instagram_post_ids, facebook_post_ids, instagram_comment_delay_minutes, facebook_comment_delay_minutes, public_comment_reply_instructions, follower_outreach_instructions, first_response_exact_text, first_response_exact_text_variants, public_comment_reply_exact_text, public_comment_reply_exact_text_variants.
מפתח אחד לא מוכר דוחה את כל הבקשה.
PUT /campaigns/{campaignId}מאמת את כל גוף הבקשה מול רשימת מותרים. מפתח שאינו מזוהה מחזיר400עבור הבקשה כולה — הוא לא מתעלם בשקט, ואף אחד מהשדות האחרים באותו גוף לא נכתב.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "Live",
"monitor_instagram_posts": true,
"instagram_comment_delay_minutes": 2,
"first_response_mode": "exact_text",
"first_response_exact_text": "Hey! Sending the details over now.",
"first_response_exact_text_variants": [
"Hi there, here are the details you asked for.",
"Thanks for commenting, here is what you need."
],
"public_comment_reply_exact_text": "Just sent you a DM."
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
{
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "Live",
monitor_instagram_posts: true,
instagram_comment_delay_minutes: 2,
first_response_mode: "ai",
public_comment_reply_instructions:
"Tell them to check their message requests folder too.",
}),
}
);
const data = await res.json();
Python
import requests
res = requests.put(
"https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"status": "Live",
"monitor_facebook_posts": True,
"facebook_post_ids": None,
"facebook_comment_delay_minutes": 5,
},
)
data = res.json()
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
התגובה הגלויה שנותרה על התגובה דורשת את תכונת תגובה-לתגובה בתוכנית שלך. בלעדיה, ההודעה הפרטית עדיין נשלחת והתגובה הציבורית מדלגת.
אופטימיזציה של קמפיין באמצעות בינה מלאכותית
POST /campaigns/{campaignId}/optimize
מריץ את אותו שכתוב AI כמו בתהליכי ה-Optimize ומשוב ה-thumbs-down בלוח הבקרה: לוקח את המשוב שלך, משכתב את ההוראות של הבוט, ומכין את התוצאה כטיוטה חדשה לעיונך.
| שדה | נדרש | תיאור |
|---|---|---|
user_feedback |
אחד משני אלו נדרש | משוב חופשי המתאר מה לשפר. |
thumbs_down_feedback |
אחד משני אלו נדרש | משוב שנאסף מסימון thumbs-down על תשובה ספציפית של בוט. |
thumbs_down_message |
לא | הודעת הבוט שאליה מתייחס משוב ה-thumbs-down. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/optimize?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "user_feedback": "Make the tone more casual and mention the free trial earlier." }'
תגובה (202 — השכתוב רץ ברקע)
{ "success": true, "campaign_id": "NBCXrhqGPSFsd6MV7pRo" }
בצע סקר GET /campaigns/{campaignId} ועקוב אחר test_bot.status: הוא משתנה ל-"Optimizing" מיד, ולאחר מכן חוזר ל-"Draft" ברגע שהשכתוב מגיע ל-test_bot. משם הוא מתנהג כמו כל טיוטה בלוח הבקרה — עיין בה, ולאחר מכן פרסם אותה בלוח הבקרה כדי להפוך אותה לפעילה. 409 פירושו שאופטימיזציה כבר רצה עבור קמפיין זה.
אופטימיזציה צורכת קרדיטים, בדיוק כמו כל פעולת AI אחרת בחשבונך.
שיוך איש קשר לקמפיין
POST /campaigns/{campaignId}/contacts/{contactId}/assign
מכניס איש קשר קיים לקמפיין, ואם תבקש זאת, שולח את הודעת הפתיחה של הקמפיין באופן מיידי. זו הדרך לשלוח תבנית WhatsApp מאושרת של קמפיין לאיש קשר אחד: התבנית שבאמצעותה אושר הקמפיין שייכת לאותו קמפיין, ולכן היא אינה מופיעה בספריית ה-Templates API ולא ניתן לשלוח אותה דרך /whatsapp-templates/send.
| שדה | נדרש | תיאור |
|---|---|---|
sendOpeningMessage |
לא | true שולח את הודעת הפתיחה של הקמפיין (תבנית ה-WhatsApp המאושרת בקמפיין WhatsApp) ברגע שאיש הקשר משויך. ברירת המחדל היא false. |
triggerAIResponse |
לא | true מאפשר ל-AI לכתוב בעצמו את ההודעה הראשונה במקום זאת. ברירת המחדל היא false. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/contacts/contact_abc123/assign?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sendOpeningMessage": true }'
תגובה
{
"success": true,
"data": { "contactId": "contact_abc123", "campaignId": "NBCXrhqGPSFsd6MV7pRo" }
}
קרדיטים: שליחת הודעת הפתיחה בקמפיין WhatsApp מחויבת כמו כל שליחת תבנית, ומתומחרת לפי מדינת הנמען וקטגוריית התבנית. בערוצים אחרים, הודעת הפתיחה היא הודעה יוצאת רגילה.
ניתוב קמפיין לערוצים נכנסים
נקודות קצה אלו מנהלות איזה קמפיין עונה לאנשי קשר חדשים ולא מוכרים בערוץ. העדף נקודות כניסה (Entry Points) עבור אינטגרציות חדשות (ראה את ההערה תחת סוגי קמפיינים) — אלו נשארות שימושיות לעבודה עם קמפיינים שמנותבים בדרך הישנה, ולפתרון התנגשות בעלות על ערוץ בין שני קמפיינים נכנסים.
הקצאת קמפיין לערוצים נכנסים
POST /campaigns/{campaignId}/incoming-routing
| שדה | נדרש | תיאור |
|---|---|---|
channels |
כן | מערך של ערוצים שקמפיין זה אמור לענות עבורם לאנשי קשר חדשים ולא מוכרים. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/incoming-routing?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channels": ["whatsapp", "instagram"] }'
תגובה
{
"success": true,
"uid": "abc123",
"campaignId": "NBCXrhqGPSFsd6MV7pRo",
"channels": ["whatsapp", "instagram"],
"failed": []
}
channels מפרט רק את הערוצים שנותבו בפועל לקמפיין זה; failed מפרט את כל אלו שלא. אם כל ערוץ מבוקש נכשל, הבקשה עצמה נכשלת.
ניקוי ניתוב נכנס של קמפיין
DELETE /campaigns/{campaignId}/incoming-routing
| שדה | נדרש | תיאור |
|---|---|---|
channelToUnassign |
לא | נקה ניתוב עבור ערוץ בודד זה בלבד. השמט כדי לנקות כל ערוץ שקמפיין זה עונה עבורו כרגע. |
curl -X DELETE "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/incoming-routing?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channelToUnassign": "instagram" }'
תגובה
{
"success": true,
"uid": "abc123",
"campaignId": "NBCXrhqGPSFsd6MV7pRo",
"channelsRemoved": ["instagram"]
}
הפעלה מחדש של קמפיין רדום
POST /campaigns/{campaignId}/reactivate
מחזיר קמפיין מ-Ended, Completed, Paused או Draft ותובע מחדש את הערוצים שלו. עובד רק על קמפיינים מסוג Incoming from Unknown Contacts או Combined — קמפיין שכבר נמצא ב-Live מטופל כהצלחה ללא צורך בפעולה נוספת.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/reactivate?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"data": {
"success": true,
"channelsReactivated": ["whatsapp"],
"channelsBlockedByConflict": [],
"campaignType": "Incoming from Unknown Contacts"
}
}
ערוץ שכבר נתבע על ידי סוכן של קמפיין אחר יופיע ב-channelsBlockedByConflict במקום לגרום לכשל של כל הקריאה — השתמש ב-עצירת קמפיין נכנס מתנגש למטה כדי לשחרר אותו תחילה אם ברצונך שקמפיין זה ישתלט עליו. 400 מוחזר עבור סוג קמפיין שאינו תומך בהפעלה מחדש, או סטטוס שאינו אחד מהסטטוסים הרדומים לעיל.
עצירת קמפיין נכנס מתנגש
POST /campaigns/{campaignId}/stop-incoming
משחרר את הערוצים של קמפיין זה מכל קמפיין אחר שמחזיק בהם כרגע, כך שקמפיין זה יוכל לתבוע אותם לאחר מכן. זוהי גרסת ה-REST למה שלוח המחוונים מבצע באופן אוטומטי כאשר אתה מפעיל קמפיין נכנס לערוץ שמישהו אחר כבר עונה בו.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/stop-incoming?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"ended_campaign_ids": [],
"released_channels": ["whatsapp"],
"cleared_entire_field": false
}
released_channels חוזר ריק כאשר קמפיין זה כבר מחזיק בכל ערוץ שהוא מפרסם — אין מה להשתלט עליו.
הערכות עלות
הערך כמה יעלה להשיק קמפיין לפני שתשלח אותו.
הערכת עלות תבנית WhatsApp
GET /campaigns/{campaignId}/template-cost-estimate
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/template-cost-estimate?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"billing_mode": "credits",
"data": {
"countries": [
{
"countryCode": "1",
"name": "United States",
"iso": "US",
"flag": "🇺🇸",
"contactCount": 120,
"costPerContact": 2,
"subtotal": 240
}
],
"totalContacts": 120,
"totalTemplateCost": 240,
"templateCategory": "marketing",
"billing_mode": "credits",
"service_messages_billable_soon": false
}
}
billing_mode הוא "credits" בנתיב ה-WhatsApp המנוהל. בנתיב שבו Meta מחייבת את חשבון ה-WhatsApp Business שלך ישירות, costPerContact, subtotal ו-totalTemplateCost חוזרים כ-null — לעולם לא 0, מה שהיה מתפרש כחינם — מכיוון שאין נתון אשראי לדווח עליו.
הערכת עלות SMS
GET /campaigns/{campaignId}/sms-cost-estimate
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/sms-cost-estimate?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"billing_mode": "twilio_direct",
"data": {
"totalContacts": 120,
"messageLength": 87,
"segmentsPerMessage": 1,
"totalSegments": 120,
"estimatedCostUsd": 0.96,
"priceUnit": "USD per segment",
"billedByTwilio": true
}
}
SMS נשלח תמיד דרך חשבון ה-Twilio שלך (ראה ספק SMS), לכן החיוב מתבצע תמיד על ידי Twilio ישירות — estimatedCostUsd הוא הערכה של חשבונית Twilio זו, לא חיוב אשראי.
בדיקות מגבלה
בדוק מגבלה לפני ההשקה, במקום לגלות זאת משליחה שנכשלה.
בדיקות ברמת הקמפיין
GET /campaigns/{campaignId}/limits/ai-credit-messaging — האם השקה או תזמון של קמפיין זה יחרגו ממגבלת הודעות ה-AI-credit של החשבון שלך.
GET /campaigns/{campaignId}/limits/messaging — האם זה יחרוג ממגבלת ההודעות היומית של החשבון שלך.
curl "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/limits/messaging?apiKey=YOUR_API_KEY"
תגובה (המגבלה לא נחרגה)
{
"success": true,
"data": "Campaign is within the daily messaging limit."
}
במקום זאת מוחזר 400 כאשר המגבלה נחרגת, עם הסיבה בתוך error.
בדיקות ברמת החשבון
GET /campaigns/limits/campaigns — האם הגעת למגבלת יצירת הקמפיינים החודשית של המנוי שלך.
GET /campaigns/limits/contacts — האם הגעת למגבלת אנשי הקשר של המנוי שלך.
curl "https://api.youraiconnector.com/v1/campaigns/limits/campaigns?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"data": "You can create 3 more campaigns this month."
}
סיכומי נתוני קמפיין
GET /campaigns/stats/totals
סך הודעות שנשלחו ונענו עבור כל קמפיין וכל סוכן AI בחשבון שלך, לאורך חלון זמן מתגלגל — אותם מספרים שדף רשימת הקמפיינים מציג לצד כל שורה, בקריאה אחת במקום בבקשה אחת לכל קמפיין.
| פרמטר שאילתה | תיאור |
|---|---|
days |
גודל חלון הזמן המתגלגל, 1-365. ברירת המחדל היא 90. |
curl "https://api.youraiconnector.com/v1/campaigns/stats/totals?days=30&apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"byCampaign": {
"NBCXrhqGPSFsd6MV7pRo": { "sent": 1204, "replied": 318 }
},
"byAgent": {
"agent_abc123": { "sent": 1204, "replied": 318 }
},
"windowDays": 30
}
byAgent הוא סיכום עצמאי, לא סכום של byCampaign — תעבורה של חשבון מבוסס AI-Agent יכולה להתקיים ללא קמפיין כלל, ולכן אחרת היא הייתה בלתי נראית כאן.
בדיקת קמפיין בסביבת הניסוי (Playground)
סביבת הניסוי מאפשרת לך לנהל שיחה עם הבוט של הקמפיין מבלי לגעת בערוץ אמיתי או באיש קשר אמיתי. זהו אותו ארגז חול כמו בלוח הניסוי של לוח הבקרה, והוא זמין במלואו דרך ה-API.
התהליך הוא: צור איש קשר בדיקה נסתר, שלח הודעה, ולאחר מכן תשאל את הקמפיין לגבי תשובת הבוט. תשובות נוצרות באופן אסינכרוני, לכן הן מגיעות ב-test_messages בקמפיין ולא בגוף התגובה.
ה-Playground פועל על חשבון קרדיט ה-API. שיחת בדיקה שמתחילה עם מפתח API מחויבת בתעריף הרגיל של הודעת AI, בדיוק כמו תשובה אמיתית, ומופיעה בהיסטוריית השימוש שלך כרשומה רגילה. בדיקה מתוך לוח הבקרה נשארת בחינם. ההבדל הוא מכוון: הרצת בדיקה מבצעת את אותה עבודת AI כמו הרצה חיה, לכן Playground ללא הגבלה של API היה מאפשר להריץ AI ללא הגבלה על חשבון מישהו אחר.
שלב 1 - יצירת איש קשר הבדיקה
POST /campaigns/{campaignId}/try-out/contact
יוצר את איש הקשר הנסתר לבדיקה ומקשר אותו לקמפיין. כל שדות הגוף הם אופציונליים; כל מה שתשמיט יחזור לזהות לדוגמה מובנית (John Doe).
| שדה | נדרש | תיאור |
|---|---|---|
first_name |
לא | השם הפרטי של איש הקשר לבדיקה. |
last_name |
לא | שם המשפחה של איש הקשר לבדיקה. |
email |
לא | כתובת האימייל של איש הקשר לבדיקה. |
phone |
לא | מספר הטלפון של איש הקשר לבדיקה. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/contact?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "first_name": "Maria", "last_name": "Lopez" }'
תגובה
{
"success": true,
"contactId": "8kQx1vNbA2fLpR7d"
}
שלב 2 - רישום ההודעה הנכנסת
POST /campaigns/{campaignId}/try-out/messages
מוסיף הודעות לשרשור הבדיקה. שלח את הודעת המבקר לכאן תחילה, כדי שתופיע בהיסטוריית השיחה שהבוט קורא.
| שדה | נדרש | תיאור |
|---|---|---|
messages |
כן | מערך של אובייקטי הודעה, מקסימום 200 לבקשה. |
messages[].body |
כן | טקסט ההודעה. |
messages[].direction |
כן | "inbound" עבור המבקר, "outbound" עבור הבוט. |
messages[].timestamp |
לא | מחרוזת ISO-8601 או מילי-שניות מאז תקופת Unix. |
messages[].role |
לא | תווית תפקיד אופציונלית. |
messages[].name |
לא | שם תצוגה אופציונלי. |
ignoreCounter |
לא | מספר שלם. מאפס את מונה ההתעלמות של הקמפיין באותה כתיבה. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/messages?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"body": "Do you ship to Belgium?",
"direction": "inbound",
"timestamp": "2026-07-22T09:30:00Z"
}
]
}'
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo",
"appended": 1
}
שלב 3 - בקש מהבוט להשיב
POST /campaigns/{campaignId}/try-out/test-message
שולח את ההודעה לצינור ה-AI. זו הקריאה שמייצרת בפועל תגובת בוט.
| שדה | נדרש | תיאור |
|---|---|---|
message |
כן | טקסט ההודעה האחרונה של המבקר. |
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/test-message?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message": "Do you ship to Belgium?" }'
תגובה
{
"success": true,
"data": "Published"
}
"Published" פירושו שההודעה עברה לצינור ה-AI. "Ignored" פירושו שהודעת בדיקה חדשה יותר החליפה את זו — אזור הבדיקה מאחד רצף מהיר של הודעות לתגובה אחת, בערך ארבע שניות לאחר ההודעה האחרונה, באותו אופן שבו שיחה אמיתית ממתינה למישהו שיסיים להקליד. בגלל חלון איחוד זה, קריאה זו לוקחת כמה שניות עד להחזרת תשובה.
שלב 4 - קריאת התשובה
GET /campaigns/{campaignId}
תשובת הבוט מתווספת למערך ה-test_messages של הקמפיין. בצע סקר (Poll) על הקמפיין עד שיופיע ערך outbound חדש.
{
"success": true,
"campaign": {
"id": "NBCXrhqGPSFsd6MV7pRo",
"test_messages": [
{ "body": "Do you ship to Belgium?", "direction": "inbound" },
{ "body": "Yes, we ship across the EU.", "direction": "outbound" }
]
}
}
איפוס אזור הבדיקה
POST /campaigns/{campaignId}/try-out/reset
מנקה את כל ארגז החול: מוחק את איש הקשר לבדיקה, מוחק את test_messages, ומשחרר את נעילות התגובה של הבוט. השתמש בזה בין הרצות בדיקה.
curl -X POST "https://api.youraiconnector.com/v1/campaigns/NBCXrhqGPSFsd6MV7pRo/try-out/reset?apiKey=YOUR_API_KEY"
תגובה
{
"success": true,
"campaign_id": "NBCXrhqGPSFsd6MV7pRo"
}
נקודות קצה אחרות של אזור המשחקים (playground)
| נקודת קצה | מה היא עושה |
|---|---|
DELETE /campaigns/{campaignId}/try-out/contact |
מוחקת רק את איש הקשר הנוכחי לבדיקה ומבטלת את הקישור שלו, תוך השארת test_messages ללא שינוי. מצליחה גם כאשר לא מקושר איש קשר. |
POST /campaigns/{campaignId}/try-out/transfer |
מתחילה אזור משחקים חדש עם שיחה קיימת, בבקשה אחת: מחליפה את איש הקשר לבדיקה ודורסת את test_messages. הגוף מקבל את first_name, last_name, messages (יכול להיות ריק) ו-ignoreCounter. העדף זאת על פני מחיקה-ואז-יצירה-ואז-הוספה, שמשלשת את ניצול מכסת הקצב שלך. |
POST /campaigns/{campaignId}/try-out/messages/replace |
דורסת את test_messages במלואו במקום להוסיף עליו. השתמש בזה כדי לקטוע או להריץ אחורה שרשור. |
POST /campaigns/{campaignId}/try-out/contact/reset-ignore-counter |
מאפסת רק את מונה ההתעלמות של איש הקשר לבדיקה, עבור תהליכי ביצוע חוזר וחזרה לאחר שליחה. |
שגיאות API של קמפיינים
נקודות קצה של קמפיינים מחזירות את מעטפת השגיאה הסטנדרטית:
{
"success": false,
"error": "Campaign not found"
}
| סטטוס | מתי זה קורה בנקודת קצה של קמפיין |
|---|---|
400 |
שדה חובה חסר או לא תקין (לדוגמה type שגוי, enabled שאינו בוליאני, או מפתח יום בשבוע לא מוכר). מוחזר גם על ידי נקודת קצה של בדיקת מגבלה כאשר המגבלה עומדת להיחרג, ועל ידי הפעלה מחדש עבור סוג קמפיין או סטטוס שאינם תומכים בכך. |
404 |
הקמפיין לא נמצא — או שהוא לא קיים או שהוא שייך לחשבון אחר. |
409 |
אופטימיזציה כבר רצה עבור קמפיין זה. |
הקודים המשותפים שכל נקודת קצה יכולה להחזיר — 401, 403 (התוכנית שלך אינה כוללת גישת API), 429 (מגבלת קצב) ו-500 — מפורטים עם הנחיות לניסיון חוזר ב-שגיאות ועימוד.
קשור
- ניתוב ערוץ לקמפיין — הפנו את Instagram, WhatsApp או כל ערוץ אחר לסוכן ה-AI שאמור להשיב לו, באמצעות נקודות כניסה (Entry Points).
- יצירת תבניות המשך עם AI — הפעילו משימת רקע שכותבת את תבניות ההמשך ב-WhatsApp עבור קמפיין.
- API של שאלות ותשובות (FAQs) — נהלו את רשומות השאלות והתשובות שבהן משתמשים הקמפיינים שלכם.
- גישת API — צרו את מפתח ה-API שלכם.
- אימות — כל הדרכים להעברת המפתח שלכם.