Как с вайбера отправить на сайт сообщение и обработать на PHP

381
05 сентября 2017, 11:39

Скажите как с вайбера отправить на определенный номер фото и текст к фото Кака Использовать API вайбера чтобы фото сохранить на диске сайта, а текстовое сообщение перед фотографией определить как зарезервированное слово к примеру "товар # 255" Сайт будет знать что в базу нужно записать фотку под айдишником 255

Answer 1

Итак, в разделе "начало работы" официальной документации не очень очевидно, но всё-таки описывается создание апи ключа, получение сообщений как типа коллбэков "message", а также регистрация коллбэков.

Получение апи ключа ("начало работы")

тыкаем "редактировать инфо" (edit info) нашего паблик аккаунта (не обычного! обычного нельзя) и там можно получить API-ключ

Создаем скрипт получения событий (Receive message from user)

Например по адресу https://example.com/my-viber-script.php. https с валидным сертификатом обязателен.

Скрипт создаем с кодом вроде такого

<?php
$x = json_decode($y=file_get_contents("php://input"),true);
if($x['event']=='message' && $x['message']['type']=='picture'){
    // $x['message']['media'] - это ссылка на картику!
    file_put_contents('msg'.$x['message']['message_token'].'.txt',$y);
}
echo 'Этот текст нужен, чтобы веб-сервер не вернул 206 вместо 200';

Установка хука (раздел Webhooks)

отправляем POST-запрос с данными:

{  
   "url": "https://example.com/my-viber-script.php",  
   "event_types": ["delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started"]  
}

по адресу https://chatapi.viber.com/pa/set_webhook

https://example.com/my-viber-script.php обязательно надо заменить на адрес своего скрипта. https с валидным сертификатом обязателен.

не смотря на то что в типах событий (event_types) нет message, они всё равно придут, т.к. message, subscribed и unsubscribed обязательные типы.

после этого он отправит запрос на наш скрипт, который должен вернуть 200 Ok, и ответит "ура, вебхук установлен!"

Теперь отправляем картинку и смотрим как она прилетает в наш скрипт.

Текстовое сообщение будет в переменной $x['message']['text'] - его можно распарсить, например, регэкспами, например, для сообщений вида "Tovar #123"

if(preg_match('tovar ?# ?(\\d+) ?/i',$x['message']['text'],$m)){
    // $m[1] == 123
} else {
    // формат не подошел
}

По-хорошему надо бы ответить пользователю результатом, это описано тут - https://developers.viber.com/docs/api/rest-bot-api/#send-message

READ ALSO
Как вместе соеденить TinyMCE и yii2 file-kit?

Как вместе соеденить TinyMCE и yii2 file-kit?

У кого-то получалось использовать вместе виджет TinyMCE и фукнционал yii2 file-kit для добавления фото при редактировании текста? Если да, то поделитесь,...

287
Не запускается проект PHP в NetBeanse

Не запускается проект PHP в NetBeanse

Доброе время сутокУстановил NetBeanse, создал простой проект на PHP

202
Как отправив от клиента из браузера символ двойной кавычки, сохранить его в базе postgresql и вернуть обратно на клиента, отобразив в браузере?

Как отправив от клиента из браузера символ двойной кавычки, сохранить его в базе postgresql и вернуть обратно на клиента, отобразив в браузере?

Не получается сохранить в таблице postgresql символ двойной кавычки "Сохраняю в поле с типом данных text

228
В Хроме не открываются другие страницы домена, когда скрипт PHP выполняется

В Хроме не открываются другие страницы домена, когда скрипт PHP выполняется

ЗдравствуйтеНапример, запускаю скрипт с CURL-запросом

294