Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Добрый день.

E tele tala e uiga i le autu o Telegram bots, ae toaitiiti tagata e tusitusi e uiga i tomai mo Alice, ma ou te leʻi mauaina ni faʻamatalaga i le auala e fai ai se tasi bot, o lea na ou filifili ai e faʻasoa atu loʻu poto masani ile auala e fai ai se faigofie Telegram bot ma le Yandex.Alice tomai mo le 'upega tafaʻilagi e tutusa galuega.

O lea la, o le a ou le taʻuina atu ia te oe pe faʻafefea ona faʻatupuina se upega tafaʻilagi ma maua se tusi faamaonia ssl, ua lava mea na tusia e uiga i ai.

Fausiaina o le Telegram bot

Muamua, tatou faia se Telegram bot, mo lenei mea tatou te alu i Telegram ma suʻe le BotFather bot iina.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Filifili /newbot

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Matou te ulufale i le igoa o le bot lea o le a tali mai ai, ona matou ulufale lea i le igoa o le bot, i le tali matou te maua se faʻailoga e pulea ai le bot, matou te tusia i lalo lenei ki, o le a aoga ia i matou i le lumanaʻi.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

O le isi laasaga o le taʻu atu lea i le Telegram servers poʻo fea le server e lafo faʻamatalaga mai le bot i. Ina ia faia lenei mea, matou te faia se sootaga o le fomu:

https: //api.telegram.org/bot___ТОКЕН___/setWebhook?url=https://____ПУТЬ_ДО_СКРПИТА___

___TOKEN___ matou sui i la matou faʻailoga mai le bot, maua muamua

____PATH_TO_SCRIPT____ matou te suia i le tuatusi o le tusitusiga i luga o la matou 'auʻaunaga lea o le a faʻatautaia ai faʻamatalaga (mo se faʻataʻitaʻiga, www.my_server.ru/webhook_telegram.php).

O loʻo i ai se faʻafitauli iinei, o le api.telegram.org server o loʻo i lalo o le poloka, ae e mafai ona e faia lenei mea: totogi le server sili ona taugofie pe a leai ni tapulaʻa ma tuʻuina atu le faʻatonuga mai le faʻamafanafanaga o lenei server

wget ___ПОЛУЧИВШИЙСЯ_АДРЕС___

O le mea lena, o le Telegram bot ua faia ma fesoʻotaʻi i lau 'auʻaunaga.

Fausia se tomai mo Yandex.Alisa

Sei o tatou agai i luma i le fatuina o se tomai mo Yandex.Alice.

Ina ia fatuina se tomai, e tatau ona e alu i le Yandex.Dialogues developers page Yandex.Dialogs developer itulau, kiliki iina "Create dialogue" ma filifili "Skill in Alice".

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

O le a tatala le talanoaga o le tulaga o tomai.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Ua amata ona tatou ulu atu i tulaga o tomai.

Ulufale le igoa o lou tomai.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

E tatau ona filifilia ma le faʻaeteete le igoa o le faʻaosoina ina ia malamalama lelei Alice, mai nuances - o se telefoni feaveaʻi ma Alice ma koluma e pei o Yandex.Station poʻo Irbis A e mafai ona vaʻaia upu eseese.

Matou te ulufale atu i le ala i le tusitusiga i luga o la matou 'auʻaunaga i le auala lava e tasi e pei o Telegram, ae o le a avea ma tusitusiga faʻapitoa mo Alice, mo se faʻataʻitaʻiga www.my_server.ru/webhook_alice.php.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Matou te filifilia le leo e tautala ai le tomai, ou te fiafia i le leo o Alice.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Afai e te fuafua e galue i luga o masini feaveaʻi poʻo se suʻesuʻega, ona filifili lea "E te manaʻomia se masini ma se lau."

Soso'o, ulufale i le fa'atulagaga mo le lisi o tomai a Alice. Afai e te fuafua e faʻaoga le upu "brand" mo le faʻagaoioia, e tatau ona e faʻamaonia le upega tafaʻilagi a le brand i le webmaster.yandex.ru service.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Ona pau lava lena o le faatulagaga, sei o tatou agai atu i tusitusiga.

Telegram bot script

