ipatov_dn
@ipatov_dn

Как отправлять сообщения только при поступлении нового?

Есть бот Callback Api стоящий на heroku когда вступаешь в группу он приветствует и предлагает ключевые слова, когда пишешь ключевое слово он начинает его слать постоянно
как остановить это мракобесие и сделать так чтобы он отвечал только один раз(если ответа нет 10 мин повторил его) код ниже
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)
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 1
Mesolaries
@Mesolaries
Junior Python Developer
Попробуйте вернуть http response 200 после отправки сообщения. Такие случаи возникают когда программа думает что вы не получили сообщение и отправляет его заново.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы