Skip to content

TelegramInlineQueryDriver [feature discussion] #94

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