Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

Добрый день.

ٽيليگرام بوٽس جي موضوع تي تمام گهڻا مضمون آهن، پر ٿورا ماڻهو ايلس جي مهارتن بابت لکن ٿا، ۽ مون کي ڪا به معلومات نه ملي آهي ته هڪ واحد بوٽ ڪيئن ٺاهيو، تنهنڪري مون پنهنجو تجربو حصيداري ڪرڻ جو فيصلو ڪيو. سادو ٽيليگرام بوٽ ۽ Yandex.Alice سکيل سائيٽ لاءِ ساڳي ڪارڪردگي سان.

تنهن ڪري، مان توهان کي نه ٻڌايان ٿو ته ويب سرور ڪيئن وڌايو ۽ هڪ ايس ايس ايل سرٽيفڪيٽ حاصل ڪيو، ان بابت ڪافي لکيو ويو آهي.

ٽيليگرام بوٽ ٺاهڻ

پهرين، اچو ته هڪ ٽيليگرام بوٽ ٺاهيو، ان لاءِ اسان ٽيليگرام تي وڃون ٿا ۽ اتي بوٽ فادر بوٽ ڳوليون ٿا.

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

چونڊيو /نئون بوٽ

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

اسان بوٽ جو نالو داخل ڪندا آهيون جنهن سان اهو جواب ڏيندو، پوءِ اسان ان بوٽ جو نالو داخل ڪندا آهيون، جواب ۾ اسان کي بوٽ کي ڪنٽرول ڪرڻ لاءِ هڪ ٽوڪن ملندو آهي، اسان هن ڪيئي کي لکندا آهيون، اهو مستقبل ۾ اسان لاءِ ڪارآمد ثابت ٿيندو.

Yandex.Alisa ۽ ٽيليگرام بوٽ 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 ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

مهارت سيٽنگون ڊائلاگ کلي ويندو.

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

اسان مهارت سيٽنگون داخل ڪرڻ شروع ڪندا آهيون.

پنھنجي مهارت جو نالو داخل ڪريو.

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

چالو ڪرڻ جو نالو تمام احتياط سان چونڊيو وڃي ته جيئن ايلس ان کي صحيح طرح سمجهي، nuances مان - هڪ موبائل ايپليڪيشن ايلس سان ۽ ڪالمن جهڙوڪ Yandex.Station يا Irbis A لفظن کي مختلف طرح سان سمجهي سگهي ٿو.

اسان پنهنجي سرور تي اسڪرپٽ جو رستو داخل ڪيو آهي جيئن ٽيليگرام لاءِ، پر اهو اسڪرپٽ هوندو خاص طور تي ايلس لاءِ، مثال طور www.my_server.ru/webhook_alice.php.

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

اسان آواز چونڊيو جنهن سان مهارت ڳالهائيندو، مون کي ايلس جو آواز وڌيڪ پسند آهي.

Yandex.Alisa ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

جيڪڏهن توهان صرف موبائيل ڊوائيسز يا برائوزر ۾ ڪم ڪرڻ جو ارادو ڪيو، ته پوء "توهان کي اسڪرين سان هڪ ڊوائيس جي ضرورت آهي" چونڊيو.

اڳيون، ايلس جي صلاحيتن جي فهرست لاء سيٽنگون داخل ڪريو. جيڪڏھن توھان چالو ڪرڻ لاءِ لفظ "برانڊ" استعمال ڪرڻ جو ارادو ڪيو ٿا، توھان کي webmaster.yandex.ru سروس ۾ برانڊ جي ويب سائيٽ جي تصديق ڪرڻ جي ضرورت آھي.

Yandex.Alisa ۽ ٽيليگرام بوٽ 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 - يوزر 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 - يوزر 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 ۽ ٽيليگرام بوٽ PHP ۾ ساڳي ڪارڪردگي سان

جيڪڏھن سڀ ڪجھ صحيح ڪم ڪري ٿو، توھان موڪلي سگھوٿا اعتدال لاءِ مهارت "چال لاءِ" بٽڻ تي ڪلڪ ڪري.

ھاڻي توھان وٽ ھڪ ئي وقت مختلف پليٽ فارمن لاءِ ٻه بوٽ آھن، جيڪي ساڳيءَ طرح ڪم ڪن ٿا.

Yandex.Dialogues سروس لاءِ دستاويز هتي

مڪمل اسڪرپٽ پوسٽ ڪيل گٿب تي скачать.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو