Buongiorno.
Ci sono molte articoli sui bot di Telegram, ma pochi parlano delle competenze per Alice e non ho trovato informazioni su come creare un bot unico; quindi ho deciso di condividere la mia esperienza su come creare un semplice bot di Telegram e un'abilità per Yandex.Alice per un sito che abbia funzionalità integrate.
Quindi, come configurare un server web e ottenere un certificato ssl non ne parlerò, ci sono già sufficienti informazioni a riguardo.
Creazione di un bot di Telegram
Per prima cosa, creiamo un bot di Telegram; per farlo andiamo su Telegram e troviamo il bot BotFather.


Selezioniamo /newbot

Inseriamo il nome del bot, con cui risponderà, poi inseriamo il nome del bot e riceviamo un token per gestire il bot; annotiamo questa chiave, ci sarà utile in seguito.

Il passo successivo è informare i server di Telegram su quale server inviare i dati dal bot. A tal fine, creiamo un link di questo tipo:
https://api.telegram.org/bot___TOKEN___/setWebhook?url=https://____PERCORSO_ALLO_SCRIPT___
___TOKEN___ va sostituito con il nostro token del bot, ottenuto precedentemente
____PERCORSO_ALLO_SCRIPT___ sostituiamo con l'indirizzo dello script sul nostro server, dove avverrà l'elaborazione dei dati (ad esempio, www.my_server.ru/webhook_telegram.php).
Qui c'è un problema, il server api.telegram.org è bloccato, ma si può procedere così: affittare il server più economico server laddove non ci sono restrizioni e dare dal terminale di quel server il comando
wget ___INDIRIZZO_RICEVUTO___
Ecco, il bot di Telegram è stato creato e collegato al vostro server.
Creazione dell'abilità per Yandex.Alice
Passiamo alla creazione dell'abilità per Yandex.Alice.
Per creare un'abilità, è necessario andare sulla pagina degli sviluppatori di Yandex.Dialoghi pagina degli sviluppatori di Yandex.Dialoghi, cliccare su "Crea dialogo" e scegliere "Abilità in Alice".

Si aprirà il dialogo delle impostazioni dell'abilità.

Iniziamo a inserire le impostazioni dell'abilità.
Inseriamo il nome della vostra abilità.

Il nome di attivazione deve essere scelto con molta attenzione, affinché Alice lo comprenda correttamente; un aspetto da considerare è che l'app mobile con Alice e le colonne come Yandex.Station o Irbis A possono interpretare le parole in modi diversi.
Inseriamo il percorso dello script sul nostro server proprio come per Telegram, ma questo sarà uno script specifico per Alice, ad esempio www.my_server.ru/webhook_alice.php.

Selezioniamo la voce con cui parlerà l'abilità, personalmente preferisco proprio la voce di Alice.

Se si prevede di lavorare solo su dispositivi mobili o nel browser, selezioniamo "Necessita di un dispositivo con schermo".
Inseriamo le impostazioni per il catalogo delle abilità di Alice. Se prevedi di utilizzare la parola — marchio, è necessario completare la verifica del sito del marchio nel servizio webmaster.yandex.ru.

