-
Notifications
You must be signed in to change notification settings - Fork 76
Description
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:
- To create TelegramInlineQueryDriver class [DONE]
- Write matching logic [DONE]
public function matchesRequest()
{
return ! is_null($this->payload->get('inline_query'));
}
-
Check that other driver will not match inline_query (TelegramDriver itself)
-
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. -
In my project I've created buildServicePayloadInline instead of buildServicePayload method in TelegramInlineQueryDriver. buildServicePayloadInline will switch to answerInlineQuery endpoint:
$this->endpoint = 'answerInlineQuery';
- 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;
- $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?