ساخت otp (one time password) صوتی با سیموتل

یکی از قابلیت های قابل ارائه توسط مرکز تلفن سیموتل امکان Auto Dialer یا تماس گیر خودکار مییباشد . همانطور که میدانیم قابلیت Auto Dialer به ما امکان تماس گرفتن با مخاطب خود و پخش صدای از پیش تعیین شده را به صورت خودکار میدهد.
حال میتوان با استفاده از API و وب سرویس های موجود در نرم افزار مرکز تلفن سیموتل و ترکیب آن با کامپوننت Auto Dialer امکان سرویس OTP صوتی ( ارسال رمز پویا به صورت صوتی در قالب تماس ) را فراهم آورد .
این فرایند طبق مراحل زیر طی میشود.
• درخواست رمز یک بار مصرف توسط کاربر
• ارسال شماره کاربر به نرم افزار مرکز تلفن توسط درگاه
• استفاده مرکز تلفن از Auto Dialer و تماس با کاربر
• فراخوانی تابع Say Digit توسط درگاه برای خواندن رمز یک بار مصرف برای کاربر
که بدنه و پارامتر های کمپین یا تماس هایی که باید به صورت خودکار انجام شوند به شکل زیر و دارای پارامتر های زیر میباشد

image

از طرفی از آنجایی که کمپین باید توسط طرف دوم فراخوانی شود این فراخوانی در قالب PHP به شکل زیر میباشد.

php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://X.X.X.X//api/v3/autodialer/campaigns",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS =>"{\r\n    \"name\":\"test\",\r\n    \"trunk_manager_id\":\"5f6c5b56c92de0068f32e592\",\r\n    \"interface_context\":\"auto\",\r\n    \"interface_text\":\"text1\",\r\n    \"numbers\":[\"09212396500\"],\r\n    \"groups\":[\"5e96c8c2c92de0468920657e\",\"5e96d40cc92de025690d0a61\"],\r\n    \"try_interval\":\"600\",\r\n    \"try\":\"1\",\r\n    \"start\":\"2021-02-19 15:17\",\r\n    \"end\":\"2021-02-23 15:17\",\r\n    \"announcement\":\"5e5b629ec92de075df7af457\",\r\n    \"description\":\"\",\r\n    \"count\":3\r\n}",
  CURLOPT_HTTPHEADER => array(
    "X-APIKEY: vZKtIKWsld0egNlkzHo8i5LVBqLNBSWARCQsPOSgDjFmAHM3tG",
    "Authorization: Basic dGVzdDpBYTEyMzQ1Ng==",
    "Content-Type: application/json"
  ),
));

$response = curl_exec($curl);

    if (!curl_errno($curl)) {
    $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
    echo 'response code:'.$httpcode, '<br/>';
}

curl_close($curl);
echo $response

نمونه خروجی درخواست نیز به شکل زیر میباشد .

{
    "success": 1,
    "message": "Requested operation is done successfully",
    "data": {
        "name": "test",
        "trunk_manager_id": {
            "$oid": "5f6c5b56c92de0068f32e592"
        },
        "interface_context": "auto",
        "interface_text": "text1",
        "numbers": [
            "09212396500"
        ],
        "groups": [
            "5e96c8c2c92de0468920657e",
            "5e96d40cc92de025690d0a61"
        ],
        "try_interval": "600",
        "try": "1",
        "start": {
            "$date": {
                "$numberLong": "1613735220000"
            }
        },
        "end": {
            "$date": {
                "$numberLong": "1614080820000"
            }
        },
        "announcement": "5e5b629ec92de075df7af457",
        "description": "",
        "count": 1,
        "repeat": 1,
        "date": "1399-12-18 14:01:49",
        "status": "waiting",
        "isoStart": {
            "$date": {
                "$numberLong": "1613735220000"
            }
        },
        "isoEnd": {
            "$date": {
                "$numberLong": "1614080820000"
            }
        }
    }
}

بعد از این که فراخوانی کمپین Auto Dialer صورت گرفت تماس وارد کامپوننت SmartAPI میشود و تابع SayDigit فراخوانی میشود تا رمز یک بار مصرف رقم به رقم خوانده شود.
باتوجه به مقادیر منوی تنظیمات مربوط به API Method & API Version، آدرس وبسرویس فراخوانی شده و دادههای زیر همراه با آن ارسال میگردند.
• : srcشماره تماسگیرنده یا Caller id
• Dst: شماره واردشده یا DID
• Data: دادهای که تماسگیرنده در مسیر تماس وارد کرده است.
• unique_id : شناسه یکتای تماس.
• app_name: نام کامپوننت جاری.
• و در جواب، خروجی زیر را بهصورت json دریافت میکند.

{
  "ok": "1",
  "commands": "PlayAnnouncement('announce01'); SayNumber(5201); PlayAnnouncement('announce02');"
}

پس از فراخوانی تابع SayDigit رمز یک بار مصرف به صورت رقم به رقم برای مشتری خوانده میشود.
بدنه تابع SayDigit :

Format: SayDigit(<number:int>);
SayDigit(1239);

شماتیک سناریوی بالا در دایل پلن سیموتل نیز به شکل زیر میباشد.

که در آن تماس های ایجاد شده از طریق Auto Dialer با هدف خواندن رمز یک بار مصرف توسط Context موجود در کامپوننت Auto Dialer Route مسیردهی میشوند.