Goeie middag.
Daar is baie artikels oor die onderwerp van Telegram-bots, maar min mense skryf oor vaardighede vir Alice, en ek het geen inligting gekry oor hoe om 'n enkele bot te maak nie, so ek het besluit om my ervaring te deel oor hoe om 'n eenvoudige Telegram-bot en die Yandex.Alice-vaardigheid vir die webwerf wat dieselfde funksionaliteit het.
So, ek sal jou nie vertel hoe om 'n webbediener op te rig en 'n ssl-sertifikaat te kry nie, daar is genoeg daaroor geskryf.
Skep 'n Telegram-bot
Kom ons skep eers 'n Telegram-bot, hiervoor gaan ons na Telegram en vind die BotFather-bot daar.
Kies /newbot
Ons voer die naam van die bot in waarmee dit sal reageer, dan voer ons die naam van die bot in, in reaksie kry ons 'n teken om die bot te beheer, ons skryf hierdie sleutel neer, dit sal vir ons nuttig wees in die toekoms.
Die volgende stap is om die Telegram-bedieners te vertel na watter bediener data vanaf die bot moet stuur. Om dit te doen, maak ons ββ'n skakel van die vorm:
https: //api.telegram.org/bot___Π’ΠΠΠΠ___/setWebhook?url=https://____ΠΠ£Π’Π¬_ΠΠ_Π‘ΠΠ ΠΠΠ’Π___
___TOKEN___ vervang ons met ons teken van die bot, wat vroeΓ«r ontvang is
____PATH_TO_SCRIPT____ vervang ons met die adres van die skrip op ons bediener waar die data verwerk sal word (byvoorbeeld,
Daar is 'n probleem hier, die api.telegram.org-bediener word geblokkeer, maar jy kan dit doen: huur die goedkoopste bediener waar daar geen beperkings is nie en gee die opdrag vanaf die konsole van hierdie bediener
wget ___ΠΠΠΠ£Π§ΠΠΠ¨ΠΠΠ‘Π―_ΠΠΠ ΠΠ‘___
Dit is dit, die Telegram-bot word geskep en aan jou bediener gekoppel.
Skep 'n vaardigheid vir Yandex.Alisa
Kom ons gaan voort om 'n vaardigheid vir Yandex.Alice te skep.
Om 'n vaardigheid te skep, moet jy na die Yandex.Dialogues-ontwikkelaarsbladsy gaan
Die dialoog vir vaardigheidsinstellings sal oopmaak.
Ons begin om die vaardigheidsinstellings in te voer.
Voer die naam van jou vaardigheid in.
Die aktiveringsnaam moet baie versigtig gekies word sodat Alice dit reg verstaan, uit die nuanses - 'n mobiele toepassing met Alice en kolomme soos Yandex.Station of Irbis A kan woorde anders waarneem.
Ons voer die pad na die script op ons bediener in op dieselfde manier as vir Telegram, maar dit sal 'n script spesifiek vir Alice wees, byvoorbeeld
Ons kies die stem waarmee die vaardigheid sal praat, ek hou meer van Alice se stem.
As jy van plan is om net op mobiele toestelle of in 'n blaaier te werk, kies dan "Jy benodig 'n toestel met 'n skerm."
Voer dan die instellings vir Alice se vaardigheidskatalogus in. As jy van plan is om die woord "handelsmerk" vir aktivering te gebruik, moet jy die handelsmerk se webwerf in die webmaster.yandex.ru-diens verifieer.
Dit is alles met die instellings, kom ons gaan aan na die skrifte.
Telegram bot skrif
Kom ons begin met 'n draaiboek vir Telegram.
Ons verbind die biblioteek waar boodskappe van die bot en Alice verwerk sal word:
include_once 'webhook_parse.php';
Ons stel die teken van ons bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Ons ontvang data:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Ontleding van die data in veranderlikes:
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);
}
Nou kan jy met veranderlikes werk:
$tokens - hier is nou al die woorde wat die gebruiker ingevoer het
$user_id - gebruiker-ID hier
$msg_chat_id - klets waarin die bot die opdrag ontvang het
$msg_user_name - gebruikernaam
Vervolgens noem ons die Parse_Tokens-funksie vir verwerking:
$Out_Str = Parse_Tokens($tokens);
En stuur 'n antwoord:
Send_Out($user_id, $Out_Str);
die Send_Out-funksie is eenvoudig en lyk soos volg:
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);
}
Vaardigheidskrip vir Yandex.Alisa
Kom ons gaan nou oor na die draaiboek vir Alice, dit is amper dieselfde as vir Telegram.
Ons verbind ook die biblioteek waar boodskappe van die bot en Alice verwerk sal word, plus 'n biblioteek met klasse vir Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Ons ontvang data:
$data = json_decode(trim(file_get_contents('php://input')), true);
Ontleding van die data in veranderlikes:
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'];}
}
}
Daar is 'n paar minder veranderlikes hier:
$tokens - hier is nou al die woorde wat die gebruiker ingevoer het
$user_id - gebruiker-ID hier
Yandex ping voortdurend gepubliseerde vaardighede, en ek het 'n reΓ«l bygevoeg om die skrif onmiddellik te verlaat sonder om die volle verwerking van die boodskap te begin:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Ons noem die Parse_Tokens-funksie vir verwerking, dit is dieselfde as vir Telegram:
$Out_Str = Parse_Tokens($tokens);
En stuur 'n antwoord:
Send_Out($user_id, $Out_Str);
Die Send_Out-funksie is hier meer ingewikkeld:
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();
}
Het die draaiboek vir Alice voltooi.
Die Parse_Tokens-verwerkingskrip self is bloot vir 'n voorbeeld gemaak, u kan enige kontrole en verwerking daar doen.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
As jy met 'n gebruiker van 'n meer komplekse vorm as 'n vraag-antwoord moet kommunikeer, dan sal jy die gebruiker se $user_id en die data wat reeds van die gebruiker ontvang is in die databasis moet stoor (byvoorbeeld, mysql) en dit moet ontleed in die Parse_Tokens-funksie.
Eintlik is dit amper alles, as alles korrek gedoen word, dan is die Telegram-bot reeds beskikbaar, Alice se vaardigheid kan nagegaan word
As alles reg werk, kan jy die vaardigheid vir moderering stuur deur op die "Vir moderering"-knoppie te klik.
Nou het jy twee bots vir verskillende platforms gelyktydig, wat op dieselfde manier werk.
Dokumentasie vir die Yandex.Dialogues-diens
Volledige skrifte geplaas op github
Bron: will.com