Django 2 рдФрд░ Viber REST API рдкрд░ рдкреВрд░реНрдг-рд╡рд┐рдХрд╕рд┐рдд Viberbot рдмрдирд╛рдирд╛ред рднрд╛рдЧ рдПрдХ - рд╡реЗрдмрд╣реВрдХ

Vib рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рдХреЗ рд▓рд┐рдП Webhook рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдмреИрдХрдПрдВрдб рдореИрд╕реЗрдВрдЬрд░ рдкрд░ рдкрд╣рд▓рд╛ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬреЗрдВ


Viber рдФрд░ рдмрд╣реБрдд рд╕реА рдорд┐рд╢реНрд░рд┐рдд рд░рд╛рдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ viberbot рдмрдирд╛рдиреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдХреЛ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рд░реИрдкрд░ рдХреЗ рдПрдХ рд╕реНрд╡рдЪреНрдЫ REST API VIBER рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рд░реЗрдбрд┐рдпреЛ Viber рдмрд╣реБрдд рдЕрдорд╛рдирдХ рд╕рд╛рдмрд┐рдд рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдЯ рдмрдирд╛рдПрдВрдЧреЗ ( рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рд╣рдЬрд╝рд╛рд░реЛрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдл рдореЗрдВ рддрд▓рд╛рдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ )ред

рдЗрд╕реА рд╕рдордп, рд╣рдо рд╡рдирд╕реНрдкрддрд┐рд╡рд┐рджреЛрдВ рдХреЗ рд╕рднреА рдиреБрдХрд╕рд╛рди рдФрд░ рдлрд╛рдпрджреЗ рджреЗрдЦреЗрдВрдЧреЗ рдФрд░ рд╕рдордЭреЗрдВрдЧреЗ: рд░реВрд╕ рдореЗрдВ рдХреНрдпрд╛ рдЖрд╕рд╛рди рд╣реИ - рд╡рдирд╕реНрдкрддрд┐рд╡рд┐рджреН рд╡реАрдПрд╕ рдмреЛрдЯреЗрд▓реЗрдЧреНрд░рд╛рдо, рдЗрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╡рдирд╕реНрдкрддрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ред

рдЫрд╡рд┐

рдЧрд╛рдбрд╝реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдзрд┐рдХ рдЕрд▓реНрдк рд╕реЗрдЯ рдХреЗ рд╕рд╛рде - рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рдЗрдмрд░ рдореЗрдВ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдпреВрдЖрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдореЗрдиреВ рдмрдЯрди рдФрд░ рдЗрдирд▓рд╛рдЗрди рдмрдЯрди рдХреЗ рд╕реБрд╕реНрдд рдЧреНрд░реЗ рд░рдВрдЧ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ред

рд▓реЗрдЦ рдЙрди рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд▓рдХреНрд╖рд┐рдд рд╣реИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ Viber REST API рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рднреАрддрд░, рдкреНрд░рддрд┐ рд╕рдкреНрддрд╛рд╣ 1-2 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЬреЛ рдХреЛрдИ рднреА рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдбрд┐рдЬрд╛рдЗрдирд░ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдмрд┐рдирд╛, рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓, рдмрд▓реНрдХ-рдореИрд╕реЗрдЬ рд╡рд┐рддрд░рдг рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде Viber рдореИрд╕реЗрдВрдЬрд░ рдкрд░ рдмреЙрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд╣рдо рдЖрдкрдХреЗ рдмреЙрдЯ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд┐рдиреАрд▓реИрдВрдбрд┐рдВрдЧ-рдкреЗрдЬ (рдЬреИрд╕реЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ) рднреА рдмрдирд╛рддреЗ рд╣реИрдВ ред

рдореИрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ Django рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдЕрднреА рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдФрд░ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЛрдб рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рдо рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред

рдкрд░реНрдпрд╛рдкреНрдд рдмреЙрдЯ рдирд╣реАрдВ - рддреЛ рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


1. Django> = 2.1 рдФрд░ рдкрд╛рдпрдерди> = 3.6 рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЪрд▓рд╛рдПрдВред
рдорд╛рдирдХ Django рдкреНрд░рдмрдВрдзрдХ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ myviberbot рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ:

python manage.py startapp myviberbot

рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ settings.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ:

#    settings.py 

DEBUG = True

ALLOWED_HOSTS = ['*']

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myviberbot', #    
]
#

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ HTTPS рдбреЛрдореЗрди рд▓рд┐рдВрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореИрдВ viber-bot рдХреЗ рд▓рд┐рдП webhook рдЗрдирд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
yourdomain.ru/webhook2020 - рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдбреЛрдореЗрди рдореЗрдВ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдХреЛ рдЬрд░реВрд░ рдмрджрд▓реЗрдВред

рдФрд░ рд╣рдо myviberbot.views рд╕реЗ def trx_bot () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗ - рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ ...

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕рдХреА рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдореЗрдВ urls.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

# urls.py
from django.contrib import admin
from django.urls import path
from myviberbot.views import trx_bot
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('webhook2020', trx_bot), #url    - webhook2020, 
#  ,   
    ]

рдпрджрд┐ рдЖрдк Django рдХреА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ webhook2020 рдХреЛ trx_bot рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдЕрдиреБрд░реЛрдз (рдЕрдиреБрд░реЛрдз) рднреЗрдЬреЗ, рдЬреЛ рдХрд┐ рд╡реНрдпреВрд╣ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ myviberbot рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

# views.py   myviberbot

