下午好
关于Telegram机器人的文章很多,但是很少有关于Alice技能的文章,而且我没有找到有关如何制作单个机器人的任何信息,因此我决定分享我的经验,以学习如何制作简单的Telegram bot和Yandex。具有单一功能。
因此,我不会告诉您如何启动网络服务器并获得ssl证书,对此已经有足够的介绍了。
创建一个电报机器人
首先,创建一个Telegram机器人,为此,请转到Telegram并在那里找到BotFather机器人。


选择/ newbot

我们输入将响应的机器人的名称,然后输入机器人的名称,作为响应,我们获得用于控制该机器人的令牌,编写此密钥,它将对我们将来有用。

下一步是告诉Telegram服务器将哪个数据从漫游器发送到该服务器。 为此,请建立以下形式的链接:
https: //api.telegram.org/bot______/setWebhook?url=https://_________
___令牌___替换为我们之前收到的机器人令牌
____ PATH_DO_SCRIPT ___被替换为我们服务器上用于处理数据的脚本的地址(例如,
www.my_server.ru/webhook_telegram.php )。
有一个问题,api.telegram.org服务器处于锁定状态,但是您可以执行以下操作:租用没有限制的最便宜的服务器,然后从该服务器的控制台发出命令
wget _______
就是这样,Telegram bot已创建并连接到您的服务器。
为Yandex.Alice创建技能
让我们继续为Yandex.Alice创建技能。
要创建技能,您需要转到Yandex.Dialogs开发人员页面,Yandex.Dialogs开发人员
页面 ,单击“创建对话”,然后选择“ Alice中的技能”。

技能设置对话框打开。

我们开始输入技能设置。
输入您的技能名称。

应该非常仔细地选择激活名称,以便Alice从细微差别中正确理解它-具有Alice和诸如Yandex.Station或Irbis A之类的列的移动应用程序可以以不同的方式感知单词。
我们以与Telegram相同的方式在服务器上输入脚本的路径,但这将是专门针对Alice的脚本,例如
www.my_server.ru/webhook_alice.php 。

我们选择技能会说的声音,我更喜欢爱丽丝的声音。

如果您计划仅在移动设备或浏览器中工作,请选择“需要带有屏幕的设备”。
接下来,输入Alice技能目录的设置。 如果您打算使用品牌一词进行激活,则需要在webmaster.yandex.ru服务中通过品牌网站验证。

使用设置,转到脚本。
电报机器人脚本
让我们从Telegram的脚本开始。
我们连接库,其中将处理来自机器人和爱丽丝的消息:
include_once 'webhook_parse.php';
我们设置了机器人的令牌:
$tg_bot_token = "_____YOUR_BOT_TOKEN_____";
我们得到数据:
$request = file_get_contents('php://input'); $request = json_decode($request, TRUE);
我们将数据解析为变量:
if (!$request) { die();
现在您可以使用变量了:
$令牌-现在用户在此处输入的所有单词
$ user_id-这是用户ID
$ msg_chat_id-机器人在其中接收命令的聊天
$ msg_user_name-用户名
接下来,我们调用Parse_Tokens函数进行处理:
$Out_Str = Parse_Tokens($tokens);
然后我们发送答案:
Send_Out($user_id, $Out_Str);
Send_Out函数很简单,如下所示:
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); }
Yandex.Alice的技能脚本
现在让我们继续进行Alice的脚本,它与Telegram几乎相同。
我们还连接了将处理来自机器人和Alice的消息的库,以及一个包含Alice类的库:
include_once 'classes_alice.php'; include_once 'webhook_parse.php';
我们得到数据:
$data = json_decode(trim(file_get_contents('php://input')), true);
我们将数据解析为变量:
if (isset($data['request'])) {
这里所需的变量略少:
$令牌-现在用户在此处输入的所有单词
$ user_id-这是用户ID
Yandex不断ping通已发布的技能,我添加了一行代码以立即退出脚本而无需开始完整的消息处理:
if (strpos($tokens[0], "ping") > -1) {Send_Out("pong", "", true);}
我们调用Parse_Tokens函数进行处理,与Telegram相同:
$Out_Str = Parse_Tokens($tokens);
然后我们发送答案:
Send_Out($user_id, $Out_Str);
Send_Out函数在这里更加复杂:
function Send_Out($user_id, $out_text, $out_tts = "", $is_end = false) { global $data_msg_sess_id, $user_id;
完成了爱丽丝的脚本。
例如,处理脚本Parse_Tokens本身纯粹是完成的,您可以在那里进行任何检查和处理。
function Parse_Tokens($tokens) { $out = "";
如果您需要以比问答形式更复杂的形式与用户进行交流,则需要在数据库(例如mysql)中保存该用户的$ user_id和已从该用户收到的数据,并在Parse_Tokens函数中对其进行分析。
实际上,这几乎就是全部,如果一切都正确完成,那么Telegram机器人已经可用,可以通过
dialogs.yandex.ru/developer来检查Alice的技能,然后在“测试”选项卡上转到您的新技能。

如果一切正常,您可以通过单击“审核”按钮将技能发送给审核。
现在,您有两个针对不同平台的机器人,它们的工作方式相同。
Yandex.Dialog服务文档
在这里完整脚本发布在github
下载上 。
更新:将所有内容包装在类中,并更新了github上的存储库