«
»
ViberСоциальные сети

Viber чат бот — Отправка структурированного сообщения

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

Мы разработаем чат-бот Viber, похожий на чат-бот LetzCricket .

В поисках чата бота

Прежде всего, мы собираемся выяснить, как выглядит чат-бот LetzCricket. Для этого нам нужно найти общедоступную учетную запись с именем LetzCricket в Viber.

поиск-для-Viber-общественного-счета

Поиск в публичном аккаунте Viber

Вы получите экран, похожий на следующий скриншот, если войдете в публичный чат и подпишитесь на публичный аккаунт.

letzcricket-экран, начиная

Теперь нажмите на значок сообщения в верхней правой части экрана, чтобы начать чат 1 на 1. Затем сообщение «Привет», чтобы начать разговор. В результате вы увидите следующее сообщение с меню клавиатуры.

меню клавиатуры чата viber

Пример меню клавиатуры Viber

Теперь, когда у нас есть предварительный просмотр того, что мы собираемся сделать, давайте приступим к написанию кода. Вот код PHP:

<?php $request = file_get_contents("php://input"); $input = json_decode($request, true); if($input['event'] == 'webhook') { $webhook_response['status']=0; $webhook_response['status_message']="ok"; $webhook_response['event_types']='delivered'; echo json_encode($webhook_response); die; } else if($input['event'] == "subscribed") { // when a user subscribes to the public account } else if($input['event'] == "conversation_started"){ // when a conversation is started } elseif($input['event'] == "message") { /* when a user message is received */ $type = $input['message']['type']; //type of message received (text/picture) $text = $input['message']['text']; //actual message the user has sent $sender_id = $input['sender']['id']; //unique viber id of user who sent the message $sender_name = $input['sender']['name']; //name of the user who sent the message // here goes the data to send message back to the user if($text == 'LCNews'){ //if user presses News option $data = getNewsList($sender_id); } elseif($text=='LCArticles'){ //if user presses Articles option $data = getArticleList($sender_id); } elseif($text==' LCInterviews'){ //if user presses Interview option $data = getInterviewList($sender_id); } elseif($text==' LCGallery'){ //if user presses Gallery option $data = getGalleryList($sender_id); } elseif($text==' LCPoll'){ //if user presses Poll option $data = getPollList($sender_id); } elseif($text==' LCPOTM'){ //if user presses Player of the month option $data = getPOTM($sender_id); } elseif($text==' LCQuote'){ //if user presses Quote option $data = getQuote($sender_id); } else{ $data = getMainMenu($sender_id); } //here goes the curl to send data to user $ch = curl_init("https://chatapi.viber.com/pa/send_message "); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); $result = curl_exec($ch); curl_close($ch); } ?>

Создание меню клавиатуры

Мы отправили нормальный текст в предыдущей статье. В этой статье мы отправляем меню клавиатуры вместе с сообщением. Клавиатуры могут быть прикреплены к любому типу сообщений и отправляться и отображаться вместе. Чтобы прикрепить клавиатуру к сообщению, просто добавьте параметры клавиатуры в сообщение JSON. Пожалуйста, обратитесь к предыдущей статье, чтобы увидеть параметр клавиатуры.

Клавиатуры полностью настраиваемые. Мы можем создавать и проектировать в соответствии с нашими требованиями. Клиент всегда будет отображать последнюю клавиатуру, которая была ему отправлена.

Мы создали функцию getMainMenu() для создания меню клавиатуры. Он будет вызываться там же, где мы подготовили контент для доставки пользователю.

Функция getMainMenu (), которая доставляет пользователю главное меню, будет выглядеть так:

<?php function getMainMenu($user_id){ $data['auth_token']='your_auth_token'; $data['receiver']=$user_id; $data['BgColor']="#ffffff"; $data['type']='text'; $data['text']="Please select one of the options below:"; $keyboard_array['Type']='keyboard'; $keyboard_array['DefaultHeight']=false; $keyboard_array['BgColor']="#FFFFFF"; $keyboard['keyboard']=$keyboard_array; $news['Columns']=2; $news['Rows']=2; $news['TextVAlign']="bottom"; $news['TextHAlign']="center"; $news['TextOpacity']="100"; $news['Text']='NEWS'; $news['TextSize']="regular"; $news['ActionType']="reply"; $news['ActionBody']="LCNews"; $keyboard['keyboard']['Buttons'][]=$news; $articles['Columns']=2; $articles['Rows']=2; $articles['TextVAlign']="bottom"; $articles['TextHAlign']="center"; $articles['TextOpacity']="100"; $articles['Text']='ARTICLES'; $articles['TextSize']="regular"; $articles['ActionType']="reply"; $articles['ActionBody']="LCArticles"; $keyboard['keyboard']['Buttons'][]=$articles; $interviews['Columns']=2; $interviews['Rows']=2; $interviews['TextVAlign']="bottom"; $interviews['TextHAlign']="center"; $interviews['TextOpacity']="100"; $interviews['Text']='INTERVIEWS'; $interviews['TextSize']="regular"; $interviews['ActionType']="reply"; $interviews['ActionBody']="LCInterviews"; $keyboard['keyboard']['Buttons'][]=$interviews; $gallery['Columns']=2; $gallery['Rows']=2; $gallery['TextVAlign']="bottom"; $gallery['TextHAlign']="center"; $gallery['TextOpacity']="100"; $gallery['Text']='GALLERY'; $gallery['TextSize']="regular"; $gallery['ActionType']="reply"; $gallery['ActionBody']="LCGallery"; $keyboard['keyboard']['Buttons'][]=$gallery; $poll['Columns']=2; $poll['Rows']=2; $poll['TextVAlign']="bottom"; $poll['TextHAlign']="center"; $poll['TextOpacity']="100"; $poll['Text']='POLL'; $poll['TextSize']="regular"; $poll['ActionType']="reply"; $poll['ActionBody']="LCPoll"; $keyboard['keyboard']['Buttons'][]=$poll; $potm['Columns']=2; $potm['Rows']=2; $potm['TextVAlign']="bottom"; $potm['TextHAlign']="center"; $potm['TextOpacity']="100"; $potm['Text']='PLAYER OF THE MONTH'; $potm['TextSize']="regular"; $potm['ActionType']="reply"; $potm['ActionBody']="LCPOTM"; $keyboard['keyboard']['Buttons'][]=$potm; $quote['Columns']=2; $quote['Rows']=2; $quote['TextVAlign']="bottom"; $quote['TextHAlign']="center"; $quote['TextOpacity']="100"; $quote['Text']='QUOTE OF THE DAY'; $quote['TextSize']="regular"; $quote['ActionType']="reply"; $quote['ActionBody']="LCQuote"; $keyboard['keyboard']['Buttons'][]=$quote; $website['Columns']=4; $website['Rows']=2; $website['TextVAlign']="bottom"; $website['TextHAlign']="center"; $website['TextOpacity']="100"; $website['Text']='VISITE OUR WEBSITE'; $website['TextSize']="regular"; $website['ActionType']="open-url"; $website['ActionBody']="http://www.letzcricket.com"; $keyboard['keyboard']['Buttons'][]=$website; $data['keyboard']=$keyboard['keyboard']; } ?>

Это покажет меню клавиатуры с индивидуальным дизайном.

Теперь, если вы нажмете «Новости» в меню клавиатуры, сообщение «LCNews» будет отправлено на веб-крючок. Мы можем легко определить, нажал ли пользователь параметр «Новости», и получить новости, чтобы отправить их пользователю.

Функция отправки списка новостей пользователю выглядит следующим образом:

function getNewsList($user_id){ //fetch news array from wherever you like from your database or by calling any api // your news list will be something like this: $newsArray = array( 'title'=>'The Title', 'date'=>'2017-01-29', 'link'=>'http://www.letzcricket.com', 'image'=>' https://pbs.twimg.com/profile_images/776331737538371584/6y1GnWLP.jpg' ); $keyboard_array['Type']='keyboard'; $keyboard_array['BgColor']='#dddddd'; for($i=0;$i<count($newsArray);$i++){ $left['Columns']=2; $left['Rows']=2; $left['ActionType']="open-url"; $left['ActionBody']=$newsArray[$i]['link']; $left['BgColor']="#ffffff"; $left['Image']=$newsArray[$i]['image']; $keyboard_array['Buttons'][]=$left; $right['Columns']=4; $right['Rows']=2; $right['Type']="url"; $right['TextSize']="regular"; $right['TextHAlign']="left"; $right['TextVAlign']="top"; $right['ActionType']="open-url"; $right['ActionBody']=$newsArray[$i]['link']; $right['BgColor']="#f5f5f5"; $keyboard_array['Buttons'][]=$right; } $data['auth_token']='your_auth_token'; $data['receiver']=$user_id; $data['BgColor']="#ffffff"; $data['type']='text'; $data['text']="Here are some news from LetzCricket:"; $data['keyboard']=$keyboard_array; }

Это отобразит список новостей обратно пользователю, как:

структурированное сообщение о чат-боте

Пример блочного чата Viber.

Точно так же вы можете отправить список статей, галереи или интервью в формате, который вам нравится.

Надеюсь, вам понравится этот полный урок. Пожалуйста, напишите нам, если у вас возникнут проблемы. Мы могли бы также продолжить с другими функциями, если вы хотите. Не забудьте оставить отзыв о том, что вы хотели бы, чтобы мы предоставили вам в продолжение этого урока.

Источник записи: https://thedebuggers.com

Связанные записи
FacebookWEBWEB - PHPСоциальные сети

Подписка Messenger Bot с использованием Broadcast API на PHP

ViberСоциальные сети

Создайте полноценного бота Viber Chat за 6 простых шагов

FacebookСоциальные сети

Вложенное постоянное меню с использованием API Messenger Profile

FacebookСоциальные сети

Как создать чат в Facebook Messenger с помощью PHP