ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

telegram - advanced-features

2026/10/3 2:26:23 拓冰建站 浏览量
telegram - advanced-features 高级功能 - Telegram 机器人目录内联模式支付Telegram Stars迷你应用WebApps对话处理器FSM贴纸游戏Passport企业机器人Business Bots消息草稿流式输出内联模式允许用户在任何聊天中输入你的机器人 查询来使用机器人。启用与 BotFather 对话并发送/setinline。fromtelegramimportUpdate,InlineQueryResultArticle,InputTextMessageContentfromtelegram.extimportInlineQueryHandlerasyncdefinline_query(update:Update,context):queryupdate.inline_query.queryifnotquery:returnresults[InlineQueryResultArticle(id1,titlefResultado para:{query},input_message_contentInputTextMessageContent(message_textfVoce buscou:{query}),descriptionClique para enviar),InlineQueryResultArticle(id2,titleBusca em maiusculas,input_message_contentInputTextMessageContent(message_textquery.upper()))]awaitupdate.inline_query.answer(results,cache_time10)app.add_handler(InlineQueryHandler(inline_query))内联结果类型InlineQueryResultArticle- 通用文本InlineQueryResultPhoto- 带预览的照片InlineQueryResultGif- GIFInlineQueryResultVideo- 视频InlineQueryResultAudio- 音频InlineQueryResultDocument- 文档InlineQueryResultLocation- 位置InlineQueryResultVenue- 地点/场所InlineQueryResultContact- 联系人InlineQueryResultCachedPhoto- 已在 Telegram 服务器上的照片支付Telegram StarsTelegram 允许通过 Stars内部货币为数字商品进行支付。fromtelegramimportLabeledPrice# Enviar invoiceawaitbot.send_invoice(chat_idchat_id,titleAssinatura Premium,descriptionAcesso premium por 30 dias,payloadpremium_30days,currencyXTR,# XTR Telegram Starsprices[LabeledPrice(Assinatura Premium,100)],# 100 Stars)# Handler de pre-checkoutasyncdefprecheckout(update:Update,context):queryupdate.pre_checkout_queryifquery.invoice_payloadpremium_30days:awaitquery.answer(okTrue)else:awaitquery.answer(okFalse,error_messagePayload invalido)# Handler de pagamento concluidoasyncdefsuccessful_payment(update:Update,context):paymentupdate.message.successful_paymentawaitupdate.message.reply_text(fPagamento recebido!{payment.total_amount}Stars. fSeu acesso premium foi ativado.)app.add_handler(PreCheckoutQueryHandler(precheckout))app.add_handler(MessageHandler(filters.SUCCESSFUL_PAYMENT,successful_payment))外部支付提供商对于实物商品使用 Stripe、YooMoney 等提供商awaitbot.send_invoice(chat_idchat_id,titleCamiseta Bot Telegram,descriptionCamiseta tamanho M, algodao,payloadtshirt_m,provider_tokenSEU_PROVIDER_TOKEN,# do BotFathercurrencyBRL,prices[LabeledPrice(Camiseta,5990),# R$ 59.90 (em centavos)LabeledPrice(Frete,1500)# R$ 15.00],need_shipping_addressTrue,need_nameTrue,need_phone_numberTrue)迷你应用WebApps迷你应用是在 Telegram 内运行的 Web 应用。fromtelegramimportWebAppInfo,InlineKeyboardButton,InlineKeyboardMarkup# Botao que abre Mini AppkeyboardInlineKeyboardMarkup([[InlineKeyboardButton(Abrir App,web_appWebAppInfo(urlhttps://seu-app.com))]])awaitbot.send_message(chat_id,Clique para abrir:,reply_markupkeyboard)# Via Reply KeyboardfromtelegramimportReplyKeyboardMarkup,KeyboardButton keyboardReplyKeyboardMarkup([[KeyboardButton(Abrir App,web_appWebAppInfo(urlhttps://seu-app.com))]])接收迷你应用的数据asyncdefweb_app_data(update:Update,context):dataupdate.effective_message.web_app_data.data# data e uma string JSON enviada pelo Mini Appimportjson parsedjson.loads(data)awaitupdate.message.reply_text(fRecebi do app:{parsed})app.add_handler(MessageHandler(filters.StatusUpdate.WEB_APP_DATA,web_app_data))对话处理器FSM用于多步骤对话表单、向导fromtelegram.extimportConversationHandler,CommandHandler,MessageHandler,filters# EstadosNAME,AGE,CONFIRMrange(3)asyncdefstart_form(update:Update,context):awaitupdate.message.reply_text(Qual seu nome?)returnNAMEasyncdefget_name(update:Update,context):context.user_data[name]update.message.textawaitupdate.message.reply_text(Qual sua idade?)returnAGEasyncdefget_age(update:Update,context):context.user_data[age]update.message.text namecontext.user_data[name]agecontext.user_data[age]keyboardInlineKeyboardMarkup([[InlineKeyboardButton(Confirmar,callback_dataconfirm),InlineKeyboardButton(Cancelar,callback_datacancel)]])awaitupdate.message.reply_text(fNome:{name}\nIdade:{age}\n\nConfirma?,reply_markupkeyboard)returnCONFIRMasyncdefconfirm(update:Update,context):queryupdate.callback_queryawaitquery.answer()ifquery.dataconfirm:awaitquery.edit_message_text(Cadastro realizado com sucesso!)else:awaitquery.edit_message_text(Cadastro cancelado.)returnConversationHandler.ENDasyncdefcancel(update:Update,context):awaitupdate.message.reply_text(Operacao cancelada.)returnConversationHandler.END conv_handlerConversationHandler(entry_points[CommandHandler(cadastro,start_form)],states{NAME:[MessageHandler(filters.TEXT~filters.COMMAND,get_name)],AGE:[MessageHandler(filters.TEXT~filters.COMMAND,get_age)],CONFIRM:[CallbackQueryHandler(confirm)],},fallbacks[CommandHandler(cancel,cancel)],conversation_timeout300# 5 minutos timeout)app.add_handler(conv_handler)贴纸# Enviar sticker por file_idawaitbot.send_sticker(chat_id,stickerCAACAgIAAxkBAAI...)# Obter sticker setsticker_setawaitbot.get_sticker_set(set_name)forstickerinsticker_set.stickers:print(fEmoji:{sticker.emoji}, ID:{sticker.file_id})# Criar sticker set (requer imagem 512x512 PNG/WEBP)awaitbot.create_new_sticker_set(user_iduser_id,namemeupack_by_meubot,titleMeu Sticker Pack,stickers[InputSticker(stickeropen(sticker.webp,rb),emoji_list[],formatstatic)])# Adicionar sticker ao setawaitbot.add_sticker_to_set(user_iduser_id,namemeupack_by_meubot,stickerInputSticker(stickeropen(sticker2.webp,rb),emoji_list[],formatstatic))游戏# Enviar jogo (precisa registrar no BotFather com /newgame)awaitbot.send_game(chat_id,game_short_namemeu_jogo)# Handler de callback para jogoasyncdefgame_callback(update:Update,context):queryupdate.callback_queryawaitquery.answer(urlhttps://seu-jogo.com/?user_idstr(query.from_user.id))# Salvar scoreawaitbot.set_game_score(user_iduser_id,score150,chat_idchat_id,message_idgame_message_id)# Obter high scoresscoresawaitbot.get_game_high_scores(user_iduser_id,chat_idchat_id,message_idgame_message_id)企业机器人Business Bots用于 Telegram 企业账户的机器人# Receber conexao businessasyncdefbusiness_connection(update:Update,context):connupdate.business_connectionifconn.is_enabled:print(fBot conectado ao business de{conn.user.first_name})else:print(fBot desconectado do business de{conn.user.first_name})# Receber mensagens businessasyncdefbusiness_message(update:Update,context):msgupdate.business_message# Responder em nome do businessawaitcontext.bot.send_message(chat_idmsg.chat.id,textObrigado pela mensagem! Responderemos em breve.,business_connection_idmsg.business_connection_id)app.add_handler(BusinessConnectionHandler(business_connection))app.add_handler(BusinessMessagesHandler(business_message))消息草稿流式输出对于较长的回复如 AI 的回复使用草稿提供实时反馈importrequests TOKENSEU_TOKENBASEfhttps://api.telegram.org/bot{TOKEN}defstream_response(chat_id,full_text):Simula streaming enviando drafts parciais.wordsfull_text.split()partial# Enviar draft inicialfori,wordinenumerate(words):partialword ifi%50:# Atualizar a cada 5 palavrasrequests.post(f{BASE}/sendMessageDraft,json{chat_id:chat_id,text:partial.strip()...})# Enviar mensagem finalrequests.post(f{BASE}/sendMessage,json{chat_id:chat_id,text:full_text})注意sendMessageDraft是一个较新的方法。请在你使用的 API 版本中检查其可用性。