رفتن به محتوا

تغییر ربات یک تنوع

PATCH
/v1/bot/variants/{variant_id}
curl --request PATCH \
--url https://api.seller360.ir/v1/bot/variants/84780448 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: example' \
--data '{ "enabled": true, "strategy_id": 1, "floor_mode": "manual", "min_price": 1, "max_price": 1, "target_profit_pct": 1 }'

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

  • روشن کردن ربات (enabled: true) بدون استراتژی متصل رد می‌شود (bot_strategy_required).
  • اگر با این تغییر تعداد تنوع‌های دارای ربات روشن از سقف اشتراک بیشتر شود، کل تغییر رد می‌شود (bot_quota_full)؛ سقف را با GET /v1/bot/limits ببینید.
  • strategy_id: null استراتژی را جدا می‌کند و ربات تنوع را نیز خاموش می‌کند.
  • اتصال استراتژی ربات، استراتژی ارزی همان تنوع را (اگر داشته باشد) برمی‌دارد؛ هر تنوع فقط یک نویسنده‌ی قیمت دارد.
  • استراتژی پنهان قابل اتصال نیست (strategy_hidden).
  • با روشن کردن ربات یا اتصال استراتژی، تنوع در نوبت بعدی زمان‌بند بررسی می‌شود.

این تغییر فقط تنظیمات سلر ۳۶۰ را عوض می‌کند و همان لحظه چیزی در دیجی‌کالا ثبت نمی‌شود؛ قیمت‌ها در دورهای بعدی ربات تغییر می‌کنند.

variant_id
required
integer

Example

84780448

عدد کد DKPC تنوع.

Idempotency-Key
required
string
>= 8 characters <= 255 characters

یک شناسه‌ی یکتا برای هر تغییر (مثلا UUID). اگر پاسخ را دریافت نکردید، همان درخواست را با همان کلید تکرار کنید؛ تغییر دو بار انجام نمی‌شود. پاسخ اول تا ۲۴ ساعت نگه داشته می‌شود.

Media typeapplication/json
object
>= 1 properties
enabled

روشن یا خاموش کردن ربات همین تنوع.

boolean
strategy_id

استراتژی متصل؛ null استراتژی را جدا و ربات تنوع را خاموش می‌کند.

integer | null
floor_mode
string
Allowed values: manual cost_plus
min_price

حداقل قیمت دستی به ریال. فرستادن عدد، floor_mode را manual می‌کند مگر floor_mode را هم بفرستید.

integer | null
>= 100
max_price

حداکثر قیمت به ریال.

integer | null
>= 100
target_profit_pct

سود هدف حالت cost_plus به درصد بهای خرید.

number | null
<= 1000

تنظیمات ربات تنوع پس از تغییر.

Media typeapplication/json
object
status
required
Allowed value: ok
data
required
data
required
object
variant_id
required
integer
sku
string | null
enabled
required

ربات این تنوع روشن است (بدون استراتژی اثری ندارد).

boolean
strategy_id
required
integer | null
strategy_title
string | null
state
required
  • running: ربات روشن است و تنوع را قیمت‌گذاری می‌کند.
  • stopped: ربات روشن است اما استراتژی آن را متوقف کرده است (دلیل در stop_code)؛ با تغییر شرایط خودکار ادامه می‌دهد.
  • disabled: استراتژی ربات این تنوع را خاموش کرده است (مثلا در فهرست فروشندگان نیستید).
  • parked: دیجی‌کالا ۵ بار پیاپی ثبت قیمت را رد کرد؛ تا write_blocked_until تلاشی نمی‌شود.
  • over_quota: ربات روشن است اما تنوع بیرون از سقف اشتراک است و قیمت‌گذاری نمی‌شود.
  • no_strategy: استراتژی متصل نیست؛ ربات کاری نمی‌کند.
  • off: ربات این تنوع خاموش است.
string
Allowed values: running stopped disabled parked over_quota no_strategy off
stop_code
One of:

دلیل توقف ربات برای یک تنوع (کلیدهای ثابت):

  • no_reference_price: دیجی‌کالا برای این کالا قیمت مرجع اعلام نکرده است.
  • not_in_sellers: پیشنهاد شما در فهرست فروشندگان کالا دیده نمی‌شود.
  • floor_above_cap: حداقل قیمت شما از سقف مجاز دیجی‌کالا (۱٫۱۴ برابر قیمت مرجع) بالاتر است و استراتژی گفته متوقف شود.
  • floor_unreachable: همان وضعیت، و استراتژی گفته تنوع در دیجی‌کالا غیرفعال شود.
  • needed_price_below_floor: بردن بای‌باکس به قیمتی کمتر از حداقل قیمت شما نیاز دارد و استراتژی گفته تنوع غیرفعال شود.
  • alone_in_market: شما تنها فروشنده هستید و استراتژی گفته متوقف شود.
  • no_rivals_after_filters: رقیب وجود دارد اما با استثناهای استراتژی هیچ رقیبی نماند.
  • we_own_the_box: بای‌باکس در اختیار شماست و استراتژی گفته متوقف شود.
string
Allowed values: no_reference_price not_in_sellers floor_above_cap floor_unreachable needed_price_below_floor alone_in_market no_rivals_after_filters we_own_the_box
stop_reason

توضیح فارسی دلیل توقف.

string | null
floor_mode

روش تعیین حداقل قیمت:

  • manual: حداقل قیمتی که خودتان تعیین می‌کنید (min_price).
  • cost_plus: بهای خرید به‌علاوه‌ی سود هدف، خودکار محاسبه می‌شود.
string
Allowed values: manual cost_plus
min_price

حداقل قیمت دستی به ریال (در حالت cost_plus هم اگر بیشتر باشد رعایت می‌شود).

