Hyvää päivää.
Telegram-boteista on paljon artikkeleita, mutta harvat kirjoittavat taidoista Alicelle, enkä löytänyt mitään tietoa yhden botin tekemisestä, joten päätin jakaa kokemukseni siitä, miten yksinkertainen Telegram-botti ja Yandex.Alice-taito sivustolle, jolla on samat toiminnot.
Joten en kerro sinulle kuinka nostaa verkkopalvelin ja saada ssl-varmenne, siitä on kirjoitettu tarpeeksi.
Telegram-botin luominen
Ensin luodaan Telegram-botti, tätä varten menemme Telegramiin ja löydämme sieltä BotFather-botin.
Valitse /newbot
Annamme botin nimen, jolla se vastaa, kirjoitamme sitten botin nimen, vastauksena saamme tunnuksen botin hallitsemiseksi, kirjoitamme tämän avaimen muistiin, se on hyödyllinen meille tulevaisuudessa.
Seuraava vaihe on kertoa Telegram-palvelimille, mille palvelimelle tiedot lähetetään robotista. Tätä varten teemme linkin lomakkeeseen:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ korvaamme aiemmin vastaanotetulla botin tunnuksellamme
____PATH_TO_SCRIPT____ korvaamme sen komentosarjan osoitteella palvelimellamme, jossa tietoja käsitellään (esim.
Tässä on ongelma, api.telegram.org-palvelin on estetty, mutta voit tehdä tämän: vuokraa halvin palvelin, jossa ei ole rajoituksia ja anna komento tämän palvelimen konsolista
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Siinä kaikki, Telegram-botti luodaan ja yhdistetään palvelimeesi.
Taidon luominen Yandex.Alisalle
Jatketaan Yandex.Alice-taidon luomista.
Luodaksesi taidon, sinun on mentävä Yandex.Dialogues-kehittäjien sivulle
Taitoasetusten valintaikkuna avautuu.
Aloitamme taitoasetusten syöttämisen.
Kirjoita taitosi nimi.
Aktivointinimi tulee valita erittäin huolellisesti, jotta Alice ymmärtää sen oikein, vivahteiden perusteella - mobiilisovellus, jossa on Alice ja sarakkeet, kuten Yandex.Station tai Irbis A, voivat havaita sanat eri tavalla.
Kirjoitamme palvelimellamme olevan skriptin polun samalla tavalla kuin Telegramille, mutta se on esimerkiksi Alicelle tarkoitettu komentosarja
Valitsemme äänen, jolla taito puhuu, pidän Alicen äänestä enemmän.
Jos aiot työskennellä vain mobiililaitteilla tai selaimella, valitse "Tarvitset laitteen, jossa on näyttö".
Syötä seuraavaksi Alicen taitoluettelon asetukset. Jos aiot käyttää aktivointiin sanaa "brändi", sinun on vahvistettava brändin verkkosivusto webmaster.yandex.ru-palvelussa.
Siinä kaikki asetuksissa, siirrytään skripteihin.
Telegram-botin käsikirjoitus
Aloitetaan Telegramin käsikirjoituksella.
Yhdistämme kirjaston, jossa botin ja Alicen viestit käsitellään:
include_once 'webhook_parse.php';
Asetamme bottimme tunnuksen:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Saamme dataa:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Tietojen jäsentäminen muuttujiksi:
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);
}
Nyt voit työskennellä muuttujien kanssa:
$tokens - tässä ovat nyt kaikki käyttäjän kirjoittamat sanat
$user_id - käyttäjätunnus tässä
$msg_chat_id - keskustelu, jossa botti sai komennon
$msg_user_name - käyttäjänimi
Seuraavaksi kutsumme Parse_Tokens-funktiota käsittelyä varten:
$Out_Str = Parse_Tokens($tokens);
Ja lähetä vastaus:
Send_Out($user_id, $Out_Str);
Send_Out-toiminto on yksinkertainen ja näyttää tältä:
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);
}
Taitokäsikirjoitus Yandex.Alisalle
Siirrytään nyt Alicen käsikirjoitukseen, se on melkein sama kuin Telegramissa.
Yhdistämme myös kirjaston, jossa botin ja Alicen viestit käsitellään, sekä kirjaston, jossa on Alice-luokkia:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Saamme dataa:
$data = json_decode(trim(file_get_contents('php://input')), true);
Tietojen jäsentäminen muuttujiksi:
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'];}
}
}
Tässä on muutama muuttuja vähemmän:
$tokens - tässä ovat nyt kaikki käyttäjän kirjoittamat sanat
$user_id - käyttäjätunnus tässä
Yandex pingaa jatkuvasti julkaistuja taitoja, ja lisäsin rivin, jolla poistutaan komentosarjasta välittömästi aloittamatta viestin täyttä käsittelyä:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kutsumme käsittelyä varten Parse_Tokens-funktiota, se on sama kuin Telegramissa:
$Out_Str = Parse_Tokens($tokens);
Ja lähetä vastaus:
Send_Out($user_id, $Out_Str);
Send_Out-toiminto on monimutkaisempi tässä:
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();
}
Alicen käsikirjoitus on valmis.
Itse Parse_Tokens-käsittelyskripti on tehty puhtaasti esimerkkiä varten, siellä voi tehdä mitä tahansa tarkistuksia ja käsittelyä.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Jos haluat kommunikoida käyttäjän kanssa monimutkaisemmassa muodossa kuin kysymys-vastaus, sinun on tallennettava käyttäjän $user_id ja käyttäjältä jo vastaanotetut tiedot tietokantaan (esim. mysql) ja analysoitava ne Parse_Tokens-funktio.
Itse asiassa tämä on melkein kaikki, jos kaikki on tehty oikein, Telegram-botti on jo saatavilla, Alicen taidot voidaan tarkistaa
Jos kaikki toimii oikein, voit lähettää taidon moderointiin napsauttamalla "Moderointiin" -painiketta.
Nyt sinulla on kaksi bottia eri alustoille kerralla, jotka toimivat samalla tavalla.
Yandex.Dialogues-palvelun dokumentaatio
Täydelliset skriptit on julkaistu githubissa
Lähde: will.com