1019 lines
155 KiB
HTML
1019 lines
155 KiB
HTML
|
||
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<title>The Jetstream Service API - Server - Wiki</title>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<meta http-equiv="X-UA-Compatible" content="IE=EDGE,chrome=IE7">
|
||
<meta charset="UTF-8">
|
||
<meta id="confluence-context-path" name="confluence-context-path" content="">
|
||
<meta id="confluence-base-url" name="confluence-base-url" content="https://confluence.jibo.com">
|
||
|
||
<meta id="atlassian-token" name="atlassian-token" content="12d3275d4e1eb5e58d6ebfb6388e8866243dc2e3">
|
||
|
||
|
||
<meta id="confluence-space-key" name="confluence-space-key" content="SER">
|
||
<style>.ia-fixed-sidebar,.ia-splitter-left{width:285px}.theme-default .ia-splitter #main{margin-left:285px}.ia-fixed-sidebar{visibility:hidden}</style><script type="text/javascript">var contextPath='';</script>
|
||
|
||
|
||
|
||
<meta name="confluence-request-time" content="1531947349728">
|
||
|
||
|
||
|
||
<meta name="ajs-show-space-welcome-dialog" content="true">
|
||
|
||
<meta name="ajs-use-keyboard-shortcuts" content="true">
|
||
<meta name="ajs-discovered-plugin-features" content="{"com.atlassian.confluence.plugins.confluence-dashboard":["dialog","tour-step-sidebar","tips"]}">
|
||
<meta name="stp-license-product-name" content="Confluence"/> <meta name="stp-license-days-to-expiry" content="-112"/> <meta name="stp-license-is-admin" content="false"/> <meta name="stp-license-should-keep-banner-hidden" content="false"/>
|
||
<meta name="ajs-keyboardshortcut-hash" content="f5b48def5768ddae55ab6a4815ac0f13">
|
||
<script type="x-mathjax-config"> </script> <script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
|
||
<meta name="ajs-is-confluence-admin" content="false">
|
||
<meta name="ajs-connection-timeout" content="10000">
|
||
<meta name="gliffy-license-type" content="LicenseType<COMMERCIAL>">
|
||
<meta name="gliffy-license-quantity" content="250">
|
||
|
||
<script type="text/x-template" title="gliffy-webpanel-footer">
|
||
<div class="gliffy-webpanel-footer"><span></span></div>
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
<meta name="ajs-page-id" content="12594826">
|
||
<meta name="ajs-latest-page-id" content="12594826">
|
||
<meta name="ajs-content-type" content="page">
|
||
<meta name="ajs-page-title" content="The Jetstream Service API">
|
||
<meta name="ajs-latest-published-page-title" content="The Jetstream Service API">
|
||
<meta name="ajs-parent-page-title" content="Jetstream Service">
|
||
<meta name="ajs-parent-page-id" content="12593844">
|
||
<meta name="ajs-space-key" content="SER">
|
||
<meta name="ajs-space-name" content="Server">
|
||
<meta name="ajs-jira-metadata-count" content="-1">
|
||
<meta name="ajs-from-page-title" content="">
|
||
<meta name="ajs-can-remove-page" content="true">
|
||
<meta name="ajs-browse-page-tree-mode" content="view">
|
||
<meta name="ajs-shared-drafts" content="false">
|
||
<meta name="ajs-user-display-name" content="Jon Ferguson">
|
||
<meta name="ajs-context-path" content="">
|
||
<meta name="ajs-base-url" content="https://confluence.jibo.com">
|
||
<meta name="ajs-version-number" content="5.10.8">
|
||
<meta name="ajs-build-number" content="6441">
|
||
<meta name="ajs-remote-user" content="jon.ferguson">
|
||
<meta name="ajs-remote-user-key" content="8a8081a64c475515014cdd4dc74f0005">
|
||
<meta name="ajs-remote-user-has-licensed-access" content="true">
|
||
<meta name="ajs-current-user-fullname" content="Jon Ferguson">
|
||
<meta name="ajs-current-user-avatar-url" content="/images/icons/profilepics/default.png">
|
||
<meta name="ajs-current-user-avatar-uri-reference" content="/images/icons/profilepics/default.png">
|
||
<meta name="ajs-static-resource-url-prefix" content="/s/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/_">
|
||
<meta name="ajs-global-settings-attachment-max-size" content="10485760">
|
||
<meta name="ajs-user-locale" content="en_US">
|
||
<meta name="ajs-enabled-dark-features" content="confluence.view.edit.transition,confluence-inline-comments-resolved,notification.plugin.api.enabled.com.atlassian.confluence.plugins.sharepage.api.ShareContentEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.mentions.api.ConfluenceMentionEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.security.ForgotPasswordEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.tasklist.event.SendTaskEmailEvent,file-annotations,confluence.efi.onboarding.rich.space.content,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.comment.CommentCreateEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.follow.FollowEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.inlinecomments.events.InlineCommentReplyEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.blogpost.BlogPostCreateEvent,confluence.table.resizable,notification.batch,confluence-inline-comments-rich-editor,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.blogpost.BlogPostUpdateEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.page.async.PageCreatedEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.files.notifications.event.FileContentMentionUpdateEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.hipchat.api.events.HipChatUserMapped,quick-reload-inline-comments-flags,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.blogpost.BlogPostMovedEvent,clc.quick.create,cql.search.screen,nps.survey.inline.dialog,confluence.efi.onboarding.new.templates,pdf-preview,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.page.async.PageMovedEvent,previews.sharing,previews.versions,notification.plugin.api.enabled.com.atlassian.confluence.plugins.files.notifications.event.FileContentUpdateEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.attachment.AttachmentBatchUploadCompletedEvent,notification.plugin.api.enabled.com.atlassian.confluence.efi.emails.events.OnboardingLessUsersEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.files.notifications.event.FileContentRemoveEvent,confluence.wrap.macro,atlassian.aui.raphael.disabled,previews.conversion-service,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.comment.CommentUpdateEvent,editor.ajax.save,notification.plugin.api.enabled.com.atlassian.confluence.event.events.content.page.async.PageEditedEvent,previews.trigger-all-file-types,notification.plugin.api.enabled.com.atlassian.confluence.plugins.inlinecomments.events.InlineCommentResolveEvent,notification.plugin.api.enabled.com.atlassian.confluence.event.events.like.LikeCreatedEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.inlinecomments.events.InlineCommentCreateEvent,previews.sharing.pushstate,file-annotations.likes,notification.plugin.api.enabled.com.atlassian.confluence.efi.emails.events.OnboardingNoSpaceCreatedEvent,notification.plugin.api.enabled.com.atlassian.confluence.plugins.sharepage.api.ShareAttachmentEvent,confluence-inline-comments,confluence-inline-comments-dangling-comment">
|
||
<meta name="ajs-atl-token" content="12d3275d4e1eb5e58d6ebfb6388e8866243dc2e3">
|
||
<meta name="ajs-confluence-flavour" content="VANILLA">
|
||
<meta name="ajs-user-date-pattern" content="dd MMM yyyy">
|
||
<meta name="ajs-date.format" content="yyyy-MM-dd">
|
||
|
||
<link rel="shortcut icon" href="../s/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/64/_/favicon.ico">
|
||
<link rel="icon" type="image/x-icon" href="../s/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/64/_/favicon.ico">
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml" href="../opensearch/osd.action" title="Wiki"/>
|
||
|
||
|
||
<meta name="ajs-create-issue-metadata-show-discovery" content="true">
|
||
|
||
|
||
<script>window.WRM=window.WRM||{};window.WRM._unparsedData=window.WRM._unparsedData||{};window.WRM._unparsedErrors=window.WRM._unparsedErrors||{};WRM._unparsedData["com.atlassian.plugins.atlassian-plugins-webresource-plugin:context-path.context-path"]="\u0022\u0022";WRM._unparsedData["confluence.macro.metadata.provider:macro-browser-metadata-resources.macro-meta-client-cache-key"]="\u00221517841656128\u0022";WRM._unparsedData["com.atlassian.applinks.applinks-plugin:applinks-common-exported.applinks-help-paths"]="{\u0022entries\u0022:{\u0022applinks.docs.root\u0022:\u0022https://confluence.atlassian.com/display/APPLINKS-052/\u0022,\u0022applinks.docs.diagnostics.troubleshoot.sslunmatched\u0022:\u0022SSL+and+application+link+troubleshooting+guide\u0022,\u0022applinks.docs.diagnostics.troubleshoot.oauthsignatureinvalid\u0022:\u0022OAuth+troubleshooting+guide\u0022,\u0022applinks.docs.diagnostics.troubleshoot.oauthtimestamprefused\u0022:\u0022OAuth+troubleshooting+guide\u0022,\u0022applinks.docs.delete.entity.link\u0022:\u0022Create+links+between+projects\u0022,\u0022applinks.docs.adding.application.link\u0022:\u0022Link+Atlassian+applications+to+work+together\u0022,\u0022applinks.docs.administration.guide\u0022:\u0022Application+Links+Documentation\u0022,\u0022applinks.docs.oauth.security\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.troubleshoot.application.links\u0022:\u0022Troubleshoot+application+links\u0022,\u0022applinks.docs.diagnostics.troubleshoot.unknownerror\u0022:\u0022Network+and+connectivity+troubleshooting+guide\u0022,\u0022applinks.docs.configuring.auth.trusted.apps\u0022:\u0022Configuring+Trusted+Applications+authentication+for+an+application+link\u0022,\u0022applinks.docs.diagnostics.troubleshoot.authlevelunsupported\u0022:\u0022OAuth+troubleshooting+guide\u0022,\u0022applinks.docs.diagnostics.troubleshoot.ssluntrusted\u0022:\u0022SSL+and+application+link+troubleshooting+guide\u0022,\u0022applinks.docs.diagnostics.troubleshoot.unknownhost\u0022:\u0022Network+and+connectivity+troubleshooting+guide\u0022,\u0022applinks.docs.delete.application.link\u0022:\u0022Link+Atlassian+applications+to+work+together\u0022,\u0022applinks.docs.link.applications\u0022:\u0022Link+Atlassian+applications+to+work+together\u0022,\u0022applinks.docs.diagnostics.troubleshoot.oauthproblem\u0022:\u0022OAuth+troubleshooting+guide\u0022,\u0022applinks.docs.diagnostics.troubleshoot.migration\u0022:\u0022Update+application+links+to+use+OAuth\u0022,\u0022applinks.docs.relocate.application.link\u0022:\u0022Link+Atlassian+applications+to+work+together\u0022,\u0022applinks.docs.administering.entity.links\u0022:\u0022Create+links+between+projects\u0022,\u0022applinks.docs.upgrade.application.link\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.diagnostics.troubleshoot.connectionrefused\u0022:\u0022Network+and+connectivity+troubleshooting+guide\u0022,\u0022applinks.docs.configuring.auth.oauth\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.insufficient.remote.permission\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.configuring.application.link.auth\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.diagnostics\u0022:\u0022Application+links+diagnostics\u0022,\u0022applinks.docs.configured.authentication.types\u0022:\u0022OAuth+security+for+application+links\u0022,\u0022applinks.docs.adding.entity.link\u0022:\u0022Create+links+between+projects\u0022,\u0022applinks.docs.diagnostics.troubleshoot.unexpectedresponse\u0022:\u0022Network+and+connectivity+troubleshooting+guide\u0022,\u0022applinks.docs.configuring.auth.basic\u0022:\u0022Configuring+Basic+HTTP+Authentication+for+an+Application+Link\u0022,\u0022applinks.docs.diagnostics.troubleshoot.authlevelmismatch\u0022:\u0022OAuth+troubleshooting+guide\u0022}}";WRM._unparsedData["com.atlassian.applinks.applinks-plugin:applinks-common-exported.applinks-types"]="{\u0022crowd\u0022:\u0022Crowd\u0022,\u0022confluence\u0022:\u0022Confluence\u0022,\u0022fecru\u0022:\u0022FishEye / Crucible\u0022,\u0022stash\u0022:\u0022Bitbucket Server\u0022,\u0022jira\u0022:\u0022JIRA\u0022,\u0022refapp\u0022:\u0022Reference Application\u0022,\u0022bamboo\u0022:\u0022Bamboo\u0022,\u0022generic\u0022:\u0022Generic Application\u0022}";WRM._unparsedData["com.atlassian.applinks.applinks-plugin:applinks-common-exported.entity-types"]="{\u0022singular\u0022:{\u0022refapp.charlie\u0022:\u0022Charlie\u0022,\u0022fecru.project\u0022:\u0022Crucible Project\u0022,\u0022fecru.repository\u0022:\u0022FishEye Repository\u0022,\u0022stash.project\u0022:\u0022Bitbucket Server Project\u0022,\u0022generic.entity\u0022:\u0022Generic Project\u0022,\u0022confluence.space\u0022:\u0022Confluence Space\u0022,\u0022bamboo.project\u0022:\u0022Bamboo Project\u0022,\u0022jira.project\u0022:\u0022JIRA Project\u0022},\u0022plural\u0022:{\u0022refapp.charlie\u0022:\u0022Charlies\u0022,\u0022fecru.project\u0022:\u0022Crucible Projects\u0022,\u0022fecru.repository\u0022:\u0022FishEye Repositories\u0022,\u0022stash.project\u0022:\u0022Bitbucket Server Projects\u0022,\u0022generic.entity\u0022:\u0022Generic Projects\u0022,\u0022confluence.space\u0022:\u0022Confluence Spaces\u0022,\u0022bamboo.project\u0022:\u0022Bamboo Projects\u0022,\u0022jira.project\u0022:\u0022JIRA Projects\u0022}}";WRM._unparsedData["com.atlassian.applinks.applinks-plugin:applinks-common-exported.authentication-types"]="{\u0022com.atlassian.applinks.api.auth.types.BasicAuthenticationProvider\u0022:\u0022Basic Access\u0022,\u0022com.atlassian.applinks.api.auth.types.TrustedAppsAuthenticationProvider\u0022:\u0022Trusted Applications\u0022,\u0022com.atlassian.applinks.api.auth.types.CorsAuthenticationProvider\u0022:\u0022CORS\u0022,\u0022com.atlassian.applinks.api.auth.types.OAuthAuthenticationProvider\u0022:\u0022OAuth\u0022,\u0022com.atlassian.applinks.api.auth.types.TwoLeggedOAuthAuthenticationProvider\u0022:\u0022OAuth\u0022,\u0022com.atlassian.applinks.api.auth.types.TwoLeggedOAuthWithImpersonationAuthenticationProvider\u0022:\u0022OAuth\u0022}";WRM._unparsedData["com.atlassian.confluence.plugins.confluence-feature-discovery-plugin:confluence-feature-discovery-plugin-resources.test-mode"]="false";WRM._unparsedData["com.atlassian.confluence.plugins.confluence-license-banner:confluence-license-banner-resources.license-details"]="{\u0022daysBeforeLicenseExpiry\u0022:0,\u0022daysBeforeMaintenanceExpiry\u0022:0,\u0022showLicenseExpiryBanner\u0022:false,\u0022showMaintenanceExpiryBanner\u0022:false,\u0022renewUrl\u0022:null,\u0022salesEmail\u0022:null}";if(window.WRM._dataArrived)window.WRM._dataArrived();</script>
|
||
<link type="text/css" rel="stylesheet" href="../s/2ea83fd8864ec7abfd1c57bbd499e3fd-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/be65c4ed0984ca532b26983f5fc1813e/_/download/contextbatch/css/_super/A.batch.css,qatlassian.aui.raphael.disabled=true.pagespeed.cf.b5mJHcvY_T.css" data-wrm-key="_super" data-wrm-batch-type="context" media="all">
|
||
<!--[if lt IE 9]>
|
||
<link type="text/css" rel="stylesheet" href="/s/2ea83fd8864ec7abfd1c57bbd499e3fd-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/be65c4ed0984ca532b26983f5fc1813e/_/download/contextbatch/css/_super/batch.css?atlassian.aui.raphael.disabled=true&conditionalComment=lt+IE+9" data-wrm-key="_super" data-wrm-batch-type="context" media="all">
|
||
<![endif]-->
|
||
<!--[if lte IE 9]>
|
||
<link type="text/css" rel="stylesheet" href="/s/2ea83fd8864ec7abfd1c57bbd499e3fd-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/be65c4ed0984ca532b26983f5fc1813e/_/download/contextbatch/css/_super/batch.css?atlassian.aui.raphael.disabled=true&conditionalComment=lte+IE+9" data-wrm-key="_super" data-wrm-batch-type="context" media="all">
|
||
<![endif]-->
|
||
<link type="text/css" rel="stylesheet" href="../s/5b28dbaab9aec50acc519cab142b31d0-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/0071391cb09085a4b4188d3165013436/_/download/contextbatch/css/atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super/A.batch.css,qatlassian.aui.raphael.disabled=true,abuild-number=6441,aconfluence.table.resizable=true,aconfluence.view.edit.transition=true,ahighlightactions=true,ahostenabled=true,ais-server-instance=true.pagespeed.cf.4rU8tbBn9A.css" data-wrm-key="atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super" data-wrm-batch-type="context" media="all">
|
||
<!--[if lt IE 9]>
|
||
<link type="text/css" rel="stylesheet" href="/s/5b28dbaab9aec50acc519cab142b31d0-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/0071391cb09085a4b4188d3165013436/_/download/contextbatch/css/atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super/batch.css?atlassian.aui.raphael.disabled=true&build-number=6441&conditionalComment=lt+IE+9&confluence.table.resizable=true&confluence.view.edit.transition=true&highlightactions=true&hostenabled=true&is-server-instance=true" data-wrm-key="atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super" data-wrm-batch-type="context" media="all">
|
||
<![endif]-->
|
||
<link type="text/css" rel="stylesheet" href="../s/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/64/_/styles/A.colors.css.pagespeed.cf.JAwXGHm8Sg.css" media="all">
|
||
<script type="text/javascript" src="../s/e2e8207738f050e13263acedd2f758f2-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/be65c4ed0984ca532b26983f5fc1813e/_/download/contextbatch/js/_super/batch.js,qatlassian.aui.raphael.disabled=true,alocale=en-US.pagespeed.jm.s9eVqxBaUW.js" data-wrm-key="_super" data-wrm-batch-type="context"></script>
|
||
<script type="text/javascript" src="../s/f08fd7c9304bcba1da9f982a6b8ac65f-CDN/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/0071391cb09085a4b4188d3165013436/_/download/contextbatch/js/atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super/batch.js,qatlassian.aui.raphael.disabled=true,abuild-number=6441,aconfluence.table.resizable=true,aconfluence.view.edit.transition=true,ahighlightactions=true,ahostenabled=true,ais-server-instance=true,alocale=en-US.pagespeed.jm.Y6UQ2ej" data-wrm-key="atl.confluence.plugins.pagetree-desktop,main,atl.general,viewcontent,page,atl.comments,-_super" data-wrm-batch-type="context"></script>
|
||
|
||
|
||
|
||
<meta name="stp-license-product-name" content="Confluence"/> <meta name="stp-license-days-to-expiry" content="-112"/> <meta name="stp-license-is-admin" content="false"/> <meta name="stp-license-should-keep-banner-hidden" content="false"/>
|
||
|
||
|
||
|
||
<meta name="ajs-site-title" content="Wiki"/>
|
||
|
||
<script>jQuery(document).ready(function(){jQuery(".external-link").attr("target","_blank");});</script>
|
||
|
||
|
||
<link rel="canonical" href="ii7.html">
|
||
<link rel="shortlink" href="ii7.html">
|
||
<meta name="wikilink" content="[SER:The Jetstream Service API]">
|
||
<meta name="page-version" content="151">
|
||
<meta name="ajs-page-version" content="151">
|
||
|
||
</head>
|
||
|
||
|
||
<body id="com-atlassian-confluence" class="theme-default aui-layout aui-theme-default">
|
||
|
||
|
||
<div id='stp-licenseStatus-banner'></div>
|
||
<ul id="assistive-skip-links" class="assistive">
|
||
<li><a href="ii7.html#title-heading">Skip to content</a></li>
|
||
<li><a href="ii7.html#breadcrumbs">Skip to breadcrumbs</a></li>
|
||
<li><a href="ii7.html#header-menu-bar">Skip to header menu</a></li>
|
||
<li><a href="ii7.html#navigation">Skip to action menu</a></li>
|
||
<li><a href="ii7.html#quick-search-query">Skip to quick search</a></li>
|
||
</ul>
|
||
<div id="page">
|
||
<div id="full-height-container">
|
||
<div id="header-precursor">
|
||
<div class="cell">
|
||
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<header id="header" role="banner">
|
||
<nav class="aui-header aui-dropdown2-trigger-group" role="navigation"><div class="aui-header-inner"><div class="aui-header-before"><a class=" aui-dropdown2-trigger app-switcher-trigger" aria-controls="app-switcher" aria-haspopup="true" role="button" tabindex="0" data-aui-trigger href="ii7.html#app-switcher"><span class="aui-icon aui-icon-small aui-iconfont-appswitcher">Linked Applications</span></a><div id="app-switcher" class="aui-dropdown2 aui-style-default" role="menu" aria-hidden="true" data-is-switcher="true" data-environment="{"isUserAdmin":false,"isAppSuggestionAvailable":false,"isSiteAdminUser":false}"><div role="application"><div class="app-switcher-loading">Loading…</div></div></div></div><div class="aui-header-primary"><h1 id="logo" class="aui-header-logo aui-header-logo-custom"><a href="../index.html"><img src="../download/attachments/360449/atl.site.logo%3Fversion=2&modificationDate=1492129247000&api=v2" alt="Wiki"/><span class="aui-header-logo-text">Wiki</span></a></h1><ul class="aui-nav">
|
||
<li>
|
||
|
||
|
||
|
||
<a id="space-directory-link" href="../spacedirectory/view.action.html" class=" aui-nav-imagelink" title="Spaces">
|
||
<span>Spaces</span>
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<a id="people-directory-link" href="../browsepeople.action.html" class=" aui-nav-imagelink" title="People">
|
||
<span>People</span>
|
||
</a>
|
||
</li>
|
||
<li class="aui-buttons">
|
||
|
||
<a href="../pages/createpage.action%3FspaceKey=SER&fromPageId=12594826&src=quick-create.html" id="quick-create-page-button" class="aui-button aui-button-primary" title='Create blank page' tabindex="0">Create</a>
|
||
<a href="ii7.html#" id="create-page-button" class="aui-button aui-button-primary clc-create-dialog-btn" title='Create from template' tabindex="0"><span class="aui-icon aui-icon-small aui-iconfont-more">Create </span></a>
|
||
</li>
|
||
</ul>
|
||
</div><div class="aui-header-secondary"><ul class="aui-nav">
|
||
<li>
|
||
<form id="quick-search" class="aui-quicksearch dont-default-focus header-quicksearch" action="https://confluence.jibo.com/dosearchsite.action" method="get"><fieldset><label for="quick-search-query" class="assistive">Quick Search</label><input id="quick-search-query" class="text app-search search quick-search-query" type="text" accessKey="q" autocomplete="off" name="queryString" title="Quick Search" placeholder="Search"/><input id="quick-search-submit" class="quick-search-submit" type="submit" value="Search"/><div class="aui-dd-parent quick-nav-drop-down"></div></fieldset></form>
|
||
</li>
|
||
<li>
|
||
|
||
<a id="help-menu-link" class="aui-nav-link aui-dropdown2-trigger" href="ii7.html#" aria-haspopup="true" aria-owns="help-menu-link-content" title="Help">
|
||
<span class="aui-icon aui-icon-small aui-iconfont-help">Help</span>
|
||
</a>
|
||
<nav id="help-menu-link-content" class="aui-dropdown2 aui-style-default" aria-hidden="true">
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="help-menu-link-leading" class="aui-list-truncate section-leading first">
|
||
<li>
|
||
|
||
|
||
<a id="confluence-help-link" href="https://docs.atlassian.com/confluence/docs-510/" class=" " title="Visit the Confluence documentation home" target="_blank">
|
||
Online Help
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="keyboard-shortcuts-link" href="ii7.html#" class=" " title="View available keyboard shortcuts">
|
||
Keyboard Shortcuts
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="feed-builder-link" href="../dashboard/configurerssfeed.action.html" class=" " title="Create your custom RSS feed.">
|
||
Feed Builder
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="whats-new-menu-link" href="https://confluence.atlassian.com/display/DOC/Confluence+5.10+Release+Notes?a=false" class=" " title="">
|
||
What’s new
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="gadget-directory-link" href="ii7.html#" class=" user-item administration-link " title="Browse gadgets provided by Confluence">
|
||
Available Gadgets
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="confluence-about-link" href="../aboutconfluencepage.action.html" class=" " title="Get more information about Confluence">
|
||
About Confluence
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
<a id="notifications-anchor" href="ii7.html#" class="mw-anchor read aui-nav-imagelink" title="">
|
||
<span></span>
|
||
</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
<a id="user-menu-link" class="aui-dropdown2-trigger " aria-haspopup="true" aria-owns="user-menu-link-content" data-username="jon.ferguson" href="ii7.html#" title="Jon Ferguson">
|
||
<div class="aui-avatar aui-avatar-small">
|
||
<div class="aui-avatar-inner">
|
||
<img/>
|
||
</div>
|
||
</div>
|
||
<span class="aui-icon-dropdown"></span>
|
||
</a>
|
||
<nav id="user-menu-link-content" class="aui-dropdown2 aui-style-default" aria-hidden="true">
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="user-menu-link-user-preferences" class="aui-list-truncate section-user-preferences first">
|
||
<li>
|
||
|
||
|
||
<a id="create-personal-space-link" href="../spaces/createpersonalspace.action.html" class=" user-item personal-space create-personal-space-link " title="">
|
||
Add Personal Space…
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="view-user-history-link" href="../users/viewuserhistory.action.html" class=" user-item user-history popup-link " title="">
|
||
Recently Viewed
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="user-menu-link-user-content" class="aui-list-truncate section-user-content">
|
||
<li>
|
||
|
||
|
||
<a id="view-user-profile-link" href="../users/viewmyprofile.action.html" class=" user-item user-profile " title="">
|
||
Profile
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="view-mytasks-link" href="../plugins/inlinetasks/mytasks.action.html" class=" user-item list-user-status " title="">
|
||
Tasks
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="user-favourites-link" href="../users/viewmyfavourites.action.html" class=" user-item " title="">
|
||
Saved for later
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="user-watches-link" href="../users/viewnotifications.action.html" class=" user-item " title="">
|
||
Watches
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="user-drafts-link" href="../users/viewmydrafts.action.html" class=" user-item " title="">
|
||
Drafts
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="user-network-link" href="../users/viewfollow.action%3Fusername=jon.ferguson.html" class=" follow-link " title="">
|
||
Network
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="user-settings-link" href="../users/viewmysettings.action.html" class=" user-item " title="">
|
||
Settings
|
||
</a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
<a id="upm-requests-link" href="../plugins/servlet/upm/requests%3Fsource=header_user.html" class=" " title="">
|
||
Atlassian Marketplace
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="user-menu-link-user-operations" class="aui-list-truncate section-user-operations">
|
||
<li>
|
||
|
||
|
||
<a id="logout-link" href="../logout.action.html" class=" user-item logout-link " title="">
|
||
Log Out
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
|
||
</li>
|
||
</ul>
|
||
</div></div><!-- .aui-header-inner--></nav><!-- .aui-header -->
|
||
<br class="clear">
|
||
</header>
|
||
|
||
|
||
|
||
<div class="ia-splitter">
|
||
<div class="ia-splitter-left">
|
||
<div class="ia-fixed-sidebar">
|
||
|
||
<div class="acs-side-bar ia-scrollable-section"><div class="acs-side-bar-space-info tipsy-enabled" data-configure-tooltip="Edit space details"><div class="avatar"><div class="space-logo" data-key="SER" data-name="Server" data-entity-type="confluence.space"><div class="avatar-img-container"><div class="avatar-img-wrapper"><a href="FYAM.html" title="Server"><img class="avatar-img" src="../download/attachments/819219/SER%3Fversion=2&modificationDate=1509719445000&api=v2" alt="Server"></a></div></div></div></div><div class="space-information-container"><div class="name"><a href="FYAM.html" title="Server">Server</a></div><div class="flyout-handle icon"></div><div class="favourite-space-icon"><button title="Add to my spaces" id="space-favourite-add" class="space-favourite aui-icon aui-icon-small aui-iconfont-unstar"></button><button class=" space-favourite-hidden space-favourite aui-icon aui-icon-small aui-iconfont-star" id="space-favourite-remove" title="Remove from my spaces"></button></div></div></div><div class="acs-side-bar-content"><div class="acs-nav-wrapper"><div class="acs-nav" data-has-create-permission="true" data-quick-links-state="null" data-page-tree-state="null" data-nav-type="page-tree"><div class="acs-nav-sections"><div class="main-links-section "><ul class="acs-nav-list"><li class="acs-nav-item wiki current-item" data-collector-key="spacebar-pages"><a class="acs-nav-item-link tipsy-enabled" href="../collector/pages.action%3Fkey=SER.html" data-collapsed-tooltip="Pages"><span class="icon"></span><span class="acs-nav-item-label">Pages</span></a></li><li class="acs-nav-item blog" data-collector-key="spacebar-blogs"><a class="acs-nav-item-link tipsy-enabled" href="../pages/viewrecentblogposts.action%3Fkey=SER.html" data-collapsed-tooltip="Blog"><span class="icon"></span><span class="acs-nav-item-label">Blog</span></a></li></ul></div><div class="quick-links-wrapper"></div></div></div></div><div class="ia-secondary-container tipsy-enabled" data-tree-type="page-tree"><div class="ia-secondary-header"><h5 class="ia-secondary-header-title page-tree"><span class="icon"></span><span class="label">Page tree</span></h5></div><div class="ia-secondary-content">
|
||
|
||
|
||
<div class="plugin_pagetree conf-macro output-inline" data-hasbody="false" data-macro-name="pagetree">
|
||
|
||
|
||
|
||
<ul class="plugin_pagetree_children_list plugin_pagetree_children_list_noleftspace">
|
||
<div class="plugin_pagetree_children">
|
||
</div>
|
||
</ul>
|
||
|
||
<fieldset class="hidden">
|
||
<input type="hidden" name="treeId" value=""/>
|
||
<input type="hidden" name="treeRequestId" value="/plugins/pagetree/naturalchildren.action?decorator=none&excerpt=false&sort=position&reverse=false&disableLinks=false&expandCurrent=true"/>
|
||
<input type="hidden" name="treePageId" value="12594826"/>
|
||
|
||
<input type="hidden" name="noRoot" value="false"/>
|
||
<input type="hidden" name="rootPageId" value="819221"/>
|
||
|
||
<input type="hidden" name="rootPage" value=""/>
|
||
<input type="hidden" name="startDepth" value="0"/>
|
||
<input type="hidden" name="spaceKey" value="SER"/>
|
||
|
||
<input type="hidden" name="i18n-pagetree.loading" value="Loading..."/>
|
||
<input type="hidden" name="i18n-pagetree.error.permission" value="Unable to load page tree. It seems that you do not have permission to view the root page."/>
|
||
<input type="hidden" name="i18n-pagetree.eeror.general" value="There was a problem retrieving the page tree. Please check the server log file for more information."/>
|
||
<input type="hidden" name="loginUrl" value="/login.action?os_destination=%2Fpages%2Fviewpage.action%3FspaceKey%3DSER%26title%3DThe%2BJetstream%2BService%2BAPI&permissionViolation=true"/>
|
||
<input type="hidden" name="mobile" value="false"/>
|
||
|
||
<fieldset class="hidden">
|
||
<input type="hidden" name="ancestorId" value="12593844"/>
|
||
<input type="hidden" name="ancestorId" value="12594548"/>
|
||
<input type="hidden" name="ancestorId" value="819221"/>
|
||
</fieldset>
|
||
</fieldset>
|
||
</div>
|
||
</div></div></div><div class="hidden"><a href="../collector/pages.action%3Fkey=SER.html" id="space-pages-link"></a><script type="text/x-template" title="logo-config-content"><h2>Space Details</h2><div class="personal-space-logo-hint">Your profile picture is used as the logo for your personal space. <a href="../users/profile/editmyprofilepicture.action.html" target="_blank">Change your profile picture</a>.</div></script></div></div><div class="space-tools-section"><div id="space-tools-menu-additional-items" class="hidden"><div data-label="Reorder pages" data-class="" data-href="/pages/reorderpages.action?key=SER">Reorder pages</div></div><button id="space-tools-menu-trigger" class=" aui-dropdown2-trigger aui-button aui-button-subtle tipsy-enabled" aria-controls="space-tools-menu" aria-haspopup="true" role="button" data-aui-trigger><span class="aui-icon aui-icon-small aui-iconfont-configure">Configure</span><span class="aui-button-label">Space tools</span><span class="icon aui-icon-dropdown"></span></button><div id="space-tools-menu" class="aui-dropdown2 aui-style-default space-tools-dropdown" role="menu" aria-hidden="true" data-aui-alignment="top left"><div role="application"></div></div><a class="expand-collapse-trigger"></a></div>
|
||
|
||
</div>
|
||
</div>
|
||
<!-- \#header -->
|
||
|
||
|
||
|
||
<div id="main" class=" aui-page-panel">
|
||
<div id="main-header">
|
||
|
||
<div id="navigation" class="content-navigation view">
|
||
<ul class="ajs-menu-bar">
|
||
<li class="ajs-button normal">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="editPageLink" href="../pages/editpage.action%3FpageId=12594826.html" rel="nofollow" class="aui-button aui-button-subtle edit full-load" accessKey="e" title="Edit">
|
||
<span>
|
||
<span class="aui-icon aui-icon-small aui-iconfont-edit"></span>
|
||
<u>E</u>dit
|
||
</span> </a>
|
||
</li>
|
||
<li class="ajs-button normal">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="page-favourite" href="ii7.html#" rel="nofollow" class="aui-button aui-button-subtle action-page-favourite" accessKey="f" title="Save for later">
|
||
<span>
|
||
<span class="aui-icon aui-icon-small aui-iconfont-unstar"></span>
|
||
Save <u>f</u>or later
|
||
</span> </a>
|
||
</li>
|
||
<li class="ajs-button normal">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="watch-content-button" href="ii7.html#" rel="nofollow" class="aui-button aui-button-subtle watch-menu" title="Watch (w)">
|
||
<span>
|
||
<span class="aui-icon aui-icon-small aui-iconfont-unwatch"></span>
|
||
<u>W</u>atch
|
||
</span> </a>
|
||
</li>
|
||
<li class="ajs-button normal">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="shareContentLink" href="ii7.html#" rel="nofollow" class="aui-button aui-button-subtle share" title="Share this content by emailing other users">
|
||
<span>
|
||
<span class="aui-icon aui-icon-small aui-iconfont-share"></span>
|
||
<u>S</u>hare
|
||
</span> </a>
|
||
</li>
|
||
|
||
<li class="normal ajs-menu-item">
|
||
<a id="action-menu-link" class="action aui-dropdown2-trigger-arrowless aui-button aui-button-subtle ajs-menu-title aui-dropdown2-trigger" href="ii7.html#" aria-haspopup="true" aria-owns="action-menu" data-container="#navigation">
|
||
<span>
|
||
<span class="aui-icon aui-icon-small aui-iconfont-more"></span>
|
||
|
||
</span>
|
||
</a> <div id="action-menu" class="aui-dropdown2 aui-style-default" aria-hidden="true">
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="action-menu-primary" class="section-primary first">
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="view-attachments-link" href="../pages/viewpageattachments.action%3FpageId=12594826.html" rel="nofollow" class="action-view-attachments" accessKey="t" title="View Attachments">
|
||
<span>
|
||
A<u>t</u>tachments (3)
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-view-history-link" href="../pages/viewpreviousversions.action%3FpageId=12594826.html" rel="nofollow" class="action-view-history" title="">
|
||
<span>
|
||
Page History
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-page-permissions-link" href="../pages/viewinfo.action%3FpageId=12594826.html" rel="nofollow" class="action-page-permissions" title="Edit restrictions">
|
||
<span>
|
||
Restrictions
|
||
</span> </a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="action-menu-secondary" class="section-secondary">
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="view-page-info-link" href="../pages/viewinfo.action%3FpageId=12594826.html" rel="nofollow" class="action-view-info" title="">
|
||
<span>
|
||
Page Information
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="view-resolved-comments" href="ii7.html#" rel="nofollow" class="" title="">
|
||
<span>
|
||
Resolved comments
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="link-to-page-link" href="../pages/viewinfo.action%3FpageId=12594826.html" rel="nofollow" class="" title="Link to this Page">
|
||
<span>
|
||
Link to this Page…
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="view-in-hierarchy-link" href="../pages/reorderpages.action%3Fkey=SER&openId=12594826.html#selectedPageInHierarchy" rel="nofollow" class="" title="">
|
||
<span>
|
||
View in Hierarchy
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-source-editor-view-storage-link" href="../plugins/viewstorage/viewpagestorage.action%3FpageId=12594826" rel="nofollow" class="action-view-storage view-storage-link popup-link" title="">
|
||
<span>
|
||
View Storage Format
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-view-source-link" href="../plugins/viewsource/viewpagesrc.action%3FpageId=12594826.html" rel="nofollow" class="action-view-source popup-link" title="">
|
||
<span>
|
||
View Source
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-export-pdf-link" href="../spaces/flyingpdf/pdfpageexport.action%3FpageId=12594826" rel="nofollow" class="" title="">
|
||
<span>
|
||
Export to PDF
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-export-word-link" href="../exportword%3FpageId=12594826" rel="nofollow" class="action-export-word" title="">
|
||
<span>
|
||
Export to Word
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="import-word-doc" href="../pages/worddav/uploadimport.action%3FpageId=12594826.html" rel="nofollow" class="" title="">
|
||
<span>
|
||
Import Word Document
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a href="../plugins/lucidchart/selectVisio.action%3FcontentId=12594826.html" rel="nofollow" class="" title="">
|
||
<span>
|
||
View Visio File
|
||
</span> </a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="aui-dropdown2-section">
|
||
<ul id="action-menu-modify" class="section-modify">
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-copy-page-link" href="../pages/copypage.action%3FidOfPageToCopy=12594826&spaceKey=SER.html" rel="nofollow" class="action-copy" title="">
|
||
<span>
|
||
Copy
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-move-page-dialog-link" href="../pages/viewpage.action%3FpageId=12594826.html" rel="nofollow" class="action-move" title="">
|
||
<span>
|
||
Move
|
||
</span> </a>
|
||
</li>
|
||
<li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a id="action-remove-content-link" href="../pages/removepage.action%3FpageId=12594826.html" rel="nofollow" class="action-remove" title="">
|
||
<span>
|
||
Delete
|
||
</span> </a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
<div id="title-heading" class="pagetitle with-breadcrumbs">
|
||
|
||
<div id="breadcrumb-section">
|
||
|
||
|
||
|
||
<ol id="breadcrumbs">
|
||
|
||
|
||
<li class="first">
|
||
|
||
<span class=""><a href="../collector/pages.action%3Fkey=SER.html">Dashboard</a></span>
|
||
<li id="ellipsis" title="Show all breadcrumbs"><span><strong>…</strong></span></li>
|
||
|
||
|
||
<li class="hidden-crumb">
|
||
|
||
<span class=""><a href="FYAM.html">Server Home</a></span>
|
||
|
||
|
||
<li class="hidden-crumb">
|
||
|
||
<span class=""><a href="dC3.html">Cloud Services</a></span>
|
||
|
||
|
||
<li>
|
||
|
||
<span class=""><a href="tCr.html">Jetstream Service</a></span>
|
||
</ol>
|
||
|
||
|
||
</div>
|
||
|
||
|
||
<a href="ii7.html#page-banner-end" class="assistive">Skip to end of banner</a>
|
||
<div id="page-banner-start" class="assistive"></div>
|
||
|
||
|
||
<div id="page-metadata-banner"><ul class="banner"><li id="system-content-items" class="noprint"><a href="ii7.html" title="Unrestricted" id="content-metadata-page-restrictions" class="aui-icon aui-icon-small aui-iconfont-unlocked"></a><a href="../pages/viewpageattachments.action%3FpageId=12594826&metadataLink=true.html" title="3 attachments" id="content-metadata-attachments" class="aui-icon aui-icon-small aui-iconfont-attachment"></a></li><li class="page-metadata-item noprint has-button" id="content-metadata-jira-wrapper"><a href="ii7.html" title="" id="content-metadata-jira" class="aui-button aui-button-subtle content-metadata-jira tipsy-disabled hidden"><span>JIRA links</span></a></li></ul></div>
|
||
|
||
|
||
<a href="ii7.html#page-banner-start" class="assistive">Go to start of banner</a>
|
||
<div id="page-banner-end" class="assistive"></div>
|
||
|
||
|
||
<h1 id="title-text" class="with-breadcrumbs">
|
||
<a href="ii7.html">The Jetstream Service API</a>
|
||
</h1>
|
||
</div>
|
||
</div><!-- \#main-header -->
|
||
|
||
|
||
|
||
<div id="sidebar-container">
|
||
</div><!-- \#sidebar-container -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="content" class="page view">
|
||
|
||
|
||
|
||
<div id="action-messages">
|
||
</div>
|
||
|
||
|
||
|
||
<script type="text/x-template" title="searchResultsGrid">
|
||
<table class="aui">
|
||
<thead>
|
||
<tr class="header">
|
||
<th class="search-result-title">Page Title</th>
|
||
<th class="search-result-space">Space</th>
|
||
<th class="search-result-date">Updated</th>
|
||
</tr>
|
||
</thead>
|
||
</table>
|
||
</script>
|
||
<script type="text/x-template" title="searchResultsGridCount">
|
||
<p class="search-result-count">{0}</p>
|
||
</script>
|
||
<script type="text/x-template" title="searchResultsGridRow">
|
||
<tr class="search-result">
|
||
<td class="search-result-title"><a href="https://confluence.jibo.com/display/SER/{1}" class="content-type-{2}"><span>{0}</span></a></td>
|
||
<td class="search-result-space"><a class="space" href="https://confluence.jibo.com/display/{4}/" title="{3}">{3}</a></td>
|
||
<td class="search-result-date"><span class="date" title="{6}">{5}</span></td>
|
||
</tr>
|
||
</script>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<a href="ii7.html#page-metadata-end" class="assistive">Skip to end of metadata</a>
|
||
<div id="page-metadata-start" class="assistive"></div>
|
||
|
||
<div class="page-metadata">
|
||
<ul>
|
||
<li class="page-metadata-modification-info">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Created by <span class='author'> <a href="../display/~eric.woudenberg.html" class="url fn confluence-userlink" data-username="eric.woudenberg">Eric Woudenberg</a></span>, last modified by <span class='editor'> <a href="../display/~siggi.orn.html" class="url fn confluence-userlink" data-username="siggi.orn">Sigurdur (Siggi) Orn Adalgeirsson</a></span> on <a class='last-modified' title='Show changes' href='../pages/diffpagesbyversion.action%3FpageId=12594826&selectedPageVersions=150&selectedPageVersions=151.html'>2018-05-21</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
|
||
<a href="ii7.html#page-metadata-start" class="assistive">Go to start of metadata</a>
|
||
<div id="page-metadata-end" class="assistive"></div>
|
||
|
||
|
||
|
||
<div id="main-content" class="wiki-content">
|
||
|
||
<div class="contentLayout2">
|
||
<div class="columnLayout two-left-sidebar" data-layout="two-left-sidebar">
|
||
<div class="cell aside" data-type="aside">
|
||
<div class="innerCell">
|
||
<p> </p><p><strong>Table of Contents</strong></p><p><div class="toc-macro client-side-toc-macro conf-macro output-block" data-hasbody="false" data-headerelements="H1,H2,H3,H4,H5,H6,H7" data-macro-name="toc"> </div></p></div>
|
||
</div>
|
||
<div class="cell normal" data-type="normal">
|
||
<div class="innerCell">
|
||
<p><span class="conf-macro output-inline" data-hasbody="true" data-macro-name="excerpt"><h2 id="TheJetstreamServiceAPI-ServiceDescription"><span style="color: rgb(0,0,0);">Service Description</span></h2><p>Jetstream is a Jibo Platform Service that mediates a skill's interaction with the Hub (it replaces the ASRservice in Jibo V1). In this role it must handle requests from skills to recognize speech, it must engage onboard recognizers for HJ spotting, name learning and speaker ID, and it must pass along proactive trigger information from the skills to the Hub and back. The genesis of Jetstream's basic structure is visible in the <a href="ii7.html#TheJetstreamServiceAPI-JetstreamFlowDiagram">Jetstream Flow Diagram</a> at the end of this document.</p><p>Jetstream presents a URL-based API to skills via HTTP requests and Websocket messages. For the HTTP requests, the parameters are supplied as a JSON string in the body of a POST request to the given URL. Likewise the HTTP responses and Websocket messages supply their information to the skill as a JSON payload in the body of the response or message.</p><p>In this document, <span style="color: rgb(255,102,0);">red colored text with a ⚠ symbol</span> indicates a feature that should not be counted on due to being either not-yet-implemented or likely to change soon.</p><h2 id="TheJetstreamServiceAPI-TheJetstreamHTTPAPI"><span style="color: rgb(0,0,0);">The Jetstream HTTP API</span></h2><p><span style="color: rgb(0,0,0);">Herewith is a thematically arranged list of all the HTTP-based commands Jetstream offers.</span></p><h3 id="TheJetstreamServiceAPI-LocalTurns:Skill-drivenASR"><span style="color: rgb(0,0,0);">Local Turns: Skill-driven ASR</span></h3><p><span style="color: rgb(0,0,0);">A local turn is the means by which a skill requests speech recognition services. The word "local" here refers to a turn started by the skill, in contrast to turns started when a user says "HJ + phrase" that have a (global) reach beyond the skill. Since turns are long operations that involve waiting for user speech, they run asynchronously after they're requested. The skill will post a turn request to Jetstream, which is acknowledged without delay and which causes Jetstream to begin the process of connecting and sending audio to the Hub to perform speech recognition. As the turn progresses, Jetstream posts messages about its status or conclusion to <code>/events.</code></span></p><h4 id="TheJetstreamServiceAPI-StartLocalTurn">Start Local Turn</h4><p>Start a local turn, it remains active until it reports a status of SUCCEEDED, FAILED, INTERRUPTED, REJECTED, CANCELED, or TIMEDOUT via a <a href="ii7.html#TheJetstreamServiceAPI-TurnResult">TURN_RESULT</a> message on the <code>/events</code> Websocket.</p><div class="table-wrap"><table class="relative-table wrapped confluenceTable" style="width: 79.6975%;"><colgroup><col style="width: 10.0073%;"/><col style="width: 6.5011%;"/><col style="width: 83.4916%;"/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"> URL</td><td class="highlight-green confluenceTd" colspan="2" data-highlight-colour="green"><pre>/listen/start_local_turn</pre></td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue">Parameters</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">nluRules</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string[]</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Names of rules that should be activated for this turn. If this list is empty, the text output of the ASR step is not parsed for meaning and is simply returned to the skill.</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">ignoreHJ</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">boolean</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">If true and HJ occurs during this turn, ignore it (rather than interrupt the turn). (default: false)</span></p></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">ignoreGlobalRules</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">boolean</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">If true, global rules are not active during the turn, if false, the global rules (other than the launch rule) are active in addition to the provided nluRules. (default: false)</span></td></tr><tr><td colspan="1" class="confluenceTd">rejectIfBusy</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">If true and there is already a turn in progress (global, local, enrollment or pronunciation learning) then reject this turn, otherwise interrupt the turn in progress and run this one instead. (default:false)</td></tr><tr><td colspan="1" class="confluenceTd">language</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">ISO language label, e.g. "en-US" (default: "")</td></tr><tr><td colspan="1" class="confluenceTd">meta</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">Arbitrary JSON data to pass along to the hub. (default: "")</td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,51,102);"> earlyEOS </span></td><td colspan="1" class="confluenceTd">string[]</td><td colspan="1" class="confluenceTd">A list of words and phrases that will be used to detect a valid response from incremental ASR results (i.e. prior to EOS and grammar parsing).</td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,51,102);">hintPhrases</span></td><td colspan="1" class="confluenceTd">string[]</td><td colspan="1" class="confluenceTd">A list of hint phrases to add to the ASR vocabulary</td></tr><tr><td class="confluenceTd">clientNLU</td><td class="confluenceTd">NLUResult</td><td class="confluenceTd">The semantic result desired from this turn. If present, no audio will be sent to the hub. See this entry in <em>update_local_turn</em> for further details.</td></tr><tr><td colspan="1" class="confluenceTd">clientASR</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The ASR text result desired from this turn. If present, no audio will be sent to the hub. See this entry in <em>update_local_turn</em> for further details.</td></tr><tr><td colspan="1" class="confluenceTd">sosTimeout</td><td colspan="1" class="confluenceTd">float</td><td colspan="1" class="confluenceTd">The period of time to wait (in seconds) for the Start Of Speech after hearing HJ. If HJ is not heard within this period, the turn completes with a status of TIMEDOUT and message of "sos". If this property is set to -1 (or not provided) the value used is the one found in the jibo-jetstream-service.json file with the property name "local_sosTimeout_sec", which is currently 10 seconds. (default: -1)</td></tr><tr><td colspan="1" class="confluenceTd">maxSpeechTimeout</td><td colspan="1" class="confluenceTd">float</td><td colspan="1" class="confluenceTd">The maximum number of seconds that a user may speak after saying HJ. If the user speaks for more than this number of seconds, the turn completes with a status of TIMEDOUT and message of "maxSpeech". As with sosTimeout, a value of -1 causes the config file property "local_maxSpeechTimeout_sec" to be used, which is currently 60 seconds. (default: -1)</td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue"> Response </td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this turn, which will be included with any status information about it posted to <code>/events</code> and which can later be used to cancel it.</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-UpdateLocalTurn">Update Local Turn</h4><p>Update (that is, force the completion of) an in-progress local turn with the given NLU or ASR text information. This function is provided to allow a menu button push to simulate NLU input to the skill. When invoked, the audio being streamed to the Hub is stopped and the Hub accepts the provided ASR or NLU data as input.</p><p>There is a potential race condition where the given ASR/NLU data is sent to the Hub but the Hub (which is also waiting for results from the Cloud ASR and Cloud Parser) receives the Cloud ASR or NLU result first, which causes the update command to be ignored.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"> URL</td><td class="highlight-green confluenceTd" colspan="2" data-highlight-colour="green"><pre>/listen/update_local_turn</pre></td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue">Parameters</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">requestID</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">The requestID of the in-progress turn to be updated. If the turn for the given requestID is no longer active, this call is ignored.</span></p></td></tr><tr><td colspan="1" class="confluenceTd">meta</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">Arbitrary JSON data to pass along to the hub.</td></tr><tr><td class="confluenceTd">clientNLU</td><td class="confluenceTd">NLUResult</td><td class="confluenceTd"><p>The semantic ("Natural Language Understanding") result desired from this turn. This will be the same JSON schema that arrives as the data.result.nlu field in a successful TURN_RESULT message, e.g.</p><pre>"nlu" : {<br/> "entities" : {},<br/> "intent" : "generalWhatQuestions",<br/> "rules" : [<br/> "launch"<br/> ]<br/>}</pre><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">NLUResult</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td class="confluenceTd">rules</td><td class="confluenceTd">string[]</td><td class="confluenceTd">listen rules to activate</td></tr><tr><td colspan="1" class="confluenceTd">intent</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">intent</td></tr><tr><td colspan="1" class="confluenceTd">entities</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">a map of EntityNames (strings) to EntityValues (which are either string or string[])</td></tr></tbody></table></div></td></tr><tr><td colspan="1" class="confluenceTd">clientASR</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The ASR text to be used to produce the NLU result from this turn. This is a simple string of words, equivalent to what the ASR returns. Only one of the clientASR and clientNLU properties should be provided, if both are provided only the clientNLU property will be used.</td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue"> Response: NONE (empty JSON)</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-MimicGlobalTurn">Mimic Global Turn</h4><p>Similar to Update Local Turn, the skill provides ASR text or NLU values with which to simulate a global turn (i.e. as if the user had said "HJ" followed by the given ASR text or an utterance that resulted in the given NLU values). This function is provided to allow cloud skills to be launched from the robot.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"> URL</td><td class="highlight-green confluenceTd" colspan="2" data-highlight-colour="green"><pre>/listen/mimic_global_turn</pre></td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue">Parameters</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd">language</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">ISO language label, e.g. "en-US"</td></tr><tr><td colspan="1" class="confluenceTd">suppressedEvents</td><td colspan="1" class="confluenceTd">string[]</td><td colspan="1" class="confluenceTd">A list of events to suppress during this turn, e.g. ["HJ_HEARD", "TURN_STARTED"]. All events that can be emitted during a global turn can be suppressed. And note that only those events associated with this global turn can be suppressed. If, for example, someone says HJ during a mimic_global_turn, <em>that</em> HJ_HEARD event will not be suppressed, even if HJ_HEARD is among the events to be suppressed during this turn.</td></tr><tr><td class="confluenceTd">clientNLU</td><td class="confluenceTd">NLUResult</td><td class="confluenceTd"><p>The semantic result desired from this turn. This will be the same JSON schema that arrives as the data.result.nlu field in a successful TURN_RESULT message, e.g.</p><pre>"nlu" : {<br/> "entities" : {},<br/> "intent" : "generalWhatQuestions",<br/> "rules" : [<br/> "launch"<br/> ]<br/>}</pre><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">NLUResult</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td class="confluenceTd">rules</td><td class="confluenceTd">string[]</td><td class="confluenceTd">listen rules to activate</td></tr><tr><td colspan="1" class="confluenceTd">intent</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">intent</td></tr><tr><td colspan="1" class="confluenceTd">entities</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">a map of EntityNames (strings) to EntityValues (which are either string or string[])</td></tr></tbody></table></div></td></tr><tr><td colspan="1" class="confluenceTd">clientASR</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The ASR text to be used to produce the NLU result from this turn. This is a simple string of words, equivalent to what the ASR returns. It should <em>not</em> include the "Hey Jibo" text. Only one of the clientASR and clientNLU properties should be provided, if both are provided only the clientNLU property will be used.</td></tr><tr><td class="highlight-blue confluenceTd" colspan="3" data-highlight-colour="blue">Response </td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this turn, which will be included with any status information about it posted to <code>/events</code> and which can later be used to cancel it.</span></p></td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-CancellingTurns"><span style="color: rgb(0,0,0);">Cancelling Turns</span></h3><p>Cancel Local Turn and Cancel Any Turn allow turns currently in progress to be cancelled. When cancelled, a status message will appear on <code>/events</code> indicating the turn was cancelled. Enrollment and Pronunciation Learning turns are also cancelled this way. If there was no turn in progress (or if it completed before the cancel was executed) then the cancel request is ignored and no status is given. </p><h4 id="TheJetstreamServiceAPI-CancelLocalTurn">Cancel Local Turn</h4><p>Cancel the turn matching the given requestID.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/cancel_local_turn</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">requestID</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">The requestID of the turn to cancel</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE (empty JSON)</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-CancelAnyTurn">Cancel Any Turn</h4><p>Cancel any turn that is in progress, including a global turn (one started by the user uttering "HJ").</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/cancel_any_turn</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE (empty JSON)</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td colspan="3" class="confluenceTd"><p>NONE (empty JSON)</p></td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-GlobalSubscriptions:Handling"HJ+phrase"">Global Subscriptions: Handling "HJ + phrase"</h3><p>Grammars for handling user speech of the form "HJ+phrase" are installed and removed through Subscribe and Unsubscribe requests. Normally the set of grammars used for any particular "HJ+phrase" is the union of the grammars of all the active subscriptions. However, the "exclusive" parameter, when set, will cause only those subscriptions so marked to be active (i.e. the subscriptions not marked exclusive will be hidden by the ones marked exclusive).</p><h4 id="TheJetstreamServiceAPI-SubscribeGlobal">Subscribe Global</h4><p>Create a subscription that contributes the given grammars to the set of all active global grammars.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/subscribe_global</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">exclusive</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">When true, only the subscriptions marked exclusive will be active.</td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">nluRules</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string[]</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A list of grammars to be added to the set of grammars with which to recognize HJ+phrase requests</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">language</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">an ISO language tag, e.g. "en-US"</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this subscription, which can be used to later unsubscribe it.</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-UnsubscribeGlobal">Unsubscribe Global</h4><p>Remove a particular subscription, given by its ID, from the set of active subscriptions.</p><div class="table-wrap"><table class="relative-table wrapped confluenceTable" style="width: 86.8171%;"><colgroup><col style="width: 12.8269%;"/><col style="width: 11.208%;"/><col style="width: 9.71357%;"/><col style="width: 65.878%;"/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/unsubscribe_global</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A ID of the subscription to be removed.</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td colspan="3" class="confluenceTd"><p>NONE (empty JSON)</p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-UnsubscribeAllGlobals">Unsubscribe All Globals</h4><p>Removes all subscriptions.</p><div class="table-wrap"><table class="relative-table wrapped confluenceTable" style="width: 86.8171%;"><colgroup><col style="width: 12.8269%;"/><col style="width: 11.208%;"/><col style="width: 9.71357%;"/><col style="width: 65.878%;"/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/unsubscribe_all_globals</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE (empty JSON)</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td colspan="3" class="confluenceTd"><p>NONE (empty JSON)</p></td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-SpeakerVoiceEnrollment">Speaker Voice Enrollment</h3><p>Speaker voice enrollment consists of creating models of each speaker's voice by asking them to say HJ some number of times. In order for the skill to control this process there are commands for removing existing models, collecting HJ samples (aka "utterances"), and creating models from the previously collected samples.</p><p>The usual workflow for a skill using the enrollment API is to start an enrollment turn for a particular speaker that collects their utterances. The skill can request any number of utterances, but it would typically be six (or just a single one if recreating the Jibo V1 UX).</p><p>Once the turn begins (indicated by a TURN_STARTED event) the speaker says each HJ separated by at least a second. After each HJ an event is emitted reporting the utterance quality and the utterance number (out of the total requested) that this represents.</p><p>When the requested number of acceptable HJs have been collected, a TURN_RESULT event is emitted (status=SUCCEEDED) and the enrollment turn is finished.</p><p>Even if an enrollment turn is cancelled or interrupted, the acceptable utterances collected so far for each speaker remain as "pending" utterances in the system. The <code>/enroll/get_utterance_count</code> method may be used to find out how many utterances a speaker has, both those for use in creating a new model (<em>pending utterances) </em>and of those that were used to create the existing model (<em>model utterances)</em>.</p><p>Finally, the skill requests that a new model be created for a given speaker from all the utterances that have been collected for them and (optionally) the utterances used to create the existing model. This returns a status of either SUCCEEDED or FAILED.</p><h4 id="TheJetstreamServiceAPI-StartEnrollmentTurn">Start Enrollment Turn</h4><p>This is the speech sample collection step for voice enrollment. It is designed so that the user can say several HJs in succession. Every time an HJ is said, a message is posted to <code>/events</code> giving the status of the utterance (i.e. whether it was acceptable or not). After the requested number of (acceptable) HJs is given, the turn will complete with a result of SUCCEEDED. Acceptable utterances collected during an enrollment turn are collected into a set of <em>pending</em> utterances that exist until a model is created from them.</p><p>In the case of a catastrophic failure of the enrollment recognizer the TURN_RESULT message will have a status of FAILED and the data.message field will contain the reason for the failure.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/start_enrollment_turn</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">numberOfUtterances</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">number</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">The number of (good) HJs the user must say before the turn reports SUCCEEDED</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">speakerID</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">An arbitrary string that the skill provides to denote a particular speaker. This string will be used to identify the utterances collected here when the speaker model is created.</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">rejectIfBusy</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">If true and there is already a turn in progress (global, local, enrollment or pronunciation learning) then reject this turn, otherwise interrupt the turn in progress and run this one instead.</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this turn, which will be included with any status information about it posted to <code>/events</code> and which can later be used to cancel it (via cancel_local_turn)</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-CreateSpeakerModel">Create Speaker Model</h4><p>This creates a speaker mode from a) the <em>pending </em>samples collected during the enrollment turn(s) for a particular speaker and –if <em>append</em> is true– b) the <em>model </em>samples used in the creation of the previous model.</p><p>The SpeakerID provided can refer to any speaker from whom a sufficient number of samples is available (i.e. the sum of those pending and –if <em>append</em> is true– those already in the model). Currently at least 4 samples a required from any particular speaker.</p><p>After the model is created, the <em>pending</em> samples used to create the model are moved into the so-called <em>model</em> category to join (append=true) or replace (append=false) the other <em>model </em>utterances there, if any. In this way the <em>model</em> utterances always represent the set of utterances used to build the most recently created model. By setting <em>append</em> to true in subsequent model creation operations, the samples collected then will be used together with (i.e. appended to) all the ones used to make the current model.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /enroll/create_speaker_model</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">speakerID</span></p></td><td class="confluenceTd"><p>string</p></td><td class="confluenceTd"><p>The ID of the speaker whose model is being created (the same value used for the speaker's enrollment turns).</p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">append</td><td colspan="1" class="confluenceTd">bool</td><td colspan="1" class="confluenceTd">When true, append the <em>pending</em> utterances to the <em>model </em>utterances and use both sets to create the model. When false, only the <em>pending</em> utterances are used to create the model. Default: false</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response/Code</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd">HTTP 200</td><td class="confluenceTd">Empty JSON</td><td class="confluenceTd"> </td><td class="confluenceTd"> </td></tr><tr><td class="confluenceTd">HTTP 400</td><td class="confluenceTd">message</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Error message (e.g. "Insufficient Utterances")</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-RemoveSpeakerModel">Remove Speaker Model</h4><p>This removes the speaker model and all the <em>model</em> utterances for a given speaker. The speaker is effectively removed from the Speaker ID system. The <em>pending</em> utterances for a given speaker are not affected (they can be removed with <em>/enroll/remove_pending_samples</em>)</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /enroll/remove_speaker_model</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">speakerID</span></p></td><td class="confluenceTd"><p>string</p></td><td class="confluenceTd"><p>The speaker ID for the model to be removed.</p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response/Code</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd">HTTP 200</td><td class="confluenceTd">Empty JSON</td><td class="confluenceTd"> </td><td class="confluenceTd"> </td></tr><tr><td class="confluenceTd">HTTP 400</td><td class="confluenceTd">message</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Error message (e.g. "No Such Speaker")</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-RemovePendingSamples">Remove Pending Samples</h4><p>This removes the<em> pending</em> utterances collected for a given speaker (i.e those not yet made into a model). The speaker model and the model utterances are not affected (they can be removed with <em>/enroll/remove_speaker_model</em>)</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /enroll/remove_pending_samples</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">speakerID</span></p></td><td class="confluenceTd"><p>string</p></td><td class="confluenceTd"><p>The speaker ID for the pending samples to be removed.</p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response/Code</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd">HTTP 200</td><td class="confluenceTd">Empty JSON</td><td class="confluenceTd"> </td><td class="confluenceTd"> </td></tr><tr><td class="confluenceTd">HTTP 400</td><td class="confluenceTd">message</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Error message (e.g. "No Such Speaker")</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-GetUtteranceCount">Get Utterance Count</h4><p>This returns the number of good utterances collected so far for a given speaker (but not yet built into a model, the so-called <em>pending_utterances</em>) and the number of utterances used in the existing model for the speaker (the so-called <em>model_utterances</em>).</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /enroll/get_utterance_count</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">speakerID</span></p></td><td class="confluenceTd"><p>string</p></td><td class="confluenceTd"><p>The ID of the speaker for whom the count of utterances is requested.</p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">pending_utterances</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">number</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">The number of utterances that have been collected so far for the given speaker but not yet built into a model.</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">model_utterances</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">The number of utterances that were used to build the current model.</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-GetEnrolledSpeakers">Get Enrolled Speakers</h4><p>This returns the speaker IDs for all the speakers for which models have been created.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /enroll/get_enrolled_speakers</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE (empty JSON)</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">speakers</td><td colspan="1" class="confluenceTd">string[]</td><td colspan="1" class="confluenceTd">A list of the speaker IDs of the enrolled speakers.</td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-PronunciationLearning">Pronunciation Learning</h3><p>Also called "name learning", Jetstream provides methods for finding the user's pronunciation of a name. The workflow for skills consists of just two steps: initializing the system with the name to be learned and then asking the system to listen to the user say the name and return an estimate of the way it was pronounced.</p><p> </p><div style="margin-left: 0.0pt;"><h4 id="TheJetstreamServiceAPI-InitializePronunciationLearning">Initialize Pronunciation Learning</h4><p>This prepares the system for listening to the way a user pronounces a particular word. It builds data structures that will be used during the listening step. For normal length names this completes in under 50ms, but longer names can take several hundred ms.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /pronunciation/init_pronunciation_learning</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">word_to_learn</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The word that the system will try to learn the pronunciation of.</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID that is created every time <code>init_pronunciation_learning</code> is called that is included in messages and audio files logged during subsequent pronunciation learning turns. Its sole purpose is to enable post-hoc speech science experiments by allowing the initialization of the pronunciation learning system and the audio data logged in subsequent turns to be tied together.</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-StartPronunciationLearningTurn">Start Pronunciation Learning Turn</h4><p>This is the pronunciation estimation step where the user speaks the name to be learned. It first processes the incoming audio with a speech endpointer to determine when the user is speaking. Then, constrained by a phonetic graph built from the spelling of the word, it asks a recognizer to return the best path through that graph given what was said. The result is a (probabilistic) phonetic spelling of what it heard the user say.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/start_pronunciation_learning_turn</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">word_to_learn</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">This must be identical to the word provided in the init_pronunciation_learning step. If not, an error is returned.</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">ignoreHJ</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">boolean</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">If true, any utterances of HJ will be ignored during this turn. If false, HJ will have its normal effect (usually interrupting the turn in progress and starting a global turn). (default: false)</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">rejectIfBusy</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">If true and there is already a turn in progress (global, local, enrollment or pronunciation learning) then reject this turn, otherwise interrupt the turn in progress and run this one instead. (default: false)</td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this turn, which will be included with any status information about it posted to <code>/events</code> and which can later be used to cancel it (via cancel_local_turn)</span></p></td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-AlteringhowHJishandled">Altering how HJ is handled</h3><p>Normally when a user says HJ, Jetstream will interrupt whatever is in progress and begin a "Global Turn", sending the audio following the HJ to the Hub for speech-to-text and parsing, and then returning a possible skill switch directive from the Hub if what has been said matches one of the active global grammars.</p><p>However, Jetstream can be set to handle HJ in other ways by using Set HJ Mode. When this is done the new setting stays in effect until the robot is rebooted or the setting is changed again.</p><h4 id="TheJetstreamServiceAPI-SetHJMode">Set HJ Mode</h4><p>This sets the HJ handling mode. There are 3 ways of handling HJ in Jetstream:</p><ol><li>"NORMAL_HJ", as described above, handles HJ by starting a global turn.</li><li>"IGNORE_HJ" causes Jetstream to ignore any utterances of HJ; no events are emitted and there are no changes to Jetstream's state, it is as if the user has not said HJ at all.</li><li>"ONLY_HJ" has the effect of letting Jetstream recognize HJ and emit an event indicating such, but it does not start a global turn and instead simply returns to the base state of waiting for the next HJ. Note that if a turn (global, local, etc) is in progress, an HJ in this mode will still have the effect of interrupting that turn just as it would in NORMAL_HJ mode.</li></ol><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/set_hj_mode</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">mode</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd"><p>One of three possible values:</p><ol><li>NORMAL_HJ</li><li>ONLY_HJ</li><li>IGNORE_HJ</li></ol></td></tr><tr><td colspan="1" class="confluenceTd">Response</td><td colspan="3" class="confluenceTd"><p>None (empty json)</p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-GetHJMode">Get HJ Mode</h4><p>This is used to discover Jetstream's current HJ handling mode. Note that because of the way Jetstream works it is possible to set the mode and then get the mode within a short enough interval (<10 milliseconds) that the change has not had time to take effect and in this case the old mode will be reported.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /listen/get_hj_mode</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">None (empty json)</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">mode</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The current setting of Jetstream's HJ handling mode.</td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-ProactiveTriggering">Proactive Triggering</h3><p>Proactive Triggering is the way that Jibo "wakes up" the Hub to find out whether there is some interaction it can offer the user. Since the Hub cannot contact Jibo, it is up to Jibo to contact the Hub.</p><h4 id="TheJetstreamServiceAPI-Trigger">Trigger</h4><p>Trigger does not take any JSON parameters itself, rather the entire body of the HTTP request is sent, verbatim, to the Hub. Internally Trigger does request the Jibo Context from Be and sends that to the Hub right after the information provided in the Trigger request.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /proactive/trigger</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">None – the contents of the HTTP request's body is passed directly to the Hub</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Response</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">requestID</td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">string</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">A unique ID for this trigger, which will be included with Trigger response messages posted to <code>/events.</code> </span></p></td></tr></tbody></table></div><h3 id="TheJetstreamServiceAPI-TestandDebugCommands">Test and Debug Commands</h3><p>To enable test and debug efforts, Jetstream offers a few commands for recording audio from Jibo's "ASRin" audio source or inserting audio from an external file so that Jetstream uses it in lieu of microphone input.</p><h4 id="TheJetstreamServiceAPI-StartRecording">Start Recording</h4><p>This makes a recording from Jibo's "ASRin" audio device, which is actually the output of the Jibo AudioService (t<span style="color: rgb(0,0,0);">he Audio Service provides a single, noise-cancelled, virtual audio source derived from Jibo’s six individual microphones)</span>. The audio's sampling rate is 16kHz with 16 bit, little-endian samples. While recording, the audio is stored in a file. When the Retrieve Recording command is issued, the recording process is stopped and the recorded audio is returned.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /debug/start_recording</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">start_immediately</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd"><p>When true, recording will begin as soon as the command is issued, when false, recording will begin when HJ is recognized.</p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">max_recording_duration_ms</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">Sets the maximum length of time (in ms) that the recording will proceed. Default is 2000 ms.</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-RetrieveRecording">Retrieve Recording</h4><p>This stops the recording (if in progress) and returns the audio and cue markers from the recording. </p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /debug/retrieve_recording</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">None (empty json)</span></p></td></tr><tr><td colspan="1" class="confluenceTd">Response</td><td colspan="1" class="confluenceTd">name</td><td colspan="1" class="confluenceTd">type</td><td colspan="1" class="confluenceTd">description</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">recording</td><td colspan="1" class="confluenceTd">RetrievedRecording</td><td colspan="1" class="confluenceTd"><div class="content-wrapper"><p>A JSON object containing the base64 encoded audio of the recording and cue markers, as follows:</p><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">Retrieved Recording</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd"> </td></tr><tr><td class="confluenceTd">base64_audio</td><td class="confluenceTd">string</td><td class="confluenceTd">binary audio data in base64 format.</td></tr><tr><td colspan="1" class="confluenceTd">start_time</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">always 0</td></tr><tr><td colspan="1" class="confluenceTd">end_time</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">duration of the recording in ms</td></tr><tr><td colspan="1" class="confluenceTd">cue_points</td><td colspan="1" class="confluenceTd">CuePoint[]</td><td colspan="1" class="confluenceTd">an array of CuePoints, described below.</td></tr></tbody></table></div><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">CuePoint</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd"> </td></tr><tr><td class="confluenceTd">name</td><td class="confluenceTd">string</td><td class="confluenceTd">the name of the point, one of HJ_BEG, HJ_END, EP_BEG, or EP_END</td></tr><tr><td colspan="1" class="confluenceTd">time</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">the time point (number of milliseconds into the recording) where the cue point occurs.</td></tr></tbody></table></div><p>Note that the Jetstream repo includes a "record-from-robot.py" utilitiy for making robot recordings from the Mac that places the recording's cue points into the wave file it creates. These cue points will be displayed as labeled markers in Mac audio editors like "TwistedWave":</p><p><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="475" src="../download/attachments/12594826/Screen Shot 2017-12-30 at 5.14.41 PM.png%3Fversion=1&modificationDate=1514672121000&api=v2" data-image-src="/download/attachments/12594826/Screen%20Shot%202017-12-30%20at%205.14.41%20PM.png?version=1&modificationDate=1514672121000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="12595297" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="Screen Shot 2017-12-30 at 5.14.41 PM.png" data-base-url="https://confluence.jibo.com" data-linked-resource-content-type="image/png" data-linked-resource-container-id="12594826" data-linked-resource-container-version="151"/></span></p></div></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-MimicMicInput">Mimic Mic Input</h4><p>For testing purposes this command allows you to temporarily replace Jibo's normal microphone audio input with audio data you supply. The supplied data is fed to the robot at the same rate as normal audio input, so (in theory) this should be indistinguishable from normal audio input. Problems arise however when using TTS synthesized audio since the background noise from the microphone is quite different from the background noise of TTS (which is essentially zero noise) and the switching between the two noise levels when the external audio is introduced and removed causes recognition problems. In practice we have found that noise must be mixed with TTS audio for the best recognition results. Our noise source was simply a recording made from Jibo in a quiet room.</p><p>Use of this command while audio from a previous command is still being used simply results in the new audio being queued for use after the existing audio finishes. In addition to the audio, it is possible to specify pre- and post- insertion delay times that will cause a delay before the next audio in the queue is used (microphone input is used during the delay period). This can be useful for experimenting with the size of the gap in e.g. "HJ <gap> <phrase>" or other speech strings, without having to make new recordings.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /debug/mimic_mic_input</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">audio</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd"><p>the base64 encoded audio data at 16kHz and 16 bits per sample.</p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">start_delay_ms</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">the number of ms to wait before using the supplied audio</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">finish_delay_ms</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">the number of ms to wait after using the supplied audio before using the next audio in the queue.</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-StopMimickingInput">Stop Mimicking Input</h4><p>This command will stop any currently active mimicked input. It returns the sample number of the last sample given to the robot's audio system. This allows you to find the spot where playing left off in the file that was presented Note that any queued "mimicked input" is not affected and after this command runs, the next item in the queue (if any) will be feed to the audio system.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">URL</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> /debug/stop_mimicked_input</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">None (empty json)</span></p></td></tr><tr><td colspan="1" class="confluenceTd">Response</td><td colspan="1" class="confluenceTd">name</td><td colspan="1" class="confluenceTd">type</td><td colspan="1" class="confluenceTd">Description</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">stopping_point</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">the sample number at which audio input to the robot stopped (the first sample in the file that was <em>not</em> sent to the robot – accurate to ~50ms)</td></tr></tbody></table></div><h2 id="TheJetstreamServiceAPI-TheJetstreamWebsocketAPI"><span style="color: rgb(0,0,0);">The Jetstream Websocket API</span></h2><p><span style="color: rgb(0,0,0);">Jetstream reports the status and conclusion of most of its commands via Websocket messages through the URL </span><code>/events</code>. The Jetstream Service Debug page (<a class="external-link" href="http://172.24.84.101:8090/index.html" rel="nofollow">http://172.24.84.101:8090/index.html</a>) displays the messages being sent to <code>/events</code> as well as messages from several other debug-related URLs.</p><p>Jetstream does not accept any input on its websocket ports and will ignore what is sent to them.</p><h3 id="TheJetstreamServiceAPI-WSmsg:thebaseclass"><span style="color: rgb(0,0,0);">WSmsg: the base class</span></h3><p><span style="color: rgb(0,0,0);">All Jetstream WS messages have these fields in common.</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>(base class)</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">type</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd"><p>the name of the message e.g. "TURN_RESULT"</p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">requestID</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">if this is in response to a command, this will be the requestID Jetstream returned when the command was issued.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">transID</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">if this is related to a Hub transaction, this is the transaction ID Jetstream used with the Hub during that transaction.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">ts</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">the time in milliseconds since the Unix epoch</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">Jetstream messages that need to provide information beyond the base class properties populate a "data" object with the information. The data object schema is message dependent.</td></tr></tbody></table></div><p><span style="color: rgb(0,0,0);"><br/></span></p><h3 id="TheJetstreamServiceAPI-Turn-relatedMessages"><span style="color: rgb(0,0,0);">Turn-related Messages</span></h3><p><span style="color: rgb(0,0,0);">During the processing of a turn, these messages can appear.</span></p></div><h4 id="TheJetstreamServiceAPI-TurnStarted">Turn Started</h4><p>This message is sent as a status update for all turns (local, global, enrollment, and pronunciation learning). For local and global turns this indicates that a connection to the Hub has been successfully established and that audio is being sent. For enrollment and pronunciation learning turns, this indicates that the underlying recognizer has been engaged and is processing user audio.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>TURN_STARTED</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-StartofSpeech">Start of Speech</h4><p>Upon receiving a Hub notification that its speech recognizer has reported Start of Speech, this message is sent.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>SOS</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-EndofSpeech">End of Speech</h4><p>Upon receiving a Hub notification that its speech recognizer has reported End of Speech, this message is sent. In response to that Hub notification, Jetstream stops sending audio to it.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>EOS</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td colspan="3" class="confluenceTd"><p><span style="color: rgb(0,0,0);">NONE</span></p></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-TurnResult">Turn Result</h4><p>This message is sent at the conclusion of a turn and the <code>status</code> field contains the reason it concluded. In the case where the status is SUCCEEDED, the recognition result from the turn is also provided, in the case where the status is FAILED, the error message giving the failure reason is provided. In the case of TIMEDOUT the message field will be either "<code>sos</code>" or "<code>maxSpeech</code>". In all other status cases no further information is provided. All turns are guaranteed to conclude with a Turn Result message of some sort.</p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>TURN_RESULT</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.status</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd"><p>The reason the turn concluded, one of:</p><ul><li>SUCCEEDED</li><li>FAILED</li><li>INTERRUPTED (by another turn request or HJ+phrase)</li><li>CANCELED (by cancel_local_turn)</li><li>REJECTED (when a turn is started with <code>rejectIfBusy</code> set to true and another turn is already in progress)</li><li><span style="color: rgb(0,0,0);">TIMEDOUT (when user speech does not occur within the period specified by sosTimeout or when the duration of user speech exceeds the maxSpeechTimeout setting)</span></li></ul></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.message</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">(If present) In the case of status==FAILED or TIMEDOUT this contains the reason for the failure or timeout.</td></tr><tr><td class="confluenceTd"> </td><td class="confluenceTd">data.message</td><td class="confluenceTd">string</td><td class="confluenceTd">(If present) In the case of status==SUCCEEDED and a Pronunciation Learning t<span style="color: rgb(0,0,0);">urn, this contains the estimated pronunciation of what the user said.</span></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.result</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">(If present) In the case of status==SUCCEEDED (and not a Pronunciation Learning turn) this contains the "result" object from the Hub.</td></tr></tbody></table></div><div><span style="color: rgb(0,0,0);"><br/></span></div><h3 id="TheJetstreamServiceAPI-Hub-relatedMessages"><span style="color: rgb(0,0,0);">Hub-related Messages</span></h3><h4 id="TheJetstreamServiceAPI-HubError"><span style="color: rgb(0,0,0);">Hub Error</span></h4><p><span style="color: rgb(0,0,0);">Hub Error messages cover a lot of ground: Jetstream itself can produce them in response to Proactivity Trigger requests if it fails to open a Hub connection or if an already open Hub connection goes down. Or the Hub can ask them to be produced as a response to a previous request (e.g. LISTEN or TRIGGER).</span></p><p><span style="color: rgb(0,0,0);">In the case of Jetstream-sourced messages only the "data.message" parameter is present, which gives the reason for the failure. In the case of a Hub-promulgated message, the data object is a verbatim copy of the JSON field the Hub supplied.</span></p><p><span style="color: rgb(0,0,0);"> </span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>HUB_ERROR</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.message</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">(If present) The problem Jetstream encountered trying to communicate with the Hub.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">(If present) The Hub's error information it supplied in response to a LISTEN or TRIGGER request.</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-SKILL_*"><span style="color: rgb(0,0,0);">SKILL_*</span></h4><p><span style="color: rgb(0,0,0);">There are a class of messages the Hub produces that start with the string "SKILL_". These are directly transcribed into Jetstream messages containing a verbatim copy of the JSON from the original Hub message.</span></p><p><span style="color: rgb(0,0,0);"> </span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>SKILL_*</pre></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Parameters</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">name</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">type</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">Description</span></p></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data</td><td colspan="1" class="confluenceTd">object</td><td colspan="1" class="confluenceTd">The JSON the Hub supplied.</td></tr></tbody></table></div><p><span style="color: rgb(0,0,0);"><br/></span></p><h3 id="TheJetstreamServiceAPI-OnboardRecognizer-relatedMessages"><span style="color: rgb(0,0,0);">Onboard Recognizer-related Messages</span></h3><p><span style="color: rgb(0,0,0);">These messages correspond to events that occur in the onboard recognizers.</span></p><h4 id="TheJetstreamServiceAPI-HJHeard"><span style="color: rgb(0,0,0);">HJ Heard</span></h4><p><span style="color: rgb(0,0,0);">HJ Heard is emitted as soon as the onboard recognizer is confident it has heard someone say HJ, this may actually happen before the "b" in Jibo.</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>HJ_HEARD</pre></td></tr><tr><td colspan="1" class="confluenceTd">Parameters</td><td colspan="3" class="confluenceTd">NONE</td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-HJOnly"><span style="color: rgb(0,0,0);">HJ Only</span></h4><p><span style="color: rgb(0,0,0);">HJ Only is emitted when the Hub reports that no speech after the HJ was detected or recognized. The delay between the time the HJ was said and this event is emitted is determined by the HubAsr.global_sosTimeout_sec setting in the config file.</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,51,102);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre> <span style="color: rgb(0,51,102);">HJ_ONLY</span>
|
||
</pre></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,51,102);">Parameters</span></td><td colspan="3" class="confluenceTd"><span style="color: rgb(0,51,102);">NONE</span></td></tr></tbody></table></div><h4 id="TheJetstreamServiceAPI-SpeakerID"><span style="color: rgb(0,0,0);">Speaker ID</span></h4><p><span style="color: rgb(0,0,0);">Speaker ID is emitted only if there are enrolled speakers.</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>SPEAKER_ID</pre></td></tr><tr><td colspan="1" class="confluenceTd">Parameters</td><td class="confluenceTd">name</td><td class="confluenceTd">type</td><td class="confluenceTd">Description</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.speakers</td><td colspan="1" class="confluenceTd">SpeakerRecogResult[]</td><td colspan="1" class="confluenceTd"><p>An array of SpeakerRecogResult objects (sorted in descending score order) with one entry for each enrolled speaker that states how well that speaker was recognized.</p><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">SpeakerRecogResult</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td class="confluenceTd">speaker</td><td class="confluenceTd">string</td><td class="confluenceTd">The ID string used to enroll this speaker.</td></tr><tr><td colspan="1" class="confluenceTd">score</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">authentication score (not useful without knowing the threshold)</td></tr><tr><td colspan="1" class="confluenceTd">accepted</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">If true, this speaker's score was high enough to be considered "recognized"</td></tr><tr><td colspan="1" class="confluenceTd">high_confidence</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">If true, this speaker's score was either high enough that the system is confident in accepting it, or low enough that it is confident in rejecting it.</td></tr></tbody></table></div></td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.snr</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">The estimated signal-to-noise ratio of the HJ input used in the speaker recognition operation.</td></tr></tbody></table></div><p> </p><h4 id="TheJetstreamServiceAPI-SpeakerEnrollment"><span style="color: rgb(0,0,0);">Speaker Enrollment</span></h4><p><span style="color: rgb(0,0,0);">A Speaker Enrollment message is emitted after every HJ recognition during an enrollment turn.</span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" data-highlight-colour="green"><p><span style="color: rgb(0,0,0);">Name</span></p></td><td class="highlight-green confluenceTd" colspan="3" data-highlight-colour="green"><pre>SPEAKER_ENROLLMENT</pre></td></tr><tr><td colspan="1" class="confluenceTd">Parameters</td><td class="confluenceTd">name</td><td class="confluenceTd">type</td><td class="confluenceTd">Description</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.speaker</td><td colspan="1" class="confluenceTd">string</td><td colspan="1" class="confluenceTd">The ID of the speaker being enrolled.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.snr</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">The estimated SNR of the HJ utterance.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.accepted</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">True if the utterance quality was acceptable. If this is false, the utterance being reported on was rejected.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.problems</td><td colspan="1" class="confluenceTd">string[]</td><td colspan="1" class="confluenceTd">If data.accepted is false, this is a string vector containing the problem(s) with the utterance. The possible values are: CLIPPING, POOR_SNR, NOT_SPEECH_LIKE, NOT_CONSISTENT, BAD_DURATION, BAND_LIMITED, POOR_QUALITY.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.good_utterance_count</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">The number of utterances accepted so far during this turn.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.total_utterance_count</td><td colspan="1" class="confluenceTd">number</td><td colspan="1" class="confluenceTd">The total number of utterances seen so far during this turn.</td></tr><tr><td colspan="1" class="confluenceTd"> </td><td colspan="1" class="confluenceTd">data.final</td><td colspan="1" class="confluenceTd">boolean</td><td colspan="1" class="confluenceTd">True if the number of acceptable utterances matches the numberOfUtterances parameter specified when the enrollment turn was started. After this the turn will complete and no further Speaker Enrollment messages will appear.</td></tr></tbody></table></div><h2 id="TheJetstreamServiceAPI-VoiceActivityDetectorevents"><span style="color: rgb(0,0,0);">Voice Activity Detector events</span></h2><p><span style="color: rgb(0,0,0);">Jetstream has a built-in voice activity detector that emits websocket messages at 20hz to the endpoint <code>/vad</code>. These messages indicate the degree to which the sound that Jibo's microphones are picking up resembles human speech. </span> <span style="color: rgb(0,0,0);"> </span></p><div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col/><col/><col/></colgroup><tbody><tr><td class="highlight-green confluenceTd" colspan="1" data-highlight-colour="green">Name</td><td class="highlight-green confluenceTd" colspan="2" data-highlight-colour="green"><code>VAD_EVENT_DATA</code></td></tr><tr><td class="highlight-blue confluenceTd" data-highlight-colour="blue">Parameter</td><td class="highlight-blue confluenceTd" data-highlight-colour="blue">Type</td><td class="highlight-blue confluenceTd" data-highlight-colour="blue">Description</td></tr><tr><td colspan="1" class="confluenceTd">audio_time</td><td colspan="1" class="confluenceTd">uint64_t</td><td colspan="1" class="confluenceTd"><p>The system time corresponding to the beginning of the results</p></td></tr><tr><td colspan="1" class="confluenceTd">avg_frame_db</td><td colspan="1" class="confluenceTd">float</td><td colspan="1" class="confluenceTd">The average power of the 50ms frame of audio that was used to produce the VAD results.</td></tr><tr><td colspan="1" class="confluenceTd">VADevents</td><td colspan="1" class="confluenceTd">VADevent[]</td><td colspan="1" class="confluenceTd"><p>An array of VADevent elements. Each corresponds to a 20ms span of audio. Since the VAD uses a 20ms frame internally and Jetstream uses a 50ms frame (that is, always giving the VAD 50ms of audio at a time), the length of the VADevents array will alternate between being two and three elements long.</p><div class="table-wrap"><table class="wrapped confluenceTable"><tbody><tr><th colspan="3" class="confluenceTh">VADevent</th></tr><tr><th class="confluenceTh">name</th><th class="confluenceTh">type</th><th class="confluenceTh">description</th></tr><tr><td colspan="1" class="confluenceTd"> time</td><td colspan="1" class="confluenceTd">uint64_t </td><td colspan="1" class="confluenceTd">The system time corresponding to the audio that produced this result. </td></tr><tr><td class="confluenceTd">vad</td><td class="confluenceTd">float</td><td class="confluenceTd"><p>This is the probability that there is voice in each 20ms of audio. These probabilities are float values from approx. -1.0 to approx. +1.0, where 0.0 can be seen as the recommended threshold for the no-voice (<0) or voice (>0) decision. To lower sensitivity, increase the threshold (and vice versa). Sensible ranges for a threshold are between -0.3 and + 0.4. The closer the values are to -1.0 and +1.0, the more certain the decision as to whether the audio is voice or not-voice.</p></td></tr></tbody></table></div></td></tr></tbody></table></div><p><span style="color: rgb(0,0,0);"><br/></span></p><h2 id="TheJetstreamServiceAPI-Jetstream'sDebuggingandTestingFacilities"><span style="color: rgb(0,0,0);">Jetstream's Debugging and Testing Facilities</span></h2><h3 id="TheJetstreamServiceAPI-The/debug/*Websocketports"><span style="color: rgb(0,0,0);">The <code>/debug/*</code> Websocket ports</span></h3><p><span style="color: rgb(0,0,0);">As described in the prior section, Jetstream provides information to skills via the <code>/events</code> websocket. To assist debugging and testing Jetstream also produces WS events on 3 other ports, The output from these ports is visible on the Jetstream debug page. We describe them below.</span></p><h4 id="TheJetstreamServiceAPI-TheListenerLoopmonitor:/debug/listenloop"><span style="color: rgb(0,0,0);">The Listener Loop monitor:<code> /debug/listenloop</code></span></h4><p><span style="color: rgb(0,0,0);">This port shows all the events being sent to the Listener Loop (Jetstream's central process).</span></p><p><span style="color: rgb(0,0,0);">Looking on the Jetstream debug page while it is running, we see output like this in the listen_loop window:</span> <span style="color: rgb(0,0,0);"> </span></p><ol><li>{"state":"hjw","ts":1519834943931,"type":"JM_RECOG_HJ_EVENT","data":{"name":"RecogHJEventData","timestamp":1519834943778,"begin_time":945765,"end_time":946435,"max_frame_power":2.431922674179077,"utterances":["hey jibo"],"scores":[110.0],"message":" utterance: hey jibo score: 110 walign: ADE00D70 palign: ADE00C60 {\"word_alignment\":\"945765 945960 hey 0.00 945960 946185 jibo 0.00 \"}"}}</li><li>{"state":"phw","ts":1519834943943,"type":"JM_HUB_CLIENT_CONNECT_RESULT","transaction_id":"tid:8f021c76-1ca3-11e8-9f1f-8cae4cf576b1","success":true,"message":""}</li><li>{"state":"phw","ts":1519834944148,"type":"JM_RECOG_SPEAKER_EVENT","data":{"speakers":[{"speaker":"5a285d26316a8a00193a0e7c","score":5.6092047691345219,"accepted":true,"high_confidence":true}],"snr":18.92803955078125}}</li><li>{"state":"phw","ts":1519834945141,"type":"JM_HUB_SOS","transaction_id":"tid:8f021c76-1ca3-11e8-9f1f-8cae4cf576b1"}</li><li>{"state":"phw","ts":1519834946618,"type":"JM_HUB_EOS","transaction_id":"tid:8f021c76-1ca3-11e8-9f1f-8cae4cf576b1"}</li><li>{"state":"phw","ts":1519834947001,"type":"JM_HUB_LISTEN","transaction_id":"tid:8f021c76-1ca3-11e8-9f1f-8cae4cf576b1","final":false,"data":"{ \"asr\" : { \"confidence\" : 0.9876290559768677, \"text\" : \"do you like penguins\" }, \"match\" : { \"onRobot\" : false, \"skillID\" : \"chitchat-skill\" }, \"nlu\" : { \"entities\" : { \"Activity\" : \"\", \"GeneralLikes\" : \"Penguin\", \"Occupation\" : \"\", \"Other\" : \"\", \"OtherPerson\" : \"\", \"given-name\" : \"\", \"last-name\" : \"\", \"number\" : \"\" }, \"intent\" : \"doesJiboLikeThing\", \"rules\" : [ \"launch\", \"globals/global_commands_launch\" ] } }"}</li><li>{"state":"phw","ts":1519834947112,"type":"SKILL_ACTION","transaction_id":"tid:8f021c76-1ca3-11e8-9f1f-8cae4cf576b1","type":"SKILL_ACTION","final":true,"data":"{ \"action\" : { \"config\" : { \"es_auto_tagging\" : true, \"mim_type\" : \"announcement\", \"prompts\" : [ { \"prompt\" : \"Yes I love penguins, because we're so alike. We have the same coloring, and neither of us can fly.\", \"prompt_id\" : \"RI_JBO_LikesPenguins_AN_04\" } ] }, \"type\" : \"SLIM\", \"version\" : \"1.0.0\" }, \"final\" : false, \"fireAndForget\" : false, \"skill\" : { \"id\" : \"chitchat-skill\", \"session\" : { \"data\" : { \"_mim\" : { \"noInput\" : 0, \"noInputMax\" : false, \"noMatch\" : 0, \"noMatchMax\" : false } }, \"id\" : \"be2ab9c3-1c94-4553-9364-59961c0b70df\", \"nodeID\" : 0, \"trace\" : [ { \"nodeID\" : 1, \"transition\" : \"Reactive\" }, { \"nodeID\" : 2, \"transition\" : \"ScriptedResponse\" }, { \"nodeID\" : 0, \"transition\" : null } ] } } }"}</li></ol><p>Each line is the JSON representation of a message that the Listener Loop has received. The state the Listener Loop was in when the message was received is placed in the "state" property (hjw: HJ Wait, phw: Phrase Wait, plw: Pronunciation Learning Wait, enw: Enrollment Wait).</p><p>In the list above we can see how an utterance of "Hey Jibo, do you like penguins?" has become 7 events submitted to the Listener Loop:</p><ol><li>The HJ recognizer seeing "HJ"</li><li>The Hub reporting that it is connected</li><li>The Speaker ID recognizer reporting a recognition event</li><li>The hub reporting SOS</li><li>The hub reporting EOS</li><li>The hub reporting LISTEN results from the cloud ASR, and finally</li><li>A hub skill switch event based on a parse of what was said.</li></ol><p>Monitoring the timestamps here can show how long these events are taking to arrive.</p><h4 id="TheJetstreamServiceAPI-TheHubmonitors:/debug/hub_outgoingand/debug/hub_incoming"><span style="color: rgb(0,0,0);">The Hub monitors:<code> /debug/hub_outgoing </code>and<code> /debug/hub_incoming</code></span></h4><p><span style="color: rgb(0,0,0);">These two ports log all the messages Jetstream is sending to the Hub and (respectively) that the Hub is sending to Jetstream. This is what they produced during the same interaction above:</span></p><h4 id="TheJetstreamServiceAPI-hub_outgoing(fromJetstreamtotheHub)">hub_outgoing (from Jetstream to the Hub)</h4><ul><li>{"type":"LISTEN","ts":1514742224646,"msgID":"mid:25c4afe6-ee52-11e7-aad4-8ace4cffad67","transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","data":{"lang":"en-US","hotphrase":true,"rules":["launch"]}}</li><li>{"type":"CONTEXT","ts":1514742224647,"msgID":"mid:25c4db56-ee52-11e7-8c29-8ace4cffad67","transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","data":{"general":null,"runtime":null}}</li></ul><p>The LISTEN message indicates to the Hub that recognition is requested. It is followed by a CONTEXT message holding information about the state of the robot obtained from the Be "Context" service. In this case the service was not running, so the runtime field is "null".</p><p>After the LISTEN and CONTEXT messages, the audio will begin being sent. The audio messages are of type binary (which is how the hub distinguishes them from non-audio messages) and are not sent to the hub_outgoing port.</p><h4 id="TheJetstreamServiceAPI-hub_incoming(fromtheHubtoJetstream)">hub_incoming (from the Hub to Jetstream)</h4><ul><li>{"type":"SOS","data":null,"msgID":"c78a434e-fd2c-4c9b-bb1c-8b47d3fc3110","transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","ts":1514742225689,"timings":{"total":1061}}</li><li>{"type":"EOS","data":null,"msgID":"50454cc9-9285-4530-b7df-f2ec1bf141d8","transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","ts":1514742226861,"timings":{"total":2233}}</li><li>{"type":"LISTEN","msgID":"296a7c5a-5e97-4f31-8e4d-d3faec360410","transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","ts":1514742227286,"data":{"asr":{"text":"do you like penguins","confidence":0.9797691106796265},"nlu":{"rules":["launch"],"intent":"doesJiboLikeThing","entities":{"FoodGeneral":"","Mammal":"","Amphibian":"","Bird":"Penguin","Breakfast":"","Bug":"","Cheese":"","Color":"","Dinosaur":"","FantasyCreature":"","Fish":"","Flower":"","Fruit":"","MusicType":"","MusicalInstrument":"","Pet":"","SchoolSubject":"","Season":"","Shape":"","Sport":""}},"match":{"skillID":"chitchat-skill"}},"final":false,"timings":{"total":2658,"asr":2364,"nlu":291}}</li><li>{"type":"SKILL_ACTION","data":{"skill":{"id":"Chitchat","session":{"id":"110bd7fd-4419-49a5-b00c-3aeab05325aa","nodeID":0,"data":{"_mim":{"noMatch":0,"noInput":0,"noMatchMax":false,"noInputMax":false}},"trace":[{"nodeID":1,"transition":"Reactive"},{"nodeID":2,"transition":"ScriptedResponse"},{"nodeID":0,"transition":null}]}},"action":{"version":"1.0.0","type":"SLIM","config":{"prompts":[{"prompt_id":"RI_JBO_LikesPenguins_AN_03","prompt":"I like lots of animals, but the penguin is the best of the best. <break size='.3'/> Great color scheme."}],"mim_type":"announcement"}},"final":false,"fireAndForget":false},"ts":1514742227296,"transID":"tid:25bf5e7e-ee52-11e7-be44-8ace4cffad67","msgID":"a2abdd8e-0b6f-4d06-bff7-22b4b7b5d42c","timings":{"total":2670,"skill":10},"final":true}</li></ul><p>The timestamps in the messages appearing in hub_incoming are generated on the Hub, so a way to get a sense of the time skew between the two systems is to look at e.g. the difference between the timestamp on the SOS message from he Hub and the one on the (related) SOS message being posted to the Listener Loop. In this case they report being 20ms apart (1514742225709 (Jetstream message) - 1514742225689 (Hub msg) = 20).</p><h2 id="TheJetstreamServiceAPI-JetstreamFlowDiagram"><span style="color: rgb(0,0,0);">Jetstream Flow Diagram</span></h2><p><span style="color: rgb(0,0,0);">Jetstream was originally developed from the following diagram showing how Local and Global turns are handled. Further functions and turn types have since been added to Jetstream (i.e. Enrollment and Pronunciation Learning), but the basic structure still holds and serves as a useful sketch of its operation.</span></p><p><span style="color: rgb(0,0,0);"><span class="confluence-embedded-file-wrapper confluence-embedded-manual-size"><img class="confluence-embedded-image" width="700" src="../download/attachments/12594826/V1.X ASR%252FGLSM - State machine (1).png%3Fversion=1&modificationDate=1526940533000&api=v2" data-image-src="/download/attachments/12594826/V1.X%20ASR%252FGLSM%20-%20State%20machine%20%281%29.png?version=1&modificationDate=1526940533000&api=v2" data-unresolved-comment-count="0" data-linked-resource-id="19468176" data-linked-resource-version="1" data-linked-resource-type="attachment" data-linked-resource-default-alias="V1.X ASR%2FGLSM - State machine (1).png" data-base-url="https://confluence.jibo.com" data-linked-resource-content-type="image/png" data-linked-resource-container-id="12594826" data-linked-resource-container-version="151"/></span></span></p><p><span style="color: rgb(0,0,0);">Source: <a class="external-link" href="https://www.lucidchart.com/documents/edit/e0b29fb6-898a-4450-902a-815b9a8ce361/1" rel="nofollow">link</a></span></p><h2 id="TheJetstreamServiceAPI-"><span style="color: rgb(0,0,0);"><br/></span></h2><h2 id="TheJetstreamServiceAPI-Summary"><span style="color: rgb(0,0,0);">Summary</span></h2><p><span style="color: rgb(0,0,0);">And this concludes our tour of the Jetstream system.</span></p><p><span style="color: rgb(0,0,0);">Comments and corrections are welcome.</span></p><div><span style="color: rgb(0,0,0);"><br/></span></div></span><span style="color: rgb(0,0,0);"><br/></span></p><p><span style="color: rgb(0,0,0);"> <br/> </span></p></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
<!--
|
||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
|
||
<rdf:Description
|
||
rdf:about="https://confluence.jibo.com/display/SER/The+Jetstream+Service+API"
|
||
dc:identifier="https://confluence.jibo.com/display/SER/The+Jetstream+Service+API"
|
||
dc:title="The Jetstream Service API"
|
||
trackback:ping="https://confluence.jibo.com/rpc/trackback/12594826"/>
|
||
</rdf:RDF>
|
||
-->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="labels-section" class="pageSection group">
|
||
<div class="labels-section-content content-column" entityid="12594826" entitytype="page">
|
||
<div class="labels-content">
|
||
|
||
<ul class="label-list label-list-right has-pen">
|
||
<li class="no-labels-message">
|
||
No labels
|
||
</li>
|
||
<li class="labels-edit-container">
|
||
<a href="ii7.html#" class="show-labels-editor" title="Edit Labels">
|
||
<span class="aui-icon aui-icon-small aui-iconfont-edit-small">Edit Labels</span>
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="comments-section" class="pageSection group">
|
||
|
||
|
||
|
||
|
||
<div class="bottom-comment-panels comment-panels">
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div class="quick-comment-container comment add"><p class="comment-user-logo"><a class="userLogoLink" data-username="jon.ferguson" href="../users/profile/editmyprofilepicture.action.html" title="Add a picture of yourself"><img class="userLogo logo defaultLogo" src="../s/en_US/6441/82994790ee2f720a5ec8daf4850ac5b7b34d2194/_/images/icons/profilepics/add_profile_pic.png" alt="User icon: Add a picture of yourself" width="48" height="48"></a></p><div class="quick-comment-body"><div class="quick-comment-loading-container" style="display:none;"></div><div id="editor-messages"></div><div id="all-messages"></div><form style="display:block;" class="quick-comment-form aui" method="post" name="inlinecommentform" action="https://confluence.jibo.com/pages/doaddcomment.action?pageId=12594826"><div title="Add a Comment" class="quick-comment-prompt"><span>Write a comment…</span></div></form></div></div>
|
||
|
||
</div>
|
||
|
||
<div id="comments-actions" class="aui-toolbar noprint">
|
||
<p class="toolbar-group">
|
||
<span class="toolbar-item"><a href="../display/SER/The+Jetstream+Service+API%3FshowComments=true&showCommentArea=true.html#addcomment" id="add-comment-rte" accesskey="m" class="toolbar-trigger full-load">Add Comment</a></span>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</div>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="space-tools-web-items" class="hidden">
|
||
<div data-label="Overview" data-href="/spaces/viewspacesummary.action?key=SER">Overview</div>
|
||
<div data-label="Content Tools" data-href="/pages/reorderpages.action?key=SER">Content Tools</div>
|
||
</div>
|
||
|
||
|
||
|
||
|
||
</div><!-- \#main -->
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<div id="footer" role="contentinfo">
|
||
<section class="footer-body">
|
||
|
||
|
||
|
||
|
||
<ul id="poweredby">
|
||
<li class="noprint">Powered by <a href="http://www.atlassian.com/software/confluence" class="hover-footer-link" rel="nofollow">Atlassian Confluence</a> <span id='footer-build-information'>5.10.8</span></li>
|
||
<li class="print-only">Printed by Atlassian Confluence 5.10.8</li>
|
||
<li class="noprint"><a href="https://support.atlassian.com/help/confluence" class="hover-footer-link" rel="nofollow">Report a bug</a></li>
|
||
<li class="noprint"><a href="http://www.atlassian.com/about/connected.jsp?s_kwcid=Confluence-stayintouch" class="hover-footer-link" rel="nofollow">Atlassian News</a></li>
|
||
</ul>
|
||
|
||
|
||
|
||
<div id="footer-logo"><a href="http://www.atlassian.com/" rel="nofollow">Atlassian</a></div>
|
||
|
||
|
||
|
||
</section>
|
||
</div>
|
||
|
||
|
||
</div>
|
||
|
||
</div><!-- \#full-height-container -->
|
||
</div><!-- \#page -->
|
||
|
||
<span style="display:none;" id="confluence-server-performance">{"serverDuration": 204, "requestCorrelationId": "644f714864d33410"}</span>
|
||
|
||
|
||
<script type="text/javascript">AJS.BigPipe=AJS.BigPipe||{};AJS.BigPipe.metrics=AJS.BigPipe.metrics||{};AJS.BigPipe.metrics.pageEnd=typeof window.performance!=="undefined"&&typeof window.performance.now==="function"?Math.ceil(window.performance.now()):0;AJS.BigPipe.metrics.isBigPipeEnabled='false'==='true';</script>
|
||
</body>
|
||
</html>
|
||
|