Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

سلام عليكم.

هناك الكثير من المقالات حول موضوع روبوتات Telegram ، لكن القليل من الناس يكتبون عن مهارات Alice ، ولم أجد أي معلومات حول كيفية إنشاء روبوت واحد ، لذلك قررت مشاركة تجربتي حول كيفية إنشاء روبوت واحد. روبوت Telegram البسيط ومهارة Yandex.Alice للموقع الذي له نفس الوظيفة.

لذلك ، لن أخبرك عن كيفية رفع مستوى خادم الويب والحصول على شهادة SSL ، فقد كُتب عدد كافٍ عن ذلك.

إنشاء بوت Telegram

أولاً ، لنقم بإنشاء روبوت Telegram ، لذلك نذهب إلى Telegram ونجد روبوت BotFather هناك.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

اختر / newbot

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

نقوم بإدخال اسم الروبوت الذي سيستجيب من خلاله ، ثم نقوم بإدخال اسم الروبوت ، ردًا على ذلك نحصل على رمز مميز للتحكم في الروبوت ، ونكتب هذا المفتاح ، وسيكون مفيدًا لنا في المستقبل.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

الخطوة التالية هي إخبار خوادم Telegram بالخادم الذي يرسل البيانات من الروبوت إليه. للقيام بذلك ، نقوم بعمل رابط للنموذج:

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

___TOKEN___ نستبدل الرمز المميز الخاص بنا من الروبوت ، والذي تم استلامه مسبقًا

____PATH_TO_SCRIPT____ نستبدل عنوان البرنامج النصي على خادمنا حيث ستتم معالجة البيانات (على سبيل المثال ، www.my_server.ru/webhook_telegram.php).

توجد مشكلة هنا ، خادم api.telegram.org قيد الحظر ، ولكن يمكنك القيام بذلك: استئجار أرخص خادم حيث لا توجد قيود وإعطاء الأمر من وحدة التحكم الخاصة بهذا الخادم

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

هذا كل شيء ، يتم إنشاء روبوت Telegram وتوصيله بخادمك.

إنشاء مهارة لـ Yandex.Alisa

دعنا ننتقل إلى إنشاء مهارة لـ Yandex.Alice.

لإنشاء مهارة ، عليك الذهاب إلى صفحة مطوري Yandex.Dialogues صفحة مطور Yandex.Dialogs، انقر فوق "إنشاء حوار" وحدد "المهارات في أليس".

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

سيتم فتح مربع حوار إعدادات المهارة.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

نبدأ في إدخال إعدادات المهارة.

أدخل اسم مهارتك.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

يجب اختيار اسم التنشيط بعناية شديدة حتى تفهمه أليس بشكل صحيح ، من الفروق الدقيقة - يمكن لتطبيق الهاتف المحمول الذي يحتوي على Alice وأعمدة مثل Yandex.Station أو Irbis A إدراك الكلمات بشكل مختلف.

نقوم بإدخال مسار البرنامج النصي على خادمنا بنفس طريقة Telegram ، ولكنه سيكون نصًا مخصصًا لـ Alice ، على سبيل المثال www.my_server.ru/webhook_alice.php.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

نختار الصوت الذي ستتحدث به المهارة ، أحب صوت أليس أكثر.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

إذا كنت تخطط للعمل فقط على الأجهزة المحمولة أو في متصفح ، فحدد "أنت بحاجة إلى جهاز بشاشة".

بعد ذلك ، أدخل إعدادات كتالوج مهارات Alice. إذا كنت تخطط لاستخدام كلمة "علامة تجارية" للتنشيط ، فأنت بحاجة إلى التحقق من موقع الويب الخاص بالعلامة التجارية في خدمة webmaster.yandex.ru.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

هذا كل شيء مع الإعدادات ، دعنا ننتقل إلى البرامج النصية.

برنامج Telegram bot

لنبدأ ببرنامج نصي لـ Telegram.

نقوم بتوصيل المكتبة حيث ستتم معالجة الرسائل من الروبوت و Alice:

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);
}

الآن يمكنك العمل مع المتغيرات:

الرموز $ - إليك الآن جميع الكلمات التي أدخلها المستخدم

$ 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

الآن دعنا ننتقل إلى البرنامج النصي الخاص بـ Alice ، فهو تقريبًا نفس برنامج Telegram.

نقوم أيضًا بتوصيل المكتبة حيث ستتم معالجة الرسائل من الروبوت وأليس ، بالإضافة إلى مكتبة بها فصول لـ Alice:

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'];}
  }
}

يوجد عدد قليل من المتغيرات هنا:

الرموز $ - إليك الآن جميع الكلمات التي أدخلها المستخدم

$ user_id - معرف المستخدم هنا

تقوم Yandex باستمرار باختبار المهارات المنشورة ، وقد أضفت سطرًا للخروج فورًا من البرنامج النصي دون البدء في المعالجة الكاملة للرسالة:

  if (strpos($tokens[0], "ping") > -1)     {Send_Out("pong", "", true);}

نحن نسمي وظيفة Parse_Tokens للمعالجة ، وهي نفس وظيفة Telegram:

$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.

في الواقع ، هذا هو كل شيء تقريبًا ، إذا تم كل شيء بشكل صحيح ، فسيكون برنامج Telegram bot متاحًا بالفعل ، ويمكن التحقق من مهارة Alice Dialers.yandex.ru/developerبالانتقال إلى مهارتك الجديدة في علامة تبويب الاختبار.

Yandex.Alisa و Telegram bot في PHP بنفس الوظائف

إذا كان كل شيء يعمل بشكل صحيح ، يمكنك إرسال المهارة للاعتدال بالنقر فوق الزر "للإشراف".

الآن لديك روبوتان لمنصات مختلفة في وقت واحد ، والتي تعمل بنفس الطريقة.

التوثيق لخدمة Yandex.Dialogues هنا

نصوص كاملة منشورة على جيثب تحميل.

المصدر: www.habr.com

إضافة تعليق