روز بخیر.
مقالات زیادی در مورد ربات های تلگرام وجود دارد، اما افراد کمی در مورد مهارت ها برای آلیس می نویسند، و من هیچ اطلاعاتی در مورد نحوه ساخت یک ربات پیدا نکردم، بنابراین تصمیم گرفتم تجربه خود را در مورد نحوه ساخت یک ربات به اشتراک بگذارم. ربات ساده تلگرام و مهارت Yandex.Alice برای سایتی که کارایی یکسانی دارد.
بنابراین، من به شما نمی گویم که چگونه یک وب سرور را بالا ببرید و گواهی ssl دریافت کنید، به اندازه کافی در مورد آن نوشته شده است.
ساخت ربات تلگرام
ابتدا یک ربات تلگرام ایجاد می کنیم، برای این کار به تلگرام می رویم و ربات BotFather را در آنجا پیدا می کنیم.
/newbot را انتخاب کنید
نام رباتی را که با آن پاسخ می دهد وارد می کنیم، سپس نام ربات را وارد می کنیم، در پاسخ یک توکن برای کنترل ربات دریافت می کنیم، این کلید را یادداشت می کنیم، در آینده برای ما مفید خواهد بود.
مرحله بعدی این است که به سرورهای تلگرام بگویید که داده ها را از ربات به کدام سرور ارسال کنند. برای انجام این کار، پیوندی از فرم ایجاد می کنیم:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ توکن خود را از ربات که قبلاً دریافت کرده ایم جایگزین می کنیم
____PATH_TO_SCRIPT____ ما آدرس اسکریپت را در سرور خود جایگزین می کنیم که در آن داده ها پردازش می شوند (به عنوان مثال،
اینجا یک مشکل وجود دارد، سرور api.telegram.org در حال مسدود شدن است، اما می توانید این کار را انجام دهید: ارزان ترین سرور را در جایی که هیچ محدودیتی وجود ندارد اجاره کنید و دستور را از کنسول این سرور بدهید.
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
تمام، ربات تلگرام ساخته شده و به سرور شما متصل می شود.
ایجاد مهارت برای Yandex.Alisa
بیایید به ایجاد یک مهارت برای Yandex.Alice برویم.
برای ایجاد یک مهارت، باید به صفحه توسعه دهندگان Yandex.Dialogues بروید
کادر گفتگوی تنظیمات مهارت باز می شود.
ما شروع به ورود به تنظیمات مهارت می کنیم.
نام مهارت خود را وارد کنید.
نام فعال سازی باید با دقت انتخاب شود تا آلیس آن را به درستی درک کند، از تفاوت های ظریف - یک برنامه تلفن همراه با Alice و ستون هایی مانند Yandex.Station یا Irbis A می تواند کلمات را متفاوت درک کند.
ما مسیر اسکریپت را در سرورمان به همان روشی که برای تلگرام وارد می کنیم، وارد می کنیم، اما برای مثال، اسکریپت مخصوص آلیس خواهد بود.
ما صدایی را انتخاب می کنیم که مهارت با آن صحبت کند، من صدای آلیس را بیشتر دوست دارم.
اگر میخواهید فقط روی دستگاههای تلفن همراه یا در مرورگر کار کنید، «شما به دستگاهی با صفحهنمایش نیاز دارید» را انتخاب کنید.
سپس تنظیمات مربوط به کاتالوگ مهارت های آلیس را وارد کنید. اگر قصد دارید از کلمه "برند" برای فعال سازی استفاده کنید، باید وب سایت برند را در سرویس webmaster.yandex.ru تأیید کنید.
این همه با تنظیمات است، اجازه دهید به سراغ اسکریپت ها برویم.
اسکریپت ربات تلگرام
بیایید با یک اسکریپت برای تلگرام شروع کنیم.
ما کتابخانه ای را به هم متصل می کنیم که در آن پیام های ربات و آلیس پردازش می شوند:
include_once 'webhook_parse.php';
ما توکن ربات خود را تنظیم می کنیم:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
ما داده ها را دریافت می کنیم:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
تجزیه داده ها به متغیرها:
if (!$request)
{
die();
// Some Error output (request is not valid JSON)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
die();
// Some Error output (request has not message)
}
else
{
$user_id = $request['message']['from']['id'];
$msg_user_name = $request['message']['from']['first_name'];
$msg_user_last_name = $request['message']['from']['last_name'];
$msg_user_nick_name = $request['message']['from']['username'];
$msg_chat_id = $request['message']['chat']['id'];
$msg_text = $request['message']['text'];
$msg_text = mb_strtolower($msg_text, 'UTF-8');
$tokens = explode(" ", $msg_text);
}
اکنون می توانید با متغیرها کار کنید:
$tokens - اکنون تمام کلماتی که کاربر وارد کرده است در اینجا آمده است
$user_id - شناسه کاربر در اینجا
$msg_chat_id - چتی که در آن ربات فرمان را دریافت کرد
$msg_user_name - نام کاربری
سپس تابع Parse_Tokens را برای پردازش فراخوانی می کنیم:
$Out_Str = Parse_Tokens($tokens);
و ارسال پاسخ:
Send_Out($user_id, $Out_Str);
تابع Send_Out ساده است و به شکل زیر است:
function Send_Out($user_id, $text, $is_end = true)
{
global $tg_bot_token;
if (strlen($user_id) < 1 || strlen($text) < 1) {return;}
$json = file_get_contents('https://api.telegram.org/bot' . $tg_bot_token . '/sendMessage?chat_id=' . $user_id . '&text=' . $text);
}
اسکریپت مهارت برای Yandex.Alisa
حالا بریم سراغ فیلمنامه آلیس، تقریباً مثل تلگرام است.
همچنین کتابخانهای را که در آن پیامهای ربات و آلیس پردازش میشوند، بهعلاوه یک کتابخانه با کلاسهایی برای آلیس وصل میکنیم:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
ما داده ها را دریافت می کنیم:
$data = json_decode(trim(file_get_contents('php://input')), true);
تجزیه داده ها به متغیرها:
if (isset($data['request']))
{
//original_utterance
if (isset($data['meta']))
{
$data_meta = $data['meta'];
if (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}
}
if (isset($data['request']))
{
$data_req = $data['request'];
if (isset($data_req['original_utterance']))
{
$original_utterance = $data_req['original_utterance'];
}
if (isset($data_req['command'])) {$data_msg = $data_req['command'];}
if (isset($data_req['nlu']))
{
$data_nlu = $data_req['nlu'];
if (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];}
// $data_token_count = count($data_tokens);
}
}
if (isset($data['session']))
{
$data_session = $data['session'];
if (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}
if (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}
if (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}
if (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}
if (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}
}
}
در اینجا چند متغیر کمتر وجود دارد:
$tokens - اکنون تمام کلماتی که کاربر وارد کرده است در اینجا آمده است
$user_id - شناسه کاربر در اینجا
Yandex به طور مداوم مهارت های منتشر شده را پینگ می کند، و من یک خط اضافه کردم تا فوراً بدون شروع پردازش کامل پیام از اسکریپت خارج شوید:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
ما تابع Parse_Tokens را برای پردازش صدا می کنیم، مانند تلگرام است:
$Out_Str = Parse_Tokens($tokens);
و ارسال پاسخ:
Send_Out($user_id, $Out_Str);
تابع Send_Out در اینجا پیچیده تر است:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false)
{
global $data_msg_sess_id, $user_id;
///// GENERATE BASE OF OUT //////
$Data_Out = new Alice_Data_Out();
$Data_Out->response = new Alice_Response();
$Data_Out->session = new Alice_Session();
///// GENERATE BASE OF OUT End //////
///// OUT MSG GENERATE /////
$Data_Out->session->session_id = $data_msg_sess_id;;
$Data_Out->session->user_id = $user_id;
$Data_Out->response->text = $out_text;
$Data_Out->response->tts = $out_tts;
if (strlen($out_tts) < 1) {$Data_Out->response->tts = $out_text;}
$Data_Out->response->end_session = $is_end;
header('Content-Type: application/json');
print(json_encode($Data_Out, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT));
die();
}
فیلمنامه آلیس را تمام کرد.
خود اسکریپت پردازش Parse_Tokens صرفاً برای مثال ساخته شده است، شما می توانید هر گونه بررسی و پردازش را در آنجا انجام دهید.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
اگر نیاز به برقراری ارتباط با کاربر با فرم پیچیدهتر از پرسش و پاسخ دارید، باید $user_id کاربر و دادههایی را که قبلاً از کاربر در پایگاه داده (مثلاً mysql) دریافت کردهاید ذخیره کنید و آنها را در آن تجزیه و تحلیل کنید. تابع Parse_Tokens.
در واقع، این تقریباً همه چیز است، اگر همه چیز به درستی انجام شود، ربات تلگرام از قبل در دسترس است، مهارت آلیس قابل بررسی است.
اگر همه چیز به درستی کار می کند، می توانید با کلیک کردن روی دکمه "برای تعدیل" مهارت را برای تعدیل ارسال کنید.
اکنون دو ربات برای پلتفرم های مختلف به طور همزمان دارید که به یک شکل کار می کنند.
اسناد سرویس Yandex.Dialogues
اسکریپت های کامل ارسال شده در github
منبع: www.habr.com