[英]How to handle IBM Watson asynchronous callback events in php
我正在嘗試使異步回調適用於IBM Watson語音文本。
我得到了卷曲功能的工作
curl -X POST -u "c94c7025-09f5-4cee-94dd-8f73348b60d8":"4TOriExZooKh" \
--header "Content-Type: audio/wav" \
--data-binary @uploads/001528fe-9545-4c3f-9d0d-aec4cd61caee.wav \
"https://stream.watsonplatform.net/speech-to-text/api/v1/recognitions?callback_url=http://34.234.215.13/callback.php&model=en-US_NarrowbandModel&profanity_filter=false&events=recognitions.completed_with_results&user_token=audio&results_ttl=10"
據我了解,結果或通知應以POST形式發送到回調URL
https://console.bluemix.net/docs/services/speech-to-text/async.html#create
上面的代碼應該將完成的結果發送到callback.php
callback.php
<?php
header('Content-Type:text/plain');
echo $_GET["challenge_string"];
foreach ($_POST as $key => $value)
error_log($key . "--" . $value);
回聲用於URL注冊,然后用於通過POST發送的任何數據,我會將其傳遞給foreach循環。
但是轉換完成后,我什么也沒有得到。
access log
[14/Oct/2017:00:22:39 +0000] "POST /callback.php HTTP/1.1" 200 166 "-" "Jersey/2.22.1 (Apache HttpClient 4.5)"
error log
[:error] [pid 2046] [client 169.48.114.147:54645] PHP Notice: Undefined index: challenge_string in /var/www/html/callback.php on line 10
我不明白什么是錯的? 當我進行同步調用(即一個接一個的POST)時,我能夠使它工作。
我相信您沒有將回調注冊(列入白名單),請參閱文檔中的“注冊回調URL”部分: https : //console.bluemix.net/docs/services/speech-to-text/async.html#異步的
您可以通過調用
POST /v1/register_callback
方法來注冊回調URL。 一旦注冊了回調URL,就可以使用它來接收無限數量的作業的通知。 注冊過程包括四個步驟:...
我想出了如何處理POST請求。 這對我來說是全新的,對此一無所知。
callback.php
<?php
$request_body = file_get_contents('php://input');
$json = json_decode($request_body);
有一兩件事我想指出,任何一個感興趣的是,這里提到這個輸出將有額外的信息
https://console.bluemix.net/docs/services/speech-to-text/async.html#job
如果你想只提取結果到JSON字符串中的數據庫來存儲或其他地方,你可以添加使用這一行
json_encode($json->results[0])
希望這對任何人都有幫助。
有關PHP處理主體中POST數據的更多信息,請參見此處
如何在php中獲取POST正文?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.