Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2017 22:06:15

leet896
Зарегистрирован: 2017-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

Не могу написать вебхук к боту телеграмм, помогите люди добрые
Облазил интернет, вроде бы нашел подходящую тему, но все равно не получается
Вот мой код бота V

Скажите пожалуйста что нужно и куда добавить, если можно, прям в этот код написать

И потом стоит еще вопрос как его потом разместить на сервисе Heroku…
Если поможите могу отблагодарить денюшкой на киви(куда перевсти, ответите в личку или в теме)

 import telebot
import constants
bot = telebot.TeleBot(constants.token)
#-----------------------
@bot.message_handler(commands=['start'])
def handle_text(message):
    answer = "Кто-то запустил бота"
    log(message, answer)
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    user_markup.row('Прайс')
    bot.send_message(message.chat.id, """Вас приветствует магазин
Что бы заказать товар  - отправьте сообщение цифрами "100" """, reply_markup=user_markup, parse_mode="Markdown")
#ВЫВОД ЛОГОВ
print(bot.get_me())
def log(message, answer):
    print("\n --------")
    from datetime import datetime
    print(datetime.now())
    print("Сообщение от {0} {1}. (id = {2}) \n Текст - {3}". format(message.from_user.first_name,
                                                                    message.from_user.last_name,
                                                                    str(message.from_user.id),
                                                                    message.text))
    print(answer)
@bot.message_handler(content_types=['text'])
def handle_text(message):
    answer = """ Карандаш - 100 руб. - ответ "200" """
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    if message.text == "Прайс":
        answer = "Узнал прайс у бота"
        log(message, answer)
        user_markup.row('Прайс')
        user_markup.row('Другая кнопка')
        bot.send_message(message.chat.id, """Карандаш - 100 руб. - ответ "200" """ , reply_markup=user_markup)
    elif message.text == "200":
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        bot.send_message(message.chat.id, """Оплата Карандаша 
Реквизиты и т.д ...""", reply_markup=user_markup)
    else:
        bot.send_message(message.chat.id, answer)
bot.polling(none_stop=True)

Отредактировано leet896 (Апрель 8, 2017 22:12:40)

Офлайн

#2 Апрель 9, 2017 09:54:24

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

у меня кириллица вызывает исключения, так что убрал русские слова из сообщений
возможно коде/декоде поможет

Урок 4. Вебхуки
Пример
здесь обсуждали

А на Heroku даже видео есть как чего установить, flask для примера

Думаю если на Heroku свои сертификаты стоят то просто установить там flask и юзать этот код из примера

 # coding: utf-8
from __future__ import unicode_literals
import json
 
from twx.botapi import TelegramBot, ReplyKeyboardMarkup
from flask import Flask, request
app = Flask(__name__)
 
bot = TelegramBot('bot110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw')
@app.route("/telegram/", methods=['POST'])
def hello():
    message = json.loads(request.data)
    if message['message']['text'] == '/ping':
        bot.send_message(message['message']['chat']['id'], 'Pong!').wait()
    return 'ok'

Отредактировано Kasta_neda (Апрель 9, 2017 13:17:22)

Офлайн

#3 Апрель 10, 2017 15:46:48

leet896
Зарегистрирован: 2017-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

Kasta_neda
у меня кириллица вызывает исключения, так что убрал русские слова из сообщенийвозможно коде/декоде поможетУрок 4. ВебхукиПримерздесь обсуждалиА на Heroku даже видео есть как чего установить, flask для примераДумаю если на Heroku свои сертификаты стоят то просто установить там flask и юзать этот код из примера
Сделал по вашему сообщение, бот заработал , но все волишь на минуты 3 (отвечал на запросы), потом при написание чего-нибудь боту, он отвечает через часа 4-5 ,в логах ошибок нет.
Посмотрите пожалуйста, по ссылке, там все фаqлы и может что-то не так в коде где-то?
Ответьте прошу Вас
Если так, то можите исправить или сказать что нужно изменить и на что, и где, будьте добры пожалуйста
https://github.com/leet896/test9786

Отредактировано leet896 (Апрель 10, 2017 15:48:42)

Офлайн

#4 Апрель 10, 2017 20:42:13

leet896
Зарегистрирован: 2017-04-08
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

