وبسرویس API
راهنمای کامل API ایلاچت برای ساخت گفتوگو، ارسال و دریافت پیام، ثبت لید و همگامسازی محصول.
وبسرویس ایلاچت برای زمانی است که رابط گفتوگو را در Backend، اپلیکیشن، CRM، فروشگاه یا سامانه پشتیبانی خودتان میسازید. از طریق API میتوانید گفتگو ایجاد کنید، پیام بفرستید و دریافت کنید، اطلاعات مخاطب را ثبت کنید و محصولات را با پایگاه دانش چتبات همگام نگه دارید.
این API برای ارتباط سروربهسرور طراحی شده است. توکن را داخل JavaScript مرورگر، اپلیکیشن قابل مهندسی معکوس، HTML یا مخزن عمومی قرار ندهید. برای آشنایی با کاربردها و راهنمای تصویری، صفحه وبسرویس API ایلاچت را ببینید.
فعالسازی و دریافت کلید API
- وارد پنل ایلاچت شوید و چتبات موردنظر را انتخاب کنید.
- وارد «تنظیمات» شوید.
- بخش «استفاده و انتشار» را باز کنید.
- گزینه «وب سرویس API» را انتخاب کنید.
- API را فعال کنید، توکن API را کپی کنید و در صورت نیاز IPهای مجاز را ثبت کنید.
توکن شناسه محرمانه چتبات شماست و تمام درخواستهای دارای آن با دسترسی همان چتبات اجرا میشوند. آن را فقط در Secret Manager یا متغیر محیطی Backend نگه دارید:
ILACHAT_API_TOKEN=YOUR_BOT_API_TOKENتنظیمات درخواستهای API
توکن فقط در مرورگر فعلی ذخیره میشود و برای تمام endpointهای این مستندات استفاده خواهد شد.
توکن واردشده در localStorage همین مرورگر نگهداری میشود. در رایانه اشتراکی، پس از پایان کار از دکمه «حذف توکن» استفاده کنید و توکن را فقط در دامنه مستندات مورداعتماد وارد نمایید.
آدرس پایه و احراز هویت
https://api.ila.chat/api/botدرخواستها و پاسخهای معمول با JSON مبادله میشوند. فقط هنگام آپلود فایل از multipart/form-data استفاده کنید.
api-token: YOUR_BOT_API_TOKEN
Accept: application/json
Content-Type: application/jsonاحراز هویت از نوع Bearer نیست؛ توکن باید دقیقاً در هدر api-token ارسال شود. پاسخ موفق معمولاً با HTTP 200 و status: "success" برمیگردد. در خطا، مقدار status برابر error است؛ همیشه علاوه بر HTTP Status، فیلد status بدنه را هم بررسی کنید.
{
"status": "error",
"message": "Error text",
"code": 400
}endpointهای فهرستی آبجکت pagination شامل total، current_page و last_page دارند. در پنل میتوانید IPهای مجاز را نیز ثبت کنید؛ فهرست خالی یعنی درخواست از همه IPها پذیرفته میشود و حداکثر ۵ IP یکتا قابل ثبت است.
محدودیت عمومی فعلی API برابر ۷۰ درخواست در هر ۳ دقیقه است. برای 429 و خطاهای موقت 5xx از retry با backoff و jitter استفاده کنید؛ خطاهای اعتبارسنجی را بدون اصلاح درخواست تکرار نکنید.
شروع سریع
۱. بررسی اتصال
curl "https://api.ila.chat/api/bot/settings" \
-H "api-token: YOUR_BOT_API_TOKEN" \
-H "Accept: application/json"{
"status": "success",
"bot": {
"name": "دستیار فروش",
"avatar": "https://app.ila.chat/storage/example/avatar.png",
"allow_ips": ["203.0.113.10"]
}
}۲. ایجاد گفتگو و ثبت لید
curl -X POST "https://api.ila.chat/api/bot/conversation/new" \
-H "api-token: YOUR_BOT_API_TOKEN" \
-H "Accept: application/json"{
"status": "success",
"conversation": { "id": "68af12035d54f40612000001" }
}مقدار conversation.id را کنار شناسه کاربر یا Session خود ذخیره کنید. سپس در صورت وجود اطلاعات مخاطب، آنها را ثبت کنید:
curl -X PATCH "https://api.ila.chat/api/bot/conversation/68af12035d54f40612000001/leads" \
-H "api-token: YOUR_BOT_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"leads":[{"key":"name","value":"علی رضایی"},{"key":"user_id","value":"customer-1024"}]}'{ "status": "success" }۳. ارسال پیام و نمایش پاسخ
curl -X POST "https://api.ila.chat/api/bot/conversation/68af12035d54f40612000001/message/send" \
-H "api-token: YOUR_BOT_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"message":"سلام، وضعیت سفارش من چیست؟","temp_id":1001}'{
"status": "success",
"message": {
"id": "68af12035d54f40612000021",
"bot": false,
"message": "سلام، وضعیت سفارش من چیست؟",
"images": [], "videos": [], "files": [], "voices": [], "links": [],
"temp_id": "1001", "created_at": "2026-08-27T10:31:00.000000Z", "type": "message"
},
"answers": [{
"id": "68af12035d54f40612000022", "bot": true,
"message": "برای پیگیری، شماره سفارش را بفرستید.",
"images": [], "videos": [], "files": [], "voices": [], "links": [],
"created_at": "2026-08-27T10:31:01.000000Z", "type": "message"
}],
"conversation": { "id": "68af12035d54f40612000001", "service": "api", "bot_answers_status": true }
}answers ممکن است خالی باشد؛ برای نمونه وقتی پاسخ خودکار خاموش است، پردازش بعداً انجام میشود یا تعامل بیشتری لازم است. بنابراین دریافت پیامهای جدید را حتی پس از پاسخ ارسال پیام ادامه دهید.
چرخه گفتگو
- برای اولین تعامل، یک گفتگو ایجاد کنید.
conversation_idرا کنار شناسه کاربر یا Session ذخیره کنید.- لیدهای شناختهشده را ثبت یا بهروزرسانی کنید.
- پیام کاربر را بفرستید و پاسخهای
answersرا نمایش دهید. - برای پیامهای بعدی بات یا اپراتور، فهرست پیامها را با
after_idیاsinceبخوانید. - در Session بعدی همان کاربر، در صورت مناسببودن سیاست کسبوکار، همان گفتگو را ادامه دهید.
مرجع تعاملی API
در این بخش همه درخواستهای عمومی API، پارامترها، بدنه درخواست و نمونه پاسخهای موفق و خطا را میبینید. میتوانید هر درخواست را با توکن خودتان آزمایش کنید.
گفتگوها و لیدها
تنظیمات نمایشی و فهرست IPهای مجاز چتبات متصل به توکن API را برمیگرداند.
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/settings"Selected bot settings
{
"status": "success",
"bot": {
"name": "ربات هوش مصنوعی ایلاچت",
"avatar": "https://app.ila.chat/storage/bots/1/63970.png",
"allow_ips": []
}
}گفتوگوها را با ترتیب آخرین فعالیت دریافت میکند. برای رفتن به صفحههای بعدی از پارامتر page استفاده کنید.
Query Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| page | The result page to retrieve. Pagination starts at 1 and each page contains up to 30 records. | integer | Range: 1 to ∞ · Example: 1 · Default: 1 |
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/conversation/list"Paginated conversations
{
"status": "success",
"conversations": [
{
"id": "674b93a5572af1d61807cb62",
"service": "api",
"title": "پیگیری سفارش",
"bot_start_at": null,
"bot_answers_status": true,
"messages_count": 5
}
],
"pagination": {
"total": 1,
"current_page": 1,
"last_page": 1
}
}یک گفتوگوی خالی برای کانال API میسازد و شناسه موردنیاز درخواستهای بعدی را برمیگرداند.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/conversation/new"New conversation identifier
{
"status": "success",
"conversation": {
"id": "6787ca5ced135f1ca50e57e2"
}
}اطلاعات گفتوگو، فیلدهای شناختهشده مخاطب، لیدهای ثبتشده و وضعیت پاسخگویی بات را برمیگرداند.
Path Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| conversationId* | The 24-character conversation identifier returned by Create a new conversation. It must belong to the bot associated with the current API token. | string | Pattern: ^[a-fA-F0-9]{24}$ · Example: "6787ca5ced135f1ca50e57e2" |
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/conversation/string/details"Conversation details
{
"status": "success",
"conversation": {
"id": "67866b145c76ea516202fce3",
"service": "api",
"name": "علی رضایی",
"email": "ali@example.com",
"phone": "+989121234567",
"leads": [
{
"key": "name",
"name": "نام و نام خانوادگی",
"value": "علی رضایی"
}
],
"title": "پیگیری سفارش",
"IPs": [
"203.0.113.10"
],
"bot_start_at": null,
"bot_answers_status": true
}
}اطلاعات شناختهشده مخاطب را روی گفتوگو ذخیره میکند. ارسال دوباره یک کلید، مقدار قبلی همان کلید را بهروزرسانی میکند.
Path Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| conversationId* | The 24-character conversation identifier returned by Create a new conversation. It must belong to the bot associated with the current API token. | string | Pattern: ^[a-fA-F0-9]{24}$ · Example: "6787ca5ced135f1ca50e57e2" |
Request Body
application/json
| Name | Description | Type | Accepted values |
|---|---|---|---|
| leads* | Contact fields to create or update on the conversation. | array<object> | Items: 1–50 |
| leads[].key* | Existing contact-field key | string | Example: "name" |
| leads[].value* | Value stored for the field. | string | Length: 0–255 · Example: "علی رضایی" |
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/conversation/string/leads" \ -H "Content-Type: application/json" \ -d '{ "leads": [ { "key": "name", "value": "علی رضایی" }, { "key": "mobile", "value": "+989121234567" } ] }'Leads processed
{
"status": "success"
}پیامها و فایلها
فهرست پیامها در حالت عادی از جدید به قدیم مرتب میشود. با after_id یا since، پیامها از قدیم به جدید برمیگردند تا مستقیم به انتهای رابط اضافه شوند. این دو پارامتر را همزمان نفرستید. برای polling پایدار، after_id پیشنهاد میشود.
تاریخچه پیامها یا پیامهای جدید را با after_id یا since برمیگرداند. این دو فیلتر را همزمان ارسال نکنید.
Path Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| conversationId* | The 24-character conversation identifier returned by Create a new conversation. It must belong to the bot associated with the current API token. | string | Pattern: ^[a-fA-F0-9]{24}$ · Example: "6787ca5ced135f1ca50e57e2" |
Query Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| page | The result page to retrieve. Pagination starts at 1 and each page contains up to 30 records. | integer | Range: 1 to ∞ · Example: 1 · Default: 1 |
| after_id | Returns only messages created after this message. Use it for incremental polling; do not send it together with since. | string | Pattern: ^[a-fA-F0-9]{24}$ · Example: "6787cb392b018cb64c0f2075" |
| since | Returns only messages created after this RFC 3339 timestamp. Use it for time-based polling; do not send it together with after_id. | string (date-time) | Example: "2026-08-27T10:30:00Z" |
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/conversation/string/message/list"Messages, sorted by creation time in ascending order
{
"status": "success",
"messages": [
{
"id": "6787cb392b018cb64c0f2075",
"bot": true,
"message": "سلام علیکم! چطور میتوانم به شما کمک کنم؟",
"images": [],
"videos": [],
"files": [],
"voices": [],
"links": [],
"user_id": null,
"user": [],
"reply_to_message_id": null,
"temp_id": null,
"created_at": "2026-08-27T10:31:01.000000Z",
"type": "message"
}
],
"pagination": {
"total": 1,
"current_page": 1,
"last_page": 1
}
}پیام کاربر را با امکان ارسال فایل ثبت میکند و پاسخهای تولیدشده همزمان توسط بات را برمیگرداند.
Path Parameters
| Name | Description | Type | Accepted values |
|---|---|---|---|
| conversationId* | The 24-character conversation identifier returned by Create a new conversation. It must belong to the bot associated with the current API token. | string | Pattern: ^[a-fA-F0-9]{24}$ · Example: "6787ca5ced135f1ca50e57e2" |
| Name | Description | Type | Accepted values |
|---|---|---|---|
| message | User message text. Required when no file is attached. | string | Length: 0–10000 · Example: "سلام علیکم" |
| reply_to_message_id | Identifier of a message in the same conversation to reply to. | string | Pattern: ^[a-fA-F0-9]{24}$ |
| temp_id | Optional client-generated number for matching a temporary UI message with the stored message. | integer | Range: −∞ to 99999999 |
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/conversation/string/message/send" \ -H "Content-Type: application/json" \ -d '{ "message": "سلام علیکم", "temp_id": 1001 }'Bot answers and updated conversation
{
"status": "success",
"message": {
"id": "6787cb382b018cb64c0f2074",
"bot": false,
"message": "سلام علیکم",
"images": [],
"videos": [],
"files": [],
"voices": [],
"links": [],
"temp_id": "1001",
"created_at": "2026-08-27T10:31:00.000000Z",
"type": "message"
},
"answers": [
{
"id": "6787cb392b018cb64c0f2075",
"bot": true,
"message": "سلام علیکم! چطور میتوانم به شما کمک کنم؟",
"images": [],
"videos": [],
"files": [],
"voices": [],
"links": [],
"created_at": "2026-08-27T10:31:01.000000Z",
"type": "message"
}
],
"conversation": {
"id": "6787ca5ced135f1ca50e57e2",
"service": "api",
"bot_answers_status": true
}
}message حداکثر ۱۰٬۰۰۰ نویسه است و اگر فایل نمیفرستید اجباری است. در multipart/form-data میتوانید حداکثر ۵ فایل با اندازه هر فایل تا ۵۰ مگابایت در files[] بفرستید. برای Reply از reply_to_message_id استفاده کنید.
تصویر و ویدیوی کمتر از ۱۰ مگابایت در images یا videos و فایل صوتی کمتر از ۵ مگابایت در voices برمیگردد؛ رسانههای بزرگتر یا سایر انواع در files قرار میگیرند.
همگامسازی محصول
با ارسال unique_id پایدار، محصول موجود بهروزرسانی میشود؛ بدون آن ممکن است هر درخواست یک رکورد جدید بسازد. حذف محصول نیز فقط با همین شناسه انجام میشود.
داده محصول را با unique_id ایجاد یا بهروزرسانی میکند و در صورت فعالبودن deleted، محصول موجود را حذف میکند.
Request Body
multipart/form-data
| Name | Description | Type | Accepted values |
|---|---|---|---|
| unique_id | Stable identifier from your system. Reusing it updates the matching product; it is required when deleting a product. | string | Any valid value |
| name* | Main product title. | string | Example: "اشتراک حرفهای" |
| description | — | string | Any valid value |
| link | Canonical public product URL | string (uri) | Length: 0–400 |
| image | Public image URL for the product | string (uri) | Any valid value |
| priority | Non-negative ranking priority | integer | Range: 0 to ∞ |
| title | Optional display title used when the item is first created | string | Any valid value |
| deleted | Deletes the product when true and unique_id is supplied. | boolean | Any valid value |
| variations | Product variants. Send at least one when the product has selectable variants. | array<object> | Items: 0–15 |
| labels | Labels used to categorize the product when it is first created. | array<string> | Any valid value |
| disabled_services | Channels where this product must not be used in bot answers. | array<string> | Any valid value |
| variations[].name* | Variant name shown to the user | string | Length: 0–300 |
| variations[].price | Formatted price text | string | Any valid value |
| variations[].description | Optional variant description | string | Any valid value |
| variations[].available* | Whether the variant is currently available | boolean | Any valid value |
| variations[].image | Public variant image URL | string (uri) | Any valid value |
| variations[].link | Public URL for this variant | string (uri) | Any valid value |
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/data/sync/product" \ -F name="string"Product data synchronized
{
"status": "success",
"data": {
"id": "68af12035d54f40612000100",
"unique_id": "SKU-1001"
},
"update": false
}نمونه پاسخ ایجاد یا بهروزرسانی:
{
"status": "success",
"data": { "id": "68af12035d54f40612000100", "unique_id": "SKU-1001" },
"update": false
}نمونه پاسخ حذف:
{ "status": "success", "deleted": true }برای هر محصول موجود حداکثر ۵ بهروزرسانی در بازه ۲۴ ساعته پذیرفته میشود. از ارسال داده بدون تغییر خودداری کنید و فقط اطلاعاتی را بفرستید که برای پاسخگویی چتبات لازماند.
نمونه JavaScript سمت سرور
const baseUrl = 'https://api.ila.chat/api/bot';
const token = process.env.ILACHAT_API_TOKEN;
async function ilachat(path, options = {}) {
const response = await fetch(`${baseUrl}${path}`, {
...options,
headers: {
'api-token': token,
Accept: 'application/json',
...(options.body instanceof FormData ? {} : { 'Content-Type': 'application/json' }),
...options.headers
}
});
const body = await response.json();
if (!response.ok || body.status !== 'success') {
throw new Error(body.message || `ILACHAT API error: ${response.status}`);
}
return body;
}
const created = await ilachat('/conversation/new', { method: 'POST' });
const sent = await ilachat(`/conversation/${created.conversation.id}/message/send`, {
method: 'POST', body: JSON.stringify({ message: 'سلام' })
});
console.log(sent.answers);عیبیابی
Api token is required
هدر باید دقیقاً api-token باشد. توکن را در Authorization یا Query String نفرستید.
You are restricted to access the site.
IP خروجی درخواست در فهرست IPهای مجاز نیست. IP عمومی Backend را بررسی کنید؛ اگر زیرساخت چند IP خروجی دارد، همه IPهای لازم را در پنل ثبت کنید.
گفتگو یا after_id پیدا نمیشود
مطمئن شوید شناسه با همین توکن و در همین گفتگو ایجاد شده و بدون فاصله یا تغییر ارسال میشود. after_id باید شناسه یک پیام معمولی از همان گفتگو باشد، نه شناسه گفتگو یا پیام گفتگوی دیگر.
پاسخ answers خالی است
خالیبودن لزوماً خطا نیست. وضعیت پاسخگویی بات، فرم تعاملی، پردازش غیرهمزمان یا نیاز به اپراتور میتواند باعث آن شود. پیامهای جدید را با after_id دریافت کنید.
نکات نهایی
- API را از Backend فراخوانی کنید، نه مستقیماً از مرورگر.
conversation_idرا به کاربر و Tenant درست متصل کنید تا گفتگوها بین کاربران جابهجا نشوند.- پاسخ خطا را ثبت کنید، اما هدر
api-tokenو محتوای حساس پیام را در Log عمومی ننویسید. - فرمهایی که باید در API اجرا شوند را در پنل با پلتفرم «API» جداگانه فعال کنید.
- پیش از انتشار، ایجاد گفتگو، ارسال پیام، polling، فایل و محدودیت IP را با داده غیرحساس آزمایش کنید.