Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

Escolla /newbot

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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, www.my_server.ru/webhook_telegram.php).

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 Páxina para desenvolvedores Yandex.Dialogs, fai clic alí "Crear diálogo" e selecciona "Habilidade en Alice".

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

Abrirase o diálogo de configuración de habilidades.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

Comezamos a entrar na configuración de habilidades.

Introduza o nome da súa habilidade.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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 www.my_server.ru/webhook_alice.php.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

Escollemos a voz coa que falará a habilidade, gústame máis a voz de Alicia.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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 dialogs.yandex.ru/developerindo á túa nova habilidade na pestana de probas.

Yandex.Alisa e Telegram bot en PHP coa mesma funcionalidade

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 aquí

Scripts completos publicados en github descargar.

Fonte: www.habr.com

Engadir un comentario