from django.shortcuts import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def trx_bot(request):
    if request.method == "POST":
        viber = json.loads(request.body.decode('utf-8'))
        if viber['event'] == 'webhook':
            print(viber)
            print("Webhook  ") # -    
#       webhook
            return HttpResponse(status=200)
        else:
            print("  Webhook -   ,   POSTMAN") 
            return HttpResponse(status=500)
        return HttpResponse(status=200)

рд╣рдорд╕реЗ 200 рдУрдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмреИрдХрдПрдВрдб рд╡реАрдмрд░ рд╕рд░реНрд╡рд░ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред

рдЖрдк рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢рд╡рд╛рд╣рдХ рдХреЛ рдЕрдкрдиреЗ рдмреЙрдЯ рдХреА рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЖрдП рд╕рдВрджреЗрд╢ (рд╕рдВрд╡рд╛рдж рд╕рдорд╛рд░реЛрд╣ рдЬреЛрдбрд╝рд╛ рдпрд╛ рдЪреИрдЯ 1to1 рдЬреЛрдбрд╝рд╛) рджреЗрдЦреЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдмреИрдХрдПрдВрдб рд╡рд╛рдЗрдмрд░ рдХреЛ POST рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреИрд╕реЗ рднреЗрдЬреЗрдВ рдпрд╛ рд╡реЗрдмрд╣реБрдХ рдХреЛ рдЗрдирд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ - рдпрд╣ рд╕рд╡рд╛рд▓ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрджрдд рдбрд╛рд▓рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдареАрдХ рд╣реИ - рд╣рдо рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ:

2. рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЙрдЯ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ ред рдФрд░ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ ( VDS рдпрд╛ рд╕рд╛рдЭрд╛ ) рдпрд╛ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдирдХреНрд░реЛрд░реНрдХ рдЕрд╕реНрдерд╛рдпреА рд╕реБрд░рдВрдЧ рдорджрдж рдХрд░реЗрдЧрд╛),

рдХ) рдпрджрд┐ рд╣рдо рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рдмрдВрдзрдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ:
рдЕрдЬрдЧрд░ рдкреНрд░рдмрдВрдзрди рдерд┐рдВрдХрдкреИрдб runserver

рдПрдХ рд╕рдлрд▓ рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж, рд╣рдо ngrok рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред

рдмреА) рдФрд░ рдПрдХ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реАрдХреЗ рд╣реИрдВ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рднреВрд▓ рдЬрд╛рдиреЗ рдкрд░ рдпрд╛рддреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рднреВрд▓ рдЬрд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ php5.6 рдХреЗ рд╕рд╛рде рдбрд╛рд▓реЗрдВ рдЙрдЪреНрдЪрддрд░ рдирд╣реАрдВ - рдпрд╣ begetovtsev рд╕реЗ рд╕рд▓рд╛рд╣ рд╣реИред

рддреЛ - рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ - webhook рд░рдЦреЛ


рдЬреЛ рдХреЛрдИ рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ Chrome рдХреЗ рд▓рд┐рдП POSTMAN рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╡рд╣ рдЕрдЧрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕реАрдзреЗ webhook рдХреЗ рд▓рд┐рдП POST рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред

рд╣рдо рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдХрд┐рд╕реА рднреА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП sethook.py, рдЕрдиреБрд░реЛрдз рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдЕрдиреБрд░реЛрдз) рдХреЛ рдирд╣реАрдВ рднреВрд▓рдирд╛

#sethook
import requests
import json
auth_token = 'xxxxxxxxx-ttttttttttttttttt-wwwwwwwwwwww' #       #.2
hook = 'https://chatapi.viber.com/pa/set_webhook'
headers = {'X-Viber-Auth-Token': auth_token}


sen = dict(url='https://yourdomain.ru/webhook2020',
           event_types = ['unsubscribed', 'conversation_started', 'message', 'seen', 'delivered'])
# sen -  body     backend  viber
#seen, delivered -  ,     ,
#         ,   )

r = requests.post(hook, json.dumps(sen), headers=headers)
# r -       viber 
print(r.json())
#   print    "status_message":"ok" -   ,
#    

рд╣рдо рдЗрд╕реЗ рд╡рд░реНрдХрд┐рдВрдЧ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рд╕реЗ рдХрдорд╛рдВрдб рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:
рдЕрдЬрдЧрд░ рд╕реЗрдЯрд╣реБрдХреЙрдо

! Webhook рдХреЛ POST рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЪреИрдЯ рдкрд░ рдЖрдпрд╛ рдерд╛ (рдбрд╛рдпрд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗрдмрд╣реБрдХ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдШрдЯрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ ["рдмрд╛рддрдЪреАрдд_рд╕реНрдЯрд╛рд░реНрдЯ"], рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдкрд░реНрдХ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдЖрд░рдВрдн рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ viberbot рдХреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реИ рдФрд░ рд╡рд╣ рдХреНрдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред

рднрд╛рдЧ 2:
Django 2 рдФрд░ Viber REST рдПрдкреАрдЖрдИ рдкрд░ рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд Viberbot рдмрдирд╛рдирд╛ред рднрд╛рдЧ рджреЛ - onversation_started

рд╕рд╛рдордЧреНрд░реА:

Viber REST API
Django рд╕рдВрд╕реНрдХрд░рдг 2.2 рд░реЗрдбрд┐рдпреЛ-рдЦрдирд┐рдХ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг

Source: https://habr.com/ru/post/undefined/


All Articles