مستندات توسعه‌دهندگان

API بازگو

بازخورد مشتری را از هر سرویسی به بازگو بفرستید و نتیجهٔ تحلیل هوشمند آن را برگردانید. این راهنما همه‌چیز را از ساخت کلید تا مدیریت خطا، همراه با نمونه‌کد آماده، پوشش می‌دهد.

ساخت کلید API

معرفی

با API بازگو می‌توانید بازخورد مشتری را مستقیم از سرویس خودتان (سایت، اپلیکیشن، سیستم پشتیبانی، CRM یا ربات) به فضای کاری بفرستید. هر بازخورد مثل بازخوردهای دیگر در صندوق بازخورد قرار می‌گیرد، به‌صورت خودکار تحلیل می‌شود و نتیجهٔ تحلیل را از همین API دریافت می‌کنید.

موردمقدار
آدرس پایهhttps://api.bazgo.site
نسخهv1 — همهٔ مسیرها با /v1 شروع می‌شوند
قالب دادهJSON با کدگذاری UTF-8
احراز هویتکلید API در سرآیند Authorization
محدودیت نرخ۱۲۰ درخواست در دقیقه برای هر کلید
حداکثر حجم بدنه۹۶ کیلوبایت

کلید API دسترسی کامل به دادهٔ فضای کاری شما دارد. آن را فقط در سرور نگه دارید و هرگز در کد مرورگر، اپلیکیشن موبایل یا مخزن گیت قرار ندهید.

شروع سریع

۱. در داشبورد به ورودی‌ها ← اتصال API بروید و یک کلید با دسترسی «ثبت و خواندن» بسازید. مدت اعتبار را می‌توانید دائمی بگذارید.

۲. کلید را که با bz_ شروع می‌شود کپی کنید و در متغیر محیطی سرورتان قرار دهید:

bash

۳. اولین بازخورد را بفرستید:

bash

پاسخ، شناسهٔ بازخورد را برمی‌گرداند:

json

۴. چند ثانیه بعد نتیجهٔ تحلیل را بخوانید:

bash

احراز هویت

همهٔ درخواست‌ها به /v1 باید کلید API را به شکل Bearer در سرآیند Authorization داشته باشند:

http

سطح دسترسی کلیدها

نوع کلیدثبت بازخوردخواندن بازخوردخواندن مصرف
ثبت و خواندن✓✓✓
فقط خواندن—✓✓

چرخهٔ عمر کلید

  • هنگام ساخت کلید، مدت اعتبار آن را انتخاب می‌کنید: دائمی (پیش‌فرض)، ۳۰ روز، ۹۰ روز یا ۱ سال. کلید دائمی تا وقتی لغوش نکنید کار می‌کند.
  • کلیدی که تاریخ انقضا دارد، پس از آن تاریخ با خطای 401 UNAUTHORIZED رد و از فهرست کلیدها حذف می‌شود. پیش از انقضا یک کلید جدید بسازید، سرورتان را به‌روز کنید و سپس کلید قدیمی را لغو کنید.
  • کلید فقط یک‌بار هنگام ساخت نمایش داده می‌شود. اگر آن را گم کردید، کلید را لغو و یک کلید تازه بسازید.
  • کلید لغوشده بلافاصله از کار می‌افتد.
  • برای هر سرویس یک کلید جدا بسازید تا در صورت نشت، فقط همان اتصال را قطع کنید.

ثبت بازخورد

http

یک بازخورد جدید در فضای کاری ثبت می‌کند. تحلیل به‌صورت غیرهمزمان انجام می‌شود؛ بنابراین پاسخ بلافاصله با کد 202 برمی‌گردد.

سرآیندها

سرآیندالزامیتوضیح
AuthorizationبلهBearer و سپس کلید API
Content-Typeبلهفقط application/json
Idempotency-Keyخیر (توصیه‌شده)شناسهٔ یکتای شما برای این بازخورد؛ ۱ تا ۱۲۸ نویسه از حروف انگلیسی، عدد و _ . : -

بدنهٔ درخواست

فیلدنوعالزامیتوضیح
textstringبلهمتن بازخورد، ۱ تا ۲۰٬۰۰۰ نویسه. فاصله‌های ابتدا و انتها حذف می‌شود.
metadataobjectخیرهر دادهٔ JSON دلخواه مثل شمارهٔ سفارش، شعبه یا شناسهٔ مشتری. کنار بازخورد ذخیره می‌شود.

فیلدهای دیگر پذیرفته نمی‌شوند و خطای VALIDATION_ERROR برمی‌گردانند.

پاسخ موفق — 202 Accepted

json

سرآیند Location هم آدرس خواندن همین بازخورد را دارد (/v1/feedback/3f8a1c2e-6b4d-4e1a-9c7f-2d5b8e0a4f61).

هر بازخورد پذیرفته‌شده یک تعامل از سهمیهٔ ماهانهٔ فضای کاری مصرف می‌کند. ارسال تکراری با همان Idempotency-Key سهمیه مصرف نمی‌کند.

خواندن بازخورد و نتیجهٔ تحلیل

http

وضعیت بازخورد و نتیجهٔ تحلیل آن را برمی‌گرداند. فقط بازخوردهای همین فضای کاری در دسترس‌اند.

پاسخ — 200 OK

json

فیلدها

