Good rana.
Akwai labarai da yawa kan batun bots na Telegram, amma mutane kaɗan ne ke rubuta game da ƙwarewa ga Alice, kuma ban sami wani bayani kan yadda ake yin boti ɗaya ba, don haka na yanke shawarar raba gwaninta kan yadda ake yin bot. sauki Telegram bot da fasaha na Yandex.Alice don rukunin yanar gizon yana da ayyuka iri ɗaya.
Итак, как поднимать веб-сервер и получить ssl-сертификат я рассказывать не буду, про это написано достаточно.
Ƙirƙirar bot na Telegram
Da farko, bari mu ƙirƙiri bot na Telegram, don wannan muna zuwa Telegram kuma mu sami BotFather bot a wurin.


Zaɓi /newbot

Mun shigar da sunan bot ɗin da zai amsa, sannan mu shigar da sunan bot, a cikin martani mun sami alamar sarrafa bot, mun rubuta wannan maɓallin, zai zama da amfani a gare mu a nan gaba.

Mataki na gaba shine gaya wa Sabar Telegram wacce uwar garken zata aika bayanai daga bot zuwa. Don yin wannan, muna yin hanyar haɗin yanar gizon:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ mun maye gurbinsu da alamar mu daga bot, da aka samu a baya
____ПУТЬ_ДО_СКРПИТА___ заменяем на адрес скрипта на нашем сервере, где будет происходить обработка данных (например, www.my_server.ru/webhook_telegram.php).
Тут есть проблема, сервер api.telegram.org находится под блокировкой, но можно сделать так: арендовать самый дешевый sabar там, где нет ограничений и дать из консоли этого сервера команду
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Все, Telegram-бот создан и связан с вашим uwar garken.
Ƙirƙirar fasaha don Yandex.Alisa
Bari mu ci gaba don ƙirƙirar fasaha don Yandex.Alice.
Don ƙirƙirar fasaha, kuna buƙatar zuwa shafin masu haɓaka Yandex.Dialogues Shafin mai haɓaka Yandex.Dialogs, danna can "Ƙirƙiri tattaunawa" kuma zaɓi "Skill in Alice".

Za a buɗe maganganun saitunan fasaha.

Mun fara shigar da saitunan fasaha.
Shigar da sunan gwanintar ku.

Ya kamata a zaɓi sunan kunnawa sosai a hankali don Alice ta fahimce shi daidai, daga nuances - aikace-aikacen hannu tare da Alice da ginshiƙai kamar Yandex.Station ko Irbis A na iya fahimtar kalmomi daban.
Вводим путь до скрипта на нашем сервере так же, как и для Telegram, но это будет скрипт именно для Алисы, например www.my_server.ru/webhook_alice.php.

Mun zaɓi muryar da gwanintar za ta yi magana da ita, Ina son muryar Alice.

Idan kuna shirin yin aiki kawai akan na'urorin hannu ko a cikin mai bincike, sannan zaɓi "Kuna buƙatar na'ura mai allo."
Na gaba, shigar da saituna don katalojin basirar Alice. Idan kuna shirin amfani da kalmar "alama" don kunnawa, kuna buƙatar tabbatar da gidan yanar gizon alamar a cikin sabis na webmaster.yandex.ru.

Shi ke nan tare da saitunan, bari mu matsa zuwa rubutun.
Rubutun bot na Telegram
Bari mu fara da rubutun don Telegram.
Muna haɗa ɗakin karatu inda za a sarrafa saƙonni daga bot da Alice:
include_once 'webhook_parse.php';
Mun saita alamar bot ɗin mu:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Muna karɓar bayanai:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Fassara bayanai zuwa masu canji:
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);
}
Yanzu zaku iya aiki tare da masu canji:
$tokens - Anan ga duk kalmomin da mai amfani ya shigar
$user_id - id mai amfani anan
$msg_chat_id - taɗi inda bot ɗin ya karɓi umarni
$msg_user_name - sunan mai amfani
Bayan haka, muna kiran aikin Parse_Tokens don sarrafawa:
$Out_Str = Parse_Tokens($tokens);
Kuma aika amsa:
Send_Out($user_id, $Out_Str);
Aikin Send_Out yana da sauƙi kuma yayi kama da wannan:
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);
}
Rubutun gwaninta don Yandex.Alisa
Yanzu bari mu matsa zuwa rubutun Alice, kusan iri ɗaya ne da na Telegram.
Muna kuma haɗa ɗakin karatu inda za a sarrafa saƙonni daga bot da Alice, da ɗakin karatu tare da azuzuwan Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Muna karɓar bayanai:
$data = json_decode(trim(file_get_contents('php://input')), true);
Fassara bayanai zuwa masu canji:
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'];}
}
}
Akwai ƴan ƴan canji anan:
$tokens - Anan ga duk kalmomin da mai amfani ya shigar
$user_id - id mai amfani anan
Yandex koyaushe yana buga fasaha, kuma na ƙara layi don fita daga rubutun nan da nan ba tare da fara cikakken sarrafa saƙon ba:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Muna kiran aikin Parse_Tokens don sarrafawa, daidai yake da na Telegram:
$Out_Str = Parse_Tokens($tokens);
Kuma aika amsa:
Send_Out($user_id, $Out_Str);
Aikin Send_Out ya fi rikitarwa anan:
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();
}
Ya gama rubutun ga Alice.
Rubutun sarrafa Parse_Tokens kansa an yi shi ne kawai misali, kuna iya yin duk wani bincike da sarrafawa a can.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Idan kuna buƙatar sadarwa tare da mai amfani da sigar da ta fi rikitarwa fiye da amsar tambaya, to kuna buƙatar adana $user_id mai amfani da bayanan da aka riga aka karɓa daga mai amfani a cikin bayanan (misali, mysql) kuma bincika su a ciki. aikin Parse_Tokens.
A zahiri, wannan kusan komai ne, idan an yi komai daidai, to an riga an sami bot ɗin Telegram, ana iya bincika ƙwarewar Alice. dialogs.yandex.ru/developerta hanyar zuwa sabon fasahar ku akan shafin gwaji.

Idan komai yayi daidai, zaku iya aika gwanintar don daidaitawa ta danna maɓallin "Don daidaitawa".
Yanzu kuna da bots guda biyu don dandamali daban-daban a lokaci ɗaya, waɗanda ke aiki iri ɗaya.
Takaddun bayanai don sabis ɗin Yandex.Dialogues a nan
An buga cikakkun rubutun akan github скачать.
source: www.habr.com
