راهنمای وبسرویس RailBot
اپهای ثبتشدهت رو در ابزارهای خودت استفاده کن. از موجودی کیف پول تا دریافت اطلاعات اپ، همهٔ مسیرها اینجان.
اولین درخواستشروع و احراز هویت
- در ربات «کلیدهای API» رو باز کن و یک کلید بساز.
- برای دریافت پولی، طبق بخش شارژ کیف پول اعتبار اضافه کن.
- کلید رو در هدر Authorization بفرست و فقط سمت سرور نگهش دار.
Authorization: Bearer $KEY
Accept: application/json
موجودی کیف پول
/api/v1/walletموجودی تتر، تعرفهٔ هر پاسخ موفق و مصرف کلیدی که فرستادی رو برمیگردونه. رایگانه.
{
"data": {
"balance": "10.00",
"currency": "USDT",
"request_price": "0.05",
"token": {
"used": 0,
"quota": 100
}
}
}
فهرست اپها
/api/v1/apps?page=1هر صفحه تا ۲۵ اپ از حساب خودت با شناسهٔ RailBot، اسم و کد کشور برمیگردونه. رایگانه.
{
"data": {
"apps": [
{"id": 17,
"label": "My app",
"country": "IR"}
],
"page": 1,
"has_more": false
}
}
دریافت اطلاعات اپ
/api/v1/apps/{id}/credentialsشناسهٔ اپ رو از فهرست بگیر. هر پاسخ موفق جدید، یک واحد از سقف کلید و تعرفهٔ اعلامشده از موجودی کم میکنه.
برای هر درخواست تازه، یک Idempotency-Key یکتا (۸ تا ۱۲۸ کاراکتر ASCII شامل حرف، عدد یا . _ : -) بفرست. اگر ارتباط قطع شد همون مقدار رو دوباره بفرست تا دوباره هزینه کم نشه.
در مثال، BASE آدرس RailBot و KEY کلید وبسرویس خودته.
curl -X POST \
-H "Authorization: Bearer $KEY" \
-H 'Idempotency-Key: read-17-0001' \
"$BASE/api/v1/apps/17/credentials"
{
"data": {
"app_id": 17,
"api_id": 12345,
"api_hash":
"0123456789abcdef0123456789abcdef",
"charged": "0.05",
"currency": "USDT",
"balance_after": "9.95"
}
}
پاسخ تکراری با هدر Idempotent-Replay: true مشخص میشه. موجودی داخل پاسخ، موجودی زمان ثبت همون تراکنشه.
شارژ کیف پول با بها
/api/v1/wallet/topupsمبلغ رو با فیلد amount بهصورت رشتهٔ اعشاری بفرست. پاسخ ۲۰۲ یعنی ساخت فاکتور در صفه. تکرار همان درخواست با همان Idempotency-Key همان فاکتور را برمیگردونه. اگر فاکتور از صف خارج شده باشه، پاسخ ۲۰۰ میگیری.
بازهٔ مبلغ شارژ 1.00–1000.00 USDT
curl -X POST \
-H "Authorization: Bearer $KEY" \
-H 'Idempotency-Key: topup-0001' \
-H 'Content-Type: application/json' \
-d '{"amount":"10.00"}' \
"$BASE/api/v1/wallet/topups"
{
"data": {
"reference": "INVOICE_REFERENCE",
"state": "creating",
"amount": "10.00",
"currency": "USDT",
"payment_url": null,
"credited_at": null
}
}
/api/v1/wallet/topups/{reference}با reference یا نشانی Location وضعیت رو بگیر. وقتی وضعیت pending شد، payment_url رو در مرورگر باز کن. بعد از تأیید بها، وضعیت completed و اعتبار کیف پول بهروز میشه.
ساخت فاکتور و بررسی وضعیت رایگاناند. وضعیتهای expired و cancelled یعنی برای پرداخت باید فاکتور جدید بسازی.
نمونهکد و Postman
کالکشن را در Postman وارد کن و api_key را در یک محیط خصوصی تنظیم کن. قبل از درخواست پولی یا ساخت فاکتور، کلید یکتای همان عملیات را هم تنظیم کن.
در نمونههای زیر، RAILBOT_URL نشانی پایه و RAILBOT_KEY کلید وبسرویس است. برای شروع میتونی موجودی را رایگان بگیری.
اگر خطی کامل دیده نمیشه، داخل کادر کد افقی بکش.
cURL
curl -fsS \
-H "Authorization: Bearer $RAILBOT_KEY" \
"$RAILBOT_URL/api/v1/wallet"
JavaScript / Node.js
const env = process.env;
const base = env.RAILBOT_URL;
const key = env.RAILBOT_KEY;
const headers = {
Authorization: `Bearer ${key}`,
};
const response = await fetch(
`${base}/api/v1/wallet`,
{ headers },
);
const data = await response.json();
if (!response.ok) {
throw new Error(data.error.code);
}
console.log(data.data.balance);
PHP / cURL
$base = getenv('RAILBOT_URL');
$key = getenv('RAILBOT_KEY');
$client = curl_init($base.'/api/v1/wallet');
curl_setopt_array($client, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_HTTPHEADER => ['Authorization: Bearer '.$key],
]);
$body = curl_exec($client);
if ($body === false) {
throw new RuntimeException(curl_error($client));
}
$result = json_decode($body, true, flags: JSON_THROW_ON_ERROR);
if (curl_getinfo($client, CURLINFO_HTTP_CODE) >= 400) {
throw new RuntimeException($result['error']['code']);
}
echo $result['data']['balance'], PHP_EOL;
Go
package main
import (
"fmt"
"io"
"log"
"net/http"
"os"
"time"
)
func main() {
base := os.Getenv("RAILBOT_URL")
key := os.Getenv("RAILBOT_KEY")
req, err := http.NewRequest("GET", base+"/api/v1/wallet", nil)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", "Bearer "+key)
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil || resp.StatusCode >= 400 {
log.Fatalf("HTTP %d: %s (%v)", resp.StatusCode, body, err)
}
fmt.Println(string(body))
}
کدهای خطا
برای مدیریت خطا از error.code استفاده کن. درخواست ناموفق از موجودی یا سقف کلید کم نمیکنه.
| HTTP | کد | معنی |
|---|---|---|
401 | invalid_token | کلید اشتباهه یا لغو شده. |
402 | insufficient_balance | اعتبار کافی نیست. |
403 | account_blocked | دسترسی حساب محدود شده. |
404 | app_not_found | اپ در حساب پیدا نشد. |
409 | idempotency_conflict | همین Idempotency-Key قبلاً برای اپ دیگری یا مبلغ دیگری استفاده شده. |
409 | app_changed | اطلاعات اپ تغییر کرده. Idempotency-Key تازه بفرست. |
422 | invalid_idempotency_key | هدر Idempotency-Key خالی یا نامعتبره. |
429 | token_quota_exhausted | سقف درخواستهای موفق این کلید پر شده. |
429 | rate_limited | درخواستها زیاده. بعداً دوباره تلاش کن. |
422 | invalid_amount | مبلغ فاکتور معتبر نیست. |
404 | topup_not_found | این فاکتور در حساب پیدا نشد. |
503 | gateway_unavailable | ساخت فاکتور جدید فعلاً متوقف است. |
500 | server_error | خطای سرور. با همان Idempotency-Key دوباره تلاش کن. |