آموزش اتصال هوش مصنوعی به وردپرس با API؛ ساخت چتبات اختصاصی
آموزش اتصال هوش مصنوعی به وردپرس با API؛ ساخت چتبات اختصاصی با PHP، اتصال امن به Sinox API و نمایش چتبات در سایت با شورتکد.

آموزش اتصال هوش مصنوعی به وردپرس با API؛ ساخت چتبات اختصاصی
اگر یک سایت وردپرسی دارید، احتمالاً به این فکر کردهاید که چگونه میتوانید قابلیتهای هوش مصنوعی را به آن اضافه کنید. برای مثال، یک چتبات بسازید که بازدیدکنندگان سؤالهای خود را بپرسند و بدون خروج از سایت پاسخ دریافت کنند.
برای این کار لزوماً به افزونههای آماده چتبات نیاز ندارید. وردپرس با استفاده از PHP و REST API امکان ارتباط با سرویسهای خارجی را فراهم میکند. بنابراین میتوانید یک چتبات اختصاصی بسازید و آن را به مدلهای هوش مصنوعی متصل کنید.
در این آموزش، اتصال هوش مصنوعی به وردپرس را بهصورت عملی پیادهسازی میکنیم. یک افزونه سبک اختصاصی میسازیم که پیام کاربر را دریافت میکند، از طریق Sinox API به مدل زبانی میفرستد و پاسخ را داخل صفحه وردپرس نمایش میدهد.
در پایان، چتبات را با یک شورتکد به صفحه دلخواه اضافه میکنیم و نکات مهم امنیت و مدیریت هزینه را بررسی خواهیم کرد.
اتصال هوش مصنوعی به وردپرس چگونه کار میکند؟
وردپرس بهصورت پیشفرض قابلیت اجرای مدلهای زبانی بزرگ را ندارد؛ اما میتواند از طریق API به آنها متصل شود.
در این معماری، سایت نقش واسطه میان بازدیدکننده و مدل هوش مصنوعی را بر عهده دارد.
فرایند کلی به این صورت است:
بازدیدکننده سؤال خود را در فرم چت وارد میکند.
مرورگر پیام را به یک Endpoint در وردپرس ارسال میکند.
سرور وردپرس درخواست را با API Key به Sinox API میفرستد.
مدل هوش مصنوعی پاسخ را تولید میکند.
وردپرس پاسخ را دریافت کرده و به مرورگر برمیگرداند.
مزیت مهم این روش آن است که API Key در سمت سرور باقی میماند و در کد JavaScript بازدیدکنندگان قرار نمیگیرد.
اگر با مفهوم ارتباط نرمافزارها از طریق API آشنایی ندارید، ابتدا مقاله «API هوش مصنوعی چیست؟» را مطالعه کنید.
تفاوت استفاده از افزونه آماده و ساخت چتبات اختصاصی
برای اضافه کردن هوش مصنوعی به وردپرس، دو مسیر اصلی وجود دارد.
| ویژگی | افزونه آماده | چتبات اختصاصی |
|---|---|---|
| راهاندازی | معمولاً سریعتر | نیازمند کدنویسی |
| شخصیسازی | محدود به امکانات افزونه | قابل توسعه بر اساس نیاز |
| نگهداری | وابسته به توسعهدهنده افزونه | بر عهده تیم سایت |
| اتصال API | بر اساس امکانات افزونه | قابل تنظیم در کد |
| مناسب برای | کاربران عمومی | توسعهدهندگان و پروژههای سفارشی |
سینوکس یک افزونه رسمی به نام Sinox AI نیز برای وردپرس ارائه میکند که روی تولید مقاله، متای سئو، توضیحات محصول، متن جایگزین تصویر و سایر فعالیتهای محتوایی تمرکز دارد.
اگر هدف شما تولید محتوا در پیشخوان وردپرس است، میتوانید از افزونه Sinox AI برای وردپرس استفاده کنید.
اما در این مقاله قصد داریم یک چتبات مخصوص بازدیدکنندگان سایت بسازیم؛ بنابراین از روش کدنویسی اختصاصی استفاده میکنیم.
پیشنیازهای ساخت چتبات هوش مصنوعی در وردپرس
قبل از شروع، موارد زیر را آماده کنید:
یک سایت وردپرسی با دسترسی مدیریت
دسترسی به فایلهای سایت از طریق هاست یا SFTP
PHP و وردپرس بهروز و سازگار
API Key معتبر از Sinox API
شناسه یک مدل فعال و سازگار با OpenAI API
آشنایی مقدماتی با PHP و ساختار افزونههای وردپرس
برای اجرای این پروژه نیازی به نصب Python یا FastAPI نداریم؛ زیرا تمام بخش سمت سرور با PHP پیادهسازی میشود.
چرا از Sinox API استفاده میکنیم؟
Sinox API امکان ارتباط با مدلهای هوش مصنوعی را از طریق یک رابط مشترک فراهم میکند.
در این آموزش از Endpoint سازگار با OpenAI استفاده خواهیم کرد:
https://sinoxapi.com/v1/chat/completionsاین آدرس برای ارسال درخواست گفتگو به مدلهای سازگار کاربرد دارد.
اگر میخواهید با ساختار این رابط آشنا شوید، مقاله «API سازگار با OpenAI چیست؟» را بخوانید.
مرحله اول: دریافت API Key و انتخاب مدل
ابتدا وارد داشبورد Sinox API شوید و از بخش کلیدهای API یک کلید معتبر بسازید.
سپس شناسه مدل موردنظر را از فهرست مدلهای فعال دریافت کنید.
در Sinox، شناسه مدل باید با نوع پکیج شما سازگار باشد. برای مثال، مدلهای مربوط به پکیج توکنی ممکن است از پیشوند t- استفاده کنند.
در ادامه، به دو مقدار نیاز داریم:
SINOX_API_KEY = YOUR_API_KEY
SINOX_MODEL = YOUR_MODEL_IDاین مقادیر را نباید در فایلهای عمومی قالب، JavaScript یا مخزن Git قرار دهید.
ذخیره کلید در wp-config.php
یکی از روشهای ساده برای پروژه آموزشی، تعریف تنظیمات در فایل wp-config.php است.
قبل از خطی که پایان بخش تنظیمات وردپرس را مشخص میکند، این دو مقدار را اضافه کنید:
define('SINOX_API_KEY', 'YOUR_API_KEY');
define('SINOX_MODEL', 'YOUR_MODEL_ID');کلید و شناسه مدل را با مقادیر واقعی جایگزین کنید.
فایل wp-config.php معمولاً در بخش سرور نگهداری میشود و نباید بهصورت عمومی قابل دانلود باشد. از سطح دسترسی صحیح فایل و امنیت هاست اطمینان حاصل کنید.
مرحله دوم: ساخت افزونه اختصاصی چتبات وردپرس
برای جلوگیری از وابستگی به قالب سایت، کد را در قالب یک افزونه مستقل مینویسیم.
در مسیر زیر یک پوشه ایجاد کنید:
wp-content/plugins/sinox-chatbot/داخل آن یک فایل با نام sinox-chatbot.php بسازید.
ساختار پروژه به این شکل خواهد بود:
sinox-chatbot/
└── sinox-chatbot.phpدر این فایل سه قابلیت اصلی را پیادهسازی میکنیم:
ایجاد Endpoint برای دریافت پیام
ارسال امن درخواست به Sinox API
نمایش فرم چت با استفاده از شورتکد
مرحله سوم: کدنویسی اتصال وردپرس به API هوش مصنوعی
کد زیر را داخل فایل sinox-chatbot.php قرار دهید:
<?php
/**
* Plugin Name: Sinox Chatbot Demo
* Description: Simple AI chatbot powered by Sinox API.
* Version: 1.0.0
*/
if (!defined('ABSPATH')) {
exit;
}
add_action('rest_api_init', function () {
register_rest_route('sinox-chat/v1', '/message', [
'methods' => 'POST',
'callback' => 'sinox_chat_handle_message',
'permission_callback' => '__return_true',
]);
});
function sinox_chat_handle_message($request) {
if (!defined('SINOX_API_KEY') ||
!defined('SINOX_MODEL')) {
return new WP_Error(
'missing_config',
'تنظیمات سرویس کامل نیست.',
['status' => 500]
);
}
$message = $request->get_param('message');
if (!is_string($message)) {
return new WP_Error(
'invalid_message',
'پیام معتبر نیست.',
['status' => 400]
);
}
$message = trim(sanitize_textarea_field($message));
if ($message === '' ||
mb_strlen($message) > 1000) {
return new WP_Error(
'invalid_length',
'طول پیام باید بین ۱ تا ۱۰۰۰ کاراکتر باشد.',
['status' => 400]
);
}
// Basic per-IP request limit for demonstration.
$ip = isset($_SERVER['REMOTE_ADDR'])
? sanitize_text_field(wp_unslash($_SERVER['REMOTE_ADDR']))
: 'unknown';
$limit_key = 'sinox_chat_' . md5($ip);
$count = (int) get_transient($limit_key);
if ($count >= 5) {
return new WP_Error(
'rate_limited',
'لطفاً کمی بعد دوباره تلاش کنید.',
['status' => 429]
);
}
set_transient($limit_key, $count + 1, MINUTE_IN_SECONDS);
$response = wp_remote_post(
'https://sinoxapi.com/v1/chat/completions',
[
'timeout' => 35,
'headers' => [
'Authorization' => 'Bearer ' . SINOX_API_KEY,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode([
'model' => SINOX_MODEL,
'messages' => [
[
'role' => 'system',
'content' => 'تو یک دستیار فارسیزبان مفید هستی.',
],
[
'role' => 'user',
'content' => $message,
],
],
'max_tokens' => 400,
]),
]
);
if (is_wp_error($response)) {
return new WP_Error(
'upstream_error',
'ارتباط با سرویس هوش مصنوعی برقرار نشد.',
['status' => 502]
);
}
$status = wp_remote_retrieve_response_code($response);
if ($status !== 200) {
return new WP_Error(
'api_error',
'دریافت پاسخ از مدل ناموفق بود.',
['status' => 502]
);
}
$data = json_decode(
wp_remote_retrieve_body($response),
true
);
$answer = $data['choices'][0]['message']['content'] ?? '';
if (!is_string($answer) || $answer === '') {
return new WP_Error(
'empty_response',
'پاسخ معتبری دریافت نشد.',
['status' => 502]
);
}
return rest_ensure_response([
'reply' => $answer,
]);
}این کد یک Endpoint در REST API وردپرس ایجاد میکند و پیام کاربر را به مدل ارسال میکند.
آدرس Endpoint در سایت شما به شکل زیر خواهد بود:
https://example.com/wp-json/sinox-chat/v1/messageبهجای example.com دامنه وردپرس خودتان قرار میگیرد.
نکته امنیتی: این Endpoint برای بازدیدکنندگان عمومی قابل فراخوانی است. محدودیت پنج درخواست در دقیقه که در کد قرار دادهایم فقط یک کنترل ساده آموزشی است و محافظت کامل در برابر سوءاستفاده محسوب نمیشود. پیش از انتشار عمومی باید از Rate Limiting معتبر در سطح سرور یا CDN، محدودیت مصرف و پایش درخواستها استفاده کنید.
مرحله چهارم: ساخت رابط چتبات با شورتکد
حالا باید یک فرم ساده بسازیم تا کاربران بتوانند پیام ارسال کنند.
کد زیر را به انتهای همان فایل افزونه اضافه کنید:
add_shortcode('sinox_chatbot', function () {
$id = wp_unique_id('sinox-chat-');
$endpoint = esc_url(rest_url('sinox-chat/v1/message'));
ob_start();
?>
<div id="<?php echo esc_attr($id); ?>"
class="sinox-chatbot">
<div class="sinox-chat-output"
aria-live="polite">
سلام! چه کمکی میتوانم بکنم؟
</div>
<form class="sinox-chat-form">
<textarea
class="sinox-chat-input"
maxlength="1000"
required
placeholder="پیام خود را بنویسید..."
></textarea>
<button type="submit">
ارسال پیام
</button>
</form>
</div>
<script>
(() => {
const root = document.getElementById(
<?php echo wp_json_encode($id); ?>
);
const form = root.querySelector('form');
const input = root.querySelector('textarea');
const output = root.querySelector('.sinox-chat-output');
const button = form.querySelector('button');
form.addEventListener('submit', async (event) => {
event.preventDefault();
const message = input.value.trim();
if (!message) return;
button.disabled = true;
output.textContent = 'در حال دریافت پاسخ...';
try {
const response = await fetch(
<?php echo wp_json_encode($endpoint); ?>,
{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ message })
}
);
const data = await response.json();
if (!response.ok) {
throw new Error(
data.message || 'خطا در دریافت پاسخ'
);
}
output.textContent = data.reply;
} catch (error) {
output.textContent = error.message;
} finally {
button.disabled = false;
}
});
})();
</script>
<?php
return ob_get_clean();
});این نمونه برای نمایش مفهوم شورتکد طراحی شده است. در افزونههای حرفهای بهتر است JavaScript را در فایل جداگانه قرار دهید و با wp_enqueue_script بارگذاری کنید.
همچنین این رابط فقط آخرین پاسخ را نمایش میدهد و تاریخچه مکالمه را ذخیره نمیکند.
چرا از textContent استفاده کردیم؟
در کد JavaScript، پاسخ مدل را با textContent نمایش میدهیم.
این روش باعث میشود محتوای پاسخ بهعنوان متن نمایش داده شود، نه HTML اجرایی.
در نتیجه، اگر مدل متنی شامل تگهای HTML تولید کند، مرورگر آن را مستقیماً به عناصر اجرایی صفحه تبدیل نمیکند.
مرحله پنجم: فعالسازی افزونه و نمایش چتبات
پس از ذخیره فایل، وارد پیشخوان وردپرس شوید.
از مسیر «افزونهها ← افزونههای نصبشده»، افزونه Sinox Chatbot Demo را پیدا کرده و فعال کنید.
سپس یک برگه جدید ایجاد کنید.
در محتوای برگه، بلوک Shortcode را اضافه کرده و مقدار زیر را وارد کنید:
[sinox_chatbot]برگه را منتشر کنید.
حالا با باز کردن آن صفحه، فرم ارسال پیام نمایش داده میشود.
برای آزمایش، یک سؤال ساده مانند «وردپرس چیست؟» ارسال کنید.
اگر کلید API، مدل و اتصال سرور درست باشند، پاسخ مدل در صفحه ظاهر خواهد شد.
چگونه ظاهر چتبات وردپرس را شخصیسازی کنیم؟
فرم ساختهشده از کلاسهای CSS اختصاصی استفاده میکند؛ بنابراین میتوانید ظاهر آن را مطابق طراحی سایت تغییر دهید.
برای مثال، این CSS را در بخش CSS سفارشی قالب قرار دهید:
.sinox-chatbot {
max-width: 640px;
margin: 24px auto;
padding: 24px;
border: 1px solid #ddd;
border-radius: 16px;
}
.sinox-chat-output {
min-height: 100px;
padding: 16px;
margin-bottom: 16px;
background: #f5f7fb;
border-radius: 10px;
white-space: pre-wrap;
}
.sinox-chat-input {
width: 100%;
min-height: 100px;
padding: 12px;
}
.sinox-chat-form button {
margin-top: 12px;
padding: 10px 24px;
cursor: pointer;
}با تغییر رنگها، فاصلهها و اندازهها میتوانید رابط را با قالب وردپرس هماهنگ کنید.
آیا چتبات وردپرس میتواند تاریخچه گفتگو را حفظ کند؟
در نسخه فعلی، خیر.
هر درخواست بهصورت مستقل به مدل ارسال میشود. بنابراین اگر کاربر سؤال دوم را بر اساس پاسخ اول بپرسد، مدل الزاماً از مکالمه قبلی اطلاع ندارد.
برای ایجاد یک چتبات چندمرحلهای باید تاریخچه پیامها را مدیریت کنید.
میتوانید برای هر گفتگو یک شناسه مستقل بسازید، پیامها را در پایگاه داده ذخیره کنید و در درخواستهای بعدی تاریخچه مرتبط را ارسال کنید.
البته این قابلیت باید همراه با کنترل دسترسی، مدیریت حریم خصوصی و محدود کردن حجم Context پیادهسازی شود.
اگر به ساخت Backend پیشرفتهتر علاقه دارید، مقاله «آموزش ساخت API چتبات هوش مصنوعی با FastAPI و پایتون» نیز مسیر مناسبی برای ادامه یادگیری است.
مدیریت هزینه چتبات هوش مصنوعی در وردپرس
هر پیام ارسالشده میتواند یک درخواست به مدل هوش مصنوعی ایجاد کند.
در پکیجهای توکنی، حجم ورودی و خروجی بر مصرف اثر دارد. در پکیجهای ریکوستی، تعداد درخواستهای قابلمحاسبه اهمیت بیشتری دارد.
برای کنترل هزینه، بهتر است:
تعداد درخواستهای هر کاربر را محدود کنید.
برای پیامها سقف طول تعیین کنید.
از مدل متناسب با نیاز سایت استفاده کنید.
پاسخهای پرتکرار را در صورت مناسب بودن کش کنید.
گزارش مصرف را در داشبورد بررسی کنید.
همچنین باید توجه داشته باشید که حتی یک درخواست ناموفق در سمت مرورگر ممکن است قبلاً توسط سرویس بالادستی پردازش شده باشد. بنابراین هزینه را فقط از روی تعداد پاسخهای موفق در صفحه تخمین نزنید.
برای یادگیری جزئیات قیمتگذاری، مقاله «توکن هوش مصنوعی چیست؟ آموزش محاسبه هزینه API» را مطالعه کنید.
خطاهای رایج اتصال وردپرس به API هوش مصنوعی
خطای 401 یا مشکل API Key
اگر کلید نامعتبر باشد، سرویس هوش مصنوعی ممکن است درخواست را رد کند.
بررسی کنید کلید بهدرستی در wp-config.php تعریف شده باشد و پکیج مربوط به آن فعال باشد.
در نمونه آموزشی ما، خطاهای سرویس بالادستی به پیام عمومی تبدیل میشوند و کد اصلی آنها مستقیماً به مرورگر نمایش داده نمیشود.
خطای 404 در REST API وردپرس
اگر مسیر /wp-json/sinox-chat/v1/message پیدا نشد، ابتدا فعال بودن افزونه و درست بودن آدرس سایت را بررسی کنید.
همچنین مطمئن شوید REST API وردپرس توسط افزونه امنیتی یا تنظیمات سرور مسدود نشده باشد.
خطای 429 و محدودیت درخواست
در کد آموزشی، برای هر IP یک محدودیت ساده قرار دادهایم.
این محدودیت ممکن است برای کاربرانی که پشت یک شبکه مشترک هستند رفتار یکسانی ایجاد کند و در برابر مهاجمانی که IP خود را تغییر میدهند کافی نیست.
برای سایت عمومی باید کنترل حرفهایتری در سطح زیرساخت داشته باشید.
خطای Timeout هنگام اتصال به Sinox
اگر سرور وردپرس نتواند به آدرس API متصل شود، درخواست با خطا مواجه میشود.
در این شرایط، اتصال خروجی HTTPS هاست، تنظیمات فایروال و محدودیتهای سرویس میزبانی را بررسی کنید.
خطای 502 هنگام دریافت پاسخ
در کد ما، خطاهای سرویس بالادستی و پاسخهای نامعتبر با وضعیت 502 برگردانده میشوند.
برای تشخیص علت واقعی، باید لاگ امن سمت سرور را بررسی کنید؛ بدون اینکه کلید API یا اطلاعات محرمانه کاربران را ثبت کنید.
سؤالات متداول درباره اتصال هوش مصنوعی به وردپرس
آیا میتوان بدون افزونه آماده به وردپرس هوش مصنوعی اضافه کرد؟
بله. میتوانید با PHP و REST API وردپرس یک اتصال اختصاصی بسازید. البته برای نگهداری منظم کد، بهتر است آن را در قالب یک افزونه سبک اختصاصی پیادهسازی کنید.
آیا برای ساخت چتبات وردپرس به Python نیاز داریم؟
خیر. در روش این مقاله، تمام ارتباط سمت سرور با PHP انجام میشود و نیازی به اجرای Python ندارید.
آیا میتوان چتبات را به مدلهای مختلف متصل کرد؟
بله. در صورتی که مدل انتخابی از طریق رابط API مورد استفاده پشتیبانی شود، میتوانید شناسه مدل را تغییر دهید.
آیا کلید API در این روش امن است؟
نگهداری کلید در سمت سرور از قرار دادن آن در JavaScript عمومی امنتر است. بااینحال، امنیت کامل به تنظیمات هاست، سطح دسترسی فایلها و محافظت از Endpoint بستگی دارد.
آیا میتوان چتبات را به اطلاعات محصولات ووکامرس متصل کرد؟
بله، اما این قابلیت در نمونه فعلی پیادهسازی نشده است. برای چنین کاری باید دادههای محصولات را بهشکل کنترلشده در اختیار مدل قرار دهید و دسترسی به اطلاعات خصوصی را محدود کنید.
جمعبندی
در این آموزش یاد گرفتیم چگونه هوش مصنوعی را با استفاده از API به وردپرس متصل کنیم و یک چتبات اختصاصی بسازیم.
ابتدا کلید API را در سمت سرور تنظیم کردیم، سپس یک Endpoint در REST API وردپرس ایجاد کردیم و درخواستها را با PHP به Sinox API فرستادیم.
در ادامه، با استفاده از شورتکد، فرم چت را به صفحه وردپرس اضافه کردیم و روش شخصیسازی ظاهر آن را بررسی کردیم.
این پروژه یک نمونه آموزشی است و برای استفاده عمومی به محافظت بیشتر در برابر سوءاستفاده، مدیریت مصرف و پایش خطاها نیاز دارد.
برای دریافت کلید و مشاهده مدلهای پشتیبانیشده میتوانید به Sinox API مراجعه کنید. اگر هدف شما تولید محتوا و مدیریت سئوی وردپرس است، افزونه رسمی Sinox AI نیز گزینهای آماده برای این کاربرد محسوب میشود.



