Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

дСнь Π”ΠΎΠ±Ρ€Ρ‹ΠΉ.

Ana akeh artikel babagan topik bot Telegram, nanging sawetara wong sing nulis babagan katrampilan kanggo Alice, lan aku ora nemokake informasi babagan carane nggawe bot siji, mula aku mutusake kanggo nuduhake pengalaman babagan carane nggawe bot Telegram prasaja lan skill Yandex.Alice kanggo situs sing nduweni fungsi sing padha.

Dadi, aku ora bakal ngandhani sampeyan carane ngunggahake server web lan entuk sertifikat ssl, cukup wis ditulis babagan iki.

Nggawe bot Telegram

Pisanan, ayo nggawe bot Telegram, kanggo iki kita pindhah menyang Telegram lan golek bot BotFather ing kana.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Pilih /newbot

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Kita ngetik jeneng bot sing bakal nanggapi, banjur ngetik jeneng bot, kanggo nanggepi kita entuk token kanggo ngontrol bot, kita nulis kunci iki, bakal migunani kanggo kita ing mangsa ngarep.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Langkah sabanjure yaiku ngandhani server Telegram sing server ngirim data saka bot menyang. Kanggo nindakake iki, kita nggawe link saka formulir:

https: //api.telegram.org/bot___Π’ΠžΠšΠ•Π___/setWebhook?url=https://____ПУВЬ_Π”Πž_БКРПИВА___

___TOKEN___ kita ganti nganggo token saka bot, sing ditampa sadurunge

____PATH_TO_SCRIPT____ kita ngganti karo alamat script ing server kita ngendi data bakal diproses (contone, www.my_server.ru/webhook_telegram.php).

Ana masalah ing kene, server api.telegram.org diblokir, nanging sampeyan bisa nindakake iki: nyewa server sing paling murah sing ora ana watesan lan menehi perintah saka konsol server iki

wget ___ΠŸΠžΠ›Π£Π§Π˜Π’Π¨Π˜Π™Π‘Π―_АДРЕБ___

Mekaten, bot Telegram digawe lan disambungake menyang server sampeyan.

Nggawe skill kanggo Yandex.Alisa

Ayo pindhah menyang nggawe skill kanggo Yandex.Alice.

Kanggo nggawe skill, sampeyan kudu pindhah menyang kaca pangembang Yandex.Dialogues Kaca pangembang Yandex.Dialogs, klik ana "Gawe dialog" lan pilih "Skill in Alice".

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Dialog setelan skill bakal mbukak.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Kita wiwiti ngetik setelan skill.

Ketik jeneng skill sampeyan.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Jeneng aktivasi kudu dipilih kanthi ati-ati supaya Alice ngerti kanthi bener, saka nuansa - aplikasi seluler karo Alice lan kolom kaya Yandex.Station utawa Irbis A bisa ngerteni tembung kanthi beda.

Kita ngetik path menyang skrip ing server kita kanthi cara sing padha karo Telegram, nanging bakal dadi skrip khusus kanggo Alice, umpamane www.my_server.ru/webhook_alice.php.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Kita milih swara sing bakal diomongake, aku luwih seneng swarane Alice.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Yen sampeyan mung arep nggarap piranti seluler utawa ing browser, banjur pilih "Sampeyan butuh piranti kanthi layar."

Sabanjure, ketik setelan kanggo katalog katrampilan Alice. Yen sampeyan pengin nggunakake tembung "merek" kanggo aktivasi, sampeyan kudu verifikasi situs web merek ing layanan webmaster.yandex.ru.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Iku kabeh karo setelan, ayo pindhah menyang script.

Skrip bot telegram

Ayo miwiti nganggo skrip kanggo Telegram.

Kita nyambungake perpustakaan ing ngendi pesen saka bot lan Alice bakal diproses:

include_once 'webhook_parse.php';

Kita nyetel token bot kita:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

Kita nampa data:

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

Parsing data dadi variabel:

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

Saiki sampeyan bisa nggarap variabel:

$tokens - saiki kabeh tembung sing dilebokake pangguna

$user_id - user id kene

$msg_chat_id - chatting ing ngendi bot nampa perintah kasebut

$msg_user_name - jeneng panganggo

Sabanjure, kita nelpon fungsi Parse_Tokens kanggo diproses:

$Out_Str = Parse_Tokens($tokens);

Lan ngirim respon:

Send_Out($user_id, $Out_Str);

fungsi Send_Out prasaja lan katon kaya iki:

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

Skrip Skill kanggo Yandex.Alisa

Saiki ayo pindhah menyang skrip kanggo Alice, meh padha karo Telegram.

Kita uga nyambungake perpustakaan ngendi pesen saka bot lan Alice bakal diproses, plus perpustakaan karo kelas kanggo Alice:

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

Kita nampa data:

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

Parsing data dadi variabel:

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

Ana sawetara variabel sing luwih sithik ing kene:

$tokens - saiki kabeh tembung sing dilebokake pangguna

$user_id - user id kene

Yandex terus-terusan ping katrampilan sing diterbitake, lan aku nambahake baris kanggo langsung metu saka skrip tanpa miwiti proses lengkap pesen:

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

Kita nelpon fungsi Parse_Tokens kanggo diproses, padha karo Telegram:

$Out_Str = Parse_Tokens($tokens);

Lan ngirim respon:

Send_Out($user_id, $Out_Str);

Fungsi Send_Out luwih rumit ing kene:

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

Rampung skrip kanggo Alice.

Skrip pangolahan Parse_Tokens dhewe digawe mung kanggo conto, sampeyan bisa nindakake mriksa lan ngolah ing kono.

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

Yen sampeyan kudu komunikasi karo pangguna sing luwih rumit tinimbang pitakonan-jawaban, sampeyan kudu nyimpen $user_id pangguna lan data sing wis ditampa saka pangguna ing basis data (contone, mysql) lan analisa ing fungsi Parse_Tokens.

Bener, iki meh kabeh, yen kabeh wis rampung kanthi bener, mula bot Telegram wis kasedhiya, katrampilan Alice bisa dicenthang dialogs.yandex.ru/developerkanthi pindhah menyang skill anyar ing tab testing.

Yandex.Alisa lan Telegram bot ing PHP kanthi fungsi sing padha

Yen kabeh bisa digunakake kanthi bener, sampeyan bisa ngirim skill kanggo moderat kanthi ngeklik tombol "Kanggo moderat".

Saiki sampeyan duwe rong bot kanggo platform sing beda bebarengan, sing bisa digunakake kanthi cara sing padha.

Dokumentasi kanggo layanan Yandex.Dialogues kene

Skrip lengkap dikirim ing github ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ.

Source: www.habr.com

Add a comment