Я использую Amazon Alexa API управления навыками (SMAPI) для клонирования одного из моих навыков и изменения ключевых переменных, таких как имя навыка, и я могу сделатьэто успешно: я получаю манифест, делаю некоторые изменения и создаю новый навык, используя этот обновленный манифест.
Затем я жду, пока статус навыка не будет завершен, и затем я могу успешно получить свой планмодель взаимодействия навыка, но когда я ОБНОВЛЯЮ новый навык с моделью взаимодействия, я получаю эту ошибку:
"{" message ":" С указанным навыком или языковым стандартом не связана модель. "} "
Я искал через API способ" связать "модель для нового навыка перед обновлением, но я ничего не могу найти.API действительно говорит, что при использовании Обновить модель взаимодействия "Создает модель взаимодействия для навыка." Поэтому я ожидаю, что он создаст модель, если навык неУ меня есть еще один связанный.
Я связался и еще не получил ответ от службы поддержки Amazon.
ДЕТАЛИ
Вот шаги, которые я предпринимаю, которые приводят к указанной выше ошибке:
Я использую свою собственную веб-страницу, построенную на PHP, для управления навыками Alexa с помощью SMAPI.
Сначала я использую Amazon Login, чтобы получить access_token с необходимыми разрешениями:
alexa::ask:skills:read
alexa::ask:skills:readwrite
alexa::ask:models:read
alexa::ask:models:readwrite
alexa::ask:skills:test
Это успешно возвращает access_token
.Затем я использую access_token
, чтобы получить список навыков.Затем вышлите эти навыки кнопкой, чтобы клонировать их.При этом в качестве шаблона skillId
будет использоваться идентификатор навыка.
Код навыка клонирования:
//GET THE MANIFEST OF THE BLUEPRINT SKILL
$manifestObj = getAlexaSkillManifest($access_token, $skillId);
//CHANGE THE NAME IN THE SKILL MANIFEST
$manifestObj['manifest']['publishingInformation']['locales']['en-US']['name'] = "clone test";
//CREATE NEW SKILL USING BLUEPRINT MANIFEST
$createdSkill = createAlexaSkillManifest($access_token, $vendorId, $manifestObj['manifest'], $body);
$newSkillId = $createdSkill['skillId'];
//SUCCESSFUL SO FAR
//GET BLUEPRINT SKILL'S INTERACTION MODEL
$blueprintSkillIntents = getAlexaSkillIntents($access_token, $skillId);
//CHECK AND WAIT FOR THE NEW SKILL TO BE COMPLETELY CREATED BEFORE ATTEMPTING TO UPDATE THE NEW SKILL'S INTERACTION MODEL
for ($i=0; $i <= 3; $i++) {
$status = getAlexaSkillStatus ($access_token, $newSkillId);
if($status['manifest']['lastUpdateRequest']['status']=="SUCCEEDED") {
//LOGGING HERE SHOWS THIS FIRES AFTER NEW SKILL STATUS IS COMPLETE
//UPDATE NEW SKILL INTERACTION MODEL
$newSkillIntents = updateAlexaSkillIntents($access_token, $newSkillId, $blueprintSkillIntents);
break;
}
sleep(1);
}
Получить функцию модели взаимодействия с планом (SUCCESSFUL):
function getAlexaSkillIntents ($access_token, $skillId, $stage="development", $version="~current") {
$locale="en-US";
$url = "https://api.amazonalexa.com/v1/skills/$skillId/stages/$stage/interactionModel/locales/$locale/versions/$version";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$access_token));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURLOPT_HTTP_VERSION_NONE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
return $result;
}
//SUCCESSFULLY RETURNS THE INTERACTION MODEL OF THE BLUEPRINT SKILL
Обновите новый навык Функция модели взаимодействия (ОШИБКИ):
function updateAlexaSkillIntents ($access_token, $skillId, $intentModel, $stage="development") {
$intentModel=json_encode($intentModel);
$locale="en-US";
$url = "https://api.amazonalexa.com/v1/skills/$skillId/stages/$stage/interactionModel/locales/$locale";
$fp = fopen('php://temp/maxmemory:256000', 'w');
if (!$fp) { die('could not open temp memory data'); }
fwrite($fp, $intentModel);
fseek($fp, 0);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_INFILE, $fp); // file pointer
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($intentModel));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$access_token));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURLOPT_HTTP_VERSION_NONE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
return $result;
}
То, что $result
возвращает ошибку из Alexa SMAPI:
"{" message ":" Theуказанному навыку или локали не соответствует модель. "}"
Как я могу устранить эту ошибку? или Как мне использовать SMAPI для клонированияумение?