Bonan tagon.
Estas multaj artikoloj pri la temo de Telegram-botoj, sed malmultaj homoj skribas pri kapabloj por Alico, kaj mi ne trovis ajnan informon pri kiel fari ununuran roboton, do mi decidis kunhavigi mian sperton pri kiel fari. simpla Telegram-bot kaj la lerteco Yandex.Alice por la retejo havanta la saman funkcion.
Do, mi ne diros al vi kiel levi retservilon kaj akiri ssl-atestilon, sufiĉe estas skribita pri ĝi.
Kreante Telegram-bot
Unue, ni kreu Telegram-bot, por tio ni iras al Telegram kaj trovas la BotFather-bot tie.
Elektu /newbot
Ni enmetas la nomon de la bot, per kiu ĝi respondos, tiam ni enmetas la nomon de la bot, responde ni ricevas ĵetonon por kontroli la bot, ni skribas ĉi tiun ŝlosilon, ĝi estos utila al ni estonte.
La sekva paŝo estas diri al la Telegram-serviloj al kiu servilo sendi datumojn de la bot. Por fari tion, ni faras ligilon de la formo:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ ni anstataŭigas per nia ĵetono de la bot, ricevita pli frue
____PATH_TO_SCRIPT__ ni anstataŭigas per la adreso de la skripto sur nia servilo kie la datumoj estos prilaboritaj (ekzemple,
Estas problemo ĉi tie, la servilo api.telegram.org estas blokita, sed vi povas fari ĉi tion: luu la plej malmultekostan servilon kie ne estas limigoj kaj donu la komandon de la konzolo de ĉi tiu servilo.
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Jen ĝi, la Telegram-bot estas kreita kaj konektita al via servilo.
Krei kapablon por Yandex.Alisa
Ni daŭrigu krei kapablon por Yandex.Alice.
Por krei kapablon, vi devas iri al la paĝo de programistoj de Yandex.Dialogues
La dialogo pri lertaj agordoj malfermiĝos.
Ni komencas eniri la lertajn agordojn.
Enigu la nomon de via lerteco.
La aktivignomo devas esti elektita tre zorge, por ke Alice komprenu ĝin ĝuste, el la nuancoj - poŝtelefona aplikaĵo kun Alice kaj kolumnoj kiel Yandex.Station aŭ Irbis A povas percepti vortojn malsame.
Ni eniras la vojon al la skripto en nia servilo same kiel por Telegramo, sed ĝi estos skripto specife por Alice, ekzemple
Ni elektas la voĉon, per kiu la lerteco parolos, mi pli ŝatas la voĉon de Alico.
Se vi planas labori nur sur porteblaj aparatoj aŭ en retumilo, tiam elektu "Vi bezonas aparaton kun ekrano".
Poste, enigu la agordojn por la katalogo pri kapabloj de Alice. Se vi planas uzi la vorton "marko" por aktivigo, vi devas kontroli la retejon de la marko en la servo webmaster.yandex.ru.
Tio estas ĉio kun la agordoj, ni pluiru al la skriptoj.
Telegram-bot-skripto
Ni komencu per skripto por Telegramo.
Ni konektas la bibliotekon, kie mesaĝoj de la bot kaj Alice estos procesitaj:
include_once 'webhook_parse.php';
Ni starigas la ĵetonon de nia bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Ni ricevas datumojn:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analizante la datumojn en variablojn:
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);
}
Nun vi povas labori kun variabloj:
$tokens - jen nun ĉiuj vortoj, kiujn la uzanto enigis
$user_id - uzanto-identigilo ĉi tie
$msg_chat_id - babilejo en kiu la bot ricevis la komandon
$msg_user_name - uzantnomo
Poste ni nomas la funkcion Parse_Tokens por prilaborado:
$Out_Str = Parse_Tokens($tokens);
Kaj sendu respondon:
Send_Out($user_id, $Out_Str);
la Send_Out-funkcio estas simpla kaj aspektas jene:
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);
}
Kapabla skripto por Yandex.Alisa
Nun ni transiru al la skripto por Alico, ĝi estas preskaŭ sama kiel por Telegramo.
Ni ankaŭ konektas la bibliotekon, kie mesaĝoj de la roboto kaj Alice estos procesitaj, krom biblioteko kun klasoj por Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Ni ricevas datumojn:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analizante la datumojn en variablojn:
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'];}
}
}
Estas kelkaj malpli da variabloj ĉi tie:
$tokens - jen nun ĉiuj vortoj, kiujn la uzanto enigis
$user_id - uzanto-identigilo ĉi tie
Yandex konstante pingas publikigitajn kapablojn, kaj mi aldonis linion por tuj eliri la skripton sen komenci la plenan prilaboradon de la mesaĝo:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Ni nomas la funkcion Parse_Tokens por prilaborado, ĝi estas la sama kiel por Telegram:
$Out_Str = Parse_Tokens($tokens);
Kaj sendu respondon:
Send_Out($user_id, $Out_Str);
La funkcio Send_Out estas pli komplika ĉi tie:
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();
}
Finis la manuskripton por Alice.
La skripto de prilaborado de Parse_Tokens mem estis farita nur por ekzemplo, vi povas fari ajnajn kontrolojn kaj prilaboradon tie.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Se vi bezonas komuniki kun uzanto de pli kompleksa formo ol demando-respondo, tiam vi devos konservi $user_id de la uzanto kaj la datumojn jam ricevitajn de la uzanto en la datumbazo (ekzemple, mysql) kaj analizi ilin en la funkcio Parse_Tokens.
Efektive, ĉi tio estas preskaŭ ĉio, se ĉio estas farita ĝuste, tiam la Telegram-bot jam disponeblas, la lerteco de Alice povas esti kontrolita.
Se ĉio funkcias ĝuste, vi povas sendi la kapablon por moderigo alklakante la butonon "Por moderigo".
Nun vi havas du robotojn por malsamaj platformoj samtempe, kiuj funkcias en la sama maniero.
Dokumentado por la servo Yandex.Dialogues
Plenaj skriptoj afiŝitaj sur github
fonto: www.habr.com