Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

O dara ọjọ.

Ọpọlọpọ awọn nkan lo wa lori koko ti awọn bot Telegram, ṣugbọn awọn eniyan diẹ kọ nipa awọn ọgbọn fun Alice, ati pe Emi ko rii alaye eyikeyi lori bii a ṣe le ṣe bot kan, nitorinaa Mo pinnu lati pin iriri mi lori bi a ṣe le ṣe kan bot Telegram ti o rọrun ati oye Yandex.Alice fun aaye ti o ni iṣẹ ṣiṣe kanna.

Nitorinaa, Emi kii yoo sọ fun ọ bi o ṣe le gbe olupin wẹẹbu kan ki o gba ijẹrisi ssl, to ti kọ nipa rẹ.

Ṣiṣẹda Telegram bot

Ni akọkọ, jẹ ki a ṣẹda bot Telegram kan, fun eyi a lọ si Telegram ati rii BotFather bot nibẹ.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Yan / newbot

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

A tẹ orukọ bot nipasẹ eyiti yoo dahun, lẹhinna a tẹ orukọ bot, ni idahun a gba ami kan lati ṣakoso bot, a kọ bọtini yii silẹ, yoo wulo fun wa ni ọjọ iwaju.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Igbesẹ ti o tẹle ni lati sọ fun awọn olupin Telegram kini olupin lati firanṣẹ data lati bot si. Lati ṣe eyi, a ṣe ọna asopọ fọọmu naa:

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

___TOKEN____ a rọpo pẹlu ami-ami wa lati bot, ti a gba tẹlẹ

___PATH_TO_SCRIPT____ a ropo pẹlu adirẹsi ti iwe afọwọkọ lori olupin wa nibiti a ti ṣe ilana data naa (fun apẹẹrẹ, www.my_server.ru/webhook_telegram.php).

Iṣoro kan wa nibi, olupin api.telegram.org wa labẹ idinamọ, ṣugbọn o le ṣe eyi: yalo olupin ti o kere julọ nibiti ko si awọn ihamọ ati fun aṣẹ lati console olupin yii

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

Iyẹn ni, bot Telegram ti ṣẹda ati sopọ si olupin rẹ.

Ṣiṣẹda ogbon fun Yandex.Alisa

Jẹ ki a tẹsiwaju si ṣiṣẹda ọgbọn kan fun Yandex.Alice.

Lati ṣẹda ọgbọn kan, o nilo lati lọ si oju-iwe awọn olupilẹṣẹ Yandex.Dialogues Oju-iwe idagbasoke Yandex.Dialogs, tẹ nibẹ "Ṣẹda ibaraẹnisọrọ" ki o si yan "Olorijori ni Alice".

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Ọrọ sisọ awọn eto ọgbọn yoo ṣii.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

A bẹrẹ lati tẹ awọn olorijori eto.

Tẹ orukọ ti ọgbọn rẹ sii.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Orukọ imuṣiṣẹ yẹ ki o yan ni pẹkipẹki ki Alice loye rẹ ni deede, lati awọn nuances - ohun elo alagbeka kan pẹlu Alice ati awọn ọwọn bii Yandex.Station tabi Irbis A le loye awọn ọrọ oriṣiriṣi.

A tẹ ọna si iwe afọwọkọ lori olupin wa ni ọna kanna bi fun Telegram, ṣugbọn yoo jẹ iwe afọwọkọ pataki fun Alice, fun apẹẹrẹ. www.my_server.ru/webhook_alice.php.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

A yan ohun pẹlu eyiti oye yoo sọrọ, Mo fẹran ohun Alice diẹ sii.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Ti o ba gbero lati ṣiṣẹ nikan lori awọn ẹrọ alagbeka tabi ni ẹrọ aṣawakiri kan, lẹhinna yan “O nilo ẹrọ kan pẹlu iboju.”

Nigbamii, tẹ awọn eto sii fun katalogi ogbon Alice. Ti o ba gbero lati lo ọrọ “brand” fun imuṣiṣẹ, o nilo lati jẹrisi oju opo wẹẹbu ami iyasọtọ naa ni iṣẹ webmaster.yandex.ru.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Iyẹn ni gbogbo pẹlu awọn eto, jẹ ki a lọ si awọn iwe afọwọkọ.

