Tere päevast.
Telegrami robotite teemal on palju artikleid, kuid vähesed inimesed kirjutavad Alice'i oskustest ja ma ei leidnud ühtegi teavet selle kohta, kuidas ühte robotit teha, seega otsustasin jagada oma kogemusi, kuidas lihtne Telegrami robot ja Yandex.Alice'i oskus saidi jaoks, millel on samad funktsioonid.
Niisiis, ma ei räägi teile, kuidas veebiserverit kasvatada ja ssl-sertifikaati hankida, sellest on kirjutatud piisavalt.
Telegrami roboti loomine
Kõigepealt loome Telegrami roboti, selleks läheme Telegrami ja leiame sealt BotFatheri roboti.
Valige /newbot
Sisestame boti nime, millega see reageerib, seejärel sisestame boti nime, vastuseks saame boti juhtimiseks märgi, kirjutame selle võtme üles, see on meile tulevikus kasulik.
Järgmine samm on öelda Telegrami serveritele, millisesse serverisse robotist andmed saata. Selleks loome vormi lingi:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ asendame oma varem saadud boti märgiga
____PATH_TO_SCRIPT____ asendame selle skripti aadressiga meie serveris, kus andmeid töödeldakse (näiteks
Siin on probleem, api.telegram.org server on blokeeritud, kuid saate seda teha: rentige odavaim server, kus pole piiranguid ja andke käsk selle serveri konsoolist
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
See on kõik, Telegrami bot luuakse ja ühendatakse teie serveriga.
Oskuste loomine Yandex.Alisa jaoks
Jätkame Yandex.Alice'i oskuste loomisega.
Oskuste loomiseks peate minema Yandex.Dialogues arendajate lehele
Avaneb oskuste seadete dialoog.
Alustame oskuste seadete sisestamist.
Sisestage oma oskuse nimi.
Aktiveerimisnimi tuleks valida väga hoolikalt, et Alice sellest nüanssidest õigesti aru saaks - Alice'iga mobiilirakendus ja veerud nagu Yandex.Station või Irbis A suudavad sõnu erinevalt tajuda.
Sisestame oma serveris oleva skripti tee samamoodi nagu Telegrami jaoks, kuid see on näiteks spetsiaalselt Alice'i jaoks mõeldud skript
Valime hääle, millega oskus kõnelema hakkab, mulle meeldib Alice'i hääl rohkem.
Kui kavatsete töötada ainult mobiilseadmetes või brauseris, valige "Teil on vaja ekraaniga seadet".
Järgmisena sisestage Alice'i oskuste kataloogi seaded. Kui kavatsete aktiveerimiseks kasutada sõna "bränd", peate teenuses webmaster.yandex.ru kontrollima kaubamärgi veebisaiti.
See on kõik seadetega, liigume edasi skriptide juurde.
Telegrami roboti skript
Alustame Telegrami skriptiga.
Ühendame raamatukogu, kus töödeldakse roboti ja Alice'i sõnumeid:
include_once 'webhook_parse.php';
Seadsime oma roboti märgi:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Saame andmeid:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Andmete sõelumine muutujateks:
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);
}
Nüüd saate muutujatega töötada:
$tokens – siin on nüüd kõik kasutaja sisestatud sõnad
$user_id – kasutaja ID siin
$msg_chat_id – vestlus, milles bot sai käsu
$msg_user_name – kasutajanimi
Järgmisena kutsume töötlemiseks funktsiooni Parse_Tokens:
$Out_Str = Parse_Tokens($tokens);
Ja saatke vastus:
Send_Out($user_id, $Out_Str);
funktsioon Send_Out on lihtne ja näeb välja selline:
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 oskusskript
Liigume nüüd Alice'i skripti juurde, see on peaaegu sama, mis Telegrami puhul.
Ühendame ka raamatukogu, kus töödeldakse roboti ja Alice'i sõnumeid, ning teegi Alice'i klassidega:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Saame andmeid:
$data = json_decode(trim(file_get_contents('php://input')), true);
Andmete sõelumine muutujateks:
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'];}
}
}
Siin on mõned muutujad vähem:
$tokens – siin on nüüd kõik kasutaja sisestatud sõnad
$user_id – kasutaja ID siin
Yandex pingib pidevalt avaldatud oskusi ja lisasin rea, et kohe skriptist väljuda ilma sõnumi täielikku töötlemist alustamata:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kutsume töötlemiseks funktsiooni Parse_Tokens, see on sama, mis Telegrami puhul:
$Out_Str = Parse_Tokens($tokens);
Ja saatke vastus:
Send_Out($user_id, $Out_Str);
Funktsioon Send_Out on siin keerulisem:
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();
}
Lõpetas Alice'i stsenaariumi.
Parse_Tokensi töötlemise skript ise on tehtud puhtalt näite jaoks, seal saab teha mis tahes kontrolle ja töötlemist.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Kui teil on vaja suhelda mõne keerulisema vormiga kui küsimus-vastus kasutajaga, siis tuleb kasutaja $user_id ja kasutajalt juba saadud andmed andmebaasi salvestada (näiteks mysql) ja analüüsida funktsioon Parse_Tokens.
Tegelikult on see peaaegu kõik, kui kõik on õigesti tehtud, on Telegrami bot juba saadaval, Alice'i oskusi saab kontrollida
Kui kõik töötab õigesti, saate oskuse modereerimiseks saata, klõpsates nuppu "Modereerimiseks".
Nüüd on teil korraga kaks robotit erinevatele platvormidele, mis töötavad samal viisil.
Teenuse Yandex.Dialogues dokumentatsioon
Täielikud skriptid postitatud githubisse
Allikas: www.habr.com