Jó napot kívánok.
Nagyon sok cikk van a távirati botok témájában, de kevesen írnak Alice készségeiről, és nem találtam információt arról, hogyan készítsünk egyetlen botot, ezért úgy döntöttem, megosztom tapasztalataimat egy egyszerű Telegram bot és az azonos funkciójú webhely Yandex.Alice készsége.
Tehát nem árulom el, hogyan kell webszervert emelni és ssl tanúsítványt szerezni, eleget írtak róla.
Telegram bot létrehozása
Először hozzunk létre egy Telegram botot, ehhez megyünk a Telegramba, és ott megkeressük a BotFather botot.
Válassza a /newbot lehetőséget
Beírjuk a bot nevét, amivel válaszol, majd beírjuk a bot nevét, válaszul kapunk egy tokent a bot vezérléséhez, ezt a kulcsot felírjuk, hasznos lesz a jövőben.
A következő lépésben meg kell mondani a Telegram szervereknek, hogy melyik szerverre küldjön adatokat a bottól. Ehhez létrehozunk egy linket az űrlaphoz:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ a korábban kapott, a botból származó tokenünkre cseréljük
____PATH_TO_SCRIPT____ lecseréljük a szerverünkön lévő szkript címére, ahol az adatokat feldolgozzuk (például
Itt van egy probléma, az api.telegram.org szerver blokkolva van, de ezt megteheti: bérelje ki a legolcsóbb szervert, ahol nincs korlátozás, és adja ki a parancsot ennek a szervernek a konzoljáról
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Ez az, a Telegram bot létrejön és csatlakozik a szerveréhez.
Készség létrehozása a Yandex.Alisa számára
Lépjünk tovább a Yandex.Alice készség létrehozására.
Készség létrehozásához fel kell lépnie a Yandex.Dialogues fejlesztői oldalra
Megnyílik a készségbeállítások párbeszédpanel.
Elkezdjük megadni a készségbeállításokat.
Írd be a képességed nevét.
Az aktiválási nevet nagyon körültekintően kell megválasztani, hogy Alice helyesen értse, az árnyalatokból - az Alice-t tartalmazó mobilalkalmazás és az olyan oszlopok, mint a Yandex.Station vagy az Irbis A, másképp érzékelhetik a szavakat.
A szerverünkön lévő szkript elérési útját ugyanúgy megadjuk, mint a Telegram esetében, de ez például egy kifejezetten Alice-nek szánt szkript lesz.
Mi választjuk ki a hangot, amivel a készség megszólal, nekem Alice hangja jobban tetszik.
Ha csak mobileszközökön vagy böngészőben kíván dolgozni, válassza a „Képernyős eszközre van szüksége” lehetőséget.
Ezután adja meg Alice képességkatalógusának beállításait. Ha azt tervezi, hogy a „márka” szót használja az aktiváláshoz, ellenőriznie kell a márka webhelyét a webmaster.yandex.ru szolgáltatásban.
A beállításokkal ennyi, térjünk át a szkriptekre.
Telegram bot szkript
Kezdjük a Telegram forgatókönyvével.
Összekapcsoljuk a könyvtárat, ahol a bottól és Alice-től érkező üzenetek feldolgozásra kerülnek:
include_once 'webhook_parse.php';
Beállítjuk a botunk tokenjét:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Adatokat kapunk:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Az adatok elemzése változókra:
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);
}
Most már dolgozhat a változókkal:
$tokens – itt van a felhasználó által beírt összes szó
$user_id – felhasználói azonosító itt
$msg_chat_id - csevegés, amelyben a bot megkapta a parancsot
$msg_user_name - felhasználónév
Ezután meghívjuk a Parse_Tokens függvényt feldolgozásra:
$Out_Str = Parse_Tokens($tokens);
És küldj választ:
Send_Out($user_id, $Out_Str);
a Send_Out függvény egyszerű, és így néz ki:
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);
}
Ügyességi szkript a Yandex.Alisa számára
Most térjünk át az Alice forgatókönyvére, ez majdnem ugyanaz, mint a Telegram esetében.
Összekapcsoljuk a könyvtárat is, ahol a bottól és Alice-től érkező üzenetek feldolgozásra kerülnek, valamint egy könyvtárat Alice osztályokkal:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Adatokat kapunk:
$data = json_decode(trim(file_get_contents('php://input')), true);
Az adatok elemzése változókra:
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'];}
}
}
Itt van néhány változó:
$tokens – itt van a felhasználó által beírt összes szó
$user_id – felhasználói azonosító itt
A Yandex folyamatosan pingeli a közzétett készségeket, és hozzáadtam egy sort, amely azonnal kilép a szkriptből anélkül, hogy elkezdené az üzenet teljes feldolgozását:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Feldolgozásra a Parse_Tokens függvényt hívjuk, ez ugyanaz, mint a Telegram esetében:
$Out_Str = Parse_Tokens($tokens);
És küldj választ:
Send_Out($user_id, $Out_Str);
A Send_Out függvény itt bonyolultabb:
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();
}
Befejezte Alice forgatókönyvét.
Maga a Parse_Tokens feldolgozó szkript pusztán példaként készült, ott bármilyen ellenőrzést és feldolgozást végezhet.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Ha a kérdés-válasznál összetettebb formájú felhasználóval kell kommunikálnia, akkor a felhasználó $user_id-jét és a felhasználótól már kapott adatokat el kell mentenie az adatbázisba (például mysql), és elemeznie kell azokat az adatbázisban. a Parse_Tokens függvény.
Tulajdonképpen ez szinte minden, ha minden rendben van, akkor a Telegram bot már elérhető, Alice ügyessége ellenőrizhető
Ha minden megfelelően működik, a „Moderáláshoz” gombra kattintva moderálásra küldheti a készséget.
Mostantól egyszerre két botja van különböző platformokhoz, amelyek ugyanúgy működnek.
A Yandex.Dialogues szolgáltatás dokumentációja
A teljes szkriptek megjelentek a githubon
Forrás: will.com