Создание полноценного Viberbot. Часть вторая — первый контакт или «сonversation_started»

от автора

Отправка первого сообщения пользователю — приветствуем и подписываем

В первой части мы научились запускать стартер устанавливать 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») а их полное содержимое имеет следующий вид:

ВХОДЯЩИЕ ПАРАМЕТРЫ POST — или JSON из 13 полей

{   "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 не существует   } }

Но в большинстве случаев нас интересуют только эти 5 полей

{   "context": "fromlanding", # Для анализа эффекта рекламных кампаний    "subscribed": false,    "user": {     "country": "RU", # Если проект глобальный страна нам пригодиться     "id": "J2k6sasdgghaazDeoXVYww==", # ID будем сохранять в БД     "name": "Denis" № #Имя пользователя можно сохранить, если оно есть.   } }

А Иногда нам нужно всего одно поле

«id»: «J2k6sasdgghaazDeoXVYww==»

это Главный идентификатор Viber пользователя, аналог chat_id в telegram.

И, прошу заметить, что в телеге chat_id один по всей сети мессенджера во всех всех ботах — как мобильный номер, а у вайбер id — он как токен и уникален в пределах одного вашего бота. В другом боте ваш id станет другим…

Обработаем их и ответим, чтобы получить один из трех ответов ниже — мы сформируем как ПЕРВЫЙ на данном скрине:

image

Как мы уже видим 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/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *