הודעות ושיחות
ממשק ה-API של הודעות מאפשר לך לשלוח הודעה לכל איש קשר, לקרוא בחזרה שיחה, לתקן או להסיר הודעה שכבר שלחת, להגיב להודעה, למשוך שרשור מלא של שיחת צ’אט, לייצא תמליל, ולסמן צ’אטים כנקראו או שלא נקראו — הכל מבלי לפתוח את תיבת הדואר הנכנס.
כל הנתיבים בדף זה הם יחסיים לכתובת ה-URL הבסיסית https://api.youraiconnector.com/v1. כל בקשה דורשת את מפתח ה-API שלך — ראה אימות לרשימה המלאה של הדרכים לשליחתו. הדוגמאות להלן משתמשות בכותרת X-API-Key, כאשר דוגמת cURL אחת מציגה גם את טופס השאילתה ?apiKey=.
כיצד פועלת המסירה: שליחת הודעה אינה ממתינה להגעתה. ה-API מקבל את ההודעה שלך, מחזיר מיד מזהה הודעה, ולאחר מכן מוסר אותה ברקע בערוץ של איש הקשר (WhatsApp, SMS, Instagram וכן הלאה). כדי לעקוב אם הודעה אכן נמסרה או נקראה, האזן לעדכוני סטטוס באמצעות Webhooks — אל תבצע סקר (polling). תגובת השליחה מאשרת רק שההודעה התקבלה.
שליחת הודעה
קיימות שתי דרכים לשלוח הודעה. בחר את הדרך המתאימה לאופן שבו אתה כבר מזהה את איש הקשר:
- שליחה לפי מזהה איש קשר — אתה כבר מכיר את המזהה של איש הקשר (למשל, יצרת את איש הקשר דרך ה-API או קיבלת אותו מ-webhook). השתמש ב-
POST /contacts/{contactId}/send-message. - שליחה לפי זהות איש קשר — אתה מכיר את מספר הטלפון של איש הקשר, מזהה ה-Instagram שלו וכו’, אך לא את המזהה הפנימי שלו. השתמש ב-
POST /contacts/sendותן לפלטפורמה למצוא את איש הקשר הנכון.
שתי הדרכים מכניסות את ההודעה לתור באותו אופן ומוסרות אותה בערוץ שבו נמצא איש הקשר. אתה לא בוחר את אמצעי התעבורה — הפלטפורמה מנתבת אנשי קשר של WhatsApp דרך WhatsApp, אנשי קשר של SMS דרך SMS, וכן הלאה.
שניהם גם מוצאים רק אנשי קשר שכבר קיימים. אף אחת מהקריאות לא יוצרת איש קשר: מזהה או זהות שאין להם התאמה חוזרים כ-404, והם לא הופכים לאיש קשר חדש. לכן, אם אתם שולחים הודעה למישהו בפעם הראשונה, צרו תחילה את איש הקשר באמצעות POST /contacts, או ב-WhatsApp Web, השתמשו ב-שלח ישירות למספר ב-WhatsApp Web להלן, שיוצר את איש הקשר באותה קריאה.
שליחה לפי מזהה איש קשר
POST /contacts/{contactId}/send-message
| שדה | נדרש | תיאור |
|---|---|---|
body |
כן | טקסט ההודעה לשליחה, עד 65,536 תווים. גוף הודעה ארוך יותר ממה שהערוץ מאפשר בהודעה אחת (1,500 ב-WhatsApp Business API וב-SMS, 1,000 ב-Instagram, 2,000 ב-Messenger, 4,096 ב-Telegram וב-LinkedIn, 5,000 ב-LINE, 6,000 ב-TikTok, 7,000 ב-Viber, 65,536 ב-WhatsApp Web; ללא הגבלה באימייל, בווידג’ט הצ’אט ובערוצים מותאמים אישית) יישלח כמספר הודעות לפי הסדר, תוך פיצול במעברי פסקאות או משפטים. התגובה תכיל אז messageIds עבור כל חלק ו-autoSplit: true. |
mediaUrl |
לא | כתובת URL של קובץ מדיה (תמונה, אודיו, וידאו, מסמך) לצירוף. |
mediaContentType |
לא | סוג MIME של המדיה המצורפת, למשל image/jpeg. נקבע מתוך סיומת הקובץ של ה-URL כאשר הוא מושמט (.mp3 → audio/mpeg, .pdf → application/pdf); הגדר אותו עבור URL ללא סיומת. |
sendAsVoiceNote |
לא | WhatsApp Web בלבד, אודיו בלבד: שלח את האודיו כהודעה קולית (בועת השמעה). אודיו שאינו בפורמט OGG/Opus מומר בעת השליחה. ברירת המחדל היא false. |
pauseBot |
לא | true משהה את ה-AI עבור איש קשר זה בעת שליחת ההודעה — עבור אדם שלוקח פיקוד. ראה השהיה או חידוש של ה-AI. |
clearIncompleteReply |
לא | true מבטל תשובת בוט חצי גמורה כך שלא תתחדש לאחר ההודעה שלך. |
human_reply |
לא | true מסמן את ההודעה ככזו שנכתבה על ידי אדם בצוות שלך ולא על ידי אינטגרציה. ה-AI מתייחס אליה אז כתשובה של חבר צוות בשיחה, ותשובה שה-AI תזמן עבור ההודעה האחרונה של איש הקשר מבוטלת כדי שאיש הקשר לא יקבל שתי תשובות. זה לא משהה את ה-AI; השתמש ב-pauseBot עבור כך. ברירת המחדל היא false. |
ב-LinkedIn, הודעה שאתה שולח בדרך זו, או מתיבת הדואר הנכנס, נמסרת גם בזמן שאדם מטפל בשרשור בצד של LinkedIn. התשובות של ה-AI עצמו ופעולות ההמשך שלו מושהות בשרשור כזה. תשובה מושהית מוסרת מהצ’אט במקום שתוצג כנכשלה, מכיוון שלא נשלח דבר ולא נעשה שימוש בקרדיט. התשובה האחרונה של ה-AI לפני שהוא מעביר שרשור לאדם עדיין נמסרת.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/send-message" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi! Your appointment is confirmed for tomorrow at 10:00."
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/send-message",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
body: "Hi! Your appointment is confirmed for tomorrow at 10:00.",
}),
}
);
const data = await res.json();
console.log(data.messageId);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/send-message",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"body": "Hi! Your appointment is confirmed for tomorrow at 10:00."},
)
print(res.json()["messageId"])
תגובה (200 OK):
{
"success": true,
"messageId": "aB3dE5fG7hI9jK1lM2nO",
"contactId": "contact123",
"channel": "whatsapp",
"message": "Message created successfully. Delivery is being processed."
}
שליחה לפי זהות איש קשר
POST /contacts/send
השתמש בזה כאשר אין לך את המזהה הפנימי של איש הקשר. ספק את body ההודעה פלוס או contact_id, או channel יחד עם שדה הזהות התואם לאותו ערוץ.
| שדה | נדרש | תיאור |
|---|---|---|
body |
כן | טקסט ההודעה לשליחה, עד 65,536 תווים. גוף הודעה ארוך יותר ממה שהערוץ מאפשר בהודעה אחת (1,500 ב-WhatsApp Business API וב-SMS, 1,000 ב-Instagram, 2,000 ב-Messenger, 4,096 ב-Telegram וב-LinkedIn, 5,000 ב-LINE, 6,000 ב-TikTok, 7,000 ב-Viber, 65,536 ב-WhatsApp Web; ללא הגבלה באימייל, בווידג’ט הצ’אט ובערוצים מותאמים אישית) יישלח ככמה הודעות לפי הסדר, תוך פיצול במעברי פסקאות או משפטים. התגובה תכיל אז messageIds עבור כל חלק ו-autoSplit: true. |
contact_id |
לא | מזהה של איש קשר קיים. כאשר הוא מוגדר, אין צורך בשדות הזהות להלן. |
channel |
לא | ערוץ לשליחה דרכו. נדרש כאשר contact_id לא צוין. אחד מ-14 הערוצים שניתן לשלוח דרכם: whatsapp, whatsapp_web, sms, instagram, instagram_private, messenger, telegram, chat-widget, custom, email, line, imessage, linkedin, viber. |
phone_number |
לא | מספר הטלפון של איש הקשר בפורמט בינלאומי. בשימוש עם whatsapp, whatsapp_web, ו-sms. |
instagram_id |
לא | מזהה המשתמש של איש הקשר ב-Instagram. בשימוש עם instagram. |
messenger_id |
לא | מזהה המשתמש של איש הקשר ב-Messenger. בשימוש עם messenger. |
telegram_user_id |
לא | מזהה המשתמש של איש הקשר ב-Telegram. בשימוש עם telegram. |
media_url |
לא | כתובת URL של קובץ מדיה לצירוף. |
media_content_type |
לא | סוג MIME של המדיה המצורפת, למשל image/jpeg. |
אילו ערוצים ניתנים לפתרון לפי זהות. רק שישה מתוך ה-14 מקבלים שדה זהות במקום contact_id: whatsapp, whatsapp_web ו-sms מאותרים לפי phone_number, instagram לפי instagram_id, messenger לפי messenger_id, ו-telegram לפי telegram_user_id. שמונת האחרים — instagram_private, chat-widget, custom, email, line, imessage, linkedin ו-viber — הם ללא זהות ציבורית לאיתור, לכן שליחה בערוצים אלו דורשת contact_id; העברת channel בלבד תחזיר 400 המציין ש-contact_id נדרש.
cURL (באמצעות טופס השאילתה ?apiKey=)
curl -X POST "https://api.youraiconnector.com/v1/contacts/send?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp",
"phone_number": "+31612345678",
"body": "Hi! Your appointment is confirmed."
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/contacts/send", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
channel: "whatsapp",
phone_number: "+31612345678",
body: "Hi! Your appointment is confirmed.",
}),
});
const data = await res.json();
console.log(data.message_id, data.channel);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/send",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"channel": "whatsapp",
"phone_number": "+31612345678",
"body": "Hi! Your appointment is confirmed.",
},
)
data = res.json()
print(data["message_id"], data["channel"])
תגובה (201 Created):
{
"success": true,
"message_id": "aB3dE5fG7hI9jK1lM2nO",
"contact_id": "contact123",
"channel": "whatsapp"
}
מדוע הודעה עלולה להידחות: איש קשר עם מצב ‘נא לא להפריע’ או מצב פרטי מופעל אינו יכול לקבל הודעות יוצאות — הבקשה תיכשל עם
422. אם אף איש קשר אינו תואם למזהה או לזהות שסיפקת, תקבל404.
שליחה ב-WhatsApp Web: וריאציות והגנה מפני שליחה מרוכזת
שני דברים חלים על body כאשר איש הקשר נמצא ב-WhatsApp Web.
סוגרי Spintax מורחבים עבור כל שליחה. body של {Hi|Hello|Hey} there, quick question יישלח כאחת משלוש הברכות, שנבחרת עבור אותה שליחה — הסוגריים לעולם לא יגיעו לאיש הקשר. השתמש בזה כדי לתת לכל איש קשר הודעת פתיחה שונה מאותו קוד אינטגרציה. טקסט ללא סוגריים נשלח בדיוק כפי שנכתב.
צרורות של הודעות פתיחה זהות נדחים. אם עשר הודעות פתיחה כמעט זהות יוצאות ממספר WhatsApp Web אחד בתוך שעה, לאנשי קשר שמעולם לא כתבו לך, הודעות נוספות לא יועברו: השליחה מתקבלת כרגיל (אתה עדיין מקבל messageId), וההודעה נשארת עם status: "failed" ו-error_code: "opener_burst", עם סיבה שניתנת לקריאה על ידי הלקוח. ניסיון חוזר עם אותו טקסט לא יעזור — שנה את הטקסט, המתן שעה ושלח שוב. תשובות בתוך שיחות קיימות לעולם אינן מושפעות. ההסבר נמצא ב-הודעות פתיחה זהות מובילות להגבלת מספרים.
שלח ישירות למספר ב-WhatsApp Web
POST /whatsapp-web/send
שלחו הודעה למספר טלפון ב-WhatsApp Web מבלי לחפש תחילה איש קשר. אם המספר אינו איש קשר עדיין, איש הקשר נוצר באותה קריאה, כאשר ה-AI כבוי עבורו, כך שההודעה נראית ככזו שנשלחה ידנית ואף עוזר לא משתלט על השיחה לאחר מכן. איש קשר קיים משמש כפי שהוא.
| שדה | נדרש | תיאור |
|---|---|---|
phoneNumber |
כן | המספר לשליחת הודעה, בפורמט בינלאומי (+31612345678). |
message |
לא | הטקסט לשליחה. חייב להופיע message או mediaUrl. |
mediaUrl |
לא | כתובת URL ציבורית של קובץ לשליחה. חייב להופיע message או mediaUrl. |
mediaContentType |
לא | סוג MIME של הקובץ, לדוגמה image/jpeg. מחושב מכתובת ה-URL אם לא מצוין. |
sendAsVoiceNote |
לא | true שולח קובץ שמע כהודעה קולית במקום כקובץ מצורף. |
fromPhoneNumber |
לא | מאיזה ממספרי ה-WhatsApp Web המחוברים שלכם לשלוח, בפורמט בינלאומי. ברירת המחדל היא המספר שאליו איש הקשר כבר שייך. |
campaignId |
לא | השתמש בשעות הפעילות של סוכן זה במקום בברירת המחדל של החשבון. חייב להיות סוכן באותו חשבון. |
ignoreActiveHours |
לא | true שולח מיד, ללא קשר לשעות הפעילות. |
sub_account_id |
לא | עבור סוכנויות: שלח בשם אחד מחשבונות הלקוח שלך. |
curl -X POST "https://api.youraiconnector.com/v1/whatsapp-web/send?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "+31612345678",
"message": "Hi Alex, your quote is ready."
}'
קריאה מוצלחת עונה ב-202:
{ "success": true, "queued": true, "contactId": "abc123" }
202 פירושו שהבקשה התקבלה, אך טרם נמסרה. מחוץ לשעות הפעילות השליחה מושהית ויוצאת בחלון הזמן המותר הבא, אלא אם העברת ignoreActiveHours. קראו את הסטטוס של ההודעה עצמה באמצעות רשימת הודעות של איש קשר תוך שימוש ב-contactId שקיבלתם כאן.
כאשר השליחה אינה עוברת:
| סטטוס | קוד | מה קרה |
|---|---|---|
400 |
INVALID_PHONE_FORMAT |
המספר אינו בפורמט בינלאומי, או ש-phoneNumber חסר, או ששניהם message ו-mediaUrl חסרים. |
400 |
CONTACT_DND |
איש הקשר נמצא במצב ‘נא לא להפריע’, לכן לא נשלח אליו דבר. |
400 |
CONTACT_PRIVATE |
איש הקשר מסומן כפרטי. |
404 |
CAMPAIGN_NOT_FOUND |
אף סוכן לא תואם ל-campaignId שהעברת. |
403 |
CAMPAIGN_FORBIDDEN |
הסוכן שייך לחשבון אחר. |
402 |
לחשבון אין יתרה, או שלא מחובר מספר WhatsApp Web. |
קריאה שנייה עבור אותו איש קשר בזמן ששליחה מושהית אחת עדיין ממתינה עונה ב-409, כך שתור לעולם לא נערם מאחורי אדם אחד.
רישום הערה בשיחה
POST /contacts/notes
מוסיף שורה לשיחה של איש קשר מבלי לשלוח אותה. השתמש בזה עבור הקשר שהצוות שלך וה-AI צריכים להכיר אך איש הקשר לעולם לא אמור לראות: סיכום של שיחת טלפון שסוכן הקולי שלך בדיוק ביצע, הערה מה-CRM שלך, או הערה מקולגה. זה עובד בכל ערוץ (WhatsApp, SMS, Instagram, Messenger, Telegram, ווידג’ט הצ’אט, ערוצים מותאמים אישית וכן הלאה).
מה קורה להערה:
- היא מופיעה בצ’אט בתיבת הדואר הנכנס ככרטיס הערה צהוב, עם שם הכותב אם ציינת אחד.
- ה-AI קורא אותה כחלק מהיסטוריית השיחה, מסומנת כהערה פנימית, כך שהתגובה הבאה שלו לוקחת אותה בחשבון.
- היא לעולם לא נשלחת לאיש הקשר, לא עולה בקרדיטים של הודעות, ולא מפעילה דבר: לא תגובת AI, לא אוטומציה, לא webhook, לא התראה, ולא תגית של הודעה שלא נקראה. היא לא משהה את ה-AI ולא נחשבת כתגובה מהצוות שלך.
מצא את איש הקשר באותה דרך כמו ב-שליחה לפי זהות איש קשר: או באמצעות ה-ID שלו, או באמצעות channel בתוספת המזהה התואם. הערה נשלחת רק לאיש קשר שכבר קיים; אם אין התאמה, תתקבל שגיאת 404.
| שדה | נדרש | תיאור |
|---|---|---|
contact_id |
אחד משניים | מזהה איש הקשר. |
channel + identifier |
אחד משניים | channel פלוס phone_number (WhatsApp, WhatsApp Web, SMS), instagram_id, messenger_id או telegram_user_id, כפי שמופיע ב-שליחה לפי זהות איש קשר. |
body |
כן | טקסט ההערה, עד 4,000 תווים. מעברי שורה נשמרים. |
author |
לא | מי או מה כתב את ההערה, עד 80 תווים, לדוגמה Voice agent או Sarah (sales). מוצג בכרטיס ועבור ה-AI. |
timestamp |
לא | מתי זה קרה, במילי-שניות epoch. ברירת המחדל היא עכשיו. השתמש בזמן סיום השיחה כדי שההערה תמוקם במקום הנכון בשרשור. לא ניתן להגדיר זמן של יותר מ-5 דקות בעתיד; זמן מאוחר יותר יידחה עם שגיאת 400. |
external_id |
לא | המזהה שלך עבור הערה זו, עד 200 תווים, לדוגמה מזהה השיחה. שליחת אותו external_id עבור אותו איש קשר שוב לא תוסיף הערה שנייה; התגובה תכיל אז duplicate: true. השתמש בזה כדי ש-webhook חוזר לא יתעד את אותה שיחה פעמיים. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/notes" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"channel": "whatsapp",
"phone_number": "+31612345678",
"author": "Voice agent",
"body": "Voice call, 3:12. Asked about knee surgery waiting times, prefers a call back on Tuesday morning.",
"external_id": "call_8f2k1"
}'
תגובה (201, או 200 עם duplicate: true כאשר ה-external_id כבר נרשם)
{
"success": true,
"messageId": "note_4c1f0e...",
"contactId": "contact123"
}
הערה מופיעה ב-הצגת הודעות של איש קשר עם type: "note".
יצירת טיוטת תשובה באמצעות ה-AI
POST /contacts/{contactId}/draft-reply
מבקש מסוכן ה-AI שמנהל את השיחה לכתוב את התשובה הבאה, ומחזיר לך את הטקסט. שום דבר לא נשלח. זוהי אותה טיוטה שהכפתור יצירת תשובה בתיבת הדואר הנכנס כותב: הסוכן משתמש בהגדרות שלו, בבסיס הידע שלו ובשיחה עד כה, ועונה בשפת איש הקשר. השתמש בזה כדי להציב אדם (או את האפליקציה שלך) בין ה-AI לבין איש הקשר: משוך את הטיוטה, הצג אותה לאישור, ולאחר מכן שלח אותה באמצעות שליחה לפי מזהה איש קשר, כפי שהיא או לאחר שינויים.
- הטיוטה נכתבת על ידי הסוכן שהוקצה לאיש הקשר. איש קשר שעדיין אין לו סוכן יקבל את הסוכן שהיה עונה להודעה הבאה שלו.
- בזמן כתיבת הטיוטה, הסוכן אינו מפעיל כלים או פונקציות, לכן לא מתבצעות פעולות כמו הזמנה, תיוג, העברה או פעולות אחרות.
- שום דבר לא נשמר בשיחה, ואיש הקשר לא רואה דבר.
- טיוטה עולה באותם קרדיטים כמו תשובת AI אחת מאותו סוכן בשיחה זו, ולא עולה דבר כאשר מפתח ה-AI שלך מחובר.
- השיחה צריכה לכלול לפחות הודעה אחת.
כל שדות הגוף הם אופציונליים; גוף ריק (או ללא גוף) יוצר טיוטה לתשובה הבאה.
| שדה | נדרש | תיאור |
|---|---|---|
instruction |
לא | הנחיה חד-פעמית עבור טיוטה זו, עד 2,000 תווים, זהה ללחיצה ארוכה על ‘יצירת תשובה’ בתיבת הדואר הנכנס. לדוגמה Offer Tuesday at 3pm או Ask for their email address. |
campaign_id |
לא | יצירת טיוטה תחת קמפיין זה במקום תחת הסוכן של איש הקשר. |
purpose |
לא | chat_reply (ברירת מחדל) כותב הודעה לאיש הקשר. faq_answer כותב תשובה קצרה לשאלת איש הקשר שעומדת בפני עצמה, עבור שאלות נפוצות בבסיס הידע. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/draft-reply" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "instruction": "Offer Tuesday at 3pm for the consultation" }'
תגובה (200)
{
"success": true,
"contact_id": "contact123",
"draft": "Hi Sara, Tuesday at 3pm works for the consultation. Shall I put you down for it?"
}
400 פירושו שבשיחה עדיין אין הודעות, הקרדיטים שלך אזלו, או שלאיש הקשר אין סוכן או קמפיין ליצירת טיוטה ממנו (error מציין איזה מהם). 404 פירושו שאיש הקשר אינו קיים, או שהמפתח של חבר צוות מוגבל לאנשי קשר שהוא אינו יכול לראות. המפתח או חבר הצוות זקוקים להרשאה לעריכת הודעות.
משתמש בלקוח AI מעל MCP? אותה פעולה זמינה ככלי
generate_reply_draft.
הצגת הודעות של איש קשר
GET /contacts/{contactId}/messages
מחזיר את ההודעות של איש קשר, מהחדשה לישנה, עם דפדוף מבוסס סמן (cursor).
| פרמטר שאילתה | נדרש | תיאור |
|---|---|---|
limit |
לא | גודל עמוד. ברירת מחדל 50, מקסימום 100. |
cursor |
לא | הערך next_cursor מתגובה קודמת. מחזיר הודעות ישנות יותר מהסמן. |
filter |
לא | סינון לפי סוג תוכן: all (ברירת מחדל), text, media, או tool_use. |
direction |
לא | סינון לפי כיוון: all (ברירת מחדל), inbound (התקבל מאיש הקשר), או outbound (נשלח על ידך). |
הערה על סינון ודפדוף: המסננים
filterו-directionמוחלים על כל עמוד לאחר קריאתו, לכן עמוד מסונן יכול להכיל פחות פריטים מ-limit. ה-next_cursorעדיין מתקדם לאורך כל השיחה, לכן המשך לדפדף עד ש-next_cursorיהיהnull.
cURL
curl "https://api.youraiconnector.com/v1/contacts/contact123/messages?limit=50&direction=inbound" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ limit: "50", direction: "inbound" });
const res = await fetch(
`https://api.youraiconnector.com/v1/contacts/contact123/messages?${params}`,
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.messages, data.next_cursor);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/contacts/contact123/messages",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"limit": 50, "direction": "inbound"},
)
data = res.json()
print(data["messages"], data["next_cursor"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"messages": [
{
"id": "aB3dE5fG7hI9jK1lM2nO",
"body": "Hi! Thanks for reaching out.",
"direction": "inbound",
"channel": "whatsapp",
"status": "delivered",
"type": null,
"timestamp": "2026-06-01T10:00:00.000Z",
"media_url": null,
"media_content_type": null,
"bot_reply": false
}
],
"next_cursor": "cD4eF6gH8iJ0kL2mN3oP"
}
שדות הודעה
| שדה | תיאור |
|---|---|
id |
מזהה ייחודי של ההודעה. |
body |
תוכן הטקסט של ההודעה. עבור הודעה עם קובץ מצורף, body מתחיל בהערה בסוגריים על מה שהגיע, ואחריו כל כיתוב, לדוגמה [THE CONTACT UPLOADED AN IMAGE] Here is my CV או [THE CONTACT UPLOADED A VOICE NOTE] - [TRANSCRIPTION: ...]. הודעות קוליות וסרטונים כוללים את התמלול. |
direction |
inbound (התקבל מאיש הקשר) או outbound (נשלח על ידי החשבון שלך). |
channel |
הערוץ שבו ההודעה נשלחה או התקבלה (למשל whatsapp, sms, instagram). |
status |
סטטוס משלוח נוכחי, למשל Created, sent, delivered, read, failed. |
type |
סוג הודעה. הודעות טקסט פשוטות הן מסוג null; פעילות כלי עזר אוטומטי מסומנת כ-tool_use. |
timestamp |
זמן יצירת ההודעה בפורמט ISO 8601. |
media_url |
כתובת URL של קובץ מדיה מצורף, אם קיים. קישור זה מפסיק לעבוד 7 ימים לאחר הגעת ההודעה, בכל ערוץ (WhatsApp Business API, WhatsApp Web, Instagram, Messenger, Telegram, ווידג’ט הצ’אט והשאר). קבל קישור חדש עם הורדת קובץ מצורף של הודעה. |
media_content_type |
סוג MIME של המדיה המצורפת, אם קיימת. |
bot_reply |
true כאשר ההודעה נוצרה על ידי עוזר ה-AI. |
score |
הדירוג שלך להודעה: 1 לייק, -1 דיסלייק, 0 כאשר היא לא דורגה. ראה דירוג או סימון הודעה בכוכב. |
is_important |
true כאשר ההודעה סומנה בכוכב. |
is_deleted |
true כאשר ההודעה נמחקה. הודעות שנמחקו נשארות ברשימה אך ה-body וה-media_url שלהן ריקים. |
reactions |
תגובות אימוג’י על ההודעה, משני הצדדים. תמיד מערך — ריק כשאין כאלה. לכל כניסה יש emoji, from_phone_number, from_me (true כאשר התגובה היא שלך) ו-reacted_at. |
faq_ids_used |
מזהי ה-FAQs של בסיס הידע שהיו מול ה-AI כשהוא כתב את התגובה הזו: אלו שנבחרו עבור ההודעה האחרונה בתוספת אלו שנשמרו מוקדם יותר בשיחה. אותה רשימה נמצאת בכל הודעה של תגובה שנשלחה בכמה חלקים. תמיד מערך, ריק עבור הודעות נכנסות, הודעות שנשלחו על ידי אנשים, מעקבים אוטומטיים ותגובות AI שנשלחו לפני ה-25 בספטמבר 2026. |
faqs_used |
אותם FAQs עם השאלה שלהם: לכל כניסה יש id ו-question. question הוא null כאשר ה-FAQ נמחק מאז. |
| } |
הורדת קובץ מצורף להודעה
POST /chat-exports/media/download-url
מספק לך קישור הורדה חדש עבור הקובץ המצורף להודעה: תמונה, הודעה קולית, סרטון או מסמך. הקישור תקף ל-שעה אחת. השתמש בו כאשר ברצונך לשמור קבצים מצורפים במקום אחר (למשל, תיוק קורות חיים או הודעות קוליות שאיש קשר שלח), או כאשר ה-media_url בהודעה או Webhook של הודעה חדשה אינו נפתח עוד.
כדי למצוא הודעות עם קבצים מצורפים, רשום את הודעות איש הקשר באמצעות filter=media. ה-id של כל הודעה ומזהה איש הקשר מרכיבים את ה-messagePath.
| שדה גוף | נדרש | תיאור |
|---|---|---|
messagePath |
כן | איזו הודעה, בצורה contacts/{contactId}/messages/{messageId}. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/chat-exports/media/download-url" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"messagePath": "contacts/contact123/messages/aB3dE5fG7hI9jK1lM2nO"}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/chat-exports/media/download-url", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({ messagePath: "contacts/contact123/messages/aB3dE5fG7hI9jK1lM2nO" }),
});
const { data } = await res.json();
console.log(data.url); // download the file within the hour
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/chat-exports/media/download-url",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"messagePath": "contacts/contact123/messages/aB3dE5fG7hI9jK1lM2nO"},
)
file_url = res.json()["data"]["url"]
תגובה (200 OK):
{
"success": true,
"data": {
"url": "https://storage.googleapis.com/...",
"expiresInMs": 3600000
}
}
| שדה | תיאור |
|---|---|
data.url |
קישור ההורדה. משוך את הקובץ ישירות ממנו, אין צורך במפתח API. |
data.expiresInMs |
כמה זמן הקישור עובד, במילי-שניות (3600000 = שעה אחת). קרא לנקודת הקצה שוב עבור קישור חדש. |
| סטטוס | מתי |
|---|---|
400 |
messagePath חסר או אינו בפורמט contacts/{contactId}/messages/{messageId}, או שלהודעה אין קובץ מצורף שניתן להוריד בדרך זו. חלק מהקבצים המצורפים הישנים מאוחסנים אצל ספק הערוץ ולא ניתן להנפיק אותם מחדש, וסרטון Reels או פוסט משותף מאינסטגרם הם קישור לאינסטגרם ולא קובץ. |
403 |
איש הקשר אינו שייך לחשבון שלך. |
404 |
לא קיימת הודעה עם מזהה זה עבור איש קשר זה. |
משתמש בלקוח AI מעל MCP? אותה פעולה זמינה ככלי
get_chat_media_download_url.
רשימת סשנים של צ’אט
סשן צ’אט הוא חלון שיחה אחד עם איש קשר. הוא נפתח עם הודעה נכנסת ראשונה כאשר אין סשן פתוח, והוא נסגר אוטומטית 48 שעות לאחר ההודעה הנכנסת האחרונה של איש הקשר (כל הודעה נכנסת חדשה דוחה את הסגירה ב-48 שעות נוספות). סיום צ’אט על ידי ה-AI אינו סוגר את הסשן; הוא רק מפעיל את ה-webhook של Chat Concluded. סשנים הם הדרך שבה ניתן לחלק היסטוריה ארוכה לשיחות קריאות במקום לרשימה אחת אינסופית.
סשנים אחרונים בכל אנשי הקשר
GET /chat-sessions/recent
מחזיר את הסשנים שהחלו ב-X השעות האחרונות, מהחדש לישן, עבור כל איש קשר בחשבון.
| פרמטר שאילתה | נדרש | תיאור |
|---|---|---|
hours |
כן | כמה שעות אחורה לבדוק. חייב להיות מספר שלם חיובי. |
status |
לא | החזר רק סשנים עם סטטוס זה: ChatSessionOpened או ChatSessionClosed. |
limit |
לא | מספר מקסימלי של סשנים להחזרה. ברירת מחדל 100, מקסימום 100. |
includeMessages |
לא | true מוסיף מערך messages לכל סשן. כבוי כברירת מחדל מכיוון שהוא הופך את התגובה להרבה יותר גדולה. |
cURL
curl "https://api.youraiconnector.com/v1/chat-sessions/recent?hours=24&status=ChatSessionClosed" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const params = new URLSearchParams({ hours: "24", status: "ChatSessionClosed" });
const res = await fetch(`https://api.youraiconnector.com/v1/chat-sessions/recent?${params}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.data.total_sessions, data.data.sessions);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/chat-sessions/recent",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"hours": 24, "status": "ChatSessionClosed"},
)
data = res.json()["data"]
print(data["total_sessions"], data["sessions"])
תגובה (200 OK):
{
"success": true,
"data": {
"hours_ago": 24,
"total_sessions": 2,
"sessions": [
{
"session_id": "session456",
"contact_id": "contact123",
"contact_name": "Jane Doe",
"contact_phone": "+31612345678",
"contact_email": "jane@example.com",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"status": "ChatSessionClosed",
"tag": "Booking enquiry"
}
]
}
}
כל הסשנים עבור איש קשר אחד
GET /chat-sessions/{contactId}
מחזיר כל סשן צ’אט עבור איש קשר בודד. אותם פרמטרים status, limit ו-includeMessages כמו לעיל — hours לא חל כאן.
cURL
curl "https://api.youraiconnector.com/v1/chat-sessions/contact123?limit=20" \
-H "X-API-Key: YOUR_API_KEY"
תגובה (200 OK):
{
"success": true,
"data": {
"contact_id": "contact123",
"contact_name": "Jane Doe",
"total_sessions": 2,
"sessions": [
{
"id": "session456",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"status": "ChatSessionClosed",
"tag": "Booking enquiry"
}
]
}
}
שמות שדות מזהה הסשן שונים בין שני נקודות הקצה. רשימת הסשנים האחרונים קוראת לו
session_id(הוא גם נושא את פרטי איש הקשר, מכיוון שסשנים מגיעים מאנשי קשר רבים); הרשימה לפי איש קשר קוראת לוid. כל ערך הוא מה שאתה מעביר כ-{sessionId}בעת משיכת השרשור המלא להלן.
כאשר includeMessages=true, כל סשן מקבל מערך messages שהרשומות בו נושאות id, body, direction, timestamp, type, channel ו-status.
שליפת שרשור שיחה
GET /contacts/{contactId}/chat-sessions/{sessionId}/messages
סשן צ’אט מקבץ את ההודעות של איש קשר לחלון שיחה אחד. נקודת קצה זו מחזירה את כל השרשור של סשן בודד, מהישן ביותר לחדש ביותר, יחד עם המטא-דאטה של הסשן. ניתן למצוא מזהי סשן עבור איש קשר דרך נקודות הקצה של סשני צ’אט.
cURL
curl "https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.session, data.messages);
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/contacts/contact123/chat-sessions/session456/messages",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["session"], data["messages"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"session": {
"id": "session456",
"status": "ChatSessionClosed",
"start_date_time": "2026-06-01T09:55:00.000Z",
"end_date_time": "2026-06-01T10:20:00.000Z",
"tag": "Booking enquiry"
},
"messages": [
{
"id": "aB3dE5fG7hI9jK1lM2nO",
"body": "Hi! Thanks for reaching out.",
"direction": "inbound",
"channel": "whatsapp",
"status": "delivered",
"type": null,
"timestamp": "2026-06-01T09:55:00.000Z",
"media_url": null,
"media_content_type": null,
"bot_reply": false
}
]
}
האובייקט session מדווח על status (ChatSessionOpened בזמן פעילות, ChatSessionClosed לאחר סיום), start_date_time, end_date_time, ו-tag קריא לבני אדם. המערך messages משתמש באותם שדות הודעה כמו נקודת הקצה של הרשימה.
עריכה, מחיקה ותגובה להודעות
נקודות קצה אלו משנות הודעה לאחר שנשלחה. שתיים מהן פונות לערוץ של איש הקשר וגם לעותק שלך, לכן קרא את מבוא הסעיף לפני חיבורן — מה שאפשרי תלוי לחלוטין בערוץ שבו מתקיימת השיחה.
מה כל ערוץ מאפשר
| פעולה | ערוצים שניתן לשנות בהם את העתק איש הקשר | מגבלת זמן |
|---|---|---|
| עריכת הודעה שנשלחה | יישומון צ’אט, WhatsApp Web (הודעות טקסט בלבד), Telegram, LinkedIn | אין ביישומון הצ’אט, 15 דקות ב-WhatsApp Web, 48 שעות ב-Telegram, 60 דקות ב-LinkedIn |
| מחיקה עבור כולם | יישומון צ’אט, WhatsApp Web, Telegram, LinkedIn | 60 דקות ב-LinkedIn; לאחרים אין מגבלה מפורסמת |
| תגובה עם אימוג’י | WhatsApp Web, Telegram | אין |
בכל ערוץ אחר — WhatsApp Business API, SMS, אינסטגרם, מסנג’ר, אימייל, LINE, ערוצים מותאמים אישית — מחיקה עדיין מסירה את ההודעה מתיבת הדואר הנכנס שלך, אך איש הקשר שומר על העותק שלו, ועריכה או תגובה אינן אפשריות כלל.
עריכת הודעה
POST /contacts/{contactId}/messages/{messageId}/edit
משכתב הודעה שכבר שלחת, במכשיר של איש הקשר ובעותק שלך.
| שדה | נדרש | תיאור |
|---|---|---|
body |
כן | טקסט ההודעה החדש. אסור שיהיה ריק ולא ארוך יותר ממה שהערוץ מאפשר בהודעה אחת (אותן מגבלות לכל ערוץ כמו ב-שליחה לפי מזהה איש קשר; 4,096 כאשר להודעה אין ערוץ). |
בניגוד למחיקה, פעולה זו נכשלת באופן גלוי כאשר הערוץ מסרב: אתה מקבל 409 והעותק שלך נשאר בדיוק כפי שהוא אצל איש הקשר, מכיוון שהצגת עריכה שהם מעולם לא קיבלו תוציא את שני הצדדים מסנכרון. השדה edit_reason מפרט את הסיבה — חלון העריכה של הערוץ נסגר, הערוץ מנותק, להודעה יש קובץ מצורף שהערוץ אינו יכול לערוך (media_not_editable: ב-WhatsApp Web ניתן לערוך רק הודעות טקסט, לא את הטקסט תחת תמונה, סרטון או קובץ), או שמשהו אחר השתבש.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Sorry - I meant Thursday at 3pm." }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ body: "Sorry - I meant Thursday at 3pm." }),
}
);
const data = await res.json();
console.log(data.edited, data.edit_reason);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/edit",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"body": "Sorry - I meant Thursday at 3pm."},
)
data = res.json()
print(data.get("edited"), data.get("edit_reason"))
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"edited": true,
"edit_reason": "edit_dispatched"
}
אם הערוץ לא יקבל את העריכה, תקבל במקום זאת 409, ושום דבר לא ישתנה:
{
"success": false,
"error": "The message could not be edited",
"edit_reason": "channel_disconnected"
}
הודעה שכבר נמחקה, ערוץ שלא יכול לערוך כלל, והודעה ישנה מדי עבור הערוץ שלה, כולם מחזירים 400 — הבקשה לעולם לא מגיעה לערוץ.
מחיקת הודעה אחת
DELETE /contacts/{contactId}/messages/{messageId}
מסיר את ההודעה מהשיחה שלך, ובמקומות שבהם הערוץ מאפשר זאת, מושך בחזרה גם את העותק של איש הקשר. אין גוף בקשה.
פעולה זו תמיד עונה 200 כאשר ההודעה הייתה קיימת, גם אם לא ניתן היה למשוך בחזרה את העותק של איש הקשר — העותק שלך אכן נמחק, כך ששגיאה תהיה מטעה. קרא את שלושת השדות בתגובה כדי לומר למשתמש מה קרה בפועל:
| שדה | תיאור |
|---|---|
revoke_supported |
האם ערוץ זה יכול למשוך הודעות בחזרה בכלל. |
revoked |
האם העותק במכשיר של איש הקשר הוסר. |
revoke_reason |
מדוע הוא לא הוסר, כאשר revoked הוא false — לדוגמה revoke_window_closed או already_deleted. |
cURL
curl -X DELETE "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
{ method: "DELETE", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.revoked, data.revoke_reason);
Python
import requests
res = requests.delete(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["revoked"], data["revoke_reason"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"revoke_supported": true,
"revoked": true,
"revoke_reason": "revoke_dispatched"
}
הודעות שנמחקו אינן מוסרות מהיסטוריית השיחה. הן נשארות ב-
GET /contacts/{contactId}/messagesעםis_deleted: trueו-bodyריק ו-media_url.
מחיקת מספר הודעות בבת אחת
POST /contacts/{contactId}/messages/bulk-delete
מנקה קבוצת הודעות מהצד שלך בלבד. גוף ההודעות והקבצים המצורפים מתרוקנים, אך דבר אינו נמשך חזרה ממכשיר איש הקשר — כדי למשוך הודעה חזרה גם משם, מחק אותה אחת אחת באמצעות נקודת הקצה להודעה בודדת שלעיל.
| שדה | נדרש | תיאור |
|---|---|---|
message_ids |
כן | מערך לא ריק של מזהי הודעות, עד 500 לבקשה. messageIds מתקבל ככינוי. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "message_ids": ["msg_1", "msg_2"] }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ message_ids: ["msg_1", "msg_2"] }),
}
);
console.log((await res.json()).deleted);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/bulk-delete",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"message_ids": ["msg_1", "msg_2"]},
)
print(res.json()["deleted"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"deleted": 2
}
הגב להודעה
POST /contacts/{contactId}/messages/{messageId}/react
מוסיף תגובת אימוג’י משלך להודעה, או מסיר אותה על ידי שליחת מחרוזת ריקה. התגובות של איש הקשר לעולם אינן מושפעות.
| שדה | נדרש | תיאור |
|---|---|---|
emoji |
כן | האימוג’י להגבה, או "" להסרת התגובה שלך. חייב להיות מחרוזת בודדת ללא רווחים, באורך של עד 16 תווים. |
בדומה לעריכה, פעולה זו נכשלת במקום להציג תגובה שאיש הקשר מעולם לא קיבל, והכישלון מציין אם כדאי לנסות שוב:
422— לא ניתן להעביר זאת לעולם בשיחה זו: הערוץ אינו תומך בתגובות, להודעה אין מזהה בצד הערוץ, או שהאימוג’י נמצא מחוץ לקבוצה שהערוץ מאפשר.409— הערוץ לא היה זמין לרגע. ניסיון חוזר עשוי להצליח.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "emoji": "👍" }'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ emoji: "👍" }),
}
);
const data = await res.json();
console.log(data.reactions);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1/react",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"emoji": "👍"},
)
print(res.json()["reactions"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"reaction_supported": true,
"reaction_reason": "reaction_dispatched",
"reactions": [
{
"emoji": "👍",
"from_phone_number": "+31612345678",
"from_me": true,
"reacted_at": "2026-06-01T10:05:00.000Z"
}
]
}
המערך reactions הוא קבוצת התגובות המלאה שקיימת כעת על ההודעה, שלך ושל איש הקשר. ב-409 או ב-422 הוא מוחזר ללא שינוי, כך שלקוח המרנדר ישירות ממנו לעולם לא יציג תגובה שלא הועברה.
דירוג או סימון הודעה בכוכב
PATCH /contacts/{contactId}/messages/{messageId}
מדרג הודעה באגודל למעלה או למטה ו/או מסמן אותה בכוכב כחשובה. זהו רישום בצד שלך בלבד — דבר אינו נשלח לאיש הקשר.
| שדה | נדרש | תיאור |
|---|---|---|
score |
לא | 1 לייק, -1 דיסלייק, 0 מנקה את הדירוג. |
is_important |
לא | true מסמן את ההודעה בכוכב, false מסיר את הסימון. חייב להיות בוליאני אמיתי, לא המחרוזת "true". |
שלח לפחות אחד משניהם, אחרת תקבל 400. רק מה שאתה שולח נכתב, לכן סימון הודעה בכוכב לעולם לא מנקה את הדירוג שלה ולהיפך — והתגובה מחזירה רק את השדות ששלחת.
cURL
curl -X PATCH "https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "score": 1, "is_important": true }'
JavaScript
await fetch("https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1", {
method: "PATCH",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ score: 1, is_important: true }),
});
Python
import requests
requests.patch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/msg_1",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"score": 1, "is_important": True},
)
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"message_id": "msg_1",
"score": 1,
"is_important": true
}
סימון הודעות כנקראו
ניתן לנקות את מצב ה’לא נקרא’ עבור הודעות ספציפיות או עבור השיחה כולה.
סימון הודעות ספציפיות כנקראו
POST /contacts/{contactId}/messages/mark-read
העבר את המזהים של ההודעות שברצונך לסמן כנקראו.
| שדה | נדרש | תיאור |
|---|---|---|
message_ids |
כן | מערך לא ריק של מזהי הודעות (עד 500 לבקשה). |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message_ids": ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"]
}'
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read",
{
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
message_ids: ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"],
}),
}
);
const data = await res.json();
console.log(data.marked_read);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/messages/mark-read",
headers={
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
json={"message_ids": ["aB3dE5fG7hI9jK1lM2nO", "cD4eF6gH8iJ0kL2mN3oP"]},
)
print(res.json()["marked_read"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123",
"marked_read": 2
}
סימון כל הצ’אט כנקרא
POST /contacts/{contactId}/mark-read
מנקה את תגית ה’לא נקרא’ עבור כל השיחה של איש הקשר בתיבת הדואר הנכנס. אין צורך בגוף בקשה.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/mark-read" \
-H "X-API-Key: YOUR_API_KEY"
JavaScript
const res = await fetch(
"https://api.youraiconnector.com/v1/contacts/contact123/mark-read",
{ method: "POST", headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.success);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts/contact123/mark-read",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["success"])
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123"
}
סימון כל הצ’אט כלא נקרא
POST /contacts/{contactId}/mark-unread
מחזיר את תגית ה’לא נקרא’ לשיחה — שימושי כאשר מישהו בצוות שלך פתח צ’אט אך מעביר אותו הלאה. אין צורך בגוף בקשה.
זהו דגל של תיבת דואר נכנסת בלבד: הוא לא משנה מתי השיחה נקראה לאחרונה, לכן לא נשלח אישור קריאה לאיש הקשר בערוצים התומכים בכך.
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/mark-unread" \
-H "X-API-Key: YOUR_API_KEY"
תגובה (200 OK):
{
"success": true,
"contact_id": "contact123"
}
ייצוא שיחה
ייצוא נותן לך שיחה שלמה כתמליל קריא, במקום לדפדף בין הודעות. כל נקודת קצה של ייצוא מקבלת filter של all (ברירת מחדל), text, media או tool_use, בהתאם למסנן ברשימת ההודעות.
ייצוא צ’אט של איש קשר אחד
GET /chat-exports/{contactId}
| פרמטר שאילתה | נדרש | תיאור |
|---|---|---|
format |
לא | txt (ברירת מחדל) מחזיר קישור להורדה של תמליל בטקסט פשוט. json מחזיר את ההודעות כנתונים מובנים בתגובה. |
filter |
לא | all (ברירת מחדל), text, media או tool_use. |
cURL
curl "https://api.youraiconnector.com/v1/chat-exports/contact123?format=json" \
-H "X-API-Key: YOUR_API_KEY"
Python
import requests
res = requests.get(
"https://api.youraiconnector.com/v1/chat-exports/contact123",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"format": "json"},
)
print(res.json()["data"]["messages"])
תגובה עם format=json (200 OK):
{
"success": true,
"data": {
"contact": {
"id": "contact123",
"name": "Jane Doe",
"phone": "+31612345678",
"email": "jane@example.com"
},
"messages": [
{
"body": "Hi! I have a question about my order.",
"direction": "inbound",
"timestamp": "2026-06-01T09:55:00.000Z",
"type": "text",
"media_url": null,
"media_content_type": null,
"name": null,
"args": null
}
]
}
}
עם format=txt (ברירת המחדל), data הוא במקום זאת קישור להורדה של קובץ התמליל שנוצר:
{
"success": true,
"data": "https://storage.googleapis.com/.../chat-export-contact123-....txt"
}
קישור ההורדה הוא לזמן קצר. משוך את הקובץ ברגע שאתה מקבל את הקישור במקום לאחסן אותו — בקש ייצוא חדש כאשר תזדקק לתמליל שוב.
ייצוא כל השיחות האחרונות
GET /chat-exports/recent
מייצא את השיחות של כל אנשי הקשר שהיו פעילים ב-X השעות האחרונות, בקריאה אחת.
| פרמטר שאילתה | נדרש | תיאור |
|---|---|---|
hours |
כן | כמה שעות פעילות לבדוק לאחור. חייב להיות מספר שלם וחיובי. |
format |
לא | json (ברירת מחדל) מחזיר רשומה אחת לכל איש קשר. txt מחזיר קובץ טקסט יחיד להורדה המכיל את כל השיחות. |
limit |
לא | מספר מרבי של אנשי קשר לייצוא. ברירת מחדל 50, מקסימום 100. |
filter |
לא | all (ברירת מחדל), text, media או tool_use. |
cURL
curl "https://api.youraiconnector.com/v1/chat-exports/recent?hours=24&limit=25" \
-H "X-API-Key: YOUR_API_KEY"
תגובה (200 OK):
{
"success": true,
"data": {
"hours_ago": 24,
"total_contacts": 2,
"exports": [
{
"contactId": "contact123",
"contactName": "Jane Doe",
"phoneNumber": "+31612345678",
"email": "jane@example.com",
"messageCount": 12,
"chatExport": "Acme Export - Jane Doe\nPhone: +31612345678\n..."
}
]
}
}
עם format=txt התגובה היא קובץ הטקסט עצמו, שנשלח כהורדה במקום כ-JSON.
קריאה זו מושכת את ההיסטוריה המלאה של כל איש קשר תואם, לכן יש לשמור על
hoursו-limitצנועים בחשבונות עמוסים.
שליחת תמליל בדוא"ל לאיש הקשר
POST /chat-exports/{contactId}/email
שולח לאיש הקשר את תמליל השיחה שלו בדוא"ל — תהליך ה-“שלח לי את הצ’אט הזה במייל”, המופעל מהמערכת שלך.
| שדה | נדרש | תיאור |
|---|---|---|
recipient_email |
לא | לאן לשלוח. כברירת מחדל משתמש בכתובת הדוא"ל השמורה של איש הקשר. |
via |
לא | auto (ברירת מחדל) בוחר את הנתיב הטוב ביותר, transactional שולח כדוא"ל מערכת, email_channel שולח מערוץ הדוא"ל המחובר שלך. |
note |
לא | שורה קצרה ממך שתוצג מעל התמליל. עד 1000 תווים. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/chat-exports/contact123/email" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "note": "Here is a copy of our chat, as promised." }'
תגובה (200 OK):
{
"success": true,
"data": {
"via": "transactional",
"recipientEmail": "jane@example.com",
"messageCount": 42,
"omittedCount": 0
}
}
omittedCount מציין כמה מההודעות הישנות ביותר הושמטו כדי לשמור על אורך סביר של הדוא"ל. 200 פירושו שהתמליל נוצר והוכנס לתור לשליחה, לא שהוא כבר הגיע לתיבת הדואר הנכנס.
השהיה או חידוש של ה-AI עבור איש קשר בודד
PUT /contacts/{contactId}
הגדירו את is_bot_active ל-false כדי לעצור את ה-AI מלהשיב לאיש קשר בודד, וחזרה ל-true כדי להחזיר את השיחה. זהו מתג ההשתלטות שתרצו כאשר אדם נכנס לשיחה: הודעות יוצאות שאתם שולחים באמצעות ה-API עדיין נשלחות בזמן שהבוט מושהה.
cURL
curl -X PUT "https://api.youraiconnector.com/v1/contacts/contact123" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "is_bot_active": false }'
JavaScript
await fetch("https://api.youraiconnector.com/v1/contacts/contact123", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ is_bot_active: false }),
});
Python
import requests
requests.put(
"https://api.youraiconnector.com/v1/contacts/contact123",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"is_bot_active": False},
)
תגובה
{
"success": true,
"contact_id": "contact123"
}
השהיה כחלק מהתשובה
אם אדם לוקח פיקוד על ידי שליחת תשובה, ניתן להשהות את הבוט באותה בקשה במקום לבצע קריאה שנייה. POST /contacts/{contactId}/send-message מקבל את דגלי האופציה הבאים:
| שדה | תיאור |
|---|---|
pauseBot |
true משהה את ה-AI עבור איש קשר זה בעת שליחת ההודעה. |
clearIncompleteReply |
true מבטל תשובת בוט חצי גמורה כך שלא תתחדש לאחר מכן. |
human_reply |
true מסמן את ההודעה כתשובה של חבר צוות ומבטל תשובה שה-AI תזמן. השהיה עדיין דורשת את pauseBot. |
curl -X POST "https://api.youraiconnector.com/v1/contacts/contact123/send-message" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Hi, Sarah here - taking over from the assistant.",
"pauseBot": true,
"clearIncompleteReply": true,
"human_reply": true
}'
התגובה כוללת את "botPaused": true כאשר ההשהיה הוחלה.
סימון איש קשר כפרטי באמצעות
POST /contacts/bulk-flagמשהה גם את הבוט עבורו. ראו אנשי קשר לרשימת השדות המלאה.
בניית תיבת דואר נכנס משלכם
כל מה שתיבת דואר נכנס צריכה נמצא בדף זה וב-אנשי קשר:
| מה אתה צריך | נקודת קצה (Endpoint) |
|---|---|
| רשימת שיחות | GET /contacts |
| קריאת שיחה | GET /contacts/{contactId}/messages |
| רשימת סשנים של צ’אט של איש קשר | GET /chat-sessions/{contactId} |
| לראות מה הגיע לאחרונה | GET /chat-sessions/recent |
| קריאת סשן צ’אט אחד | GET /contacts/{contactId}/chat-sessions/{sessionId}/messages |
| שליחת תשובה ידנית | POST /contacts/{contactId}/send-message |
| תיקון תשובה ששלחת זה עתה | POST /contacts/{contactId}/messages/{messageId}/edit |
| הסרת הודעה | DELETE /contacts/{contactId}/messages/{messageId} |
| מחיקת מספר הודעות | POST /contacts/{contactId}/messages/bulk-delete |
| תגובה עם אימוג’י | POST /contacts/{contactId}/messages/{messageId}/react |
| דירוג או סימון הודעה בכוכב | PATCH /contacts/{contactId}/messages/{messageId} |
| סימון כנקרא | POST /contacts/{contactId}/mark-read |
| החזרת צ’אט לצוות | POST /contacts/{contactId}/mark-unread |
| ייצוא תמליל | GET /chat-exports/{contactId} |
| השהיה או חידוש של ה-AI | PUT /contacts/{contactId} עם is_bot_active |
לקבלת עדכונים בזמן אמת, הירשמו לאירועי New Message, Replies, Human Alerted ו-Chat Concluded באמצעות Webhooks במקום לבצע סקר (polling) ל-API זה לפי טיימר.
שגיאות ב-API של הודעות
נקודות קצה של הודעות מחזירות את מעטפת השגיאה הסטנדרטית:
{
"success": false,
"error": "Contact not found"
}
| סטטוס | מתי זה קורה בנקודת קצה של הודעה |
|---|---|
400 |
שדה נדרש חסר או פרמטר לא תקין (limit, hours, filter, direction, status שגויים, מערך message_ids ריק או מעל 500, cursor לא תקין, עריכה body ריקה או ארוכה מדי, score מחוץ ל--1/0/1, או אימוג’י עם רווחים או מעל 16 תווים). מוחזר גם כאשר לא ניתן לערוך הודעה כלל — היא נמחקה, לערוץ שלה אין אפשרות עריכה, או שהיא מעבר לחלון העריכה של אותו ערוץ. |
404 |
איש הקשר, סשן הצ’אט או אחד ממזהי ההודעות שסופקו לא נמצאו. |
409 |
הערוץ לא יקבל את השינוי כרגע. דבר לא נכתב: בעריכה, edit_reason מסביר מדוע; בתגובה, הערוץ לא היה זמין לרגע וניסיון חוזר עשוי לעבוד. |
422 |
איש הקשר אינו יכול לקבל הודעות יוצאות (נא לא להפריע, פרטי, או ערוץ שאינו נתמך), או שלא ניתן להעביר תגובה בשיחה זו (reaction_reason מציין איזו). |
הקודים המשותפים שכל נקודת קצה יכולה להחזיר — 401, 403 (התוכנית שלך אינה כוללת גישת API), 429 (מגבלת קצב) ו-500 — מפורטים עם הנחיות לניסיון חוזר ב-שגיאות ועימוד.