Tatou amata i se tusitusiga mo Telegram.

Matou te faʻafesoʻotaʻi le faletusi lea o le a faʻatautaia ai feʻau mai le bot ma Alice:

include_once 'webhook_parse.php';

Matou te setiina le faʻailoga o le matou bot:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Matou te mauaina faʻamatalaga:

$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);

Fa'avasegaina fa'amaumauga i ni fesuiaiga:

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);
}

Ole taimi nei e mafai ona e galue ma fesuiaiga:

$tokens - o lo'o iai nei upu uma na tu'uina e le tagata fa'aoga

$user_id - ID fa'aoga iinei

$msg_chat_id - talatalanoaga lea na maua ai e le bot le poloaiga

$msg_user_name - username

Le isi, matou te taʻua le Parse_Tokens galuega mo le faʻagaioiga:

$Out_Str = Parse_Tokens($tokens);

Ma lafo se tali:

Send_Out($user_id, $Out_Str);

e faigofie le galuega Send_Out ma e pei o lenei:

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);
}

Skill script mo Yandex.Alisa

Sei o tatou agai atu i le tusitusiga mo Alice, e toetoe lava tutusa ma Telegram.

Matou te fa'afeso'ota'i fo'i le faletusi lea o le a fa'agaioia ai fe'au mai le bot ma Alisa, fa'atasi ai ma se faletusi ma vasega mo Alice:

include_once 'classes_alice.php';
include_once 'webhook_parse.php';

Matou te mauaina faʻamatalaga:

$data = json_decode(trim(file_get_contents('php://input')), true);

Fa'avasegaina fa'amaumauga i ni fesuiaiga:

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'];}
  }
}

E i ai ni nai fesuiaiga laiti iinei:

$tokens - o lo'o iai nei upu uma na tu'uina e le tagata fa'aoga

$user_id - ID fa'aoga iinei

Yandex pings i taimi uma tomai lolomi, ma sa ou faaopoopo se laina e alu ese vave mai le tusitusiga e aunoa ma le amataina o le faagasologa atoa o le savali:

  if (strpos($tokens[0], "ping") > -1)     {Send_Out("pong", "", true);}

Matou te taʻua le Parse_Tokens galuega mo le gaioiga, e tutusa ma Telegram:

$Out_Str = Parse_Tokens($tokens);

Ma lafo se tali:

Send_Out($user_id, $Out_Str);

Ole galuega Send_Out e sili atu ona lavelave iinei:

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();
}

Ua uma le tusitusiga mo Alice.

O le Parse_Tokens processing script lava ia na faia mama mo se faʻataʻitaʻiga, e mafai ona e faia soʻo se siaki ma gaioiga iina.

function Parse_Tokens($tokens)
{
  $out = "";
  // do something with tokens //
  $out =  "Your eneter " . count($tokens) . " words: " . implode($tokens, " ");
  return $out;
}

Afai e te manaʻomia le faʻafesoʻotaʻi ma se tagata e faʻaaogaina se faʻamatalaga sili atu ona faigata nai lo se fesili-tali, ona e manaʻomia lea e teu le $user_id a le tagata faʻaoga ma faʻamatalaga ua uma ona maua mai le tagata faʻaoga i totonu o le database (mo se faʻataʻitaʻiga, mysql) ma auʻiliʻili i totonu. le galuega Parse_Tokens.

O le mea moni, e toetoe lava o mea uma, afai e saʻo mea uma, ona maua lea o le Telegram bot, e mafai ona siaki le tomai o Alice. dialogs.yandex.ru/developere ala i le alu i lou tomai fou i luga o le suʻega faʻamau.

Yandex.Alisa ma Telegram bot i le PHP faʻatasi ai ma galuega tutusa

Afai e lelei mea uma, e mafai ona e auina atu le tomai mo le faʻaleleia e ala i le kilikiina o le "Mo le faʻaogaina" faʻamau.

O lea e lua au bots mo tulaga eseese i le taimi e tasi, lea e galue i le auala lava e tasi.

Faʻamaumauga mo le Yandex.Dialogues auaunaga iinei

O tusitusiga atoa na lafoina ile github скачать.

puna: www.habr.com

Faaopoopo i ai se faamatalaga