Góðan dag.
Það eru margar greinar um efnið Telegram vélmenni, en fáir skrifa um færni fyrir Alice, og ég fann engar upplýsingar um hvernig á að búa til einn vélmenni, svo ég ákvað að deila reynslu minni um hvernig á að búa til einfalt Telegram láni og Yandex.Alice færni fyrir síðuna sem hefur sömu virkni.
Svo ég mun ekki segja þér hvernig á að hækka vefþjón og fá ssl vottorð, nóg hefur verið skrifað um það.
Að búa til Telegram bot
Fyrst skulum við búa til Telegram láni, til þess förum við í Telegram og finnum BotFather botninn þar.
Veldu /newbot
Við sláum inn nafn botnsins sem hann mun svara með, síðan sláum við inn nafn botnsins, sem svar fáum við tákn til að stjórna botninum, við skrifum niður þennan lykil, hann mun nýtast okkur í framtíðinni.
Næsta skref er að segja Telegram netþjónum til hvaða netþjóns eigi að senda gögn frá botni. Til að gera þetta gerum við hlekk á eyðublaðinu:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ við skiptum út fyrir táknið okkar frá botni, sem var móttekið áðan
____PATH_TO_SCRIPT____ við skiptum út fyrir heimilisfang skriftunnar á þjóninum okkar þar sem gögnin verða unnin (til dæmis,
Það er vandamál hér, api.telegram.org miðlarinn er undir lokun, en þú getur gert þetta: leigðu ódýrasta netþjóninn þar sem engar takmarkanir eru og gefðu skipunina frá stjórnborði þessa netþjóns
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Það er það, Telegram botninn er búinn til og tengdur við netþjóninn þinn.
Að búa til færni fyrir Yandex.Alisa
Við skulum halda áfram að búa til færni fyrir Yandex.Alice.
Til að búa til hæfileika þarftu að fara á þróunarsíðu Yandex.Dialogues
Hæfnistillingarglugginn opnast.
Við byrjum að fara inn í færnistillingarnar.
Sláðu inn nafn kunnáttu þinnar.
Velja ætti virkjunarheitið mjög vandlega svo að Alice skilji það rétt, út frá blæbrigðum - farsímaforrit með Alice og dálkar eins og Yandex.Station eða Irbis A geta skynjað orð á annan hátt.
Við sláum inn slóðina að handritinu á netþjóninum okkar á sama hátt og fyrir Telegram, en það verður til dæmis handrit sérstaklega fyrir Alice.
Við veljum röddina sem kunnáttan mun tala með, mér líkar betur við rödd Alice.
Ef þú ætlar að vinna aðeins í fartækjum eða í vafra skaltu velja „Þú þarft tæki með skjá“.
Næst skaltu slá inn stillingar fyrir færnilista Alice. Ef þú ætlar að nota orðið "vörumerki" til að virkja, þarftu að staðfesta vefsíðu vörumerkisins í webmaster.yandex.ru þjónustunni.
Það er allt með stillingarnar, við skulum halda áfram að forskriftunum.
Telegram bot handrit
Byrjum á handriti fyrir Telegram.
Við tengjum bókasafnið þar sem skilaboð frá botni og Alice verða unnin:
include_once 'webhook_parse.php';
Við stillum tákn botnsins okkar:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Við fáum gögn:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Að flokka gögnin í breytur:
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ú er hægt að vinna með breytur:
$tokens - hér eru nú öll orðin sem notandinn sló inn
$user_id - notandaauðkenni hér
$msg_chat_id - spjall þar sem lánmaðurinn fékk skipunina
$msg_user_name - notendanafn
Næst köllum við Parse_Tokens aðgerðina til vinnslu:
$Out_Str = Parse_Tokens($tokens);
Og sendu svar:
Send_Out($user_id, $Out_Str);
Send_Out aðgerðin er einföld og lítur svona út:
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);
}
Færnihandrit fyrir Yandex.Alisa
Nú skulum við halda áfram að handritinu að Alice, það er nánast það sama og fyrir Telegram.
Við tengjum líka bókasafnið þar sem skilaboð frá botni og Alice verða unnin, auk bókasafns með flokkum fyrir Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Við fáum gögn:
$data = json_decode(trim(file_get_contents('php://input')), true);
Að flokka gögnin í breytur:
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'];}
}
}
Það eru nokkrar færri breytur hér:
$tokens - hér eru nú öll orðin sem notandinn sló inn
$user_id - notandaauðkenni hér
Yandex pingar stöðugt birta færni og ég bætti við línu til að hætta strax í handritinu án þess að hefja fulla vinnslu skilaboðanna:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Við köllum Parse_Tokens aðgerðina fyrir vinnslu, það er það sama og fyrir Telegram:
$Out_Str = Parse_Tokens($tokens);
Og sendu svar:
Send_Out($user_id, $Out_Str);
Send_Out aðgerðin er flóknari hér:
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();
}
Kláraði handritið að Alice.
Parse_Tokens vinnsluhandritið sjálft var eingöngu gert til dæmis, þú getur gert allar athuganir og vinnslu þar.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Ef þú þarft að eiga samskipti við notanda á flóknara formi en spurningu-svari, þá þarftu að vista $user_id notandans og gögnin sem þegar hafa borist frá notandanum í gagnagrunninum (til dæmis mysql) og greina þau í Parse_Tokens fallið.
Reyndar er þetta næstum allt, ef allt er gert á réttan hátt, þá er Telegram botninn þegar tiltækur, hægt er að athuga færni Alice
Ef allt virkar rétt geturðu sent hæfileikann til stjórnunar með því að smella á hnappinn „Til stjórnunar“.
Nú hefurðu tvo vélmenni fyrir mismunandi vettvang í einu, sem virka á sama hátt.
Skjöl fyrir Yandex.Dialogues þjónustuna
Heildarforskriftir birtar á github
Heimild: www.habr.com