Не удается проверить поля диалога Slack. Вызов response_url всегда терпит неудачу - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь создать слабый диалог, запускаемый командой косой черты. Диалоговое окно всплывает правильно, и когда пользователь отправляет данные, слабина достигает конечных точек на моем сервере.

С этого момента возможны два исхода:

  1. Все хорошо, и я отправляю подтверждение пользователю
  2. Данные, предоставленные пользователем, не проходят проверку моего приложения, и я должен сообщить об этом пользователю.

Давайте сосредоточимся на # 2 на секунду:

Я получаю response_url, который кажется действительным (https:\/\/hooks.slack.com\/app\/MY-APP-ID\/433197747012\/kQANkbvc3lIViVyLSJKR695z)

Для тестирования я хотел бы смоделировать ошибку проверки с одним из моих полей, поэтому я делаю это в моей конечной точке:

$errors = [
        'errors' => [
            [
                'name' => 'vendor_email',
                'error' => 'sorry, I do not like this dude'
            ]
        ]
    ];
// define the curl request
$ch = curl_init();
// $decoded->response_url does contain the correct slack URL...

curl_setopt($ch, CURLOPT_URL, $decoded->response_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Type: application/x-www-form-urlencoded'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

// set the POST query parameters
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($errors));

// execute curl request
$response = curl_exec($ch);
error_log(" -- response_url response: " . json_encode($response). "\n", 3, './runtime.log');

// close
curl_close($ch);

Ответ, который я получаю от удара по response_url, таков:

{\"ok\":false,\"error\":\"invalid_request_data\"}

Что я делаю не так?

****** РЕДАКТИРОВАТЬ ************

Даже когда вы не идете по маршруту CURL, а просто делаете это:

return json_encode($errors)

просто закроет диалоговое окно после отправки и не вызовет ошибки проверки.

1 Ответ

0 голосов
/ 11 сентября 2018

respond_url предназначен не для ответа на отправленные сообщения (например, для ошибок проверки), а для отправки сообщения обратно пользователю в канале.

Как только пользователь завершит диалог, вы получите запросиз Slack.Вы должны напрямую ответить на этот запрос.Вы можете ответить либо пустым ответом, если все в порядке, либо списком ошибок для проверки.Ответ должен быть в формате JSON и возникать в течение 3 секунд.

Чтобы ответить, все, что вам нужно сделать, - это отобразить массив ошибок в JSON.Также убедитесь, что правильно установите заголовок JSON, например, так:

header('Content-Type: application/json');
echo json_encode($errors);

Если у вас нет ошибок, просто ничего не выводите, чтобы автоматически отправить HTTP 200 OK.

См. Также здесь в документации о том, как правильно ответить на представление.

...