Конспект для себя после заказа "Телевикторина": на экране TV показывают картинки с вопросом и вариантами ответа, игрок в вайбер постит ответ, ПО анализирует правильность ответа и отправляет игроку результат, типа "Молодец, возьми конфетку", заработанные очки и т.п.
1. Создаём бота в Viber
Зачем? Без него никак.
Как? Логинимся на
, в левом боковом меню выбираем “Create Bot Account”, заполняем анкету, соглашаемся с правилами и кликаем “Create”. Запоминаем токен (ключ).
Результат. Получили паблик аккаунт в Viber (далее "паблик") и активировали бота со стороны вайбера (далее ВБ).
Проверка. Из мессенджера входим в паблик, смотрим его видимость, себя в администраторах. Проверяем работоспособность на получение сообщений от себя в паблик.
2. Создаём своего бота
Зачем? Что делает ВБ? Он а)принимает от нас запросы и отвечает на них; б)по технологии webhook рассылает сообщения о событиях в паблике на сайт, указанный в настройках ВБ (далее этот сайт "вебхук"). В 1С мы будем использовать Viber REST API (далее ВРА). С помощью ВРА можно посылать сообщения, но нельзя получать сообщения. Т.е. мы не можем запросить у ВБ, допустим, "дай полученные сообщения за последний час". Нам нужно непрерывно "отлавливать" сообщения от ВБ и обрабатывать их, иначе они для нас теряются. Этим и будет заниматься наш бот.
Как? Дабы упростить администрирование, делаем вебхук на локальной машине. Туннелируем её с помощью утилиты ngrok (регистрируемся на ngrok.com, запоминаем Your Tunnel Authtoken, скачиваем ngrok.exe, инсталлируем "ngrok authtoken <Your Tunnel Authtoken>", запуск "ngrok http 8080"). Пишем программу, которая: запускает ngrok, регистрирует в ВБ новый адрес вебхука, полученный от ngrok, поднимает веб сервер, принимает сообщения от ВБ и а)складывает их в виде файлов, б)репостит их нам в вайбер, в)умеет сообщать о своём состоянии.
Результат. На Delphi написана консольная программа ViberBot.exe, которая
при запуске считывает ini-файл и выводит параметры на консоль
формат файла:
[MAIN]
Port = 8080
Token = 4af24ee21727d2fb-2dfdХХХХХХ9d0124-d46d90d1b570af7c
Echo = 6I9Hs0B657567567RoyibrWA==
[TUNNEL]
prg = d:\ViberBot\ngrok.exe
sleep = 2000
params = http %d
API =
http://localhost:4040/api/tunnels [BLACKLIST]
sndname = bot
msg = you account is blocked
где:
Port - порт нашего вебсервера
Token - токен ВБ
Echo - вайбер-идентификатор, на который, если заполнен, репостятся входящие сообщения
prg - программа SSH туннеля
sleep - время ожидания запуска программы, мс
params - параметры для неё (протокол и порт)
API - для определения нового адреса вебхука
sndname = имя отправителя сообщения о блокировке
msg = текст сообщения о блокировке
Запускает вебсервер, собранный на дельфийских компонентах
Запускает программу туннелирования, через её API получает новый адрес вебхука
Устанавливает для ВБ новый адрес вебхука
Открывает локальную локальную базу ViberBot.db (sqlite3)
Принимает POST-запросы и (каждое отдельным потоком)
а)проверяет отправителя на присутствие в "чёрном" списке (текстовый файл black.list с вайбер-идентификаторами построчно). Если находит, отправляет ему сообщение, иначе:
б)выводит текст запроса на консоль приложения
в)сохраняет текст запроса отдельным файлом в папку IN
г)если заполнен параметр Echo, пересылает сообщение
д)сохраняет идентификаторы отправителей в ViberBot.db
Принимает GET-запросы и
а)без параметров отдаёт "Viber bot"
б)с параметром "state" отдает "ok"
Проверка. Заполняем ViberBot.ini (Echo = ). Запускаем ViberBot.exe. На консоли последняя строка должна быть "webhook OK". Постим в паблик от себя. На консоли должен вывестись текст JSON и сформироваться файл в папке IN. Находим значение "sender":{"id" и записываем его для Echo в ini. Перезапускаем ViberBot. Постим от себя. Должна быть "тишина". Постит кто-то другой в паблик. Должно быть: на консоли JSON, файл с JSON, у нас в вайбере сообщение от постера.
ViberBot.rar
Отправка сообщения из 1С83 толстый клиент
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " ", Истина);
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
Данные = Новый Структура;
Данные.Вставить("receiver", "6I9Hs0BZUХХХХХХoyibrWA==");
Данные.Вставить("min_api_version", 1);
Данные.Вставить("auth_token", "4af24ee21727d2fb-2dfdХХХХХХ9d0124-d46d90d1b570af7c");
sender = Новый Структура;
sender.Вставить("name", "Bot");
Данные.Вставить("sender", sender);
Данные.Вставить("type", "text");
Данные.Вставить("text", "Hello world! "+Строка(сч));
ЗаписатьJSON(ЗаписьJSON, Данные);
СтрокаJS = ЗаписьJSON.Закрыть();
Соединение = Новый HTTPСоединение("chatapi.viber.com", 443, ,,,, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("pa/send_message");
Запрос.Заголовки.Вставить("Content-type", "application/json; charset=utf-8");
Запрос.УстановитьТелоИзСтроки(СтрокаJS, КодировкаТекста.Системная);
Результат = Соединение.ОтправитьДляОбработки(Запрос);
Сообщить(Результат.КодСостояния);
Сообщить(Результат.ПолучитьТелоКакСтроку());
»» Нажмите, для закрытия спойлера | Press to close the spoiler ««