جریان های WebSocket
زمان اتصال
- سرور اتصال WebSocket را پس از 60 ثانیه عدم فعالیت می بندد (Connection Keep-Alive)
- عدم فعالیت به عنوان عدم ارسال درخواست توسط مشتری تعریف می شود
اتصال Keep-Alive
برای فعال نگه داشتن اتصال WebSocket، باید این کار را انجام دهید
- درخواست های دوره ای را هر 50 ثانیه ارسال کنید
- قطع ارتباط احتمالی در منطق برنامه خود را به درستی مدیریت کنید
مجوز
مقدمه
قبل از امضای هر درخواست WebSocket، باید یک کلید API در حساب شخصی Cryptomus خود ایجاد کنید
دستورالعمل های دقیق برای ایجاد یک کلید API در دسترس است اینجا
دریافت رمز یکبار مصرف برای اتصال
قبل از اتصال به سرور WebSocket، باید یک توکن احراز هویت یک بار مصرف دریافت کنید
شما می توانید رمز را با ارسال دریافت کنید درخواست مربوطه
این رمز به مدت 5 دقیقه یا تا اولین اتصال موفق معتبر است
اتصال به سرور WebSocket
برای اتصال به سرور WebSocket
1. یک بار دریافت کنید نشانه احراز هویت
2. هنگام برقراری اتصال، توکن را در توکن پارامتر query مشخص کنید
مثال URL اتصال: wss://api-ws.cryptomus.com/ws?token=b0b1cacd26993392ecf072155bd1686c96e380ad12cefa564aa6665c85c77334
توکن فقط یک بار قابل استفاده است. برای هر اتصال جدید، باید یک توکن جدید درخواست کنید
پس از تأیید موفقیت آمیز رمز، اتصال برقرار می شود و می توانید در کانال های موجود مشترک شوید
دریافت رمز احراز هویت یک بار برای اتصال WebSocket
اجازه می دهد تا یک نشانه احراز هویت یک بار برای اتصال به سرور WebSocket ایجاد شود. رمز تا اولین اتصال موفق یا تا زمانی که منقضی شود (5 دقیقه) معتبر است.
سرفصل های مجوز
اطلاعات کامل در مورد سرصفحه های مجوز مورد نیاز در دسترس است اینجا
واکنش
{ "token": "168b34a3a12370740ff1654f0d0c4726ff1bba8c4675edc0d7553f15e5a2a094" }
کپی کنیدکدهای احتمالی
200: سفارش با موفقیت ایجاد شد
404: کاربر یا منبع یافت نشد
500: خطای سرور داخلی
نمادهای مقیاس عمق
درخواست
واکنش
1{
2 "status": "success",
3 "message": "success",
4 "data": [
5 {
6 "scale": "0.01",
7 "index": 0 // index
8 },
9 ...
10 ]
11}
کپی کنیدلیست بازار
درخواست
واکنش
1{
2 "result": [
3 {
4 "id": "01HSBPVS17CT2GN2FV34K3AMP9",
5 "symbol": "BTC_USDT",
6 "baseCurrency": "BTC",
7 "quoteCurrency": "USDT",
8 "baseMinSize": "0.0000100000000000",
9 "quoteMinSize": "0.1000000000000000",
10 "baseMaxSize": "10000000000.0000000000000000",
11 "quoteMaxSize": "99999999.0000000000000000",
12 "basePrec": "8",
13 "quotePrec": "6",
14 "baseCurrencyFullName": "Bitcoin",
15 "quoteCurrencyFullName": "Tether USD"
16 },
17 ...
18 ]
19}
کپی کنیداجرای نمونه
Node.js
1const WebSocket = require('ws');
2
3class CryptomusWebSocket {
4 constructor(token) {
5 this.token = token;
6 this.socket = new WebSocket('wss://api-ws.cryptomus.com/ws?token=${this.token}');
7 this.setupConnection();
8 }
9
10 setupConnection() {
11 this.socket.on('open', () => {
12 console.log('Connected to Cryptomus WebSocket');
13 this.startPing();
14 });
15
16 this.socket.on('message', (data) => {
17 console.log('Received:', data.toString());
18 });
19 }
20
21 ping() {
22 if (this.socket.readyState === WebSocket.OPEN) {
23 this.socket.send(JSON.stringify({
24 id: 0,
25 method: "ping",
26 params: []
27 }));
28 }
29 }
30
31 startPing() {
32 setInterval(() => {
33 this.ping();
34 }, 50 * 1000); // Every 50 seconds
35 }
36}
37
38// Usage
39const token = "your_auth_token_here";
40const client = new CryptomusWebSocket(token);
41
کپی کنیدPython
1import asyncio
2import websockets
3import json
4
5class CryptomusWebSocket:
6 def __init__(self, token):
7 self.token = token
8 self.socket = None
9
10 async def connect(self):
11 self.socket = await websockets.connect(f"wss://api-ws.cryptomus.com/ws?token={self.token}")
12 print('Connected to Cryptomus WebSocket')
13
14 async def ping(self):
15 await self.socket.send(json.dumps({
16 "id": 0,
17 "method": "ping",
18 "params": []
19 }))
20
21 async def start_ping(self):
22 while True:
23 await asyncio.sleep(50) # Every 50 seconds
24 await self.ping()
25
26 async def listen(self):
27 async for message in self.socket:
28 print(f"Received: {message}")
29
30 async def run(self):
31 await self.connect()
32
33 # Start ping task
34 ping_task = asyncio.create_task(self.start_ping())
35
36 # Listen for messages
37 await self.listen()
38
39# Usage
40token = "your_auth_token_here"
41client = CryptomusWebSocket(token)
42asyncio.run(client.run())
43
کپی کنیدتمام نقاط پایانی زمان را در قالب مهر زمانی یونیکس برمیگردانند
ساختار پیام درخواست
نام | نوع پارامتری | تعریف |
---|---|---|
id | Integer | برای پردازش پاسخ به درخواست شما باید منحصر به فرد باشد |
method | String | نام درخواست |
params | Array | پارامترهای متد را در اینجا ارسال کنید |
نوع پارامتری
Integerتعریف
برای پردازش پاسخ به درخواست شما باید منحصر به فرد باشدنوع پارامتری
Stringتعریف
نام درخواستنوع پارامتری
Arrayتعریف
پارامترهای متد را در اینجا ارسال کنید
اگر JSON نامعتبر ارسال شود، اتصال WebSocket قطع خواهد شد
انواع پیام و درخواست
- درخواست ("پینگ"، "شمع_درخواست"، و غیره)
- اشتراک ("شمع_اشتراک"، "آخرین قیمت_اشتراک" و غیره). اشتراک مجدد در همان نوع داده لغو خواهد شد.
پیام پاسخ
نام | نوع پارامتری | تعریف |
---|---|---|
id | Integer | درخواست شناسه |
data | Null | اگر درخواست شکست خورد در صورت موفقیت آمیز بودن، ساختار پاسخ برای هر روش در زیر نشان داده شده است |
error | Null | در صورت موفقیت اگر خطایی وجود داشته باشد |
message | String | |
code | Integer | کد خطا |
نوع پارامتری
Integerتعریف
درخواست شناسهنوع پارامتری
Nullتعریف
اگر درخواست شکست خورد در صورت موفقیت آمیز بودن، ساختار پاسخ برای هر روش در زیر نشان داده شده استنوع پارامتری
Nullتعریف
در صورت موفقیت اگر خطایی وجود داشته باشدنوع پارامتری
Integerتعریف
کد خطا
کد: 1. پیام: قالب پیام نامعتبر است
کد: 2. پیام: سایر خطاها
انواع پیام پاسخ
- نتیجه پرس و جو
- وضعیت اشتراک (موفقیت/شکست)
- رویدادها را به روز کنید
پینگ/پنگ
پینگ کنید
1{
2 "id": 0,
3 "method": "ping",
4 "params": []
5}
6
کپی کنیدپاسخ پنگ
1{
2 "id": 0,
3 "method": "pong",
4 "data": null,
5 "error": null
6}
7
کپی کنیدنمونه هایی از اشتراک ها
درخواست
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "BTC_USDT"
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدبه روز رسانی رویداد
1{
2 "id": 0,
3 "method": "trade_update",
4 "data": [], // See structure for each method below
5 "error": null
6}
7
کپی کنیدآخرین قیمت
اشتراک
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید lastprice_subscribe
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "lastprice_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویداد
1{
2 "id": 0,
3 "method": "lastprice_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953362,
7 "price": "107152.55"
8 },
9 "error": null
10}
11
کپی کنیدلغو اشتراک
درخواست
1{
2 "id": 0,
3 "method": "lastprice_unsubscribe",
4 "params": [
5 "BTC_USDT",
6 "ETH_USDT",
7 ...
8 ]
9}
10
کپی کنیدلغو اشتراک از همه رویدادها lastprice_unsubscribe
1{
2 "id": 0,
3 "method": "lastprice_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
کپی کنیدعمق
اشتراک
ابتدا باید شاخص مقیاس بازار را بدست آورید چگونه به دست آوریم
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "params": [
5 "BTC_USDT:0", // market:scale_index
6 "BTC_USDT:1",
7 "ETH_USDT:1",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید depth_subscribe
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "depth_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویداد
1{
2 "id": 0,
3 "method": "depth_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750952911,
7 "full_reload": false, // If false, it is a partial update, if true, it is a fully updated orderbook.
8 "scale_index": 0,
9 "asks": [
10 [
11 "107043.93", // price
12 "0.304313" // value
13 ]
14 ],
15 "bids": [
16 [
17 "106976.11",
18 "0" // for partial update - finished orders will be 0
19 ]
20 ]
21 },
22 "error": null
23}
24
کپی کنیدلغو اشتراک
درخواست
1{
2 "id": 0,
3 "method": "depth_unsubscribe",
4 "params": [
5 "BTC_USDT:0", // market:scale_index
6 "ETH_USDT:1",
7 ...
8 ]
9}
10
کپی کنیدلغو اشتراک از همه رویدادها depth_unsubscribe
1{
2 "id": 0,
3 "method": "depth_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدتیکر
اشتراک
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید ticker_subscribe
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "ticker_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویداد
1{
2 "id": 0,
3 "method": "ticker_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953144,
7 "price": "107090.35",
8 "open": "107042.21",
9 "high": "108248.15",
10 "low": "106573.19",
11 "volume": "1531.027982",
12 "quote_volume": "164564314.80174687",
13 "price_change": "0.04"
14 },
15 "error": null
16}
17
کپی کنیدلغو اشتراک
درخواست
1{
2 "id": 0,
3 "method": "ticker_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
کپی کنیدلغو اشتراک از همه رویدادها ticker_unsubscribe
1{
2 "id": 0,
3 "method": "ticker_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدمعاملات
اشتراک
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "BTC_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید trade_subscribe
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "trade_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویداد
1{
2 "id": 0,
3 "method": "trade_update",
4 "data": {
5 "symbol": "BTC_USDT",
6 "timestamp": 1750953177,
7 "trades": [
8 {
9 "price": 107100.01,
10 "quantity": 0.000254,
11 "timestamp": 1750953177,
12 "direction": "buy"
13 },
14 ...
15 ]
16 },
17 "error": null
18}
19
کپی کنیدلغو اشتراک
درخواست
1{
2 "id": 0,
3 "method": "trade_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
کپی کنیدلغو اشتراک از همه رویدادها trade_unsubscribe
1{
2 "id": 0,
3 "method": "trade_unsubscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدسفارشات
اشتراک
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT",
7 "ETH_USDT",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید order_subscribe
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "order_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویدادها
سفارش ایجاد شد
1{
2 "id": "1",
3 "method": "order_update",
4 "data": {
5 "type": "created",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "0.0000000000000000",
15 "filledValue": "0.0000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376
18 }
19 },
20 "error": null
21}
22
کپی کنیدسفارش به روز شد
1{
2 "id": "3",
3 "method": "order_update",
4 "data": {
5 "type": "updated",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "20.0000000000000000",
15 "filledValue": "4.4000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376,
18 "updateTs": 1750696487,
19 }
20 },
21 "error": null
22}
23
کپی کنیدسفارش تمام شد
1{
2 "id": "3",
3 "method": "order_update",
4 "data": {
5 "type": "finished",
6 "info": {
7 "id": "01JYET5DQ772MPYHHE417FQF1J",
8 "symbol": "TRX_USDT",
9 "orderType": "limit",
10 "direction": "sell",
11 "price": "0.2200000000000000",
12 "quantity": "50.0000000000000000",
13 "value": "11.0000000000000000",
14 "filledQuantity": "50.0000000000000000",
15 "filledValue": "11.0000000000000000",
16 "clientOid": null,
17 "createTs": 1750696376,
18 "finishTs": 1750696417,
19 "state": "completed""internalState": "filled"
20 }
21 },
22 "error": null
23}
24
کپی کنیدلغو اشتراک از بهروزرسانیها
از بازارهای خاص
1{
2 "id": 0,
3 "method": "order_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "ETH_USDT",
7 ...
8 ]
9}
10
کپی کنیداز همه بازارها
1{
2 "id": 0,
3 "method": "order_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدتوازن
اشتراک
ارز پایه از لیست بازار
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "params": [
5 "BTC", // BaseCurrency from market list
6 "TRX,
7 "ETH",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید balance_subscribe
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "method": "balance_subscribe",
4 "data": {
5 "status": "success"
6 },
7 "error": null
8}
9
کپی کنیدرویدادها
1{
2 "id": "4",
3 "method": "balance_update",
4 "data": {
5 "info": {
6 "walletId": "01J7E836F6K5KCX5DP2W0F6FAG",
7 "currencyCode": "USDT",
8 "amount": "50.0000000000000000",
9 "oldBalance": "40000.0000000000000000",
10 "newBalance": "39950.00000000"
11 }
12 },
13 "error": null
14}
15
کپی کنیدلغو اشتراک از رویدادها
از ارزهای خاص
ارز پایه از market-list
1{
2 "id": 0,
3 "method": "balance_unsubscribe",
4 "params": [
5 "BTC", // BaseCurrency from market list
6 "ETH",
7 ...
8 ]
9}
10
کپی کنیداز همه ارزها
1{
2 "id": 0,
3 "method": "balance_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدمعاملات
اشتراک
1{
2 "id": 0,
3 "method": "deal_subscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT,
7 "ETH_USDT",
8 ...
9 ]
10}
11
کپی کنیددر همه رویدادها مشترک شوید deal_subscribe
1{
2 "id": 0,
3 "method": "deal_subscribe",
4 "params": [
5 "all" // This also works for other events
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنیدرویدادها
1{
2 "id": "4",
3 "method": "deal_update",
4 "data": {
5 "info": {
6 "dealId": "01JYH50V5VWPP3QTYGM6CPZ0AR",
7 "symbol": "TRX_USDT",
8 "dealState": "completed",
9 "transactionId": "01JYH50V5YM8M3943KJ9HY2VXM",
10 "filledPrice": "0.2726960000000000",
11 "filledQuantity": "100.0000000000000000",
12 "filledValue": "27.2696000000000000",
13 "fee": "1.0907840000000000",
14 "feeCurrency": "USDT",
15 "tradeRole": "taker",
16 "committedAt": 1750774869
17 }
18 },
19 "error": null
20}
21
کپی کنیدلغو اشتراک از بهروزرسانیها
از بازارهای خاص
1{
2 "id": 0,
3 "method": "deal_unsubscribe",
4 "params": [
5 "BTC_USDT", // Market
6 "TRX_USDT,
7 ...
8 ]
9}
10
کپی کنیداز همه بازارها
1{
2 "id": 0,
3 "method": "deal_unsubscribe",
4 "params": [
5 "all" // Optional, will also work if an empty array is passed in
6 ]
7}
8
کپی کنیدواکنش
1{
2 "id": 0,
3 "data": {
4 "status": "success"
5 },
6 "error": null
7}
8
کپی کنید