Telegram bot akosile

Jẹ ki a bẹrẹ pẹlu iwe afọwọkọ kan fun Telegram.

A so ile-ikawe pọ nibiti awọn ifiranṣẹ lati bot ati Alice yoo ṣe ilọsiwaju:

include_once 'webhook_parse.php';

A ṣeto ami ti bot wa:

$tg_bot_token = "_____YOUR_BOT_TOKEN_____";

A gba data:

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

Pipin data sinu awọn oniyipada:

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

Bayi o le ṣiṣẹ pẹlu awọn oniyipada:

$tokens - nibi ni gbogbo awọn ọrọ ti olumulo ti tẹ

$user_id - olumulo id nibi

$msg_chat_id - iwiregbe ninu eyiti bot gba aṣẹ naa

$msg_user_name - orukọ olumulo

Nigbamii, a pe iṣẹ Parse_Tokens fun sisẹ:

$Out_Str = Parse_Tokens($tokens);

Ki o si fi esi ranṣẹ:

Send_Out($user_id, $Out_Str);

Iṣẹ Send_Out rọrun ati pe o dabi eyi:

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

Iwe afọwọkọ oye fun Yandex.Alisa

Bayi jẹ ki a lọ si iwe afọwọkọ fun Alice, o fẹrẹ jẹ kanna bi fun Telegram.

A tun so ile-ikawe pọ nibiti awọn ifiranṣẹ lati bot ati Alice yoo ṣe ilọsiwaju, pẹlu ile-ikawe kan pẹlu awọn kilasi fun Alice:

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

A gba data:

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

Pipin data sinu awọn oniyipada:

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

Awọn oniyipada diẹ wa nibi:

$tokens - nibi ni gbogbo awọn ọrọ ti olumulo ti tẹ

$user_id - olumulo id nibi

Yandex nigbagbogbo pings ṣe atẹjade awọn ọgbọn, ati pe Mo ṣafikun laini kan lati jade lẹsẹkẹsẹ iwe afọwọkọ laisi bẹrẹ sisẹ kikun ti ifiranṣẹ naa:

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

A pe iṣẹ Parse_Tokens fun sisẹ, o jẹ kanna bi fun Telegram:

$Out_Str = Parse_Tokens($tokens);

Ki o si fi esi ranṣẹ:

Send_Out($user_id, $Out_Str);

Iṣẹ Send_Out jẹ idiju diẹ sii nibi:

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

Ti pari iwe afọwọkọ fun Alice.

Awọn iwe afọwọkọ processing Parse_Tokens funrararẹ ni a ṣe ni mimọ fun apẹẹrẹ, o le ṣe awọn sọwedowo ati ṣiṣe eyikeyi nibẹ.

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

Ti o ba nilo lati ṣe ibasọrọ pẹlu olumulo ti fọọmu eka diẹ sii ju idahun ibeere, lẹhinna o yoo nilo lati ṣafipamọ $user_id olumulo ati data ti o ti gba tẹlẹ lati ọdọ olumulo ninu aaye data (fun apẹẹrẹ, mysql) ki o ṣe itupalẹ wọn ninu iṣẹ Parse_Tokens.

Lootọ, eyi fẹrẹ jẹ ohun gbogbo, ti ohun gbogbo ba ṣe ni deede, lẹhinna bot Telegram ti wa tẹlẹ, ọgbọn Alice le ṣayẹwo dialogs.yandex.ru/developernipa lilọ si titun rẹ olorijori lori igbeyewo taabu.

Yandex.Alisa ati Telegram bot ni PHP pẹlu iṣẹ ṣiṣe kanna

Ti ohun gbogbo ba ṣiṣẹ ni deede, o le firanṣẹ ọgbọn fun iwọntunwọnsi nipa titẹ bọtini “Fun iwọntunwọnsi”.

Bayi o ni awọn bot meji fun awọn iru ẹrọ oriṣiriṣi ni ẹẹkan, eyiti o ṣiṣẹ ni ọna kanna.

Iwe fun iṣẹ Yandex.Dialogues nibi

Awọn iwe afọwọkọ ni kikun ti a firanṣẹ lori github скачать.

orisun: www.habr.com

Fi ọrọìwòye kun