Yandex.Alisa และ Telegram bot ใน PHP ที่มีฟังก์ชันการทำงานเหมือนกัน

สวัสดี

มีบทความมากมายเกี่ยวกับหัวข้อของบอท Telegram แต่มีเพียงไม่กี่คนที่เขียนเกี่ยวกับทักษะสำหรับอลิซ และฉันไม่พบข้อมูลใดๆ เกี่ยวกับวิธีสร้างบอทเลย ดังนั้นฉันจึงตัดสินใจแบ่งปันประสบการณ์ของฉันเกี่ยวกับวิธีสร้างบอท บอท Telegram อย่างง่ายและทักษะ Yandex.Alice สำหรับไซต์ที่มีฟังก์ชันการทำงานเหมือนกัน

ดังนั้นฉันจะไม่บอกวิธีเพิ่มเว็บเซิร์ฟเวอร์และรับใบรับรอง ssl มีการเขียนเกี่ยวกับเรื่องนี้มากพอแล้ว

การสร้างบอตโทรเลข

ก่อนอื่นมาสร้างบอท 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 ที่มีฟังก์ชันการทำงานเหมือนกัน

ควรเลือกชื่อการเปิดใช้งานอย่างระมัดระวังเพื่อให้อลิซเข้าใจได้อย่างถูกต้องจากความแตกต่าง - แอปพลิเคชันมือถือที่มีอลิซและคอลัมน์เช่น Yandex.Station หรือ Irbis A สามารถรับรู้คำต่าง ๆ ได้

เราป้อนเส้นทางไปยังสคริปต์บนเซิร์ฟเวอร์ของเราในลักษณะเดียวกับ Telegram แต่จะเป็นสคริปต์เฉพาะสำหรับ Alice เช่น www.my_server.ru/webhook_alice.php.

Yandex.Alisa และ Telegram bot ใน PHP ที่มีฟังก์ชันการทำงานเหมือนกัน

เราเลือกเสียงที่สกิลจะพูด ฉันชอบเสียงของอลิซมากกว่า

Yandex.Alisa และ Telegram bot ใน PHP ที่มีฟังก์ชันการทำงานเหมือนกัน

หากคุณวางแผนที่จะทำงานบนอุปกรณ์พกพาหรือในเบราว์เซอร์เท่านั้น ให้เลือก "คุณต้องการอุปกรณ์ที่มีหน้าจอ"

จากนั้น ป้อนการตั้งค่าสำหรับแค็ตตาล็อกทักษะของอลิซ หากคุณวางแผนที่จะใช้คำว่า "แบรนด์" เพื่อเปิดใช้งาน คุณต้องยืนยันเว็บไซต์ของแบรนด์ในบริการ webmaster.yandex.ru

Yandex.Alisa และ Telegram bot ใน 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

ทีนี้มาดูสคริปต์ของ Alice กัน มันเกือบจะเหมือนกับของ Telegram

นอกจากนี้ เรายังเชื่อมต่อไลบรารีซึ่งข้อความจากบอทและอลิซจะได้รับการประมวลผล รวมถึงไลบรารีที่มีคลาสสำหรับอลิซ:

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 - รหัสผู้ใช้ที่นี่

ยานเดกซ์ส่ง Ping ทักษะที่เผยแพร่อย่างต่อเนื่อง และฉันได้เพิ่มบรรทัดเพื่อออกจากสคริปต์ทันทีโดยไม่ต้องเริ่มประมวลผลข้อความทั้งหมด:

  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

ที่จริงแล้วนี่คือเกือบทุกอย่างหากทุกอย่างถูกต้องแสดงว่ามีบอทโทรเลขอยู่แล้วสามารถตรวจสอบทักษะของอลิซได้ กล่องโต้ตอบ.yandex.ru/ผู้พัฒนาโดยไปที่ทักษะใหม่ของคุณบนแท็บการทดสอบ

Yandex.Alisa และ Telegram bot ใน PHP ที่มีฟังก์ชันการทำงานเหมือนกัน

หากทุกอย่างทำงานได้ถูกต้อง คุณสามารถส่งทักษะเพื่อกลั่นกรองได้โดยคลิกปุ่ม "เพื่อกลั่นกรอง"

ตอนนี้คุณมีบอทสองตัวสำหรับแพลตฟอร์มต่างๆ ในคราวเดียว ซึ่งทำงานในลักษณะเดียวกัน

เอกสารสำหรับบริการ Yandex.Dialogues ที่นี่

สคริปต์แบบเต็มโพสต์บน GitHub ดาวน์โหลด.

ที่มา: will.com

เพิ่มความคิดเห็น