Slack Customコマンドを使用しようとしていますが、Yoda Speak外部APIが応答するのに3秒以上かかるため、遅延メッセージの使用方法はあまりよく分かりません。Slack PHP API - タイムアウトエラーを回避する
私は次のように行われている:私の場合のたるみコマンド/Yoda
を送信
- と
reponse_url
を受けました。 post
には、以下を応答URLに使用します。私はヨーダのAPIを呼び出すときに今-
$data_string = '{"response_type": "in_channel", "text":"Checking,please wait..."}' ; $chs = curl_init(); curl_setopt($chs, CURLOPT_URL, $response_url); curl_setopt($chs, CURLOPT_POST, true); curl_setopt($chs, CURLOPT_POSTFIELDS, $data_string); curl_setopt($chs, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($chs, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($chs, CURLOPT_RETURNTRANSFER, true); curl_setopt($chs, CURLOPT_POST, 1); curl_setopt($chs, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); $results = curl_exec($chs);
は、それが "タイムアウトに達した" 次のエラーを与えます。私は
delayed responsesについて読んでいますが、ここからどのように進めるべきかはわかりません。
-
$chsres = curl_init(); curl_setopt($chsres, CURLOPT_URL, "https://yoda.p.mashape.com/yoda?sentence=welcome+to+stack"); curl_setopt($chsres, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($chsres, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($chsres, CURLOPT_VERBOSE, true); curl_setopt($chsres, CURLOPT_TIMEOUT, 45); curl_setopt($chsres, CURLOPT_RETURNTRANSFER, true); curl_setopt($chsres, CURLOPT_HTTPHEADER, array('Content-Type:application/json', "X-Mashape-Key:> deMeGoBfMvmshQSemozTqJEY9z0jp1eIhuAjsnx9cQAQsHUifD")); $resultchsres = curl_exec($chsres); echo $resultchsres;
は、誰かが私が遅延応答を使用して、タイムアウトエラーを取り除く方法を教えてくださいことはできますか?
更新されたコード:
$response_url = $_POST['response_url'];
$text = $_POST['text'];
$term = str_replace(' ', '+', $text);
//https://paypal.slack.com/services/B0VQMHX8W#service_setup
//initial respond with 200OK for timeout
ignore_user_abort(true);
set_time_limit(0);
ob_start();
echo('{"response_type": "in_channel", "text": "Checking, please wait..."}');
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Content-Type: application/json");
header('Content-Length: '.ob_get_length());
ob_end_flush();
ob_flush();
flush();
$chsres = curl_init();
curl_setopt_array($chsres, array(
CURLOPT_URL => "https://yoda.p.mashape.com/yoda?sentence=$term",
CURLOPT_SSL_VERIFYPEER => FALSE,
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_VERBOSE => true,
CURLOPT_RETURNTRANSFER => FALSE,
CURLOPT_HTTPHEADER => array('Content-Type:application/json', "X-Mashape-Key: deMeGoBfMvmshQSemozTqJEY9z0jp1eIhuAjsnx9cQAQsHUifD"),
CURLOPT_RETURNTRANSFER => true
));
$yodaresponse = curl_exec($chsres);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $response_url,
CURLOPT_POST => 1,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $yodaresponse
));
$resp = curl_exec($curl);
var_dump($resp);
curl_close($curl);
私はまだ同じエラーが得る「ダーン - コマンドをスラッシュそれが動作しませんでした(エラーメッセージ:Timeout was reached
を)。スラッシュコマンドでコマンドを管理する」
まだ遅延応答は試していませんが、ドキュメンテーションに「HTTP 200」(最大3000ms以内)で返信する必要があることが記載されています。後で同じ応答URLに返信する可能性があります。 –
@Ciccioそれは私が理解していない部分です 私はすでに「確認してください、待ってください」という同等の200 OK応答です。私はあなたが "あなたは同じ応答URLに後で返信することができます"ということを理解していません。同じ 'response_url'をもう一度使うべきですか? – Vimalnath
@Vimalnathあなたは「チェックしてください、待ってください」というメッセージを送信すると、スラックに対する200 OK応答に相当しません。あなたは** Slackが200でサーバーに送信する要求に応答する必要があります。 –