Kasta_neda
у меня кириллица вызывает исключения, так что убрал русские слова из сообщенийвозможно коде/декоде поможетУрок 4. ВебхукиПримерздесь обсуждалиА на Heroku даже видео есть как чего установить, flask для примераДумаю если на Heroku свои сертификаты стоят то просто установить там flask и юзать этот код из примера
а нет у меня ошибка в логах вот такая после запуска
2017-04-10T16:20:57.290131+00:00 heroku: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2017-04-10T16:20:57.290228+00:00 heroku: Stopping process with SIGKILL
2017-04-10T16:20:57.428102+00:00 heroku: Process exited with status 137
2017-04-10T16:20:57.439610+00:00 heroku: State changed from starting to crashed

Скажите пожалуйста , вроде бы ругается на порт как я понял, скажите как его поставить или где что нужно добавить, откликнитесь пожалуйста

Офлайн

#5 Апрель 10, 2017 20:54:40

Kasta_neda
Зарегистрирован: 2014-06-08
Сообщения: 210
Репутация: +  6  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

Если вам нужен только бот, без вэбхука то этот код рабочий вариант

 # !/usr/bin/env python
# coding: utf-8
import telebot
import constants
bot = telebot.TeleBot(constants.token)
#-----------------------
@bot.message_handler(commands=['start'])
def handle_text(message):
    answer = "Кто-то запустил бота"
    log(message, answer)
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    user_markup.row('Прайс')
    bot.send_message(message.chat.id, """Вас приветствует магазин
Что бы заказать товар  - отправьте сообщение цифрами "100" """, reply_markup=user_markup, parse_mode="Markdown")
#ВЫВОД ЛОГОВ
print(bot.get_me())
def log(message, answer):
    print("\n --------")
    from datetime import datetime
    print(datetime.now())
    print("Сообщение от {0} {1}. (id = {2}) \n Текст - {3}". format(message.from_user.first_name,
                                                                    message.from_user.last_name,
                                                                    str(message.from_user.id),
                                                                    message.text))
    print(answer)
@bot.message_handler(content_types=['text'])
def handle_text(message):
    answer = """ Карандаш - 100 руб. - ответ "200" """
    user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
    if message.text == "Прайс":
        answer = "Узнал прайс у бота"
        log(message, answer)
        user_markup.row('Прайс')
        user_markup.row('Другая кнопка')
        bot.send_message(message.chat.id, """Карандаш - 100 руб. - ответ "200" """ , reply_markup=user_markup)
    elif message.text == "200":
        user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
        bot.send_message(message.chat.id, """Оплата Карандаша 
Реквизиты и т.д ...""", reply_markup=user_markup)
    else:
        bot.send_message(message.chat.id, answer)
bot.polling(none_stop=True)

а вот вэбхук если вы читали действует малость по другому
в чём, собственно, разница?

Давайте для начала разберемся, как боты принимают сообщения. Первый и наиболее простой вариант заключается в периодическом опросе серверов Telegram на предмет наличия новой информации. Всё это осуществляется через т.н. Long Polling, т.е. открывается соединение на непродолжительное время и все обновления тут же прилетают боту. Просто, но не очень надежно. Во-первых, серверы Telegram периодически начинают возвращать ошибку 504 (Gateway Timeout), из-за чего некоторые боты впадают в ступор. Даже pyTelegramBotAPI, используемый мной, не всегда может пережить такое.
Во-вторых, если одновременно запущено несколько ботов, вероятность столкнуться с ошибками возрастает. Это вдвойне обидно, если сами боты используются не очень часто.
Вебхуки работают несколько иначе. Устанавливая вебхук, вы как бы говорите серверам Telegram: “Слышь, если кто мне напишет, стукни сюда — (ссылка)”. Отпадает необходимость периодически самому опрашивать серверы, тем самым, исчезает неприятная причина падений ботов. Однако за это приходится платить необходимостью установки полноценного веб-сервера на ту машину, на которой планируется запускать ботов. Что ещё неприятно, надо иметь собственный SSL-сертификат, т.к. вебхуки в телеграме работают только по HTTPS

Офлайн

#6 Янв. 26, 2018 20:53:24

gavrilka
Зарегистрирован: 2018-01-23
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как написать webhook к боту telegram и разместить его потом на heroku

Могу помочь разобраться как залить бота на heroku через github, там все просто очень

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version