Отправка первого сообщения пользователю — приветствуем и подписываем
В первой части мы научились запускать стартер устанавливать webhook для нашего проекта botviber.
В этой 2-й мы научимся отправлять первое сообщение показываемое для наших пользователей, создавать ссылки для поиска и запуска нашего бота как внутри ViberURL так и NoViberURL
Сформируем ссылки на бота
1) Oффлайн QR — его можно скачать из партнерской админки viber
2) Ссылка для месcенджера и передачи по мессенджеру ViberURL
viber://pa?chatURI=dinner&context=fromhabr
3) Ссылка редирект NoViberURL в интернете много таких сократителей URL — но все они похожи на спам, поэтому рекомендую создать свой код из трех строк PHP и положить файл себе на хостинг, вот содержимое файла foot.php
<?php header ("Location: viber://pa?chatURI=dinner"); exit();
Приветствия botviber или «event»: «conversation_started»
После открытия QR или перехода по ссылке на адрес нашего приложения от серверов Viber (Jetty) прилетают POST запросы с событием («event»: «conversation_started») а их полное содержимое имеет следующий вид:
{ "chat_hostname": "SN-327_", # Если Viber на нескольких устройствах - будут разные "chat_hostname" "event": "conversation_started", # Событие первого запуска или инициализации бота на строне пользователя "context": "fromlanding", # тут можно получать UTM параметры источника ссылки "message_token": 5406893180055821524, # токен сообщения "subscribed": false, # пользователь еще не подписан, если тут true то уже подписан "timestamp": 1581161565470, # UNIXTIME "type": "open", # открытие диалога "user": { "api_version": 8, # поддерживаемая версия API на устройстве пользователя. "avatar": "https://media-direct.cdn.viber.com/avatar...", # ссылка на действующий аватар пользователя - у анонимных пусто, поля аватар отсутствует "country": "RU", # Принадлежность телефонного номера пользователя к стране (UA-украина, BY-беларусь, IL-израиль, MD - молдова) "id": "J2k6sasdgghaazDeoXVYww==", # ID пользователя в ВАШЕМ боте "language": "ru", # Язык приложения пользователя или язык устройства(если они совпадают) "name": "Denis" № #имя пользователя в Viber - то как он себя подписал - у анонимных пусто поля name не существует } }
{ "context": "fromlanding", # Для анализа эффекта рекламных кампаний "subscribed": false, "user": { "country": "RU", # Если проект глобальный страна нам пригодиться "id": "J2k6sasdgghaazDeoXVYww==", # ID будем сохранять в БД "name": "Denis" № #Имя пользователя можно сохранить, если оно есть. } }
это Главный идентификатор Viber пользователя, аналог chat_id в telegram.
И, прошу заметить, что в телеге chat_id один по всей сети мессенджера во всех всех ботах — как мобильный номер, а у вайбер id — он как токен и уникален в пределах одного вашего бота. В другом боте ваш id станет другим…
Обработаем их и ответим, чтобы получить один из трех ответов ниже — мы сформируем как ПЕРВЫЙ на данном скрине:

Как мы уже видим botviber можно забрендировать под любой бизнес либо мини магазинчик, также подогнать стили под ваш основной сайт
1) для обработки пользовательских сообщений в файле проекта myviberbot/views.py внесем изменения:
# import requests # Добавим Библиотеку для отправки запросов import json from django.shortcuts import HttpResponse from django.views.decorators.csrf import csrf_exempt auth_token = '45df835d27d01f-cd2e7wetwerga18a8-9a7wert786234' #!ТОКЕН СТАВИМ СВОЙ ЭТО Фейковый неживой url = 'https://chatapi.viber.com/pa/send_message' headers = {'X-Viber-Auth-Token': auth_token} # ДЕКОРАТОР ДЛЯ функций и отправки def sending(func): def wrapped(*args): return requests.post(url, json.dumps(func(*args)), headers=headers) return wrapped # Отправка текста @sending def send_text(agent, text, track=None): m = dict(receiver=agent, min_api_version=2, tracking_data=track, type="text", text=text) return m @csrf_exempt def trx_bot(request): if request.method == "POST": viber = json.loads(request.body.decode('utf-8')) if viber['event'] == 'conversation_started': print("Приветствую пользователя") conversation(viber) #Обработка запроса - обзор функции следующий абзац. elif viber['event'] == 'webhook': #print(viber) #print("Webhook успешно установлен") return HttpResponse(status=200) else: print("Это не Webhook - пробуй еще раз, или используй POSTMAN") return HttpResponse(status=500) return HttpResponse(status=200) def conversation(viber): id = viber['user']['id'] if viber['subscribed']: send_text(id, 'ВЫ УЖЕ ПОДПИСАНЫ') else: send_text(id, 'Что умеет этот бот?\n\nЗависит от ваших идей. Отправь мне что угодно и присоединяйся...')
Перезапустим наш проект Django.
К сожалению «Rakuten Viber» никому не дает официальные страницы на PA и сообщество, исключения крупные бренды и публичные личности, поэтому для SEO продвидения и PR по соцсетям и др. рекомендую создать минилендинг — мелкая страница на которую переходят все с основного сайта или др. ресурсов вот образец:
Удачного запуска botviber.
Продолжение следует…
В следующей статье мы разберем event[«message»], для обработки пользовательских сообщений, вы узнаете, что сделать чтоб вести диалог, как отделять следующие сообщения, вообще как botviber научить понимать, что это следующие.
(Создание полноценного Viberbot на Django 2 и Viber REST API. Часть третья — Message)
Материалы:
Документация viber REST API
Django версии 2.2
Радиовайбер-минилендинг
ссылка на оригинал статьи https://habr.com/ru/post/486858/

Добавить комментарий