Вопрос следующий. Не могу понять, точнее организовать логику работы чат бота в вайбер (не думаю что стоит делать привязку именно к вайбер в данном вопросе, но раз делаю про него то и написал).
Обработку по конкретному сообщению от пользователя сделать не проблема, словив $viber->message->text.
Сделав проверку на соответствие или вхождение.
Например:
if ($viber->message->text=='hello') { отправка ответа .... hello user, how are u? .... } или через strpos
Но, вопрос в следующем. Например нужно отредактировать данные пользователя в бд.
1. Выводим список кнопок, каждая соответствует какому-то пользователю.
2. Нажимаем на кнопку, пошло сообщение в обработку, например "edituser12" (где 12 например id пользователя)
3. Словили сообщение, нашли вхождение "edituser", определили id, собственно показываем сообщение, например "Введите новые ФИО пользователя".
Вот теперь вопрос. Будет введено какое то новое ФИО, и отправлено в обработку сообщением. Как определить какой именно пользователь должен быть отредактирован?
Сделал через куки, то есть на 3-ем шаге записываю в куки, что сейчас идет процесс редактирования пользователя, id пользователя, и соответственно следующее сообщение это будет ФИО пользователя. Но, мне кажется, что делать это через куки не правильно, и есть более правильный вариант, поскольку этот не стабилен. Но понять как, пока не могу, хотя мне кажется что ответ на поверхности и очень прост.
Надеюсь кто-то понял мой вопрос и поможет грамотным ответом :)
Когда пользователь пишет в паблик(чат), определяется его 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);
}
?>
Это пример для размышления ... может есть еще варианты ....