Alus poé.
Aya seueur tulisan ngeunaan topik bot Telegram, tapi sababaraha urang nyerat ngeunaan kaahlian pikeun Alice, sareng kuring henteu mendakan inpormasi ngeunaan cara ngadamel bot tunggal, janten kuring mutuskeun pikeun ngabagi pangalaman kuring ngeunaan cara ngadamel bot. bot Telegram basajan jeung skill Yandex.Alice pikeun situs ngabogaan pungsionalitas sarua.
Janten, kuring moal nyarioskeun ka anjeun kumaha carana ngangkat pangladén wéb sareng kéngingkeun sertipikat SSL, cekap parantos ditulis ngeunaan éta.
Nyiptakeun bot Telegram
Mimiti, hayu urang ngadamel bot Telegram, pikeun ieu urang angkat ka Telegram sareng milarian bot BotFather di dinya.
Pilih /newbot
Urang asupkeun nami bot ku nu eta bakal ngabales, lajeng urang asupkeun ngaran bot, dina respon urang meunang token ngadalikeun bot, urang nulis handap konci ieu, éta bakal mangpaat pikeun urang dina mangsa nu bakal datang.
Léngkah salajengna nyaéta nyarioskeun ka server Telegram mana server anu ngirim data tina bot. Jang ngalampahkeun ieu, urang nyieun link formulir:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ urang ngaganti ku token urang ti bot, narima saméméhna
____PATH_TO_SCRIPT____ kami ganti ku alamat naskah dina server kami dimana data bakal diolah (contona,
Aya masalah di dieu, server api.telegram.org diblokir, tapi anjeun tiasa ngalakukeun ieu: nyéwa server anu paling murah dimana teu aya larangan sareng masihan paréntah ti konsol server ieu.
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Éta waé, bot Telegram didamel sareng nyambung ka server anjeun.
Nyiptakeun kaahlian pikeun Yandex.Alisa
Hayu urang ngaléngkah ka nyieun kaahlian pikeun Yandex.Alice.
Pikeun nyiptakeun kaahlian, anjeun kedah angkat ka halaman pamekar Yandex.Dialogues
Dialog setélan skill bakal muka.
Urang ngawitan asupkeun setélan skill.
Lebetkeun nami skill Anjeun.
Ngaran aktivasina kedah dipilih taliti pisan supados Alice ngartos leres, tina nuansa - aplikasi mobile sareng Alice sareng kolom sapertos Yandex.Station atanapi Irbis A tiasa ningali kecap-kecap anu béda.
Kami asupkeun jalur kana skrip dina server kami dina cara anu sami sareng Telegram, tapi éta bakal janten naskah khusus pikeun Alice, contona.
Urang milih sora nu skill bakal nyarita, Kuring leuwih resep sora Alice urang.
Upami anjeun ngarencanakeun damel ngan ukur dina alat sélulér atanapi dina browser, teras pilih "Anjeun peryogi alat anu nganggo layar."
Salajengna, lebetkeun setélan pikeun katalog kaahlian Alice. Upami anjeun badé nganggo kecap "merk" pikeun aktivasina, anjeun kedah pariksa situs wéb merek dina jasa webmaster.yandex.ru.
Éta sadayana sareng setélan, hayu urang teraskeun kana naskah.
Aksara bot Telegram
Hayu urang mimitian ku skrip pikeun Telegram.
Kami nyambungkeun perpustakaan tempat pesen ti bot sareng Alice bakal diolah:
include_once 'webhook_parse.php';
Kami nyetél token bot kami:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Kami nampi data:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Parsing data kana variabel:
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);
}
Ayeuna anjeun tiasa damel sareng variabel:
$tokens - ayeuna aya sadaya kecap anu diasupkeun ku pangguna
$user_id - id pamaké dieu
$msg_chat_id - obrolan dimana bot nampi paréntahna
$msg_user_name - ngaran pamaké
Salajengna, urang nyauran fungsi Parse_Tokens pikeun ngolah:
$Out_Str = Parse_Tokens($tokens);
Sareng kirimkeun réspon:
Send_Out($user_id, $Out_Str);
fungsi Send_Out saderhana sareng sapertos kieu:
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);
}
Aksara skill pikeun Yandex.Alisa
Ayeuna hayu urang teraskeun kana naskah pikeun Alice, éta ampir sami sareng Telegram.
Kami ogé nyambungkeun perpustakaan tempat pesen ti bot sareng Alice bakal diolah, ditambah perpustakaan kalayan kelas pikeun Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Kami nampi data:
$data = json_decode(trim(file_get_contents('php://input')), true);
Parsing data kana variabel:
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'];}
}
}
Aya sababaraha variabel pangsaeutikna di dieu:
$tokens - ayeuna aya sadaya kecap anu diasupkeun ku pangguna
$user_id - id pamaké dieu
Yandex terus-terusan ping kaahlian anu diterbitkeun, sareng kuring nambihan garis pikeun langsung kaluar tina naskah tanpa ngamimitian ngolah pinuh pesen:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Kami nyauran fungsi Parse_Tokens pikeun ngolah, éta sami sareng Telegram:
$Out_Str = Parse_Tokens($tokens);
Sareng kirimkeun réspon:
Send_Out($user_id, $Out_Str);
Fungsi Send_Out langkung rumit di dieu:
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();
}
Réngsé naskah pikeun Alice.
Aksara processing Parse_Tokens sorangan dijieun murni pikeun conto, anjeun tiasa ngalakukeun sagala cék jeung ngolah aya.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Upami anjeun kedah komunikasi sareng pangguna dina bentuk anu langkung kompleks tibatan patarosan-jawaban, maka anjeun kedah nyimpen $user_id pangguna sareng data anu parantos nampi ti pangguna dina pangkalan data (contona, mysql) sareng nganalisisna dina fungsi Parse_Tokens.
Sabenerna, ieu ampir sadayana, upami sadayana dilakukeun leres, maka bot Telegram parantos sayogi, kamampuan Alice tiasa dipariksa
Lamun sagalana jalan neuleu, Anjeun bisa ngirim skill keur moderation ku ngaklik "Kanggo moderation" tombol.
Ayeuna anjeun gaduh dua bot pikeun platform anu béda sakaligus, anu dianggo dina cara anu sami.
Dokuméntasi pikeun jasa Yandex.Dialogues
Skrip lengkep dipasang dina github
sumber: www.habr.com