Skip to content

TelegramInlineQueryDriver [feature discussion] #94

@vdomah

Description

@vdomah

I successfully implemented Inline Queries Driver in my project and I would like to make PR to this repo but I need some advices about how to do it properly to meet the package requirements.

So the steps are:

  1. To create TelegramInlineQueryDriver class [DONE]
  2. Write matching logic [DONE]
public function matchesRequest()
    {
        return ! is_null($this->payload->get('inline_query'));
    }
  1. Check that other driver will not match inline_query (TelegramDriver itself)

  2. Here is the interesting part. Need to decide how TelegramInlineQueryDriver sends request to Telegram API.
    Because inline queries don't use Conversations/Messages - we just need to send response directly.

  3. In my project I've created buildServicePayloadInline instead of buildServicePayload method in TelegramInlineQueryDriver. buildServicePayloadInline will switch to answerInlineQuery endpoint:

$this->endpoint = 'answerInlineQuery';
  1. There I was sending request with data needed:
$data = ['inline_query_id' => $inline_query_id, 'cache_time' => 0];
//forming $arArticlesJson array
$data['results'] = '[' . implode(',', $arArticlesJson) . ']';

return $data;
  1. $arArticlesJson is array of InlineQueryResultArticle objects https://core.telegram.org/bots/api#inlinequeryresultarticle.

So now I'm wondering the most about "//forming $arArticlesJson array" part. We don't have Conversation classes here. But we need to inject our logic to prepare data that will be sent.

The most primitive way I see is for example to do that just by static method with closure:

DriverManager::loadDriver(TelegramInlineQueryDriver::class);

TelegramInlineQueryDriver::listen(function($inline_query) {
    //developer got access to all inline query parameters:
    //$inline_query['from']['id'];
    //$inline_query['id'];
    //$inline_query['query']; - the string user enters writing @bot_name <query>

    $data = ['inline_query_id' => $inline_query_id, 'cache_time' => 0];
    //forming $arArticlesJson array
    $data['results'] = '[' . implode(',', $arArticlesJson) . ']';

    return $data;
});

What are your ideas on this, dear colleagues?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions