[{"data":1,"prerenderedAt":3402},["ShallowReactive",2],{"blog-article-/blog/cloud-sms-otp-guide":3,"blog-posts":1291},{"id":4,"title":5,"author":6,"body":7,"category":1277,"date":1278,"description":1279,"extension":1280,"image":1281,"meta":1282,"navigation":955,"path":1283,"readingTime":436,"seo":1284,"stem":1285,"tags":1286,"updatedAt":6,"__hash__":1290},"blog/blog/cloud-sms-otp-guide.md","مستندات Cloud SMS OTP رسانکس",null,{"type":8,"value":9,"toc":1251},"minimark",[10,15,19,23,26,61,65,88,92,120,124,148,152,155,186,199,204,313,319,439,443,495,499,503,535,546,550,620,629,633,710,714,745,756,760,764,868,872,969,973,1108,1112,1204,1208,1244,1247],[11,12,14],"h2",{"id":13},"این-مستندات-برای-چیست","این مستندات برای چیست؟",[16,17,18],"p",{},"این صفحه دقیقا نشان می‌دهد Cloud SMS OTP را چگونه در رسانکس تنظیم کنید و از سیستم خودتان به Endpoint رسمی درخواست بزنید.",[11,20,22],{"id":21},"مسیرهای-دقیق-داخل-پنل","مسیرهای دقیق داخل پنل",[16,24,25],{},"مسیرها را به همین ترتیب انجام دهید:",[27,28,29,37,43,49,55],"ol",{},[30,31,32,33],"li",{},"تنظیم سرویس‌دهنده پیامکی: ",[34,35,36],"code",{},"/app/sms-otp/providers",[30,38,39,40],{},"تنظیم صف پشتیبان: ",[34,41,42],{},"/app/sms-otp/routing",[30,44,45,46],{},"دریافت API Key وب‌سرویس: ",[34,47,48],{},"/app/webservice",[30,50,51,52],{},"مشاهده مستندات ماژول در پنل: ",[34,53,54],{},"/app/webservice/sms_otp",[30,56,57,58],{},"بررسی گزارش ارسال: ",[34,59,60],{},"/app/sms-otp/logs",[11,62,64],{"id":63},"پیشنیازهای-الزامی","پیش‌نیازهای الزامی",[27,66,67,74,79,82,85],{},[30,68,69,70,73],{},"ماژول ",[34,71,72],{},"sms_otp"," برای کسب‌وکار فعال باشد.",[30,75,69,76,73],{},[34,77,78],{},"webservice",[30,80,81],{},"حداقل یک سرویس‌دهنده پیامکی تنظیم و فعال شده باشد.",[30,83,84],{},"برای سرویس‌دهنده فعال، نام الگوی OTP ثبت شده باشد.",[30,86,87],{},"API Key معتبر از بخش وب‌سرویس دریافت شده باشد.",[11,89,91],{"id":90},"endpoint-رسمی-ارسال","Endpoint رسمی ارسال",[93,94,95,104,112],"ul",{},[30,96,97,100,101],{},[34,98,99],{},"Method",": ",[34,102,103],{},"POST",[30,105,106,100,109],{},[34,107,108],{},"Path",[34,110,111],{},"/v1/sms-otp/send",[30,113,114,100,117],{},[34,115,116],{},"Full URL (مثال)",[34,118,119],{},"https://api.rasanex.com/v1/sms-otp/send",[11,121,123],{"id":122},"headerهای-لازم","Headerهای لازم",[125,126,132],"pre",{"className":127,"code":128,"filename":129,"language":130,"meta":131,"style":131},"language-http shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Authorization: Bearer YOUR_API_KEY\nContent-Type: application/json\n","headers.http","http","",[34,133,134,142],{"__ignoreMap":131},[135,136,139],"span",{"class":137,"line":138},"line",1,[135,140,141],{},"Authorization: Bearer YOUR_API_KEY\n",[135,143,145],{"class":137,"line":144},2,[135,146,147],{},"Content-Type: application/json\n",[11,149,151],{"id":150},"بدنه-درخواست","بدنه درخواست",[16,153,154],{},"فیلدها:",[93,156,157,163,168,174,180],{},[30,158,159,162],{},[34,160,161],{},"phone"," اجباری: شماره مقصد",[30,164,165,167],{},[34,166,34],{}," اختیاری: کد OTP",[30,169,170,173],{},[34,171,172],{},"params"," اختیاری: پارامترهای پویا",[30,175,176,179],{},[34,177,178],{},"options.idempotency_key"," اختیاری: جلوگیری از ارسال تکراری",[30,181,182,185],{},[34,183,184],{},"tenant_id"," اختیاری: فقط در سناریوی توکن چندکسب‌وکاری",[16,187,188,189,191,192,194,195,198],{},"نکته مهم: در این API باید حداقل یکی از ",[34,190,34],{}," یا ",[34,193,172],{}," را بفرستید. اگر هیچ‌کدام ارسال نشود، خطای ",[34,196,197],{},"422"," می‌گیرید.",[200,201,203],"h3",{"id":202},"نمونه-استاندارد-پیشنهادی","نمونه استاندارد (پیشنهادی)",[125,205,210],{"className":206,"code":207,"filename":208,"language":209,"meta":131,"style":131},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"phone\": \"09120000000\",\n  \"code\": \"4821\",\n  \"options\": {\n    \"idempotency_key\": \"sms-otp-login-20260411-01\"\n  }\n}\n","request.json","json",[34,211,212,218,244,264,279,301,307],{"__ignoreMap":131},[135,213,214],{"class":137,"line":138},[135,215,217],{"class":216},"sMK4o","{\n",[135,219,220,223,226,229,232,235,239,241],{"class":137,"line":144},[135,221,222],{"class":216},"  \"",[135,224,161],{"class":225},"spNyl",[135,227,228],{"class":216},"\"",[135,230,231],{"class":216},":",[135,233,234],{"class":216}," \"",[135,236,238],{"class":237},"sfazB","09120000000",[135,240,228],{"class":216},[135,242,243],{"class":216},",\n",[135,245,247,249,251,253,255,257,260,262],{"class":137,"line":246},3,[135,248,222],{"class":216},[135,250,34],{"class":225},[135,252,228],{"class":216},[135,254,231],{"class":216},[135,256,234],{"class":216},[135,258,259],{"class":237},"4821",[135,261,228],{"class":216},[135,263,243],{"class":216},[135,265,267,269,272,274,276],{"class":137,"line":266},4,[135,268,222],{"class":216},[135,270,271],{"class":225},"options",[135,273,228],{"class":216},[135,275,231],{"class":216},[135,277,278],{"class":216}," {\n",[135,280,282,285,289,291,293,295,298],{"class":137,"line":281},5,[135,283,284],{"class":216},"    \"",[135,286,288],{"class":287},"sBMFI","idempotency_key",[135,290,228],{"class":216},[135,292,231],{"class":216},[135,294,234],{"class":216},[135,296,297],{"class":237},"sms-otp-login-20260411-01",[135,299,300],{"class":216},"\"\n",[135,302,304],{"class":137,"line":303},6,[135,305,306],{"class":216},"  }\n",[135,308,310],{"class":137,"line":309},7,[135,311,312],{"class":216},"}\n",[200,314,316,317],{"id":315},"نمونه-با-params","نمونه با ",[34,318,172],{},[125,320,323],{"className":206,"code":321,"filename":322,"language":209,"meta":131,"style":131},"{\n  \"phone\": \"09120000000\",\n  \"params\": {\n    \"token\": \"4821\",\n    \"code\": \"4821\"\n  },\n  \"options\": {\n    \"idempotency_key\": \"sms-otp-login-20260411-02\"\n  }\n}\n","request-with-params.json",[34,324,325,329,347,359,378,394,399,411,429,434],{"__ignoreMap":131},[135,326,327],{"class":137,"line":138},[135,328,217],{"class":216},[135,330,331,333,335,337,339,341,343,345],{"class":137,"line":144},[135,332,222],{"class":216},[135,334,161],{"class":225},[135,336,228],{"class":216},[135,338,231],{"class":216},[135,340,234],{"class":216},[135,342,238],{"class":237},[135,344,228],{"class":216},[135,346,243],{"class":216},[135,348,349,351,353,355,357],{"class":137,"line":246},[135,350,222],{"class":216},[135,352,172],{"class":225},[135,354,228],{"class":216},[135,356,231],{"class":216},[135,358,278],{"class":216},[135,360,361,363,366,368,370,372,374,376],{"class":137,"line":266},[135,362,284],{"class":216},[135,364,365],{"class":287},"token",[135,367,228],{"class":216},[135,369,231],{"class":216},[135,371,234],{"class":216},[135,373,259],{"class":237},[135,375,228],{"class":216},[135,377,243],{"class":216},[135,379,380,382,384,386,388,390,392],{"class":137,"line":281},[135,381,284],{"class":216},[135,383,34],{"class":287},[135,385,228],{"class":216},[135,387,231],{"class":216},[135,389,234],{"class":216},[135,391,259],{"class":237},[135,393,300],{"class":216},[135,395,396],{"class":137,"line":303},[135,397,398],{"class":216},"  },\n",[135,400,401,403,405,407,409],{"class":137,"line":309},[135,402,222],{"class":216},[135,404,271],{"class":225},[135,406,228],{"class":216},[135,408,231],{"class":216},[135,410,278],{"class":216},[135,412,414,416,418,420,422,424,427],{"class":137,"line":413},8,[135,415,284],{"class":216},[135,417,288],{"class":287},[135,419,228],{"class":216},[135,421,231],{"class":216},[135,423,234],{"class":216},[135,425,426],{"class":237},"sms-otp-login-20260411-02",[135,428,300],{"class":216},[135,430,432],{"class":137,"line":431},9,[135,433,306],{"class":216},[135,435,437],{"class":137,"line":436},10,[135,438,312],{"class":216},[11,440,442],{"id":441},"پاسخ-موفق","پاسخ موفق",[125,444,447],{"className":206,"code":445,"filename":446,"language":209,"meta":131,"style":131},"{\n  \"tracking_id\": \"f0e9c32b62e24b78a3e0a9c3f2d14e88\",\n  \"status\": \"accepted\"\n}\n","202-accepted.json",[34,448,449,453,473,491],{"__ignoreMap":131},[135,450,451],{"class":137,"line":138},[135,452,217],{"class":216},[135,454,455,457,460,462,464,466,469,471],{"class":137,"line":144},[135,456,222],{"class":216},[135,458,459],{"class":225},"tracking_id",[135,461,228],{"class":216},[135,463,231],{"class":216},[135,465,234],{"class":216},[135,467,468],{"class":237},"f0e9c32b62e24b78a3e0a9c3f2d14e88",[135,470,228],{"class":216},[135,472,243],{"class":216},[135,474,475,477,480,482,484,486,489],{"class":137,"line":246},[135,476,222],{"class":216},[135,478,479],{"class":225},"status",[135,481,228],{"class":216},[135,483,231],{"class":216},[135,485,234],{"class":216},[135,487,488],{"class":237},"accepted",[135,490,300],{"class":216},[135,492,493],{"class":137,"line":266},[135,494,312],{"class":216},[11,496,498],{"id":497},"خطاهای-رایج-و-اقدام-اصلاحی","خطاهای رایج و اقدام اصلاحی",[200,500,502],{"id":501},"_401-توکن-نامعتبر","401 - توکن نامعتبر",[125,504,507],{"className":206,"code":505,"filename":506,"language":209,"meta":131,"style":131},"{\n  \"message\": \"Unauthorized. Invalid bearer token.\"\n}\n","401.json",[34,508,509,513,531],{"__ignoreMap":131},[135,510,511],{"class":137,"line":138},[135,512,217],{"class":216},[135,514,515,517,520,522,524,526,529],{"class":137,"line":144},[135,516,222],{"class":216},[135,518,519],{"class":225},"message",[135,521,228],{"class":216},[135,523,231],{"class":216},[135,525,234],{"class":216},[135,527,528],{"class":237},"Unauthorized. Invalid bearer token.",[135,530,300],{"class":216},[135,532,533],{"class":137,"line":246},[135,534,312],{"class":216},[16,536,537,538,541,542,545],{},"اقدام: ",[34,539,540],{},"Authorization"," را با ",[34,543,544],{},"Bearer"," و API Key معتبر دوباره ارسال کنید.",[200,547,549],{"id":548},"_403-ماژول-غیرفعال-یا-دسترسی-ناکافی","403 - ماژول غیرفعال یا دسترسی ناکافی",[125,551,554],{"className":206,"code":552,"filename":553,"language":209,"meta":131,"style":131},"{\n  \"error\": \"Webservice module must be enabled to use sms_otp webservice APIs.\",\n  \"module_id\": \"webservice\",\n  \"code\": \"module_disabled\"\n}\n","403.json",[34,555,556,560,580,599,616],{"__ignoreMap":131},[135,557,558],{"class":137,"line":138},[135,559,217],{"class":216},[135,561,562,564,567,569,571,573,576,578],{"class":137,"line":144},[135,563,222],{"class":216},[135,565,566],{"class":225},"error",[135,568,228],{"class":216},[135,570,231],{"class":216},[135,572,234],{"class":216},[135,574,575],{"class":237},"Webservice module must be enabled to use sms_otp webservice APIs.",[135,577,228],{"class":216},[135,579,243],{"class":216},[135,581,582,584,587,589,591,593,595,597],{"class":137,"line":246},[135,583,222],{"class":216},[135,585,586],{"class":225},"module_id",[135,588,228],{"class":216},[135,590,231],{"class":216},[135,592,234],{"class":216},[135,594,78],{"class":237},[135,596,228],{"class":216},[135,598,243],{"class":216},[135,600,601,603,605,607,609,611,614],{"class":137,"line":266},[135,602,222],{"class":216},[135,604,34],{"class":225},[135,606,228],{"class":216},[135,608,231],{"class":216},[135,610,234],{"class":216},[135,612,613],{"class":237},"module_disabled",[135,615,300],{"class":216},[135,617,618],{"class":137,"line":281},[135,619,312],{"class":216},[16,621,622,623,625,626,628],{},"اقدام: در پنل، فعال بودن ",[34,624,72],{}," و ",[34,627,78],{}," را بررسی کنید.",[200,630,632],{"id":631},"_422-بدنه-نامعتبر-نمونه-۱-خطای-ولیدیشن","422 - بدنه نامعتبر (نمونه ۱: خطای ولیدیشن)",[125,634,637],{"className":206,"code":635,"filename":636,"language":209,"meta":131,"style":131},"{\n  \"message\": \"The phone field is required.\",\n  \"errors\": {\n    \"phone\": [\n      \"The phone field is required.\"\n    ]\n  }\n}\n","422-validation.json",[34,638,639,643,662,675,688,697,702,706],{"__ignoreMap":131},[135,640,641],{"class":137,"line":138},[135,642,217],{"class":216},[135,644,645,647,649,651,653,655,658,660],{"class":137,"line":144},[135,646,222],{"class":216},[135,648,519],{"class":225},[135,650,228],{"class":216},[135,652,231],{"class":216},[135,654,234],{"class":216},[135,656,657],{"class":237},"The phone field is required.",[135,659,228],{"class":216},[135,661,243],{"class":216},[135,663,664,666,669,671,673],{"class":137,"line":246},[135,665,222],{"class":216},[135,667,668],{"class":225},"errors",[135,670,228],{"class":216},[135,672,231],{"class":216},[135,674,278],{"class":216},[135,676,677,679,681,683,685],{"class":137,"line":266},[135,678,284],{"class":216},[135,680,161],{"class":287},[135,682,228],{"class":216},[135,684,231],{"class":216},[135,686,687],{"class":216}," [\n",[135,689,690,693,695],{"class":137,"line":281},[135,691,692],{"class":216},"      \"",[135,694,657],{"class":237},[135,696,300],{"class":216},[135,698,699],{"class":137,"line":303},[135,700,701],{"class":216},"    ]\n",[135,703,704],{"class":137,"line":309},[135,705,306],{"class":216},[135,707,708],{"class":137,"line":413},[135,709,312],{"class":216},[200,711,713],{"id":712},"_422-بدنه-نامعتبر-نمونه-۲-خطای-قواعد-ماژول","422 - بدنه نامعتبر (نمونه ۲: خطای قواعد ماژول)",[125,715,718],{"className":206,"code":716,"filename":717,"language":209,"meta":131,"style":131},"{\n  \"message\": \"Either code or params is required.\"\n}\n","422-business-rule.json",[34,719,720,724,741],{"__ignoreMap":131},[135,721,722],{"class":137,"line":138},[135,723,217],{"class":216},[135,725,726,728,730,732,734,736,739],{"class":137,"line":144},[135,727,222],{"class":216},[135,729,519],{"class":225},[135,731,228],{"class":216},[135,733,231],{"class":216},[135,735,234],{"class":216},[135,737,738],{"class":237},"Either code or params is required.",[135,740,300],{"class":216},[135,742,743],{"class":137,"line":246},[135,744,312],{"class":216},[16,746,747,748,750,751,191,753,755],{},"اقدام: فیلد ",[34,749,161],{}," را همیشه بفرستید و علاوه بر آن حداقل یکی از ",[34,752,34],{},[34,754,172],{}," را ارسال کنید.",[11,757,759],{"id":758},"نمونه-کدهای-آماده","نمونه کدهای آماده",[200,761,763],{"id":762},"curl","cURL",[125,765,770],{"className":766,"code":767,"filename":768,"language":769,"meta":131,"style":131},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl --request POST \\\n  --url https://api.rasanex.com/v1/sms-otp/send \\\n  --header 'Authorization: Bearer YOUR_API_KEY' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"phone\": \"09120000000\",\n    \"code\": \"4821\",\n    \"options\": {\n      \"idempotency_key\": \"sms-otp-login-20260411-01\"\n    }\n  }'\n","send-sms-otp.sh","bash",[34,771,772,786,796,812,825,834,839,844,849,854,859],{"__ignoreMap":131},[135,773,774,776,779,782],{"class":137,"line":138},[135,775,762],{"class":287},[135,777,778],{"class":237}," --request",[135,780,781],{"class":237}," POST",[135,783,785],{"class":784},"sTEyZ"," \\\n",[135,787,788,791,794],{"class":137,"line":144},[135,789,790],{"class":237},"  --url",[135,792,793],{"class":237}," https://api.rasanex.com/v1/sms-otp/send",[135,795,785],{"class":784},[135,797,798,801,804,807,810],{"class":137,"line":246},[135,799,800],{"class":237},"  --header",[135,802,803],{"class":216}," '",[135,805,806],{"class":237},"Authorization: Bearer YOUR_API_KEY",[135,808,809],{"class":216},"'",[135,811,785],{"class":784},[135,813,814,816,818,821,823],{"class":137,"line":266},[135,815,800],{"class":237},[135,817,803],{"class":216},[135,819,820],{"class":237},"Content-Type: application/json",[135,822,809],{"class":216},[135,824,785],{"class":784},[135,826,827,830,832],{"class":137,"line":281},[135,828,829],{"class":237},"  --data",[135,831,803],{"class":216},[135,833,217],{"class":237},[135,835,836],{"class":137,"line":303},[135,837,838],{"class":237},"    \"phone\": \"09120000000\",\n",[135,840,841],{"class":137,"line":309},[135,842,843],{"class":237},"    \"code\": \"4821\",\n",[135,845,846],{"class":137,"line":413},[135,847,848],{"class":237},"    \"options\": {\n",[135,850,851],{"class":137,"line":431},[135,852,853],{"class":237},"      \"idempotency_key\": \"sms-otp-login-20260411-01\"\n",[135,855,856],{"class":137,"line":436},[135,857,858],{"class":237},"    }\n",[135,860,862,865],{"class":137,"line":861},11,[135,863,864],{"class":237},"  }",[135,866,867],{"class":216},"'\n",[200,869,871],{"id":870},"javascript","JavaScript",[125,873,877],{"className":874,"code":875,"filename":876,"language":870,"meta":131,"style":131},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const response = await fetch('https://api.rasanex.com/v1/sms-otp/send', {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer YOUR_API_KEY',\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n    phone: '09120000000',\n    code: '4821',\n    options: {\n      idempotency_key: 'sms-otp-login-20260411-01'\n    }\n  })\n})\n\nconst data = await response.json()\nconsole.log(data)\n","sendSmsOtp.js",[34,878,879,884,889,894,899,904,908,913,918,923,928,933,938,944,950,957,963],{"__ignoreMap":131},[135,880,881],{"class":137,"line":138},[135,882,883],{},"const response = await fetch('https://api.rasanex.com/v1/sms-otp/send', {\n",[135,885,886],{"class":137,"line":144},[135,887,888],{},"  method: 'POST',\n",[135,890,891],{"class":137,"line":246},[135,892,893],{},"  headers: {\n",[135,895,896],{"class":137,"line":266},[135,897,898],{},"    Authorization: 'Bearer YOUR_API_KEY',\n",[135,900,901],{"class":137,"line":281},[135,902,903],{},"    'Content-Type': 'application/json'\n",[135,905,906],{"class":137,"line":303},[135,907,398],{},[135,909,910],{"class":137,"line":309},[135,911,912],{},"  body: JSON.stringify({\n",[135,914,915],{"class":137,"line":413},[135,916,917],{},"    phone: '09120000000',\n",[135,919,920],{"class":137,"line":431},[135,921,922],{},"    code: '4821',\n",[135,924,925],{"class":137,"line":436},[135,926,927],{},"    options: {\n",[135,929,930],{"class":137,"line":861},[135,931,932],{},"      idempotency_key: 'sms-otp-login-20260411-01'\n",[135,934,936],{"class":137,"line":935},12,[135,937,858],{},[135,939,941],{"class":137,"line":940},13,[135,942,943],{},"  })\n",[135,945,947],{"class":137,"line":946},14,[135,948,949],{},"})\n",[135,951,953],{"class":137,"line":952},15,[135,954,956],{"emptyLinePlaceholder":955},true,"\n",[135,958,960],{"class":137,"line":959},16,[135,961,962],{},"const data = await response.json()\n",[135,964,966],{"class":137,"line":965},17,[135,967,968],{},"console.log(data)\n",[200,970,972],{"id":971},"php","PHP",[125,974,978],{"className":975,"code":976,"filename":977,"language":971,"meta":131,"style":131},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?php\n\n$payload = [\n    'phone' => '09120000000',\n    'code' => '4821',\n    'options' => [\n        'idempotency_key' => 'sms-otp-login-20260411-01',\n    ],\n];\n\n$ch = curl_init('https://api.rasanex.com/v1/sms-otp/send');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_HTTPHEADER => [\n        'Authorization: Bearer YOUR_API_KEY',\n        'Content-Type: application/json',\n    ],\n    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),\n]);\n\n$result = curl_exec($ch);\ncurl_close($ch);\n\necho $result;\n","send_sms_otp.php",[34,979,980,985,989,994,999,1004,1009,1014,1019,1024,1028,1033,1038,1043,1048,1053,1058,1063,1068,1074,1080,1085,1091,1097,1102],{"__ignoreMap":131},[135,981,982],{"class":137,"line":138},[135,983,984],{},"\u003C?php\n",[135,986,987],{"class":137,"line":144},[135,988,956],{"emptyLinePlaceholder":955},[135,990,991],{"class":137,"line":246},[135,992,993],{},"$payload = [\n",[135,995,996],{"class":137,"line":266},[135,997,998],{},"    'phone' => '09120000000',\n",[135,1000,1001],{"class":137,"line":281},[135,1002,1003],{},"    'code' => '4821',\n",[135,1005,1006],{"class":137,"line":303},[135,1007,1008],{},"    'options' => [\n",[135,1010,1011],{"class":137,"line":309},[135,1012,1013],{},"        'idempotency_key' => 'sms-otp-login-20260411-01',\n",[135,1015,1016],{"class":137,"line":413},[135,1017,1018],{},"    ],\n",[135,1020,1021],{"class":137,"line":431},[135,1022,1023],{},"];\n",[135,1025,1026],{"class":137,"line":436},[135,1027,956],{"emptyLinePlaceholder":955},[135,1029,1030],{"class":137,"line":861},[135,1031,1032],{},"$ch = curl_init('https://api.rasanex.com/v1/sms-otp/send');\n",[135,1034,1035],{"class":137,"line":935},[135,1036,1037],{},"curl_setopt_array($ch, [\n",[135,1039,1040],{"class":137,"line":940},[135,1041,1042],{},"    CURLOPT_RETURNTRANSFER => true,\n",[135,1044,1045],{"class":137,"line":946},[135,1046,1047],{},"    CURLOPT_POST => true,\n",[135,1049,1050],{"class":137,"line":952},[135,1051,1052],{},"    CURLOPT_HTTPHEADER => [\n",[135,1054,1055],{"class":137,"line":959},[135,1056,1057],{},"        'Authorization: Bearer YOUR_API_KEY',\n",[135,1059,1060],{"class":137,"line":965},[135,1061,1062],{},"        'Content-Type: application/json',\n",[135,1064,1066],{"class":137,"line":1065},18,[135,1067,1018],{},[135,1069,1071],{"class":137,"line":1070},19,[135,1072,1073],{},"    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),\n",[135,1075,1077],{"class":137,"line":1076},20,[135,1078,1079],{},"]);\n",[135,1081,1083],{"class":137,"line":1082},21,[135,1084,956],{"emptyLinePlaceholder":955},[135,1086,1088],{"class":137,"line":1087},22,[135,1089,1090],{},"$result = curl_exec($ch);\n",[135,1092,1094],{"class":137,"line":1093},23,[135,1095,1096],{},"curl_close($ch);\n",[135,1098,1100],{"class":137,"line":1099},24,[135,1101,956],{"emptyLinePlaceholder":955},[135,1103,1105],{"class":137,"line":1104},25,[135,1106,1107],{},"echo $result;\n",[200,1109,1111],{"id":1110},"python","Python",[125,1113,1117],{"className":1114,"code":1115,"filename":1116,"language":1110,"meta":131,"style":131},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import requests\n\nurl = 'https://api.rasanex.com/v1/sms-otp/send'\nheaders = {\n    'Authorization': 'Bearer YOUR_API_KEY',\n    'Content-Type': 'application/json',\n}\npayload = {\n    'phone': '09120000000',\n    'code': '4821',\n    'options': {\n        'idempotency_key': 'sms-otp-login-20260411-01'\n    }\n}\n\nresponse = requests.post(url, json=payload, headers=headers, timeout=20)\nprint(response.status_code)\nprint(response.json())\n","send_sms_otp.py",[34,1118,1119,1124,1128,1133,1138,1143,1148,1152,1157,1162,1167,1172,1177,1181,1185,1189,1194,1199],{"__ignoreMap":131},[135,1120,1121],{"class":137,"line":138},[135,1122,1123],{},"import requests\n",[135,1125,1126],{"class":137,"line":144},[135,1127,956],{"emptyLinePlaceholder":955},[135,1129,1130],{"class":137,"line":246},[135,1131,1132],{},"url = 'https://api.rasanex.com/v1/sms-otp/send'\n",[135,1134,1135],{"class":137,"line":266},[135,1136,1137],{},"headers = {\n",[135,1139,1140],{"class":137,"line":281},[135,1141,1142],{},"    'Authorization': 'Bearer YOUR_API_KEY',\n",[135,1144,1145],{"class":137,"line":303},[135,1146,1147],{},"    'Content-Type': 'application/json',\n",[135,1149,1150],{"class":137,"line":309},[135,1151,312],{},[135,1153,1154],{"class":137,"line":413},[135,1155,1156],{},"payload = {\n",[135,1158,1159],{"class":137,"line":431},[135,1160,1161],{},"    'phone': '09120000000',\n",[135,1163,1164],{"class":137,"line":436},[135,1165,1166],{},"    'code': '4821',\n",[135,1168,1169],{"class":137,"line":861},[135,1170,1171],{},"    'options': {\n",[135,1173,1174],{"class":137,"line":935},[135,1175,1176],{},"        'idempotency_key': 'sms-otp-login-20260411-01'\n",[135,1178,1179],{"class":137,"line":940},[135,1180,858],{},[135,1182,1183],{"class":137,"line":946},[135,1184,312],{},[135,1186,1187],{"class":137,"line":952},[135,1188,956],{"emptyLinePlaceholder":955},[135,1190,1191],{"class":137,"line":959},[135,1192,1193],{},"response = requests.post(url, json=payload, headers=headers, timeout=20)\n",[135,1195,1196],{"class":137,"line":965},[135,1197,1198],{},"print(response.status_code)\n",[135,1200,1201],{"class":137,"line":1065},[135,1202,1203],{},"print(response.json())\n",[11,1205,1207],{"id":1206},"روال-پیشنهادی-برای-جلوگیری-از-خطا","روال پیشنهادی برای جلوگیری از خطا",[27,1209,1210,1213,1219,1225,1235],{},[30,1211,1212],{},"ابتدا در پنل، سرویس‌دهنده و نام الگو را کامل تنظیم کنید.",[30,1214,1215,1216,1218],{},"سپس در ",[34,1217,42],{}," صف پشتیبان را ذخیره کنید.",[30,1220,1221,1222,1224],{},"بعد API Key را از ",[34,1223,48],{}," بگیرید.",[30,1226,1227,1228,1231,1232,1234],{},"در سیستم خودتان هنگام ",[34,1229,1230],{},"retry"," همان ",[34,1233,288],{}," را تکرار کنید.",[30,1236,1237,1238,1240,1241,1243],{},"نتیجه ارسال را با ",[34,1239,459],{}," در ",[34,1242,60],{}," بررسی کنید.",[16,1245,1246],{},"اگر این ترتیب رعایت شود، خطاهای عملیاتی به‌صورت محسوسی کمتر می‌شود.",[1248,1249,1250],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":131,"searchDepth":144,"depth":144,"links":1252},[1253,1254,1255,1256,1257,1258,1263,1264,1270,1276],{"id":13,"depth":144,"text":14},{"id":21,"depth":144,"text":22},{"id":63,"depth":144,"text":64},{"id":90,"depth":144,"text":91},{"id":122,"depth":144,"text":123},{"id":150,"depth":144,"text":151,"children":1259},[1260,1261],{"id":202,"depth":246,"text":203},{"id":315,"depth":246,"text":1262},"نمونه با params",{"id":441,"depth":144,"text":442},{"id":497,"depth":144,"text":498,"children":1265},[1266,1267,1268,1269],{"id":501,"depth":246,"text":502},{"id":548,"depth":246,"text":549},{"id":631,"depth":246,"text":632},{"id":712,"depth":246,"text":713},{"id":758,"depth":144,"text":759,"children":1271},[1272,1273,1274,1275],{"id":762,"depth":246,"text":763},{"id":870,"depth":246,"text":871},{"id":971,"depth":246,"text":972},{"id":1110,"depth":246,"text":1111},{"id":1206,"depth":144,"text":1207},"مستندات فنی","2026-04-11","راهنمای رسمی راه‌اندازی و استفاده از Cloud SMS OTP در رسانکس با مسیرهای دقیق پنل، Endpoint واقعی، نمونه درخواست و مدیریت خطا.","md","/images/blog/cloud-sms-otp-guide.svg",{},"/blog/cloud-sms-otp-guide",{"title":5,"description":1279},"blog/cloud-sms-otp-guide",[1287,1288,1289],"Cloud SMS OTP","مستندات API","رسانکس","BVXkxGjNcbQA-7a9Kh6KvaZlsvGodbZf_3ukRner6Pc",[1292,2180,3167],{"id":1293,"title":1294,"author":6,"body":1295,"category":1277,"date":2170,"description":2171,"extension":1280,"image":2172,"meta":2173,"navigation":955,"path":2174,"readingTime":436,"seo":2175,"stem":2176,"tags":2177,"updatedAt":6,"__hash__":2179},"blog/blog/cloud-call-otp-guide.md","مستندات Cloud Call OTP رسانکس",{"type":8,"value":1296,"toc":2149},[1297,1299,1302,1304,1307,1336,1338,1354,1356,1378,1380,1392,1394,1396,1422,1504,1506,1552,1554,1556,1584,1590,1592,1658,1665,1669,1741,1749,1751,1753,1837,1839,1915,1917,2025,2027,2107,2111,2144,2147],[11,1298,14],{"id":13},[16,1300,1301],{},"این صفحه راهنمای دقیق استفاده از Cloud Call OTP است تا کد OTP را از طریق تماس صوتی و با مسیر پشتیبان استاندارد ارسال کنید.",[11,1303,22],{"id":21},[16,1305,1306],{},"مسیرها را به این ترتیب انجام دهید:",[27,1308,1309,1315,1321,1325,1330],{},[30,1310,1311,1312],{},"تنظیم سرویس‌دهنده تماس: ",[34,1313,1314],{},"/app/call-otp/providers",[30,1316,1317,1318],{},"تنظیم صف پشتیبان تماس: ",[34,1319,1320],{},"/app/call-otp/routing",[30,1322,45,1323],{},[34,1324,48],{},[30,1326,51,1327],{},[34,1328,1329],{},"/app/webservice/call_otp",[30,1331,1332,1333],{},"بررسی گزارش تماس‌ها: ",[34,1334,1335],{},"/app/call-otp/logs",[11,1337,64],{"id":63},[27,1339,1340,1345,1349,1352],{},[30,1341,69,1342,73],{},[34,1343,1344],{},"call_otp",[30,1346,69,1347,73],{},[34,1348,78],{},[30,1350,1351],{},"حداقل یک سرویس‌دهنده تماس صوتی تنظیم و فعال شده باشد.",[30,1353,87],{},[11,1355,91],{"id":90},[93,1357,1358,1364,1371],{},[30,1359,1360,100,1362],{},[34,1361,99],{},[34,1363,103],{},[30,1365,1366,100,1368],{},[34,1367,108],{},[34,1369,1370],{},"/v1/call-otp/send",[30,1372,1373,100,1375],{},[34,1374,116],{},[34,1376,1377],{},"https://api.rasanex.com/v1/call-otp/send",[11,1379,123],{"id":122},[125,1381,1382],{"className":127,"code":128,"filename":129,"language":130,"meta":131,"style":131},[34,1383,1384,1388],{"__ignoreMap":131},[135,1385,1386],{"class":137,"line":138},[135,1387,141],{},[135,1389,1390],{"class":137,"line":144},[135,1391,147],{},[11,1393,151],{"id":150},[16,1395,154],{},[93,1397,1398,1403,1408,1413,1418],{},[30,1399,1400,1402],{},[34,1401,161],{}," اجباری: شماره مقصد تماس",[30,1404,1405,1407],{},[34,1406,34],{}," اجباری: کد OTP",[30,1409,1410,1412],{},[34,1411,172],{}," اختیاری: پارامترهای تکمیلی",[30,1414,1415,1417],{},[34,1416,178],{}," اختیاری: جلوگیری از تماس تکراری در retry",[30,1419,1420,185],{},[34,1421,184],{},[125,1423,1425],{"className":206,"code":1424,"filename":208,"language":209,"meta":131,"style":131},"{\n  \"phone\": \"09120000000\",\n  \"code\": \"4821\",\n  \"options\": {\n    \"idempotency_key\": \"call-otp-login-20260411-01\"\n  }\n}\n",[34,1426,1427,1431,1449,1467,1479,1496,1500],{"__ignoreMap":131},[135,1428,1429],{"class":137,"line":138},[135,1430,217],{"class":216},[135,1432,1433,1435,1437,1439,1441,1443,1445,1447],{"class":137,"line":144},[135,1434,222],{"class":216},[135,1436,161],{"class":225},[135,1438,228],{"class":216},[135,1440,231],{"class":216},[135,1442,234],{"class":216},[135,1444,238],{"class":237},[135,1446,228],{"class":216},[135,1448,243],{"class":216},[135,1450,1451,1453,1455,1457,1459,1461,1463,1465],{"class":137,"line":246},[135,1452,222],{"class":216},[135,1454,34],{"class":225},[135,1456,228],{"class":216},[135,1458,231],{"class":216},[135,1460,234],{"class":216},[135,1462,259],{"class":237},[135,1464,228],{"class":216},[135,1466,243],{"class":216},[135,1468,1469,1471,1473,1475,1477],{"class":137,"line":266},[135,1470,222],{"class":216},[135,1472,271],{"class":225},[135,1474,228],{"class":216},[135,1476,231],{"class":216},[135,1478,278],{"class":216},[135,1480,1481,1483,1485,1487,1489,1491,1494],{"class":137,"line":281},[135,1482,284],{"class":216},[135,1484,288],{"class":287},[135,1486,228],{"class":216},[135,1488,231],{"class":216},[135,1490,234],{"class":216},[135,1492,1493],{"class":237},"call-otp-login-20260411-01",[135,1495,300],{"class":216},[135,1497,1498],{"class":137,"line":303},[135,1499,306],{"class":216},[135,1501,1502],{"class":137,"line":309},[135,1503,312],{"class":216},[11,1505,442],{"id":441},[125,1507,1508],{"className":206,"code":445,"filename":446,"language":209,"meta":131,"style":131},[34,1509,1510,1514,1532,1548],{"__ignoreMap":131},[135,1511,1512],{"class":137,"line":138},[135,1513,217],{"class":216},[135,1515,1516,1518,1520,1522,1524,1526,1528,1530],{"class":137,"line":144},[135,1517,222],{"class":216},[135,1519,459],{"class":225},[135,1521,228],{"class":216},[135,1523,231],{"class":216},[135,1525,234],{"class":216},[135,1527,468],{"class":237},[135,1529,228],{"class":216},[135,1531,243],{"class":216},[135,1533,1534,1536,1538,1540,1542,1544,1546],{"class":137,"line":246},[135,1535,222],{"class":216},[135,1537,479],{"class":225},[135,1539,228],{"class":216},[135,1541,231],{"class":216},[135,1543,234],{"class":216},[135,1545,488],{"class":237},[135,1547,300],{"class":216},[135,1549,1550],{"class":137,"line":266},[135,1551,312],{"class":216},[11,1553,498],{"id":497},[200,1555,502],{"id":501},[125,1557,1558],{"className":206,"code":505,"filename":506,"language":209,"meta":131,"style":131},[34,1559,1560,1564,1580],{"__ignoreMap":131},[135,1561,1562],{"class":137,"line":138},[135,1563,217],{"class":216},[135,1565,1566,1568,1570,1572,1574,1576,1578],{"class":137,"line":144},[135,1567,222],{"class":216},[135,1569,519],{"class":225},[135,1571,228],{"class":216},[135,1573,231],{"class":216},[135,1575,234],{"class":216},[135,1577,528],{"class":237},[135,1579,300],{"class":216},[135,1581,1582],{"class":137,"line":246},[135,1583,312],{"class":216},[16,1585,1586,1587,1589],{},"اقدام: API Key را بررسی کنید و هدر ",[34,1588,540],{}," را صحیح بفرستید.",[200,1591,549],{"id":548},[125,1593,1595],{"className":206,"code":1594,"filename":553,"language":209,"meta":131,"style":131},"{\n  \"error\": \"Webservice module must be enabled to use call_otp webservice APIs.\",\n  \"module_id\": \"webservice\",\n  \"code\": \"module_disabled\"\n}\n",[34,1596,1597,1601,1620,1638,1654],{"__ignoreMap":131},[135,1598,1599],{"class":137,"line":138},[135,1600,217],{"class":216},[135,1602,1603,1605,1607,1609,1611,1613,1616,1618],{"class":137,"line":144},[135,1604,222],{"class":216},[135,1606,566],{"class":225},[135,1608,228],{"class":216},[135,1610,231],{"class":216},[135,1612,234],{"class":216},[135,1614,1615],{"class":237},"Webservice module must be enabled to use call_otp webservice APIs.",[135,1617,228],{"class":216},[135,1619,243],{"class":216},[135,1621,1622,1624,1626,1628,1630,1632,1634,1636],{"class":137,"line":246},[135,1623,222],{"class":216},[135,1625,586],{"class":225},[135,1627,228],{"class":216},[135,1629,231],{"class":216},[135,1631,234],{"class":216},[135,1633,78],{"class":237},[135,1635,228],{"class":216},[135,1637,243],{"class":216},[135,1639,1640,1642,1644,1646,1648,1650,1652],{"class":137,"line":266},[135,1641,222],{"class":216},[135,1643,34],{"class":225},[135,1645,228],{"class":216},[135,1647,231],{"class":216},[135,1649,234],{"class":216},[135,1651,613],{"class":237},[135,1653,300],{"class":216},[135,1655,1656],{"class":137,"line":281},[135,1657,312],{"class":216},[16,1659,1660,1661,625,1663,628],{},"اقدام: فعال بودن ماژول‌های ",[34,1662,1344],{},[34,1664,78],{},[200,1666,1668],{"id":1667},"_422-بدنه-نامعتبر","422 - بدنه نامعتبر",[125,1670,1672],{"className":206,"code":1671,"filename":636,"language":209,"meta":131,"style":131},"{\n  \"message\": \"The code field is required.\",\n  \"errors\": {\n    \"code\": [\n      \"The code field is required.\"\n    ]\n  }\n}\n",[34,1673,1674,1678,1697,1709,1721,1729,1733,1737],{"__ignoreMap":131},[135,1675,1676],{"class":137,"line":138},[135,1677,217],{"class":216},[135,1679,1680,1682,1684,1686,1688,1690,1693,1695],{"class":137,"line":144},[135,1681,222],{"class":216},[135,1683,519],{"class":225},[135,1685,228],{"class":216},[135,1687,231],{"class":216},[135,1689,234],{"class":216},[135,1691,1692],{"class":237},"The code field is required.",[135,1694,228],{"class":216},[135,1696,243],{"class":216},[135,1698,1699,1701,1703,1705,1707],{"class":137,"line":246},[135,1700,222],{"class":216},[135,1702,668],{"class":225},[135,1704,228],{"class":216},[135,1706,231],{"class":216},[135,1708,278],{"class":216},[135,1710,1711,1713,1715,1717,1719],{"class":137,"line":266},[135,1712,284],{"class":216},[135,1714,34],{"class":287},[135,1716,228],{"class":216},[135,1718,231],{"class":216},[135,1720,687],{"class":216},[135,1722,1723,1725,1727],{"class":137,"line":281},[135,1724,692],{"class":216},[135,1726,1692],{"class":237},[135,1728,300],{"class":216},[135,1730,1731],{"class":137,"line":303},[135,1732,701],{"class":216},[135,1734,1735],{"class":137,"line":309},[135,1736,306],{"class":216},[135,1738,1739],{"class":137,"line":413},[135,1740,312],{"class":216},[16,1742,1743,1744,625,1746,1748],{},"اقدام: هر دو فیلد ",[34,1745,161],{},[34,1747,34],{}," را همیشه ارسال کنید.",[11,1750,759],{"id":758},[200,1752,763],{"id":762},[125,1754,1757],{"className":766,"code":1755,"filename":1756,"language":769,"meta":131,"style":131},"curl --request POST \\\n  --url https://api.rasanex.com/v1/call-otp/send \\\n  --header 'Authorization: Bearer YOUR_API_KEY' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"phone\": \"09120000000\",\n    \"code\": \"4821\",\n    \"options\": {\n      \"idempotency_key\": \"call-otp-login-20260411-01\"\n    }\n  }'\n","send-call-otp.sh",[34,1758,1759,1769,1778,1790,1802,1810,1814,1818,1822,1827,1831],{"__ignoreMap":131},[135,1760,1761,1763,1765,1767],{"class":137,"line":138},[135,1762,762],{"class":287},[135,1764,778],{"class":237},[135,1766,781],{"class":237},[135,1768,785],{"class":784},[135,1770,1771,1773,1776],{"class":137,"line":144},[135,1772,790],{"class":237},[135,1774,1775],{"class":237}," https://api.rasanex.com/v1/call-otp/send",[135,1777,785],{"class":784},[135,1779,1780,1782,1784,1786,1788],{"class":137,"line":246},[135,1781,800],{"class":237},[135,1783,803],{"class":216},[135,1785,806],{"class":237},[135,1787,809],{"class":216},[135,1789,785],{"class":784},[135,1791,1792,1794,1796,1798,1800],{"class":137,"line":266},[135,1793,800],{"class":237},[135,1795,803],{"class":216},[135,1797,820],{"class":237},[135,1799,809],{"class":216},[135,1801,785],{"class":784},[135,1803,1804,1806,1808],{"class":137,"line":281},[135,1805,829],{"class":237},[135,1807,803],{"class":216},[135,1809,217],{"class":237},[135,1811,1812],{"class":137,"line":303},[135,1813,838],{"class":237},[135,1815,1816],{"class":137,"line":309},[135,1817,843],{"class":237},[135,1819,1820],{"class":137,"line":413},[135,1821,848],{"class":237},[135,1823,1824],{"class":137,"line":431},[135,1825,1826],{"class":237},"      \"idempotency_key\": \"call-otp-login-20260411-01\"\n",[135,1828,1829],{"class":137,"line":436},[135,1830,858],{"class":237},[135,1832,1833,1835],{"class":137,"line":861},[135,1834,864],{"class":237},[135,1836,867],{"class":216},[200,1838,871],{"id":870},[125,1840,1843],{"className":874,"code":1841,"filename":1842,"language":870,"meta":131,"style":131},"const response = await fetch('https://api.rasanex.com/v1/call-otp/send', {\n  method: 'POST',\n  headers: {\n    Authorization: 'Bearer YOUR_API_KEY',\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n    phone: '09120000000',\n    code: '4821',\n    options: {\n      idempotency_key: 'call-otp-login-20260411-01'\n    }\n  })\n})\n\nconst data = await response.json()\nconsole.log(data)\n","sendCallOtp.js",[34,1844,1845,1850,1854,1858,1862,1866,1870,1874,1878,1882,1886,1891,1895,1899,1903,1907,1911],{"__ignoreMap":131},[135,1846,1847],{"class":137,"line":138},[135,1848,1849],{},"const response = await fetch('https://api.rasanex.com/v1/call-otp/send', {\n",[135,1851,1852],{"class":137,"line":144},[135,1853,888],{},[135,1855,1856],{"class":137,"line":246},[135,1857,893],{},[135,1859,1860],{"class":137,"line":266},[135,1861,898],{},[135,1863,1864],{"class":137,"line":281},[135,1865,903],{},[135,1867,1868],{"class":137,"line":303},[135,1869,398],{},[135,1871,1872],{"class":137,"line":309},[135,1873,912],{},[135,1875,1876],{"class":137,"line":413},[135,1877,917],{},[135,1879,1880],{"class":137,"line":431},[135,1881,922],{},[135,1883,1884],{"class":137,"line":436},[135,1885,927],{},[135,1887,1888],{"class":137,"line":861},[135,1889,1890],{},"      idempotency_key: 'call-otp-login-20260411-01'\n",[135,1892,1893],{"class":137,"line":935},[135,1894,858],{},[135,1896,1897],{"class":137,"line":940},[135,1898,943],{},[135,1900,1901],{"class":137,"line":946},[135,1902,949],{},[135,1904,1905],{"class":137,"line":952},[135,1906,956],{"emptyLinePlaceholder":955},[135,1908,1909],{"class":137,"line":959},[135,1910,962],{},[135,1912,1913],{"class":137,"line":965},[135,1914,968],{},[200,1916,972],{"id":971},[125,1918,1921],{"className":975,"code":1919,"filename":1920,"language":971,"meta":131,"style":131},"\u003C?php\n\n$payload = [\n    'phone' => '09120000000',\n    'code' => '4821',\n    'options' => [\n        'idempotency_key' => 'call-otp-login-20260411-01',\n    ],\n];\n\n$ch = curl_init('https://api.rasanex.com/v1/call-otp/send');\ncurl_setopt_array($ch, [\n    CURLOPT_RETURNTRANSFER => true,\n    CURLOPT_POST => true,\n    CURLOPT_HTTPHEADER => [\n        'Authorization: Bearer YOUR_API_KEY',\n        'Content-Type: application/json',\n    ],\n    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),\n]);\n\n$result = curl_exec($ch);\ncurl_close($ch);\n\necho $result;\n","send_call_otp.php",[34,1922,1923,1927,1931,1935,1939,1943,1947,1952,1956,1960,1964,1969,1973,1977,1981,1985,1989,1993,1997,2001,2005,2009,2013,2017,2021],{"__ignoreMap":131},[135,1924,1925],{"class":137,"line":138},[135,1926,984],{},[135,1928,1929],{"class":137,"line":144},[135,1930,956],{"emptyLinePlaceholder":955},[135,1932,1933],{"class":137,"line":246},[135,1934,993],{},[135,1936,1937],{"class":137,"line":266},[135,1938,998],{},[135,1940,1941],{"class":137,"line":281},[135,1942,1003],{},[135,1944,1945],{"class":137,"line":303},[135,1946,1008],{},[135,1948,1949],{"class":137,"line":309},[135,1950,1951],{},"        'idempotency_key' => 'call-otp-login-20260411-01',\n",[135,1953,1954],{"class":137,"line":413},[135,1955,1018],{},[135,1957,1958],{"class":137,"line":431},[135,1959,1023],{},[135,1961,1962],{"class":137,"line":436},[135,1963,956],{"emptyLinePlaceholder":955},[135,1965,1966],{"class":137,"line":861},[135,1967,1968],{},"$ch = curl_init('https://api.rasanex.com/v1/call-otp/send');\n",[135,1970,1971],{"class":137,"line":935},[135,1972,1037],{},[135,1974,1975],{"class":137,"line":940},[135,1976,1042],{},[135,1978,1979],{"class":137,"line":946},[135,1980,1047],{},[135,1982,1983],{"class":137,"line":952},[135,1984,1052],{},[135,1986,1987],{"class":137,"line":959},[135,1988,1057],{},[135,1990,1991],{"class":137,"line":965},[135,1992,1062],{},[135,1994,1995],{"class":137,"line":1065},[135,1996,1018],{},[135,1998,1999],{"class":137,"line":1070},[135,2000,1073],{},[135,2002,2003],{"class":137,"line":1076},[135,2004,1079],{},[135,2006,2007],{"class":137,"line":1082},[135,2008,956],{"emptyLinePlaceholder":955},[135,2010,2011],{"class":137,"line":1087},[135,2012,1090],{},[135,2014,2015],{"class":137,"line":1093},[135,2016,1096],{},[135,2018,2019],{"class":137,"line":1099},[135,2020,956],{"emptyLinePlaceholder":955},[135,2022,2023],{"class":137,"line":1104},[135,2024,1107],{},[200,2026,1111],{"id":1110},[125,2028,2031],{"className":1114,"code":2029,"filename":2030,"language":1110,"meta":131,"style":131},"import requests\n\nurl = 'https://api.rasanex.com/v1/call-otp/send'\nheaders = {\n    'Authorization': 'Bearer YOUR_API_KEY',\n    'Content-Type': 'application/json',\n}\npayload = {\n    'phone': '09120000000',\n    'code': '4821',\n    'options': {\n        'idempotency_key': 'call-otp-login-20260411-01'\n    }\n}\n\nresponse = requests.post(url, json=payload, headers=headers, timeout=20)\nprint(response.status_code)\nprint(response.json())\n","send_call_otp.py",[34,2032,2033,2037,2041,2046,2050,2054,2058,2062,2066,2070,2074,2078,2083,2087,2091,2095,2099,2103],{"__ignoreMap":131},[135,2034,2035],{"class":137,"line":138},[135,2036,1123],{},[135,2038,2039],{"class":137,"line":144},[135,2040,956],{"emptyLinePlaceholder":955},[135,2042,2043],{"class":137,"line":246},[135,2044,2045],{},"url = 'https://api.rasanex.com/v1/call-otp/send'\n",[135,2047,2048],{"class":137,"line":266},[135,2049,1137],{},[135,2051,2052],{"class":137,"line":281},[135,2053,1142],{},[135,2055,2056],{"class":137,"line":303},[135,2057,1147],{},[135,2059,2060],{"class":137,"line":309},[135,2061,312],{},[135,2063,2064],{"class":137,"line":413},[135,2065,1156],{},[135,2067,2068],{"class":137,"line":431},[135,2069,1161],{},[135,2071,2072],{"class":137,"line":436},[135,2073,1166],{},[135,2075,2076],{"class":137,"line":861},[135,2077,1171],{},[135,2079,2080],{"class":137,"line":935},[135,2081,2082],{},"        'idempotency_key': 'call-otp-login-20260411-01'\n",[135,2084,2085],{"class":137,"line":940},[135,2086,858],{},[135,2088,2089],{"class":137,"line":946},[135,2090,312],{},[135,2092,2093],{"class":137,"line":952},[135,2094,956],{"emptyLinePlaceholder":955},[135,2096,2097],{"class":137,"line":959},[135,2098,1193],{},[135,2100,2101],{"class":137,"line":965},[135,2102,1198],{},[135,2104,2105],{"class":137,"line":1065},[135,2106,1203],{},[11,2108,2110],{"id":2109},"روال-پیشنهادی-برای-اجرای-صحیح","روال پیشنهادی برای اجرای صحیح",[27,2112,2113,2119,2124,2130,2136],{},[30,2114,2115,2116,2118],{},"در ",[34,2117,1314],{}," سرویس‌دهنده تماس را تنظیم و فعال کنید.",[30,2120,2115,2121,2123],{},[34,2122,1320],{}," ترتیب سرویس‌دهنده اصلی و پشتیبان را ذخیره کنید.",[30,2125,2126,2127,2129],{},"API Key را از ",[34,2128,48],{}," دریافت کنید.",[30,2131,2132,2133,2135],{},"برای هر عملیات تماس، ",[34,2134,288],{}," یکتا بسازید.",[30,2137,2138,2139,1240,2141,2143],{},"وضعیت نهایی ارسال را با ",[34,2140,459],{},[34,2142,1335],{}," ردیابی کنید.",[16,2145,2146],{},"با این ترتیب، هم پایداری ارسال بهتر می‌شود و هم خطاهای تکراری کنترل می‌شود.",[1248,2148,1250],{},{"title":131,"searchDepth":144,"depth":144,"links":2150},[2151,2152,2153,2154,2155,2156,2157,2158,2163,2169],{"id":13,"depth":144,"text":14},{"id":21,"depth":144,"text":22},{"id":63,"depth":144,"text":64},{"id":90,"depth":144,"text":91},{"id":122,"depth":144,"text":123},{"id":150,"depth":144,"text":151},{"id":441,"depth":144,"text":442},{"id":497,"depth":144,"text":498,"children":2159},[2160,2161,2162],{"id":501,"depth":246,"text":502},{"id":548,"depth":246,"text":549},{"id":1667,"depth":246,"text":1668},{"id":758,"depth":144,"text":759,"children":2164},[2165,2166,2167,2168],{"id":762,"depth":246,"text":763},{"id":870,"depth":246,"text":871},{"id":971,"depth":246,"text":972},{"id":1110,"depth":246,"text":1111},{"id":2109,"depth":144,"text":2110},"2026-04-10","راهنمای رسمی راه‌اندازی و استفاده از Cloud Call OTP در رسانکس با مسیرهای دقیق پنل، Endpoint واقعی، نمونه درخواست و مدیریت خطا.","/images/blog/cloud-call-otp-guide.svg",{},"/blog/cloud-call-otp-guide",{"title":1294,"description":2171},"blog/cloud-call-otp-guide",[2178,1288,1289],"Cloud Call OTP","J3kiFbRPYs9flwg4pSXKXM6mRZvwPMhQODXzVsFrsuE",{"id":4,"title":5,"author":6,"body":2181,"category":1277,"date":1278,"description":1279,"extension":1280,"image":1281,"meta":3164,"navigation":955,"path":1283,"readingTime":436,"seo":3165,"stem":1285,"tags":3166,"updatedAt":6,"__hash__":1290},{"type":8,"value":2182,"toc":3139},[2183,2185,2187,2189,2191,2213,2215,2231,2233,2253,2255,2267,2269,2271,2293,2301,2303,2383,2387,2499,2501,2547,2549,2551,2579,2585,2587,2651,2657,2659,2729,2731,2759,2767,2769,2771,2851,2853,2925,2927,3031,3033,3109,3111,3135,3137],[11,2184,14],{"id":13},[16,2186,18],{},[11,2188,22],{"id":21},[16,2190,25],{},[27,2192,2193,2197,2201,2205,2209],{},[30,2194,32,2195],{},[34,2196,36],{},[30,2198,39,2199],{},[34,2200,42],{},[30,2202,45,2203],{},[34,2204,48],{},[30,2206,51,2207],{},[34,2208,54],{},[30,2210,57,2211],{},[34,2212,60],{},[11,2214,64],{"id":63},[27,2216,2217,2221,2225,2227,2229],{},[30,2218,69,2219,73],{},[34,2220,72],{},[30,2222,69,2223,73],{},[34,2224,78],{},[30,2226,81],{},[30,2228,84],{},[30,2230,87],{},[11,2232,91],{"id":90},[93,2234,2235,2241,2247],{},[30,2236,2237,100,2239],{},[34,2238,99],{},[34,2240,103],{},[30,2242,2243,100,2245],{},[34,2244,108],{},[34,2246,111],{},[30,2248,2249,100,2251],{},[34,2250,116],{},[34,2252,119],{},[11,2254,123],{"id":122},[125,2256,2257],{"className":127,"code":128,"filename":129,"language":130,"meta":131,"style":131},[34,2258,2259,2263],{"__ignoreMap":131},[135,2260,2261],{"class":137,"line":138},[135,2262,141],{},[135,2264,2265],{"class":137,"line":144},[135,2266,147],{},[11,2268,151],{"id":150},[16,2270,154],{},[93,2272,2273,2277,2281,2285,2289],{},[30,2274,2275,162],{},[34,2276,161],{},[30,2278,2279,167],{},[34,2280,34],{},[30,2282,2283,173],{},[34,2284,172],{},[30,2286,2287,179],{},[34,2288,178],{},[30,2290,2291,185],{},[34,2292,184],{},[16,2294,188,2295,191,2297,194,2299,198],{},[34,2296,34],{},[34,2298,172],{},[34,2300,197],{},[200,2302,203],{"id":202},[125,2304,2305],{"className":206,"code":207,"filename":208,"language":209,"meta":131,"style":131},[34,2306,2307,2311,2329,2347,2359,2375,2379],{"__ignoreMap":131},[135,2308,2309],{"class":137,"line":138},[135,2310,217],{"class":216},[135,2312,2313,2315,2317,2319,2321,2323,2325,2327],{"class":137,"line":144},[135,2314,222],{"class":216},[135,2316,161],{"class":225},[135,2318,228],{"class":216},[135,2320,231],{"class":216},[135,2322,234],{"class":216},[135,2324,238],{"class":237},[135,2326,228],{"class":216},[135,2328,243],{"class":216},[135,2330,2331,2333,2335,2337,2339,2341,2343,2345],{"class":137,"line":246},[135,2332,222],{"class":216},[135,2334,34],{"class":225},[135,2336,228],{"class":216},[135,2338,231],{"class":216},[135,2340,234],{"class":216},[135,2342,259],{"class":237},[135,2344,228],{"class":216},[135,2346,243],{"class":216},[135,2348,2349,2351,2353,2355,2357],{"class":137,"line":266},[135,2350,222],{"class":216},[135,2352,271],{"class":225},[135,2354,228],{"class":216},[135,2356,231],{"class":216},[135,2358,278],{"class":216},[135,2360,2361,2363,2365,2367,2369,2371,2373],{"class":137,"line":281},[135,2362,284],{"class":216},[135,2364,288],{"class":287},[135,2366,228],{"class":216},[135,2368,231],{"class":216},[135,2370,234],{"class":216},[135,2372,297],{"class":237},[135,2374,300],{"class":216},[135,2376,2377],{"class":137,"line":303},[135,2378,306],{"class":216},[135,2380,2381],{"class":137,"line":309},[135,2382,312],{"class":216},[200,2384,316,2385],{"id":315},[34,2386,172],{},[125,2388,2389],{"className":206,"code":321,"filename":322,"language":209,"meta":131,"style":131},[34,2390,2391,2395,2413,2425,2443,2459,2463,2475,2491,2495],{"__ignoreMap":131},[135,2392,2393],{"class":137,"line":138},[135,2394,217],{"class":216},[135,2396,2397,2399,2401,2403,2405,2407,2409,2411],{"class":137,"line":144},[135,2398,222],{"class":216},[135,2400,161],{"class":225},[135,2402,228],{"class":216},[135,2404,231],{"class":216},[135,2406,234],{"class":216},[135,2408,238],{"class":237},[135,2410,228],{"class":216},[135,2412,243],{"class":216},[135,2414,2415,2417,2419,2421,2423],{"class":137,"line":246},[135,2416,222],{"class":216},[135,2418,172],{"class":225},[135,2420,228],{"class":216},[135,2422,231],{"class":216},[135,2424,278],{"class":216},[135,2426,2427,2429,2431,2433,2435,2437,2439,2441],{"class":137,"line":266},[135,2428,284],{"class":216},[135,2430,365],{"class":287},[135,2432,228],{"class":216},[135,2434,231],{"class":216},[135,2436,234],{"class":216},[135,2438,259],{"class":237},[135,2440,228],{"class":216},[135,2442,243],{"class":216},[135,2444,2445,2447,2449,2451,2453,2455,2457],{"class":137,"line":281},[135,2446,284],{"class":216},[135,2448,34],{"class":287},[135,2450,228],{"class":216},[135,2452,231],{"class":216},[135,2454,234],{"class":216},[135,2456,259],{"class":237},[135,2458,300],{"class":216},[135,2460,2461],{"class":137,"line":303},[135,2462,398],{"class":216},[135,2464,2465,2467,2469,2471,2473],{"class":137,"line":309},[135,2466,222],{"class":216},[135,2468,271],{"class":225},[135,2470,228],{"class":216},[135,2472,231],{"class":216},[135,2474,278],{"class":216},[135,2476,2477,2479,2481,2483,2485,2487,2489],{"class":137,"line":413},[135,2478,284],{"class":216},[135,2480,288],{"class":287},[135,2482,228],{"class":216},[135,2484,231],{"class":216},[135,2486,234],{"class":216},[135,2488,426],{"class":237},[135,2490,300],{"class":216},[135,2492,2493],{"class":137,"line":431},[135,2494,306],{"class":216},[135,2496,2497],{"class":137,"line":436},[135,2498,312],{"class":216},[11,2500,442],{"id":441},[125,2502,2503],{"className":206,"code":445,"filename":446,"language":209,"meta":131,"style":131},[34,2504,2505,2509,2527,2543],{"__ignoreMap":131},[135,2506,2507],{"class":137,"line":138},[135,2508,217],{"class":216},[135,2510,2511,2513,2515,2517,2519,2521,2523,2525],{"class":137,"line":144},[135,2512,222],{"class":216},[135,2514,459],{"class":225},[135,2516,228],{"class":216},[135,2518,231],{"class":216},[135,2520,234],{"class":216},[135,2522,468],{"class":237},[135,2524,228],{"class":216},[135,2526,243],{"class":216},[135,2528,2529,2531,2533,2535,2537,2539,2541],{"class":137,"line":246},[135,2530,222],{"class":216},[135,2532,479],{"class":225},[135,2534,228],{"class":216},[135,2536,231],{"class":216},[135,2538,234],{"class":216},[135,2540,488],{"class":237},[135,2542,300],{"class":216},[135,2544,2545],{"class":137,"line":266},[135,2546,312],{"class":216},[11,2548,498],{"id":497},[200,2550,502],{"id":501},[125,2552,2553],{"className":206,"code":505,"filename":506,"language":209,"meta":131,"style":131},[34,2554,2555,2559,2575],{"__ignoreMap":131},[135,2556,2557],{"class":137,"line":138},[135,2558,217],{"class":216},[135,2560,2561,2563,2565,2567,2569,2571,2573],{"class":137,"line":144},[135,2562,222],{"class":216},[135,2564,519],{"class":225},[135,2566,228],{"class":216},[135,2568,231],{"class":216},[135,2570,234],{"class":216},[135,2572,528],{"class":237},[135,2574,300],{"class":216},[135,2576,2577],{"class":137,"line":246},[135,2578,312],{"class":216},[16,2580,537,2581,541,2583,545],{},[34,2582,540],{},[34,2584,544],{},[200,2586,549],{"id":548},[125,2588,2589],{"className":206,"code":552,"filename":553,"language":209,"meta":131,"style":131},[34,2590,2591,2595,2613,2631,2647],{"__ignoreMap":131},[135,2592,2593],{"class":137,"line":138},[135,2594,217],{"class":216},[135,2596,2597,2599,2601,2603,2605,2607,2609,2611],{"class":137,"line":144},[135,2598,222],{"class":216},[135,2600,566],{"class":225},[135,2602,228],{"class":216},[135,2604,231],{"class":216},[135,2606,234],{"class":216},[135,2608,575],{"class":237},[135,2610,228],{"class":216},[135,2612,243],{"class":216},[135,2614,2615,2617,2619,2621,2623,2625,2627,2629],{"class":137,"line":246},[135,2616,222],{"class":216},[135,2618,586],{"class":225},[135,2620,228],{"class":216},[135,2622,231],{"class":216},[135,2624,234],{"class":216},[135,2626,78],{"class":237},[135,2628,228],{"class":216},[135,2630,243],{"class":216},[135,2632,2633,2635,2637,2639,2641,2643,2645],{"class":137,"line":266},[135,2634,222],{"class":216},[135,2636,34],{"class":225},[135,2638,228],{"class":216},[135,2640,231],{"class":216},[135,2642,234],{"class":216},[135,2644,613],{"class":237},[135,2646,300],{"class":216},[135,2648,2649],{"class":137,"line":281},[135,2650,312],{"class":216},[16,2652,622,2653,625,2655,628],{},[34,2654,72],{},[34,2656,78],{},[200,2658,632],{"id":631},[125,2660,2661],{"className":206,"code":635,"filename":636,"language":209,"meta":131,"style":131},[34,2662,2663,2667,2685,2697,2709,2717,2721,2725],{"__ignoreMap":131},[135,2664,2665],{"class":137,"line":138},[135,2666,217],{"class":216},[135,2668,2669,2671,2673,2675,2677,2679,2681,2683],{"class":137,"line":144},[135,2670,222],{"class":216},[135,2672,519],{"class":225},[135,2674,228],{"class":216},[135,2676,231],{"class":216},[135,2678,234],{"class":216},[135,2680,657],{"class":237},[135,2682,228],{"class":216},[135,2684,243],{"class":216},[135,2686,2687,2689,2691,2693,2695],{"class":137,"line":246},[135,2688,222],{"class":216},[135,2690,668],{"class":225},[135,2692,228],{"class":216},[135,2694,231],{"class":216},[135,2696,278],{"class":216},[135,2698,2699,2701,2703,2705,2707],{"class":137,"line":266},[135,2700,284],{"class":216},[135,2702,161],{"class":287},[135,2704,228],{"class":216},[135,2706,231],{"class":216},[135,2708,687],{"class":216},[135,2710,2711,2713,2715],{"class":137,"line":281},[135,2712,692],{"class":216},[135,2714,657],{"class":237},[135,2716,300],{"class":216},[135,2718,2719],{"class":137,"line":303},[135,2720,701],{"class":216},[135,2722,2723],{"class":137,"line":309},[135,2724,306],{"class":216},[135,2726,2727],{"class":137,"line":413},[135,2728,312],{"class":216},[200,2730,713],{"id":712},[125,2732,2733],{"className":206,"code":716,"filename":717,"language":209,"meta":131,"style":131},[34,2734,2735,2739,2755],{"__ignoreMap":131},[135,2736,2737],{"class":137,"line":138},[135,2738,217],{"class":216},[135,2740,2741,2743,2745,2747,2749,2751,2753],{"class":137,"line":144},[135,2742,222],{"class":216},[135,2744,519],{"class":225},[135,2746,228],{"class":216},[135,2748,231],{"class":216},[135,2750,234],{"class":216},[135,2752,738],{"class":237},[135,2754,300],{"class":216},[135,2756,2757],{"class":137,"line":246},[135,2758,312],{"class":216},[16,2760,747,2761,750,2763,191,2765,755],{},[34,2762,161],{},[34,2764,34],{},[34,2766,172],{},[11,2768,759],{"id":758},[200,2770,763],{"id":762},[125,2772,2773],{"className":766,"code":767,"filename":768,"language":769,"meta":131,"style":131},[34,2774,2775,2785,2793,2805,2817,2825,2829,2833,2837,2841,2845],{"__ignoreMap":131},[135,2776,2777,2779,2781,2783],{"class":137,"line":138},[135,2778,762],{"class":287},[135,2780,778],{"class":237},[135,2782,781],{"class":237},[135,2784,785],{"class":784},[135,2786,2787,2789,2791],{"class":137,"line":144},[135,2788,790],{"class":237},[135,2790,793],{"class":237},[135,2792,785],{"class":784},[135,2794,2795,2797,2799,2801,2803],{"class":137,"line":246},[135,2796,800],{"class":237},[135,2798,803],{"class":216},[135,2800,806],{"class":237},[135,2802,809],{"class":216},[135,2804,785],{"class":784},[135,2806,2807,2809,2811,2813,2815],{"class":137,"line":266},[135,2808,800],{"class":237},[135,2810,803],{"class":216},[135,2812,820],{"class":237},[135,2814,809],{"class":216},[135,2816,785],{"class":784},[135,2818,2819,2821,2823],{"class":137,"line":281},[135,2820,829],{"class":237},[135,2822,803],{"class":216},[135,2824,217],{"class":237},[135,2826,2827],{"class":137,"line":303},[135,2828,838],{"class":237},[135,2830,2831],{"class":137,"line":309},[135,2832,843],{"class":237},[135,2834,2835],{"class":137,"line":413},[135,2836,848],{"class":237},[135,2838,2839],{"class":137,"line":431},[135,2840,853],{"class":237},[135,2842,2843],{"class":137,"line":436},[135,2844,858],{"class":237},[135,2846,2847,2849],{"class":137,"line":861},[135,2848,864],{"class":237},[135,2850,867],{"class":216},[200,2852,871],{"id":870},[125,2854,2855],{"className":874,"code":875,"filename":876,"language":870,"meta":131,"style":131},[34,2856,2857,2861,2865,2869,2873,2877,2881,2885,2889,2893,2897,2901,2905,2909,2913,2917,2921],{"__ignoreMap":131},[135,2858,2859],{"class":137,"line":138},[135,2860,883],{},[135,2862,2863],{"class":137,"line":144},[135,2864,888],{},[135,2866,2867],{"class":137,"line":246},[135,2868,893],{},[135,2870,2871],{"class":137,"line":266},[135,2872,898],{},[135,2874,2875],{"class":137,"line":281},[135,2876,903],{},[135,2878,2879],{"class":137,"line":303},[135,2880,398],{},[135,2882,2883],{"class":137,"line":309},[135,2884,912],{},[135,2886,2887],{"class":137,"line":413},[135,2888,917],{},[135,2890,2891],{"class":137,"line":431},[135,2892,922],{},[135,2894,2895],{"class":137,"line":436},[135,2896,927],{},[135,2898,2899],{"class":137,"line":861},[135,2900,932],{},[135,2902,2903],{"class":137,"line":935},[135,2904,858],{},[135,2906,2907],{"class":137,"line":940},[135,2908,943],{},[135,2910,2911],{"class":137,"line":946},[135,2912,949],{},[135,2914,2915],{"class":137,"line":952},[135,2916,956],{"emptyLinePlaceholder":955},[135,2918,2919],{"class":137,"line":959},[135,2920,962],{},[135,2922,2923],{"class":137,"line":965},[135,2924,968],{},[200,2926,972],{"id":971},[125,2928,2929],{"className":975,"code":976,"filename":977,"language":971,"meta":131,"style":131},[34,2930,2931,2935,2939,2943,2947,2951,2955,2959,2963,2967,2971,2975,2979,2983,2987,2991,2995,2999,3003,3007,3011,3015,3019,3023,3027],{"__ignoreMap":131},[135,2932,2933],{"class":137,"line":138},[135,2934,984],{},[135,2936,2937],{"class":137,"line":144},[135,2938,956],{"emptyLinePlaceholder":955},[135,2940,2941],{"class":137,"line":246},[135,2942,993],{},[135,2944,2945],{"class":137,"line":266},[135,2946,998],{},[135,2948,2949],{"class":137,"line":281},[135,2950,1003],{},[135,2952,2953],{"class":137,"line":303},[135,2954,1008],{},[135,2956,2957],{"class":137,"line":309},[135,2958,1013],{},[135,2960,2961],{"class":137,"line":413},[135,2962,1018],{},[135,2964,2965],{"class":137,"line":431},[135,2966,1023],{},[135,2968,2969],{"class":137,"line":436},[135,2970,956],{"emptyLinePlaceholder":955},[135,2972,2973],{"class":137,"line":861},[135,2974,1032],{},[135,2976,2977],{"class":137,"line":935},[135,2978,1037],{},[135,2980,2981],{"class":137,"line":940},[135,2982,1042],{},[135,2984,2985],{"class":137,"line":946},[135,2986,1047],{},[135,2988,2989],{"class":137,"line":952},[135,2990,1052],{},[135,2992,2993],{"class":137,"line":959},[135,2994,1057],{},[135,2996,2997],{"class":137,"line":965},[135,2998,1062],{},[135,3000,3001],{"class":137,"line":1065},[135,3002,1018],{},[135,3004,3005],{"class":137,"line":1070},[135,3006,1073],{},[135,3008,3009],{"class":137,"line":1076},[135,3010,1079],{},[135,3012,3013],{"class":137,"line":1082},[135,3014,956],{"emptyLinePlaceholder":955},[135,3016,3017],{"class":137,"line":1087},[135,3018,1090],{},[135,3020,3021],{"class":137,"line":1093},[135,3022,1096],{},[135,3024,3025],{"class":137,"line":1099},[135,3026,956],{"emptyLinePlaceholder":955},[135,3028,3029],{"class":137,"line":1104},[135,3030,1107],{},[200,3032,1111],{"id":1110},[125,3034,3035],{"className":1114,"code":1115,"filename":1116,"language":1110,"meta":131,"style":131},[34,3036,3037,3041,3045,3049,3053,3057,3061,3065,3069,3073,3077,3081,3085,3089,3093,3097,3101,3105],{"__ignoreMap":131},[135,3038,3039],{"class":137,"line":138},[135,3040,1123],{},[135,3042,3043],{"class":137,"line":144},[135,3044,956],{"emptyLinePlaceholder":955},[135,3046,3047],{"class":137,"line":246},[135,3048,1132],{},[135,3050,3051],{"class":137,"line":266},[135,3052,1137],{},[135,3054,3055],{"class":137,"line":281},[135,3056,1142],{},[135,3058,3059],{"class":137,"line":303},[135,3060,1147],{},[135,3062,3063],{"class":137,"line":309},[135,3064,312],{},[135,3066,3067],{"class":137,"line":413},[135,3068,1156],{},[135,3070,3071],{"class":137,"line":431},[135,3072,1161],{},[135,3074,3075],{"class":137,"line":436},[135,3076,1166],{},[135,3078,3079],{"class":137,"line":861},[135,3080,1171],{},[135,3082,3083],{"class":137,"line":935},[135,3084,1176],{},[135,3086,3087],{"class":137,"line":940},[135,3088,858],{},[135,3090,3091],{"class":137,"line":946},[135,3092,312],{},[135,3094,3095],{"class":137,"line":952},[135,3096,956],{"emptyLinePlaceholder":955},[135,3098,3099],{"class":137,"line":959},[135,3100,1193],{},[135,3102,3103],{"class":137,"line":965},[135,3104,1198],{},[135,3106,3107],{"class":137,"line":1065},[135,3108,1203],{},[11,3110,1207],{"id":1206},[27,3112,3113,3115,3119,3123,3129],{},[30,3114,1212],{},[30,3116,1215,3117,1218],{},[34,3118,42],{},[30,3120,1221,3121,1224],{},[34,3122,48],{},[30,3124,1227,3125,1231,3127,1234],{},[34,3126,1230],{},[34,3128,288],{},[30,3130,1237,3131,1240,3133,1243],{},[34,3132,459],{},[34,3134,60],{},[16,3136,1246],{},[1248,3138,1250],{},{"title":131,"searchDepth":144,"depth":144,"links":3140},[3141,3142,3143,3144,3145,3146,3150,3151,3157,3163],{"id":13,"depth":144,"text":14},{"id":21,"depth":144,"text":22},{"id":63,"depth":144,"text":64},{"id":90,"depth":144,"text":91},{"id":122,"depth":144,"text":123},{"id":150,"depth":144,"text":151,"children":3147},[3148,3149],{"id":202,"depth":246,"text":203},{"id":315,"depth":246,"text":1262},{"id":441,"depth":144,"text":442},{"id":497,"depth":144,"text":498,"children":3152},[3153,3154,3155,3156],{"id":501,"depth":246,"text":502},{"id":548,"depth":246,"text":549},{"id":631,"depth":246,"text":632},{"id":712,"depth":246,"text":713},{"id":758,"depth":144,"text":759,"children":3158},[3159,3160,3161,3162],{"id":762,"depth":246,"text":763},{"id":870,"depth":246,"text":871},{"id":971,"depth":246,"text":972},{"id":1110,"depth":246,"text":1111},{"id":1206,"depth":144,"text":1207},{},{"title":5,"description":1279},[1287,1288,1289],{"id":3168,"title":3169,"author":6,"body":3170,"category":3391,"date":3392,"description":3393,"extension":1280,"image":3394,"meta":3395,"navigation":955,"path":3396,"readingTime":861,"seo":3397,"stem":3398,"tags":3399,"updatedAt":6,"__hash__":3401},"blog/blog/smart-cloud-otp-architecture.md","معماری هوشمند OTP: چطور SMS و Call را یکپارچه استفاده کنیم",{"type":8,"value":3171,"toc":3372},[3172,3176,3179,3183,3216,3220,3237,3240,3244,3248,3251,3255,3258,3262,3265,3276,3280,3283,3287,3307,3311,3315,3318,3322,3325,3329,3332,3336,3360,3364],[11,3173,3175],{"id":3174},"هدف-معماری-هوشمند-otp-چیست","هدف معماری هوشمند OTP چیست؟",[16,3177,3178],{},"هدف این است که کاربر در کمترین زمان کد ورود را بگیرد، حتی اگر یک کانال ارسال دچار اختلال شود. برای این کار باید منطق تصمیم‌گیری، صف پشتیبان و گزارش‌گیری درست طراحی شود.",[11,3180,3182],{"id":3181},"معماری-پیشنهادی-۵-لایه","معماری پیشنهادی ۵ لایه",[27,3184,3185,3192,3198,3204,3210],{},[30,3186,3187,3191],{},[3188,3189,3190],"strong",{},"لایه درخواست",": اپلیکیشن شما درخواست OTP را ثبت می‌کند.",[30,3193,3194,3197],{},[3188,3195,3196],{},"لایه تصمیم‌گیری",": مشخص می‌کند ابتدا SMS برود یا Call.",[30,3199,3200,3203],{},[3188,3201,3202],{},"لایه ارسال",": درخواست به سرویس‌دهنده فعال ارسال می‌شود.",[30,3205,3206,3209],{},[3188,3207,3208],{},"لایه پشتیبان",": در خطا، مسیر بعدی فعال می‌شود.",[30,3211,3212,3215],{},[3188,3213,3214],{},"لایه گزارش",": تمام رخدادها برای تحلیل ثبت می‌شوند.",[11,3217,3219],{"id":3218},"منطق-تصمیمگیری-پیشنهادی","منطق تصمیم‌گیری پیشنهادی",[93,3221,3222,3228,3234],{},[30,3223,3224,3225],{},"حالت عادی: ",[34,3226,3227],{},"SMS OTP",[30,3229,3230,3231],{},"اگر ارسال ناموفق بود یا تاخیر داشت: ",[34,3232,3233],{},"Call OTP",[30,3235,3236],{},"اگر تماس هم خطا خورد: تلاش از سرویس‌دهنده پشتیبان همان کانال",[16,3238,3239],{},"این منطق باید شفاف و قابل تنظیم باشد تا بعداً بتوانید بدون تغییر کد، رفتار سیستم را اصلاح کنید.",[11,3241,3243],{"id":3242},"چطور-در-رسانکس-پیاده-کنیم","چطور در رسانکس پیاده کنیم؟",[200,3245,3247],{"id":3246},"گام-۱-تنظیم-سرویسدهندهها","گام ۱: تنظیم سرویس‌دهنده‌ها",[16,3249,3250],{},"برای هر کانال (SMS و Call) حداقل یک سرویس‌دهنده اصلی و یک پشتیبان تنظیم کنید.",[200,3252,3254],{"id":3253},"گام-۲-تعریف-مسیر-پشتیبان","گام ۲: تعریف مسیر پشتیبان",[16,3256,3257],{},"برای هر کانال صف پشتیبان بسازید و ترتیب را بر اساس کیفیت واقعی سرویس‌دهنده‌ها بچینید.",[200,3259,3261],{"id":3260},"گام-۳-استانداردسازی-درخواست","گام ۳: استانداردسازی درخواست",[16,3263,3264],{},"در سمت سرویس شما فقط این داده‌ها ارسال شود:",[93,3266,3267,3270,3273],{},[30,3268,3269],{},"شماره مقصد",[30,3271,3272],{},"کد OTP",[30,3274,3275],{},"(اختیاری) شناسه یکتا برای کنترل ارسال تکراری",[200,3277,3279],{"id":3278},"گام-۴-پایش-مداوم","گام ۴: پایش مداوم",[16,3281,3282],{},"گزارش‌ها را روزانه بررسی کنید و اگر نرخ خطا بالا رفت، ترتیب صف را اصلاح کنید.",[11,3284,3286],{"id":3285},"مثال-جریان-واقعی","مثال جریان واقعی",[27,3288,3289,3292,3295,3298,3301,3304],{},[30,3290,3291],{},"کاربر شماره را وارد می‌کند.",[30,3293,3294],{},"سیستم OTP می‌سازد.",[30,3296,3297],{},"ارسال پیامکی انجام می‌شود.",[30,3299,3300],{},"اگر وضعیت ناموفق شد، تماس صوتی فعال می‌شود.",[30,3302,3303],{},"نتیجه نهایی با شناسه رهگیری ذخیره می‌شود.",[30,3305,3306],{},"در داشبورد، گزارش کامل برای تیم پشتیبانی قابل مشاهده است.",[11,3308,3310],{"id":3309},"خطاهای-رایج-و-راهحل","خطاهای رایج و راه‌حل",[200,3312,3314],{"id":3313},"خطا-ارسال-تکراری","خطا: ارسال تکراری",[16,3316,3317],{},"راه‌حل: شناسه یکتا در درخواست ثبت کنید و در بازه زمانی کوتاه، درخواست تکراری را رد کنید.",[200,3319,3321],{"id":3320},"خطا-دیر-رسیدن-کد","خطا: دیر رسیدن کد",[16,3323,3324],{},"راه‌حل: زمان انتظار پیامک را کوتاه‌تر کنید و زودتر مسیر تماس را فعال کنید.",[200,3326,3328],{"id":3327},"خطا-افت-کیفیت-یک-سرویسدهنده","خطا: افت کیفیت یک سرویس‌دهنده",[16,3330,3331],{},"راه‌حل: ترتیب صف پشتیبان را بر اساس داده واقعی بازچینید.",[11,3333,3335],{"id":3334},"نکات-امنیتی-ضروری","نکات امنیتی ضروری",[27,3337,3338,3344,3347,3354,3357],{},[30,3339,3340,3343],{},[34,3341,3342],{},"API Key"," را فقط در بک‌اند نگه دارید.",[30,3345,3346],{},"برای هر کلاینت، دسترسی محدود تعریف کنید.",[30,3348,3349,3350,3353],{},"نرخ درخواست را کنترل کنید (",[34,3351,3352],{},"rate limit",").",[30,3355,3356],{},"زمان انقضای OTP کوتاه باشد.",[30,3358,3359],{},"گزارش‌های حساس را با سطح دسترسی نمایش دهید.",[11,3361,3363],{"id":3362},"جمعبندی","جمع‌بندی",[16,3365,3366,3367,625,3369,3371],{},"اگر ",[34,3368,1287],{},[34,3370,2178],{}," را با منطق هوشمند و صف پشتیبان ترکیب کنید، هم پایداری ارسال بهتر می‌شود و هم تجربه کاربری. این معماری برای رشد کسب‌وکارهای SaaS کاملاً مناسب است چون مقیاس‌پذیر، قابل کنترل و قابل گزارش است.",{"title":131,"searchDepth":144,"depth":144,"links":3373},[3374,3375,3376,3377,3383,3384,3389,3390],{"id":3174,"depth":144,"text":3175},{"id":3181,"depth":144,"text":3182},{"id":3218,"depth":144,"text":3219},{"id":3242,"depth":144,"text":3243,"children":3378},[3379,3380,3381,3382],{"id":3246,"depth":246,"text":3247},{"id":3253,"depth":246,"text":3254},{"id":3260,"depth":246,"text":3261},{"id":3278,"depth":246,"text":3279},{"id":3285,"depth":144,"text":3286},{"id":3309,"depth":144,"text":3310,"children":3385},[3386,3387,3388],{"id":3313,"depth":246,"text":3314},{"id":3320,"depth":246,"text":3321},{"id":3327,"depth":246,"text":3328},{"id":3334,"depth":144,"text":3335},{"id":3362,"depth":144,"text":3363},"معماری و پیاده‌سازی","2026-04-09","در این راهنمای عملی یاد می‌گیرید چطور یک معماری هوشمند برای OTP بسازید که بین پیامک و تماس صوتی جابه‌جا شود، خطا را کم کند و تجربه کاربر را بهتر کند.","/images/blog/smart-cloud-otp-architecture.svg",{},"/blog/smart-cloud-otp-architecture",{"title":3169,"description":3393},"blog/smart-cloud-otp-architecture",[3400,1287,2178],"OTP هوشمند","5liXUNmzvwx74NPw1UIfhh36knzrGAzaWQxEHNlaOy0",1793454558047]