Telegram Bot 的各項功能都介紹得差不多了,各位的 Telegram Bot 應該也都有模有樣了,因此今天來介紹一下如何在 Telegram Bot 使用 Webhook 讓我們的 Telegram Bot 準備上線吧。
在 Line Bot 中,因為 Line Bot 我們同時使用了 Flask ,而且 Line 官方提供了方便的介面讓我們設定 Webhook ,因此設定起來相當的簡單。
而 Telegram 只有 BotFather 讓我們設定,但是在 BotFather 中各位應該是找不到設定 Webhook 的地方(應該是吧),因此我們就要使用另外的方式設定 Webhook 。
import os
import logging
from telegram import Update
from telegram import (ReplyKeyboardMarkup, KeyboardButton,
ReplyKeyboardRemove) # New
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram import InlineQueryResultArticle, InputTextMessageContent
from telegram.ext import Updater
from telegram.ext import (CallbackContext, Filters, MessageHandler,
CommandHandler, CallbackQueryHandler, InlineQueryHandler)
''' Get envrion param '''
TOKEN = os.environ["TOKEN"]
''' logging '''
logging.basicConfig(
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
level=logging.DEBUG)
logger = logging.getLogger(__name__)
''' Bot init '''
updater = Updater(token=TOKEN)
dispatcher = updater.dispatcher
# 建立 InlineKeyboard
keyboard_1 = InlineKeyboardMarkup([
[
InlineKeyboardButton(
"Youtube", url="http://youtube.com/"),
InlineKeyboardButton(
"Facebook", url="https://www.facebook.com/")
], [
InlineKeyboardButton("A", callback_data="a"),
InlineKeyboardButton("B", callback_data="b")
]
])
# 訊息回復方式
def echo(update: Update, context: CallbackContext):
# 加入 InlineKeyboard
update.message.reply_text(
text=update.message.text, reply_markup=keyboard_1)
# 指令回復方式
def start(update: Update, context: CallbackContext):
context.bot.send_message(
chat_id=update.message.chat.id, text="Hello")
def get_id(update: Update, context: CallbackContext):
context.bot.send_message(
chat_id=update.message.chat.id, text=update.message.from_user.id)
def show(update: Update, context: CallbackContext):
update.message.reply_text(
text="Show menu",
reply_markup=ReplyKeyboardMarkup([
["1", "2", "3"],
[KeyboardButton("4"), KeyboardButton("/start")]
], resize_keyboard=True, one_time_keyboard=True))
def hide(update: Update, context: CallbackContext):
update.message.reply_text(
text="Hide menu",
reply_markup=ReplyKeyboardRemove(True))
def callbackquery(update: Update, context: CallbackContext):
update.callback_query.message.reply_text(
text=update.callback_query.data)
def inlinequery(update: Update, context: CallbackContext): # New
context.bot.answer_inline_query(
inline_query_id=update.inline_query.id,
results=[
InlineQueryResultArticle(
id=update.inline_query.id,
title="TEST",
input_message_content=InputTextMessageContent(
message_text="just test"
)
)
]
)
# 註冊訊息回復方式
updater.dispatcher.add_handler(MessageHandler(
filters=(Filters.text), callback=message_handler))
# 註冊指令回復方式
updater.dispatcher.add_handler(
CommandHandler("start", callback=start))
updater.dispatcher.add_handler(
CommandHandler("get_id", callback=get_id))
updater.dispatcher.add_handler(
CommandHandler("show", callback=show))
updater.dispatcher.add_handler(
CommandHandler("hide", callback=hide))
updater.dispatcher.add_handler(
CallbackQueryHandler(callbackquery))
updater.dispatcher.add_handler(InlineQueryHandler(inlinequery)) # New
# 開始長輪詢
if __name__ == "__main__":
# updater.start_polling()
updater.start_webhook(
listen="127.0.0.1",
port=8443,
url_path="callback",
webhook_url="https://6cb6-211-20-7-120.ngrok.io/callback"
) # New
updater.idle()
updater.stop()
只要設定好我們的域名,基本上就可以透過 Webhook 來使用我們的 Telegram Bot 了,在這邊我是使用 ngrok 來演示,記得先用 ngrok 開好反向代理,才能夠填好 Webhook 並收到資料喔。
那麼就先到這邊, Telegram Bot 基本上就大概完成了。
大家掰~掰~