Günortadan sonra yaxşı.
Telegram botları mövzusunda çoxlu məqalələr var, lakin çox az adam Alice üçün bacarıqlar haqqında yazır və mən tək bot yaratmaq haqqında heç bir məlumat tapa bilmədim, ona görə də öz təcrübəmi bölüşmək qərarına gəldim. sadə Telegram botu və eyni funksionallığa malik sayt üçün Yandex.Alice bacarığı.
Beləliklə, sizə veb serveri necə qaldıracağınızı və ssl sertifikatı alacağınızı deməyəcəyəm, bu barədə kifayət qədər yazılıb.
Telegram botunun yaradılması
Əvvəlcə Telegram bot yaradaq, bunun üçün biz Telegrama gedirik və orada BotFather botunu tapırıq.
/newbot seçin
Onun cavab verəcəyi botun adını daxil edirik, sonra botun adını daxil edirik, cavab olaraq botu idarə etmək üçün token alırıq, bu açarı yazırıq, gələcəkdə bizə faydalı olacaq.
Növbəti addım Telegram serverlərinə botdan hansı serverə məlumat göndərəcəyini söyləməkdir. Bunu etmək üçün formanın bir keçidini düzəldirik:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ biz əvvəllər alınan botdan olan nişanımızla əvəz edirik
____PATH_TO_SCRIPT____ biz serverimizdə verilənlərin işlənəcəyi skriptin ünvanı ilə əvəz edirik (məsələn,
Burada problem var, api.telegram.org serveri bloklanır, lakin siz bunu edə bilərsiniz: heç bir məhdudiyyət olmayan ən ucuz serveri icarəyə götürün və bu serverin konsolundan əmr verin.
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Budur, Telegram botu yaradıldı və serverinizə qoşuldu.
Yandex.Alisa üçün bacarıq yaratmaq
Gəlin Yandex.Alice üçün bacarıq yaratmağa davam edək.
Bacarıq yaratmaq üçün Yandex.Dialogues developers səhifəsinə keçməlisiniz
Bacarıq parametrləri dialoqu açılacaq.
Bacarıq parametrlərini daxil etməyə başlayırıq.
Bacarıqınızın adını daxil edin.
Aktivləşdirmə adı çox diqqətlə seçilməlidir ki, Alice onu düzgün başa düşsün, nüanslardan - Alice ilə mobil proqram və Yandex.Station və ya Irbis A kimi sütunlar sözləri fərqli şəkildə qəbul edə bilər.
Serverimizdəki skriptin yolunu Telegram üçün olduğu kimi daxil edirik, lakin bu, məsələn, Alice üçün xüsusi bir skript olacaq.
Məharətin danışacağı səsi biz seçirik, mən Alisin səsini daha çox bəyənirəm.
Yalnız mobil cihazlarda və ya brauzerdə işləməyi planlaşdırırsınızsa, "Sizə ekranlı bir cihaz lazımdır" seçin.
Sonra, Alice's bacarıqları kataloqu üçün parametrləri daxil edin. Aktivləşdirmə üçün "marka" sözünü istifadə etməyi planlaşdırırsınızsa, webmaster.yandex.ru xidmətində brendin veb-saytını yoxlamaq lazımdır.
Parametrlərlə hamısı budur, skriptlərə keçək.
Telegram bot skripti
Telegram üçün skriptlə başlayaq.
Bot və Alicedən gələn mesajların işlənəcəyi kitabxananı bağlayırıq:
include_once 'webhook_parse.php';
Botumuzun işarəsini təyin etdik:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Biz məlumat alırıq:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Verilənlərin dəyişənlərə təhlili:
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);
}
İndi dəyişənlərlə işləyə bilərsiniz:
$tokens - indi istifadəçinin daxil etdiyi bütün sözlər buradadır
$user_id - burada istifadəçi identifikatoru
$msg_chat_id - botun əmr aldığı söhbət
$msg_user_name - istifadəçi adı
Sonra, emal üçün Parse_Tokens funksiyasını çağırırıq:
$Out_Str = Parse_Tokens($tokens);
Və cavab göndərin:
Send_Out($user_id, $Out_Str);
Send_Out funksiyası sadədir və belə görünür:
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);
}
Yandex.Alisa üçün bacarıq skripti
İndi keçək Alice üçün ssenariyə, demək olar ki, Telegram ilə eynidir.
Biz həmçinin botdan və Alicedən gələn mesajların işlənəcəyi kitabxananı, üstəlik Alice üçün dərsləri olan kitabxananı birləşdiririk:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Biz məlumat alırıq:
$data = json_decode(trim(file_get_contents('php://input')), true);
Verilənlərin dəyişənlərə təhlili:
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'];}
}
}
Burada bir neçə daha az dəyişən var:
$tokens - indi istifadəçinin daxil etdiyi bütün sözlər buradadır
$user_id - burada istifadəçi identifikatoru
Yandex daim nəşr olunan bacarıqları yoxlayır və mesajın tam işlənməsinə başlamadan dərhal skriptdən çıxmaq üçün bir xətt əlavə etdim:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Parse_Tokens funksiyasını emal üçün çağırırıq, bu Telegram ilə eynidir:
$Out_Str = Parse_Tokens($tokens);
Və cavab göndərin:
Send_Out($user_id, $Out_Str);
Send_Out funksiyası burada daha mürəkkəbdir:
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();
}
Alice üçün ssenarini tamamladı.
Parse_Tokens emal skriptinin özü sırf nümunə üçün hazırlanmışdır, orada istənilən yoxlama və emal edə bilərsiniz.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Əgər sual-cavabdan daha mürəkkəb formada olan istifadəçi ilə ünsiyyət qurmaq lazımdırsa, onda siz istifadəçinin $user_id kodunu və istifadəçidən artıq qəbul edilmiş məlumatları verilənlər bazasında (məsələn, mysql) saxlamalı və onları təhlil etməli olacaqsınız. Parse_Tokens funksiyası.
Əslində, bu, demək olar ki, hər şeydir, əgər hər şey düzgün aparılırsa, Telegram botu artıq mövcuddur, Alice'nin bacarığı yoxlana bilər
Hər şey düzgün işləyirsə, "Moderasiya üçün" düyməsini klikləməklə bacarığı moderasiyaya göndərə bilərsiniz.
İndi eyni şəkildə işləyən müxtəlif platformalar üçün eyni anda iki botunuz var.
Yandex.Dialoqlar xidməti üçün sənədlər
Tam skriptlər github-da yerləşdirilib
Mənbə: www.habr.com