ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

روز بخیر.

مقالات زیادی در مورد ربات های تلگرام وجود دارد، اما افراد کمی در مورد مهارت ها برای آلیس می نویسند، و من هیچ اطلاعاتی در مورد نحوه ساخت یک ربات پیدا نکردم، بنابراین تصمیم گرفتم تجربه خود را در مورد نحوه ساخت یک ربات به اشتراک بگذارم. ربات ساده تلگرام و مهارت Yandex.Alice برای سایتی که کارایی یکسانی دارد.

بنابراین، من به شما نمی گویم که چگونه یک وب سرور را بالا ببرید و گواهی ssl دریافت کنید، به اندازه کافی در مورد آن نوشته شده است.

ساخت ربات تلگرام

ابتدا یک ربات تلگرام ایجاد می کنیم، برای این کار به تلگرام می رویم و ربات BotFather را در آنجا پیدا می کنیم.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

/newbot را انتخاب کنید

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

نام رباتی را که با آن پاسخ می دهد وارد می کنیم، سپس نام ربات را وارد می کنیم، در پاسخ یک توکن برای کنترل ربات دریافت می کنیم، این کلید را یادداشت می کنیم، در آینده برای ما مفید خواهد بود.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

مرحله بعدی این است که به سرورهای تلگرام بگویید که داده ها را از ربات به کدام سرور ارسال کنند. برای انجام این کار، پیوندی از فرم ایجاد می کنیم:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___

___TOKEN___ توکن خود را از ربات که قبلاً دریافت کرده ایم جایگزین می کنیم

____PATH_TO_SCRIPT____ ما آدرس اسکریپت را در سرور خود جایگزین می کنیم که در آن داده ها پردازش می شوند (به عنوان مثال، www.my_server.ru/webhook_telegram.php).

اینجا یک مشکل وجود دارد، سرور api.telegram.org در حال مسدود شدن است، اما می توانید این کار را انجام دهید: ارزان ترین سرور را در جایی که هیچ محدودیتی وجود ندارد اجاره کنید و دستور را از کنسول این سرور بدهید.

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___

تمام، ربات تلگرام ساخته شده و به سرور شما متصل می شود.

ایجاد مهارت برای Yandex.Alisa

بیایید به ایجاد یک مهارت برای Yandex.Alice برویم.

برای ایجاد یک مهارت، باید به صفحه توسعه دهندگان Yandex.Dialogues بروید صفحه توسعه دهنده Yandex.Dialogs، روی "ایجاد گفتگو" کلیک کنید و "مهارت در آلیس" را انتخاب کنید.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

کادر گفتگوی تنظیمات مهارت باز می شود.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

ما شروع به ورود به تنظیمات مهارت می کنیم.

نام مهارت خود را وارد کنید.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

نام فعال سازی باید با دقت انتخاب شود تا آلیس آن را به درستی درک کند، از تفاوت های ظریف - یک برنامه تلفن همراه با Alice و ستون هایی مانند Yandex.Station یا Irbis A می تواند کلمات را متفاوت درک کند.

ما مسیر اسکریپت را در سرورمان به همان روشی که برای تلگرام وارد می کنیم، وارد می کنیم، اما برای مثال، اسکریپت مخصوص آلیس خواهد بود. www.my_server.ru/webhook_alice.php.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

ما صدایی را انتخاب می کنیم که مهارت با آن صحبت کند، من صدای آلیس را بیشتر دوست دارم.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

اگر می‌خواهید فقط روی دستگاه‌های تلفن همراه یا در مرورگر کار کنید، «شما به دستگاهی با صفحه‌نمایش نیاز دارید» را انتخاب کنید.

سپس تنظیمات مربوط به کاتالوگ مهارت های آلیس را وارد کنید. اگر قصد دارید از کلمه "برند" برای فعال سازی استفاده کنید، باید وب سایت برند را در سرویس webmaster.yandex.ru تأیید کنید.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

این همه با تنظیمات است، اجازه دهید به سراغ اسکریپت ها برویم.

اسکریپت ربات تلگرام

بیایید با یک اسکریپت برای تلگرام شروع کنیم.

ما کتابخانه ای را به هم متصل می کنیم که در آن پیام های ربات و آلیس پردازش می شوند:

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.

در واقع، این تقریباً همه چیز است، اگر همه چیز به درستی انجام شود، ربات تلگرام از قبل در دسترس است، مهارت آلیس قابل بررسی است. dialogs.yandex.ru/developerبا رفتن به مهارت جدید خود در برگه تست.

ربات Yandex.Alisa و Telegram در PHP با همان عملکرد

اگر همه چیز به درستی کار می کند، می توانید با کلیک کردن روی دکمه "برای تعدیل" مهارت را برای تعدیل ارسال کنید.

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

اسناد سرویس Yandex.Dialogues اینجا

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

منبع: www.habr.com

اضافه کردن نظر