Impostazioni a posto, passiamo agli script.
Script del bot Telegram
Iniziamo con lo script per Telegram.
Colleghiamo la libreria, dove saranno elaborate le comunicazioni dal bot e da Alice:
include_once 'webhook_parse.php';
Impostiamo il token del nostro bot:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
Otteniamo i dati:
$request = file_get_contents('php://input');
$request = json_decode($request, TRUE);
Analizziamo i dati in variabili:
if (!$request)
{
die();
// Alcuni errori di output (richiesta non è JSON valido)
}
else if (!isset($request['update_id']) || !isset($request['message']))
{
die();
// Alcuni errori di output (richiesta non ha messaggio)
}
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);
}
Ora possiamo lavorare con le variabili:
$tokens — qui ci sono tutte le parole che l'utente ha inserito
$user_id — qui c'è l'id dell'utente
$msg_chat_id — chat in cui il bot ha ricevuto il comando
$msg_user_name — nome utente
Ora, chiamiamo la funzione Parse_Tokens per elaborazione:
$Out_Str = Parse_Tokens($tokens);
E inviamo la risposta:
Send_Out($user_id, $Out_Str);
La funzione Send_Out è semplice e si presenta così:
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 dell'abilità per Yandex.Alice
Ora passiamo allo script per Alice, che è quasi identico a quello per Telegram.
Colleghiamo anche la libreria, dove saranno elaborate le comunicazioni dal bot e da Alice, più la libreria con le classi per Alice:
include_once 'classes_alice.php';
include_once 'webhook_parse.php';
Otteniamo i dati:
$data = json_decode(trim(file_get_contents('php://input')), true);
Analizziamo i dati in variabili:
se (isset($data['request']))
{
//original_utterance
se (isset($data['meta']))
{
$data_meta = $data['meta'];
se (isset($data_meta['client_id'])) {$client_id = $data_meta['client_id'];}
}
se (isset($data['request']))
{
$data_req = $data['request'];
se (isset($data_req['original_utterance']))
{
$original_utterance = $data_req['original_utterance'];
}
se (isset($data_req['command'])) {$data_msg = $data_req['command'];}
se (isset($data_req['nlu']))
{
$data_nlu = $data_req['nlu'];
se (isset($data_nlu['tokens'])) {$tokens = $data_nlu['tokens'];}
// $data_token_count = count($data_tokens);
}
}
se (isset($data['session']))
{
$data_session = $data['session'];
se (isset($data_session['new'])) {$data_msg_new = $data_session['new'];}
se (isset($data_session['message_id'])) {$data_msg_id = $data_session['message_id'];}
se (isset($data_session['session_id'])) {$data_msg_sess_id = $data_session['session_id'];}
se (isset($data_session['skill_id'])) {$skill_id = $data_session['skill_id'];}
se (isset($data_session['user_id'])) {$user_id = $data_session['user_id'];}
}
}
Qui ci sono un po' meno variabili:
$tokens — qui ci sono tutte le parole che l'utente ha inserito
$user_id — qui c'è l'id dell'utente
Yandex controlla continuamente le abilità pubblicate, e ho aggiunto una riga per uscire immediatamente dallo script, senza eseguire un'elaborazione completa del messaggio:
se (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
Chiamiamo la funzione Parse_Tokens per l'elaborazione, è la stessa che per Telegram:
$Out_Str = Parse_Tokens($tokens);
E inviamo la risposta:
Send_Out($user_id, $Out_Str);
La funzione Send_Out qui è un po' più complessa:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false)
{
global $data_msg_sess_id, $user_id;
////////// GENERA BASE PER OUTPUT //////////
$Data_Out = new Alice_Data_Out();
$Data_Out->response = new Alice_Response();
$Data_Out->session = new Alice_Session();
////////// GENERA BASE PER OUTPUT Fine //////////
////////// GENERA MSG OUTPUT //////////
$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;
se (strlen($out_tts) 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();
}
Abbiamo finito lo script per Alice.
Ho realizzato lo script di elaborazione Parse_Tokens solo come esempio, puoi fare lì qualsiasi verifica ed elaborazione.
function Parse_Tokens($tokens)
{
$out = "";
// fai qualcosa con i token //
$out = "Hai inserito " . count($tokens) . " parole: " . implode($tokens, " ");
return $out;
}
Se hai bisogno di una comunicazione con l'utente di tipo più complesso rispetto a domande e risposte, dovrai salvare nel database (ad esempio mysql) $user_id dell'utente e i dati già ricevuti dall'utente e analizzarli nella funzione Parse_Tokens.
In sostanza, è quasi tutto; se è stato fatto correttamente, il bot di Telegram è già disponibile e puoi controllare l'abilità di Alice. dialogs.yandex.ru/developer, accedendo alla tua nuova abilità nella scheda di test.

Se tutto funziona correttamente, puoi inviare l'abilità per la moderazione premendo il pulsante "Per moderazione".
Ora avete due bot subito disponibili per diverse piattaforme, che funzionano allo stesso modo.
Documentazione sul servizio Yandex.Dialoghi qui
Gli script completi sono disponibili su github scaricare.
Fonte: habr.com