فیلدتوضیح
statusnew در انتظار تحلیل · analyzed تحلیل‌شده · needs_attention نیازمند رسیدگی · resolved رسیدگی‌شده
priorityاولویت از ۰ تا ۱۰۰؛ هرچه بیشتر، فوری‌تر
processing.statepending در صف تحلیل · complete تمام‌شده · failed تحلیل پس از چند تلاش ناموفق بود
analysisتا پیش از پایان تحلیل null است
signals.topicکلید موضوعی که در بخش «برچسب‌ها» تعریف کرده‌اید
signals.kindنوع پیام: complaint، suggestion، compliment، question، request یا other
signals.satisfactionرضایت مشتری از ۱ (بسیار ناراضی) تا ۱۰ (بسیار راضی)
signals.urgency · needsAction · churnRiskاحتمال فوریت، نیاز به اقدام و ریسک ریزش، از ۰ تا ۱
signals.relevantاحتمال مرتبط بودن پیام با کسب‌وکار شما، از ۰ تا ۱
signals.confidenceاطمینان مدل به نتیجه، از ۰ تا ۱
signals.customپاسخ پرسش‌های سفارشی شما، به تفکیک کلید؛ فقط اگر تعریف کرده باشید

دریافت نتیجه با پرس‌وجوی دوره‌ای

تحلیل معمولاً چند ثانیه طول می‌کشد. تا وقتی processing.state برابر pending است، با فاصله دوباره درخواست بفرستید:

js

مصرف و سهمیه

http

مصرف دورهٔ ماهانهٔ جاری فضای کاری را برمی‌گرداند. هر دو نوع کلید به این مسیر دسترسی دارند.

json

دوره‌ها بر اساس ماه میلادی (UTC) هستند. وقتی used به limit برسد، ثبت بازخورد تا ابتدای دورهٔ بعد با خطای QUOTA_EXCEEDED رد می‌شود.

ارسال دوباره بدون تکرار

شبکه ممکن است قطع شود و ندانید درخواست شما ثبت شده یا نه. با فرستادن سرآیند Idempotency-Key می‌توانید با خیال راحت همان درخواست را دوباره بفرستید:

  • اولین درخواست با یک کلید، بازخورد را ثبت می‌کند و 202 برمی‌گرداند.
  • درخواست بعدی با همان کلید و همان بدنه، بازخورد جدیدی نمی‌سازد؛ همان شناسه را با کد 200 و "replayed": true برمی‌گرداند و سهمیه مصرف نمی‌کند.
  • درخواست با همان کلید ولی بدنهٔ متفاوت با خطای 409 IDEMPOTENCY_CONFLICT رد می‌شود.

بهترین مقدار برای این سرآیند، شناسه‌ای است که در سیستم خودتان یکتاست؛ مثل order-1042 یا ticket:88731.

خطاها

همهٔ خطاها قالب یکسانی دارند:

json

فیلد fields فقط در خطاهای اعتبارسنجی وجود دارد. برای تصمیم‌گیری در کد، همیشه از code استفاده کنید، نه message.

HTTPcodeعلت و راه‌حل
400INVALID_JSONبدنه JSON معتبر نیست.
400VALIDATION_ERRORفیلدها یا Idempotency-Key نامعتبرند؛ fields را ببینید.
401UNAUTHORIZEDکلید ارسال نشده، اشتباه، منقضی یا لغو شده است.
402QUOTA_EXCEEDEDسهمیهٔ ماهانه تمام شده است.
403FORBIDDENکلید اجازهٔ این کار را ندارد (مثلاً ثبت با کلید فقط‌خواندنی).
404NOT_FOUNDبازخورد یا مسیر پیدا نشد.
409IDEMPOTENCY_CONFLICTاین Idempotency-Key قبلاً با بدنهٔ دیگری استفاده شده است.
413BODY_TOO_LARGEبدنه بیش از ۹۶ کیلوبایت است.
415UNSUPPORTED_MEDIA_TYPEسرآیند Content-Type: application/json را بفرستید.
429RATE_LIMITEDبیش از ۱۲۰ درخواست در دقیقه؛ طبق سرآیند Retry-After صبر کنید.
500INTERNAL_ERRORخطای سرور. requestId را هنگام تماس با پشتیبانی بفرستید.

چه خطاهایی را دوباره تلاش کنیم؟ فقط 429 و 5xx را، با فاصلهٔ فزاینده و همان Idempotency-Key. بقیهٔ خطاها با تکرار درست نمی‌شوند.

نمونه‌کد

نمونه‌های زیر یک بازخورد ثبت می‌کنند و خطاها را مدیریت می‌کنند. کلید را از متغیر محیطی BAZGO_API_KEY می‌خوانند.

Node.js / TypeScript

ts

Python

python

PHP (Laravel)

php

cURL

bash

بهترین روش‌ها

  • کلید را در سرور نگه دارید. اگر بازخورد از مرورگر یا اپلیکیشن می‌آید، آن را به سرور خودتان بفرستید و از آنجا به بازگو ارسال کنید.
  • همیشه Idempotency-Key بفرستید. با شناسهٔ یکتای سیستم خودتان، تکرار و مصرف اضافهٔ سهمیه غیرممکن می‌شود.
  • ارسال را از مسیر اصلی جدا کنید. بازخورد را در صف یا پس‌زمینه بفرستید تا کندی شبکه روی تجربهٔ کاربر اثر نگذارد.
  • فقط 429 و 5xx را دوباره تلاش کنید، با فاصلهٔ فزاینده.
  • برای کلیدهای مدت‌دار، جایگزینی را از قبل برنامه‌ریزی کنید و کلید قبلی را پس از جابه‌جایی لغو کنید. اگر کلیدی ممکن است نشت کرده باشد، فوراً لغوش کنید.