речь в текст — Как обрабатывать события асинхронного обратного вызова IBM Watson в переполнении стека

Я пытаюсь заставить асинхронный обратный вызов работать для речи 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 за другим.

1

Решение

Я полагаю, что вы не регистрируете (белый список) свой обратный вызов, см. Раздел «Регистрация URL обратного вызова» в документации: https://console.bluemix.net/docs/services/speech-to-text/async.html#async

Вы регистрируете URL обратного вызова, вызывая POST /v1/register_callback метод. После регистрации URL-адреса обратного вызова вы можете использовать его для получения уведомлений о неопределенном количестве заданий. Процесс регистрации состоит из четырех этапов:

0

Другие решения

Я понял, как обработать запрос 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 в теле можно найти здесь

Как получить тело POST в php?

0

По вопросам рекламы [email protected]