برای اتصال از طریق سیموتل به پنل پیامکی، پیش از هر کاری باید افزونه cURL برای PHP نصب گردد که با دستور زیر صورت میگیرد:
php -v
apt update && apt install -y php-curl
php -m | grep -i curl
اسکریپت پایین بهعنوان AGI اجرا میشود؛ یعنی سیموتل هنگام رسیدن تماس به داخلی موردنظر، آن را صدا میزند و متغیرهای تماس (شماره تماسگیرنده، مقصد و غیره) را از طریق ورودی استاندارد (stdin) به آن میدهد. منطق تشخیص شماره مشتری:
- در تماس ورودی، شماره موبایل مشتری در متغیر agi_callerid قرار دارد.
- در تماس خروجی (وقتی داخلی به موبایل مشتری زنگ میزند)، شماره مشتری در متغیر agi_extension قرار دارد.
اسکریپت هر دو منبع را بررسی میکند و اولین موردی که فرمت موبایل ایران (09XXXXXXXXX) داشته باشد را انتخاب میکند. شمارههای داخلی و ثابت بهطور خودکار فیلتر میشوند تا پیامک اشتباه ارسال نشود.
#!/usr/bin/php
<?php
// --- خواندن متغیرهای AGI ---
$agi = [];
while (($line = fgets(STDIN)) !== false) {
$line = trim($line);
if ($line === '') break;
$parts = explode(':', $line, 2);
if (count($parts) === 2) $agi[trim($parts[0])] = trim($parts[1]);
}
// --- شمارهی مشتری از آرگومان اول ---
$raw = $agi['agi_arg_1'] ?? '';
function normalize_mobile($raw) {
$n = preg_replace('/\D/', '', $raw);
if ($n === '') return null;
if (strpos($n, '0098') === 0) $n = '0' . substr($n, 4);
elseif (strpos($n, '98') === 0) $n = '0' . substr($n, 2);
elseif (strpos($n, '0') !== 0) $n = '0' . $n;
return preg_match('/^09\d{9}$/', $n) ? $n : null;
}
$number = normalize_mobile($raw);
if (!$number) {
file_put_contents('/var/log/sendsms.log', date('c') . " skip raw=$raw\n", FILE_APPEND);
exit(0);
}
// --- پیام ---
$message = <<<EOT
خط اول
خط دوم
خط سوم
EOT;
// --- ارسال ---
$url = 'https://wikipayam.ir/api/v1/sms/send';
$headers = [
'Authorization: Bearer $TOKEN',
'Accept: application/json',
'Content-Type: application/json',
];
$payload = json_encode([[
'sender' => '$SMS-NUMBER',
'receiver' => $number,
'message' => $message,
'track_id' => 'CID_' . $number . '_' . time(),
'mask_digits' => true,
]], JSON_UNESCAPED_UNICODE);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
پیام جهت ارسال در قسمت $message = <<<EOT
متن پیام
EOT;
برای $TOKEN باید توکن یکتا خود که از ویکی پیام دریافت میکنید را قرار دهید.
برای $SMS-NUMBER باید سرشماره ای که قرار است با آن پیامک ارسال کنید را قرار دهید.
اگر فایل را با ویرایشگری در ویندوز (مثل Notepad ساده) نوشته و ذخیره کرده باشید، انتهای هر خط دو کاراکتر نامرئی CR و LF دارد (CRLF)، در حالیکه لینوکس فقط LF میخواهد. این باعث میشود خط (#!/usr/bin/php) درست خوانده نشود و فایل اصلاً اجرا نشود — بدون هیچ خطای مشخصی در لاگ.
برای اتصال به پنل پیامکی از طریق دایال پلن و ارسال پیامک از طریق دایال پلن، کامپوننت AGI را اضافه کرده و فایل ایجاد شده را در پنل آپلود میکنیم. سپس SAVE و سپس دایال پلن را SAVE میکنیم و در آخر رفرش میکنیم.
در ادامه هر مسیری که در دایال پلن به این کامپوننت AGI برسد، به شماره با فرمت 09XXXXXXXXX پیامک ارسال میشود.
