Inline-бот
Бот который отвечает на запросы @bot xxx в любом чате.
Минимальный пример (Python + aiogram)
import asyncio, os
from aiogram import Bot, Dispatcher
from aiogram.client.session.aiohttp import AiohttpSession
from aiogram.client.telegram import TelegramAPIServer
from aiogram.types import (
InlineQuery, InlineQueryResultArticle, InputTextMessageContent
)
from uuid import uuid4
session = AiohttpSession(api=TelegramAPIServer.from_base('https://api.telefon.chat'))
bot = Bot(token=os.environ['BOT_TOKEN'], session=session)
dp = Dispatcher()
# Простая база данных
ARTICLES = [
{'title': 'Python — что это', 'text': 'Python — это динамический язык программирования...'},
{'title': 'JavaScript — что это', 'text': 'JavaScript — язык для веб-разработки...'},
{'title': 'Go — что это', 'text': 'Go — компилируемый язык от Google...'},
]
@dp.inline_query()
async def search(query: InlineQuery):
q = query.query.lower().strip()
matches = [a for a in ARTICLES if q in a['title'].lower()] or ARTICLES[:3]
results = []
for a in matches[:50]:
results.append(InlineQueryResultArticle(
id=str(uuid4()),
title=a['title'],
description=a['text'][:80] + '...',
input_message_content=InputTextMessageContent(message_text=a['text'])
))
await query.answer(results, cache_time=60, is_personal=False)
if __name__ == '__main__':
asyncio.run(dp.start_polling(bot))
Включить inline-режим
В @botmaker → бот → «Изменить» → toggle «Inline-режим». Без этого Telefon не будет принимать inline-запросы.
Что покрывает
inline_queryeventanswerInlineQueryс результатамиInlineQueryResultArticle— самый универсальный тип
Расширения
- Картинки/видео:
InlineQueryResultPhoto,InlineQueryResultVideo,InlineQueryResultGif - Из кеша:
*_cached_*варианты для уже загруженных файлов - Пагинация:
next_offsetпараметр вanswerInlineQuery
См. также Inline-режим, Типы результатов.