@fakin_kiska
Telegram Bots and iOS

Как получить данные о чате и сообщении в телеграм боте с разными вебхуками?

У меня есть телеграм бот, к которому привязано два вебхука - с телеграм апи и другим сервисом. Проблема заключается в том, что вебхуки у меня используются в разных файлах, которые друг от друга никак не зависят, но вебхук на другом сервисе не получает данных с телеграма (например chat_id и message_id). Он может работать, если подставлять вручную все айди и прочие значения

Не понимаю, каким образом можно брать данные с телеграма и не использовать конкретные айди при отправке сообщений

Код файла с телеграм вебхуком:

<?php

// Делается запрос
$method = 'setWebhook';
$url = 'https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method;
$options = [
    'url' => 'https://incrediblebot.ru/notifications_bot.php'
];

// То, что возвращается из запроса
$response = file_get_contents($url . '?' . http_build_query($options));
var_dump($response);

// Функция отправки сообщений
function sendRequest($method, $post = '') {
    $ch = curl_init('https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method);

if ($post) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
}

$data = json_decode(file_get_contents('php://input'), JSON_OBJECT_AS_ARRAY);

$chat_id = $data['message']['chat']['id']; // ID чата
$chat_type = $data['message']['chat']['type']; // Тип чата
$message = $data['message']['text']; // Текст сообщения
$user_id = $data['message']['from']['id']; // ID юзера
$username = $data['message']['from']['username']; // Юзернейм
$message_id = $data['message']['message_id']; // ID сообщения

$callback_query = $data->callback_query;
$callback_query_id = $callback_query->id;
$callback_data = $callback_query->data;
    
switch ($callback_data) {
    case 'start':
        $job_id_get = job_id_get($job_id);
        exec('curl --request POST --header "PRIVATE-TOKEN: <token>" "https://example.com"');
    $post = [
        'chat_id' => $chat_id,
        'text' => $callback_data . ' ' . $job_id_get['job_id']
    ];
    sendRequest('sendMessage', $post);
        break;
}


Код файла с вебхуком другого сервиса:

$input = file_get_contents("php://input");
$json = json_decode($input);

function sendRequest($method, $post = '')
{
    $ch = curl_init('https://api.telegram.org/bot <TOKEN>' . '/' . $method);

if ($post) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$json = curl_exec($ch);
curl_close($ch);
}

if ($json) {

    $ref = $json->object_attributes->ref;
    $project_name = $json->project->name;
    $name = $json->user->name;
    $username = $json->user->username;
    $stages = $json->object_attributes->stages[0];

if ($status == 'manual') {
        job_id($job_id);
        $post = [
            'chat_id' => 123,
            'text' => ' <b>Webhook caught manual event!</b>',
            'parse_mode' => 'html',
            $start_button = [[['text' => 'Start', 'callback_data' => 'start']]],
            'reply_markup' => inline_keyboard($start_button)
        ];
        sendRequest('sendMessage', $post);
    }
}
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы