Boa tarde.
Hai moitos artigos sobre o tema dos robots de Telegram, pero pouca xente escribe sobre habilidades para Alice e non atopei ningunha información sobre como crear un só bot, polo que decidín compartir a miña experiencia sobre como crear un só bot. bot simple de Telegram e a habilidade Yandex.Alice para o sitio que teñen a mesma funcionalidade.
Polo tanto, non che direi como crear un servidor web e obter un certificado ssl, xa se escribiu bastante sobre iso.
Creando un bot de Telegram
Primeiro, imos crear un bot de Telegram, para iso imos a Telegram e atopamos alí o bot BotFather.
Escolla /newbot
Introducimos o nome do bot polo que responderá, despois introducimos o nome do bot, en resposta obtemos un token para controlar o bot, anotamos esta clave, será útil para nós no futuro.
O seguinte paso é dicir aos servidores de Telegram a que servidor enviar os datos do bot. Para iso, facemos un enlace do formulario:
https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___
___TOKEN___ substituímos co noso token do bot, recibido anteriormente
____PATH_TO_SCRIPT____ substituímos polo enderezo do script no noso servidor onde se procesarán os datos (por exemplo,
Hai un problema aquí, o servidor api.telegram.org está bloqueado, pero podes facelo: alugar o servidor máis barato onde non haxa restricións e dar o comando desde a consola deste servidor
wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___
Xa está, o bot de Telegram está creado e conectado ao teu servidor.
Creando unha habilidade para Yandex.Alisa
Pasemos a crear unha habilidade para Yandex.Alice.
Para crear unha habilidade, cómpre ir á páxina de desenvolvedores de Yandex.Dialogues
Abrirase o diálogo de configuración de habilidades.
Comezamos a entrar na configuración de habilidades.
Introduza o nome da súa habilidade.
O nome de activación debe escollerse con moito coidado para que Alice o entenda correctamente, a partir dos matices: unha aplicación móbil con Alice e columnas como Yandex.Station ou Irbis A poden percibir as palabras de forma diferente.
Introducimos o camiño do script no noso servidor do mesmo xeito que para Telegram, pero será un script especificamente para Alice, por exemplo
Escollemos a voz coa que falará a habilidade, gústame máis a voz de Alicia.
Se pensas traballar só en dispositivos móbiles ou nun navegador, selecciona "Necesitas un dispositivo con pantalla".
A continuación, introduza a configuración do catálogo de habilidades de Alice. Se pensas usar a palabra "marca" para a activación, debes verificar o sitio web da marca no servizo webmaster.yandex.ru.
Isto é todo coa configuración, pasemos aos guións.
Script bot de telegram
Comecemos cun guión para Telegram.
Conectamos a biblioteca onde se procesarán as mensaxes do bot e de Alice:
include_once 'webhook_parse.php';
Establecemos o token do noso bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Recibimos datos:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analizar os datos en variables:
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);
}
Agora podes traballar con variables:
$tokens: aquí están agora todas as palabras que introduciu o usuario
$user_id - ID de usuario aquí
$msg_chat_id - chat no que o bot recibiu o comando
$msg_user_name - nome de usuario
A continuación, chamamos á función Parse_Tokens para procesar:
$Out_Str = Parse_Tokens($tokens);
E enviar unha resposta:
Send_Out($user_id, $Out_Str);
a función Send_Out é sinxela e ten o seguinte aspecto:
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);
}
Script de habilidades para Yandex.Alisa
Agora pasemos ao guión de Alice, é case o mesmo que para Telegram.
Tamén conectamos a biblioteca onde se procesarán as mensaxes do bot e de Alice, ademais dunha biblioteca con clases para Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Recibimos datos:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analizar os datos en variables:
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'];}
}
}
Aquí hai algunhas variables menos:
$tokens: aquí están agora todas as palabras que introduciu o usuario
$user_id - ID de usuario aquí
Yandex fai ping constantemente ás habilidades publicadas e engadín unha liña para saír inmediatamente do script sen comezar o procesamento completo da mensaxe:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Chamamos á función Parse_Tokens para procesar, é o mesmo que para Telegram:
$Out_Str = Parse_Tokens($tokens);
E enviar unha resposta:
Send_Out($user_id, $Out_Str);
A función Send_Out é máis complicada aquí:
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();
}
Rematou o guión de Alice.
O propio script de procesamento de Parse_Tokens foi feito puramente como exemplo, podes facer calquera comprobación e procesamento alí.
function Parse_Tokens($tokens)
{
$out = "";
// do something with tokens //
$out = "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
return $out;
}
Se precisa comunicarse cun usuario dunha forma máis complexa que unha pregunta-resposta, entón terá que gardar o $user_id do usuario e os datos xa recibidos do usuario na base de datos (por exemplo, mysql) e analizalos en a función Parse_Tokens.
En realidade, isto é case todo, se todo está feito correctamente, entón o bot de Telegram xa está dispoñible, a habilidade de Alice pódese comprobar
Se todo funciona correctamente, pode enviar a habilidade para a moderación facendo clic no botón "Para a moderación".
Agora tes dous bots para diferentes plataformas á vez, que funcionan do mesmo xeito.
Documentación para o servizo Yandex.Dialogues
Scripts completos publicados en github
Fonte: www.habr.com