D
D
Dmitry2018-01-30 15:52:17
Python
Dmitry, 2018-01-30 15:52:17

How to send messages only when a new one arrives?

There is a Callback Api bot standing on heroku when you join a group, he greets and offers keywords, when you write a keyword, he starts sending it all the time
how to stop this obscurantism and make it answer only once (if there is no answer for 10 minutes, repeat it) code below

from flask import Flask, request, json, Response
import time
import gunicorn
import vk

token = '***'
session = vk.Session(access_token=token)
api = vk.API(session, v='5.69')

hi = "Привет, спасибо за подписку! Я Ваш личный говорящий блокнот, готов Вам помочь. Я знаю такие команды:\n"\
    "«Хочу предложение на сайт / дизайн / продвижение в интернете»\n"\

##### БОТ ВКОНТАКТЕ #####

app = Flask(__name__)

MY_GROUP = *** # id твоей группы
CALLBACK = '***'  # Твоя строка которую ты записал в первом шаге


@app.route('/', methods=['POST'])
def handler():
    data = json.loads(request.data)
    if 'type' not in data.keys():
        return 'not vk'
    if data['type'] == 'confirmation' and data['group_id'] == MY_GROUP:
        return CALLBACK
    elif data['type'] == 'group_join':  # Вступивший в группу
        user_id = data['object']['user_id']
        api.messages.send(user_id=str(user_id), message=hi)
        return 'ok'
    elif data['type'] == 'message_new' and data['object']['out'] == 0 and data['object']['read_state'] == 0:  # новое сообщение
        user_id = data['object']['user_id']
        body = data['object']['body'].lower()

        ##### Раздел №1 #####
        cait = ['хочу предложение на сайт', 'сайт', 'создать сайт', 'создание сайтов', 'хочу сайт']
        body_cait = data['object']['body'].lower()
        lending = ['лендинг', 'лендос', 'уточни ты хочешь создать лендинг', 'landing', 'визитка', 'сайтвизитка']
        magazin = ['магазин', 'магаз', 'мнтернет магазин']
        corp = ['для фирмы', 'многостраничный', 'корпоративный', 'для компании']
        dorabotka = ['доработать', 'имеющийся', 'мой сайт', 'редизайн', 'исправление', 'изменить']

        if body in cait:
            mes = 'Уточни ты хочешь создать Лендинг / Интернет магазин / Корпоративный / Доработать имеющийся?'
            user_id = data['object']['user_id']
            api.messages.send(user_id=str(user_id), message=mes)
        if body_cait in lending:
            user_id = data['object']['user_id']
            c1 = 'Отличный выбор! У нас Лендинг будет стоить от 20 000 рублей. Заполни бриф, чтобы посчитать точнее. После в течении 1 дня мы пришлём коммерческое с точной ценой.'
            api.messages.send(user_id=str(user_id), message=c1)
        if body_cait in magazin:
            user_id = data['object']['user_id']
            c2 = 'Отличный выбор! У нас Интернет магазин будет стоить от 70 000 рублей. Заполни бриф, чтобы посчитать точнее. После в течении 1 дня мы пришлём коммерческое с точной ценой.'
            api.messages.send(user_id=str(user_id), message=c2)
        if body_cait in corp:
            user_id = data['object']['user_id']
            c3 = 'Отличный выбор! У нас Корпоративный сайт будет стоить от 35 000 рублей. Заполни бриф, чтобы посчитать точнее. После в течении 1 дня мы пришлём коммерческое с точной ценой.'
            api.messages.send(user_id=str(user_id), message=c3)
        if body_cait in dorabotka:
            user_id = data['object']['user_id']
            c4 = 'Правильное решение! Обновить и заставить работать твой сайт мы поможем от 10 000 рублей. Заполни бриф, чтобы посчитать точнее. После в течении 1 дня мы пришлём коммерческое с точной ценой.'
            api.messages.send(user_id=str(user_id), message=c4)
        ######################


        return 'ok'
    return Response('Unimplemented event type', status=501)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
E
Emil Manafov, 2018-01-30
@Mesolaries

Try to return http response 200 after post is sent. Such cases arise when the program thinks that you have not received the message and sends it again.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question