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


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


В первой части мы научились запускать стартер устанавливать webhook для нашего проекта botviber.

В этой 2-й мы научимся отправлять первое сообщение показываемое для наших пользователей, создавать ссылки для поиска и запуска нашего бота как внутри ViberURL так и NoViberURL

image


Сформируем ссылки на бота


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 станет другим…

Обработаем их и ответим, чтобы получить один из трех ответов как на скрине выше
а) type=«text»
б) а тут мы видим классический случай type=«rich_media»
в) на третьем скрине Type=«keyboard»

Детальнее на viber REST API, а ниже рассмотрим как получить первый вариант

Как мы уже видим 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
Радиовайбер-минилендинг




К сожалению, не доступен сервер mySQL