integer | null
max_price

حداکثر قیمت به ریال.

integer | null
target_profit_pct

سود هدف حالت cost_plus به درصد بهای خرید، با یک رقم اعشار.

number | null
target_profit

سود هدف حالت cost_plus به ریال؛ اگر درصد هم تعیین شده باشد، درصد ملاک است.

integer | null
floor

حداقل قیمتی که ربات اکنون رعایت می‌کند (بیشترین مقدار از روش‌های بالا و حداقل استراتژی).

integer | null
floor_source
One of:

حداقلی که ربات اکنون رعایت می‌کند از کجا آمده است:

  • manual: حداقل قیمت دستی.
  • cost_plus: بهای خرید به‌علاوه‌ی سود هدف.
  • strategy: حداقل قیمتی که استراتژی (مثلا بر پایه‌ی حاشیه‌ی سود یا قیمت مرجع) می‌سازد.
string
Allowed values: manual cost_plus strategy
base_floor

حداقل قیمت پایه (حداقل پیش از اولین کاهش گروهی)، اگر نگه داشته شده باشد.

integer | null
floor_restore_at

زمان بازگشت خودکار به حداقل قیمت پایه.

string | null format: date-time
effective_interval_minutes

فاصله‌ی فعلی بازبینی این تنوع به دقیقه (با سرعت تطبیقی و کف سرعت اشتراک).

integer | null
last_repriced_at
string | null format: date-time
last_decision

آخرین تصمیم ربات برای این تنوع.

object
at
string format: date-time
new_price
integer | null
changed
boolean
status
  • applied: پاسخ دیجی‌کالا ثبت قیمت را تایید کرد.
  • failed: تصمیم گرفته شد اما در دیجی‌کالا ثبت نشد (رد، محدودیت یا خطای ارتباط).
  • dry: شبیه‌سازی (فقط پنل نمایشی)؛ هرگز قرار نبود ثبت شود.
string
Allowed values: applied failed dry
reason
string
write_fail_streak

ردهای پیاپی ثبت قیمت توسط دیجی‌کالا.

integer
write_blocked_until
string | null format: date-time
write_fail_reason
string | null

Example

{
"status": "ok",
"data": {
"variant_id": 84780448,
"strategy_id": 412,
"strategy_title": "استراتژی سلر ۳۶۰",
"state": "running",
"stop_code": "no_reference_price",
"floor_mode": "manual",
"min_price": 280000000,
"max_price": 340000000,
"target_profit_pct": 15,
"floor_source": "manual",
"effective_interval_minutes": 5,
"last_decision": {
"status": "applied"
},
"write_fail_streak": 0
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

پارامتر یا بدنه‌ی نامعتبر.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

کلید ارسال نشده یا نامعتبر است.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}

کلید دسترسی لازم را ندارد، یا ماژول یا پنل فعال نیست.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}

مورد درخواست‌شده در این پنل وجود ندارد.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

تغییر با وضعیت فعلی سازگار نیست (موجودی ناکافی، نسخه‌ی تغییرکرده، قفل یا کلید یکتای تکراری).

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

درخواست درست است اما قاعده‌ی کسب‌وکار اجازه نمی‌دهد (مثلا قیمت بیرون از بازه).

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
X-Request-Id
string

کد پیگیری این درخواست.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).

سقف درخواست گذشته است.

Media typeapplication/json
object
status
required
Allowed value: error
error
required
object
code
required
string
Allowed values: missing_api_key invalid_api_key https_required scope_missing module_inactive panel_unavailable subscription_inactive not_found variant_not_found method_not_allowed invalid_parameter idempotency_key_required idempotency_mismatch idempotency_in_progress insufficient_stock version_conflict stock_write_locked sku_taken price_out_of_band price_managed_by_bot webhook_url_invalid webhook_limit_reached rate_limited digikala_rate_limited digikala_refused module_required digikala_outcome_unknown digikala_unavailable internal_error stock_split_in_progress kardex_disabled movement_type_not_allowed stock_count_finalized purchase_order_status_invalid product_key_unknown purchase_price_range_invalid product_locked_for_moderation catalog_row_invalid demo_panel_unsupported build_in_progress package_not_built_here shipping_write_unavailable pickup_unavailable feature_unavailable commitment_exceeded warehouse_not_listed slot_watch_exists draft_limit_reached draft_not_buildable draft_overdue draft_not_waiting consignment_not_allowed slot_unavailable no_open_slot replenish_rule_limit replenish_inactive price_managed_by_fx bot_strategy_required bot_quota_full strategy_not_found strategy_locked strategy_hidden strategy_title_reserved competitor_not_found change_not_undoable undo_window_expired already_undone undo_in_progress promotion_not_eligible promotion_managed_by_bot promotion_no_floor promotion_below_floor promotion_invalid promotion_not_active campaign_not_found campaign_closed fx_strategy_not_found fx_no_pending_price
message
required

پیام فارسی برای برنامه‌نویس.

string
detail

آنچه دقیقا نادرست بود، مثلا نام پارامتر.

string
doc_url
required
string format: uri
request_id
required
string

Example

{
"status": "error",
"error": {
"code": "missing_api_key"
}
}
Retry-After
integer

چند ثانیه صبر کنید و دوباره تلاش کنید.

X-RateLimit-Limit
integer

سقف درخواست این نوع (خواندن یا نوشتن) در هر دقیقه برای این کلید.

X-RateLimit-Remaining
integer

درخواست‌های باقی‌مانده تا پایان دقیقه‌ی جاری.

X-RateLimit-Reset
integer

زمان شروع دقیقه‌ی بعد، به ثانیه از ۱۹۷۰ (Unix).