@lokidex

Как обрабатывать ответы viber bot?

Вопрос следующий. Не могу понять, точнее организовать логику работы чат бота в вайбер (не думаю что стоит делать привязку именно к вайбер в данном вопросе, но раз делаю про него то и написал).

Обработку по конкретному сообщению от пользователя сделать не проблема, словив $viber->message->text.
Сделав проверку на соответствие или вхождение.
Например:
if ($viber->message->text=='hello') { отправка ответа .... hello user, how are u? .... } или через strpos

Но, вопрос в следующем. Например нужно отредактировать данные пользователя в бд.
1. Выводим список кнопок, каждая соответствует какому-то пользователю.
2. Нажимаем на кнопку, пошло сообщение в обработку, например "edituser12" (где 12 например id пользователя)
3. Словили сообщение, нашли вхождение "edituser", определили id, собственно показываем сообщение, например "Введите новые ФИО пользователя".

Вот теперь вопрос. Будет введено какое то новое ФИО, и отправлено в обработку сообщением. Как определить какой именно пользователь должен быть отредактирован?

Сделал через куки, то есть на 3-ем шаге записываю в куки, что сейчас идет процесс редактирования пользователя, id пользователя, и соответственно следующее сообщение это будет ФИО пользователя. Но, мне кажется, что делать это через куки не правильно, и есть более правильный вариант, поскольку этот не стабилен. Но понять как, пока не могу, хотя мне кажется что ответ на поверхности и очень прост.

Надеюсь кто-то понял мой вопрос и поможет грамотным ответом :)
  • Вопрос задан
  • 1246 просмотров
Пригласить эксперта
Ответы на вопрос 1
AleksMo
@AleksMo
Когда пользователь пишет в паблик(чат), определяется его id (yI8UmH+jb9ZAzyYtU/mYwg==),
ID можно записать в таблицу.
Если он отправил сообщение - изменить имя (пример:EditName), то в таблице ищем соответствующий ID и записываем новое ФИО (запрос - update), но это только для Вашей бд.
В вайбере имя будет только, то которое указал пользователь.
<?php
# массив с данными пользователя ...
$json = file_get_contents('php://input');
$viber = json_decode($json);
//$sender=$viber->sender->id;//ID Для отправки сообщения

$sender = $viber->{'sender'}; // sender - это массив с данными пользователя
$name_user=$sender->name;//Имя
$avatar = $sender->avatar; //Картинка
$receiverID = $sender->id; // ID

# Сообщение от пользователя
$message=$viber->message->text;

if ($receiverID!= "") //Если ID не пустое то производим сохранение пользователя в БД

{
# Записываем в базу данные о пользователе, который подписался ....
# Подключение к БД
include 'config.php';
$db = mysql_connect($servername, $username, $password);
if (!$db) {die('Ошибка соединения: ' . mysql_error());}
mysql_select_db($dbname, $db);
/*Делаем запрос к БД*/
$result = mysql_query ("INSERT IGNORE INTO ViberTab (receiver,name, avatar) VALUES ('$receiverID','$name_user', '$avatar')");
mysql_close($db);
}
// 1
if ($message == ' EditName ') //Если сообщение равно изменить имя
{
include 'config.php';
$db = mysql_connect($servername, $username, $password);
if (!$db) {die('Ошибка соединения: ' . mysql_error());}
mysql_select_db($dbname, $db);
/*Делаем запрос к БД*/
$result = mysql_query ("UPDATE ViberTab SET name =$viber->message->text WHERE id=$receiverID ");
mysql_close($db);
}
?>
Это пример для размышления ... может есть еще варианты ....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект