שָׁלוֹם.
יש הרבה מאמרים בנושא בוטים של טלגרם, אבל מעט אנשים כותבים על מיומנויות עבור אליס, ולא מצאתי שום מידע על איך ליצור בוט בודד, אז החלטתי לשתף את הניסיון שלי על איך ליצור בוט בודד. בוט טלגרם פשוט ומיומנות 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 , לחץ שם "צור דיאלוג" ובחר "מיומנות באליס".

תיפתח תיבת הדו-שיח של הגדרות המיומנות.

אנו מתחילים להיכנס להגדרות המיומנות.
הזן את שם המיומנות שלך.

יש לבחור את שם ההפעלה בקפידה רבה כדי שאליס תבין אותו נכון, מתוך הניואנסים - אפליקציה סלולרית עם אליס ועמודות כמו 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 לעיבוד, היא זהה ל-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.Dialogues
סקריפטים מלאים שפורסמו ב-github .
מקור: www.habr.com
