Форум сайта python.su
Не могу написать вебхук к боту телеграмм, помогите люди добрые
Облазил интернет, вроде бы нашел подходящую тему, но все равно не получается
Вот мой код бота 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)
Офлайн
у меня кириллица вызывает исключения, так что убрал русские слова из сообщений
возможно коде/декоде поможет
Урок 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)
Офлайн
Kasta_nedaСделал по вашему сообщение, бот заработал , но все волишь на минуты 3 (отвечал на запросы), потом при написание чего-нибудь боту, он отвечает через часа 4-5 ,в логах ошибок нет.
у меня кириллица вызывает исключения, так что убрал русские слова из сообщенийвозможно коде/декоде поможетУрок 4. ВебхукиПримерздесь обсуждалиА на Heroku даже видео есть как чего установить, flask для примераДумаю если на Heroku свои сертификаты стоят то просто установить там flask и юзать этот код из примера
Отредактировано leet896 (Апрель 10, 2017 15:48:42)
Офлайн
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
Офлайн
Если вам нужен только бот, без вэбхука то этот код рабочий вариант
# !/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
Офлайн
Могу помочь разобраться как залить бота на heroku через github, там все просто очень
Офлайн