这个问题听起来很愚蠢,请不要责骂太多。我以前从未处理过机器人。实际上,订购水的机器人是可以接受的。开始后,机器人会询问您是否要订购,如果答案是肯定的,机器人会说发送您的联系人。如果用户发送他的联系人,那么在发送联系人之后,机器人应该发送下一条带有问题的消息,输入你的全名,在全名之后还有另一个问题,等等。但是在发送联系人之后,我又问了一遍如果您想订购并且不进一步。请帮帮我。这是实际的代码。
<?php
$data = json_decode(file_get_contents('php://input'), TRUE);
file_put_contents('file.txt', '$data: '.print_r($data, 1)."\n", FILE_APPEND);
$data = $data['callback_query'] ? $data['callback_query'] : $data['message'];
define('TOKEN', '0000000000:собственно сам токен полученный у bot father');
$message = mb_strtolower(($data['text'] ? $data['text'] : $data['data']),'utf-8');
$method = 'sendMessage';
$send_data = [
'text' => 'Хотите ли вы заказать?',
'reply_markup' => [
'resize_keyboard' => true,
'keyboard' => [
[
['text' => 'Да'],
['text' => 'Нет'],
]
]
]
];
if ($message=='да')
{
$method = 'sendMessage';
$send_data = [
'text' => 'Пожалуйста нажмите на кнопку отправить контакт',
'reply_markup' => [
'resize_keyboard' => true,
'keyboard' => [
[
['text' => 'Отправить контакт','request_contact'=>true],
]
]
]
];
$contact=$data['contact']['phone_number'];
}
elseif (isset($contact)) {
$method = 'sendMessage';
$send_data = ['text' => 'Напишите ФИО'];
}
elseif ($message=='нет')
{
$method = 'sendMessage';
$send_data = ['text' => 'Спасибо, приходите еще'];
}
$send_data['chat_id'] = $data['chat'] ['id'];
$res = sendTelegram($method, $send_data);
function sendTelegram($method, $data, $headers = [])
{
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://api.telegram.org/bot' . TOKEN . '/' . $method,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array_merge(array("Content-Type: application/json"))
]);
$result = curl_exec($curl);
curl_close($curl);
return (json_decode($result, 1) ? json_decode($result, 1) : $result);
}
?>
我认为您需要熟悉OOP。这是一种将程序视为对象交互的方式。这是人们思考的一种非常自然的方式,因此它有助于组织代码。
你有一个机器人(对象)。机器人可以发送消息(对象),用户(也是一个对象)可以对这些消息给出答案(对象),取决于哪个,机器人将发送新消息。事实证明,机器人是一组消息和关于哪个消息是当前消息的知识;消息是文本和响应选项;响应选项是文本和下一条消息的链接。
如果您还没有研究过php 中的 OOP 工具,那么您可以使用关联数组。
虽然没有逻辑代码。但是我认为看这个结构,你已经可以理解这个逻辑是如何工作的了。重点是相同类型的对象具有相同的结构并且可以以相同的方式进行处理。
让我们用文字来谈谈逻辑:
1. 找出当前消息
在您的示例中,您是间接进行的。如果答案是“否”,则假定当前问题是“您想订购吗?”。你可以这样,但最好显式发送当前消息(电报机器人 API 可能支持一些消息标识符)。
2.在当前消息中查找用户的回复
您可以简单地匹配响应文本或使用标识符。
3. 转到下一个帖子
下一个消息在下一个响应中指示。如果消息没有提供答案,则对话结束。
剩下的只是将它与电报联系起来。我认为你可以做到。把程序想象成对象的交互,那么代码就不再神秘了。首先,重要的是谁做什么,他们如何做——这是第二个问题。