{"id":2096,"date":"2016-06-20T07:44:53","date_gmt":"2016-06-20T13:44:53","guid":{"rendered":"http:\/\/jamesonquave.com\/blog\/?p=2096"},"modified":"2016-06-20T07:49:01","modified_gmt":"2016-06-20T13:49:01","slug":"sirikit-swift-3-resolutions-sirikit-tutorial-part-2","status":"publish","type":"post","link":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/","title":{"rendered":"SiriKit Resolutions with Swift 3 and iOS 10 &#8211; SiriKit Tutorial (Part 2)"},"content":{"rendered":"<h1 id=\"sirikit-resolutions-with-swift-3-in-ios-10-sirikit-tutorial-part-2-\">SiriKit Resolutions with Swift 3 in iOS 10 &#8211; SiriKit Tutorial (Part 2)<\/h1>\n<p><strong><em>This tutorial written on June 20th, 2016 using the Xcode 8 Beta 1, and is using the Swift 3.0 toolchain.<\/em><\/strong><\/p>\n<p>This post is a follow-up in a multi-part SiriKit tutorial. <a href=\"http:\/\/jamesonquave.com\/blog\/adding-siri-to-ios-10-apps-in-swift-tutorial\/\">If you have not read part 1 yet, I recommend starting there.<\/a><\/p>\n<h2 id=\"resolving-requests-from-sirikit\">Resolving requests from SiriKit<\/h2>\n<p>In order to make our Siri integration more useful, we can help fill out the content of our message using a callback method from the <code>INSendMessageIntentHandling<\/code> protocol. Investigating this protocol you can see this show up an optional methods. <\/p>\n<pre><code><div id=\"highlighter_584529\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"plain\">resolveRecipients(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: ([<\/code><code class=\"color2\">INPersonResolutionResult<\/code><code class=\"plain\">]) -&gt; <\/code><code class=\"color2\">Swift<\/code><code class=\"plain\">.<\/code><code class=\"color1\">Void<\/code><code class=\"plain\">)<\/code><\/div><div class=\"line number2 index1 alt1\">&nbsp;<\/div><div class=\"line number3 index2 alt2\"><code class=\"plain\">resolveContent(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color2\">Swift<\/code><code class=\"plain\">.<\/code><code class=\"color1\">Void<\/code><code class=\"plain\">)<\/code><\/div><div class=\"line number4 index3 alt1\">&nbsp;<\/div><div class=\"line number5 index4 alt2\"><code class=\"plain\">resolveGroupName(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color2\">Swift<\/code><code class=\"plain\">.<\/code><code class=\"color2\">Void<\/code><code class=\"plain\">)<\/code><\/div><div class=\"line number6 index5 alt1\">&nbsp;<\/div><div class=\"line number7 index6 alt2\"><code class=\"plain\">resolveServiceName(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color2\">Swift<\/code><code class=\"plain\">.<\/code><code class=\"color1\">Void<\/code><code class=\"plain\">)<\/code><\/div><div class=\"line number8 index7 alt1\">&nbsp;<\/div><div class=\"line number9 index8 alt2\"><code class=\"plain\">resolveSender(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INPersonResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color2\">Swift<\/code><code class=\"plain\">.<\/code><code class=\"color1\">Void<\/code><code class=\"plain\">)<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p>So we can provide SiriKit with further information by implementing as many of these resolutions as we wish. Effectively enabling us to provide information regarding the recipients, content, group name, service name, or sender. These should be relatively self-explanatory.<\/p>\n<p>Let&#8217;s try providing some static data for our title and content, to demonstrate how resolutions work.<\/p>\n<p>First, let&#8217;s add the resolution for the content of the message, by implementing the <code>resolveContent<\/code> protocol method.<\/p>\n<pre><code><div id=\"highlighter_70387\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">func<\/code> <code class=\"plain\">resolveContent(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color1\">Void<\/code><code class=\"plain\">) {<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">message = <\/code><code class=\"string\">\"My message body!\"<\/code><\/div><div class=\"line number3 index2 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">response = <\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">.success(with: message)<\/code><\/div><div class=\"line number4 index3 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">completion(response)<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p>Here we create a string resolution result, and call the success function. This is the simplest way to proceed, but we also have the option of returning a <code>disambiguation<\/code>, <code>confirmationRequired<\/code>, or <code>unsupported<\/code> response. We&#8217;ll get to those later, but first let&#8217;s actually use the data Siri is providing us.<\/p>\n<p>Siri will send in it&#8217;s own transcription of our message in the <code>intent<\/code> object. We&#8217;re interested in the <code>content<\/code> property, so let&#8217;s take that and embed it inside of a string.<\/p>\n<pre><code><div id=\"highlighter_995666\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">func<\/code> <code class=\"plain\">resolveContent(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color1\">Void<\/code><code class=\"plain\">) {<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">message = <\/code><code class=\"string\">\"Dictated text: \\(content!)\"<\/code><\/div><div class=\"line number3 index2 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">response = <\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">.success(with: message)<\/code><\/div><div class=\"line number4 index3 alt1\">&nbsp;<\/div><div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">completion(response)<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p>The content property is an optional, and as such we need to make sure Siri actually provided a transcription. If no transcription was provided then a message won&#8217;t be entirely useful, so we need to tell Siri that the information is missing and we need this value. We can do this by returning a resolution result calling the <code>needsValue<\/code> class method on <code>INStringResolutionResult<\/code>.<\/p>\n<pre><code><div id=\"highlighter_611300\" class=\"syntaxhighlighter nogutter highlightedCode \"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tbody><tr><td class=\"code\"><div class=\"container\"><div class=\"line number1 index0 alt2\"><code class=\"keyword\">func<\/code> <code class=\"plain\">resolveContent(forSendMessage intent: <\/code><code class=\"color2\">INSendMessageIntent<\/code><code class=\"plain\">, with completion: (<\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">) -&gt; <\/code><code class=\"color1\">Void<\/code><code class=\"plain\">) {<\/code><\/div><div class=\"line number2 index1 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">if<\/code> <code class=\"keyword\">let<\/code> <code class=\"plain\">content = intent.content {<\/code><\/div><div class=\"line number3 index2 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">message = <\/code><code class=\"string\">\"Dictated text: \\(content)\"<\/code><\/div><div class=\"line number4 index3 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">response = <\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">.success(with: message)<\/code><\/div><div class=\"line number5 index4 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">completion(response)<\/code><\/div><div class=\"line number6 index5 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number7 index6 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">else<\/code> <code class=\"plain\">{<\/code><\/div><div class=\"line number8 index7 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"keyword\">let<\/code> <code class=\"plain\">response = <\/code><code class=\"color2\">INStringResolutionResult<\/code><code class=\"plain\">.needsValue()<\/code><\/div><div class=\"line number9 index8 alt2\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">completion(response)<\/code><\/div><div class=\"line number10 index9 alt1\"><code class=\"undefined spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"plain\">}<\/code><\/div><div class=\"line number11 index10 alt2\"><code class=\"plain\">}<\/code><\/div><\/div><\/td><\/tr><\/tbody><\/table><\/div><\/code><\/pre>\n<p><img decoding=\"async\" src=\"http:\/\/jamesonquave.com\/blog\/wp-content\/uploads\/what_to_say.png\" alt=\"SiriKit requesting additional information\"><\/p>\n<p>Now SiriKit knows when we try to send a message, that the content value is a requirement. We should implement the same type of thing for the recipients. In this case, recipients can have multiple values, and we can look them up in a variety of ways. If you have a messaging app, you would need to take the <code>INPerson<\/code> intent object that is passed in and try to determine which of your own user&#8217;s the message is intended for.<\/p>\n<p>This goes outside the scope of this Siri tutorial, so I&#8217;ll leave it up to you to implement your own application logic for the <code>resolveRecipients<\/code> method. If you want to see an example implementation, Apple have released some sample code <a href=\"https:\/\/developer.apple.com\/library\/prerelease\/content\/samplecode\/UnicornChat\/Listings\/SiriExtension_UCSendMessageIntentHandler_swift.html\">here<\/a>.<\/p>\n<h2 id=\"more-ios-10-tutorials\">More iOS 10 Tutorials<\/h2>\n<p>We&#8217;ll be continuing to investigate iOS 10 and publish more free tutorials in the future. If you want to follow along be sure to <a href=\"http:\/\/eepurl.com\/sDFL9\">subscribe to our newsletter<\/a> and follow me on <a href=\"http:\/\/twitter.com\/jquave\">Twitter<\/a>.<\/p>\n<p>Thanks,<br \/>\n  Jameson<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SiriKit Resolutions with Swift 3 in iOS 10 &#8211; SiriKit Tutorial (Part 2) This tutorial written on June 20th, 2016 using the Xcode 8 Beta 1, and is using the Swift 3.0 toolchain. This post is a follow-up in a multi-part SiriKit tutorial. If you have not read part 1 yet, I recommend starting there&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_links_to":"","_links_to_target":""},"categories":[10,89,91],"tags":[90,34,33,36,93],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave\" \/>\n<meta property=\"og:description\" content=\"SiriKit Resolutions with Swift 3 in iOS 10 &#8211; SiriKit Tutorial (Part 2) This tutorial written on June 20th, 2016 using the Xcode 8 Beta 1, and is using the Swift 3.0 toolchain. This post is a follow-up in a multi-part SiriKit tutorial. If you have not read part 1 yet, I recommend starting there....\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Jameson Quave\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-20T13:44:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-06-20T13:49:01+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/jamesonquave.com\/blog\/wp-content\/uploads\/what_to_say.png\" \/>\n<meta name=\"author\" content=\"Jameson Quave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jameson Quave\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/\",\"url\":\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/\",\"name\":\"SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave\",\"isPartOf\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/#website\"},\"datePublished\":\"2016-06-20T13:44:53+00:00\",\"dateModified\":\"2016-06-20T13:49:01+00:00\",\"author\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc\"},\"breadcrumb\":{\"@id\":\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jamesonquave.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SiriKit Resolutions with Swift 3 and iOS 10 &#8211; SiriKit Tutorial (Part 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#website\",\"url\":\"https:\/\/jamesonquave.com\/blog\/\",\"name\":\"Jameson Quave\",\"description\":\"Using computer technology to educate, and improve lives.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jamesonquave.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc\",\"name\":\"Jameson Quave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg\",\"caption\":\"Jameson Quave\"},\"sameAs\":[\"http:\/\/jamesonquave.com\"],\"url\":\"https:\/\/jamesonquave.com\/blog\/author\/jquave\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/","og_locale":"en_US","og_type":"article","og_title":"SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave","og_description":"SiriKit Resolutions with Swift 3 in iOS 10 &#8211; SiriKit Tutorial (Part 2) This tutorial written on June 20th, 2016 using the Xcode 8 Beta 1, and is using the Swift 3.0 toolchain. This post is a follow-up in a multi-part SiriKit tutorial. If you have not read part 1 yet, I recommend starting there....","og_url":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/","og_site_name":"Jameson Quave","article_published_time":"2016-06-20T13:44:53+00:00","article_modified_time":"2016-06-20T13:49:01+00:00","og_image":[{"url":"http:\/\/jamesonquave.com\/blog\/wp-content\/uploads\/what_to_say.png"}],"author":"Jameson Quave","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jameson Quave","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/","url":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/","name":"SiriKit Resolutions with Swift 3 and iOS 10 - SiriKit Tutorial (Part 2) - Jameson Quave","isPartOf":{"@id":"https:\/\/jamesonquave.com\/blog\/#website"},"datePublished":"2016-06-20T13:44:53+00:00","dateModified":"2016-06-20T13:49:01+00:00","author":{"@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc"},"breadcrumb":{"@id":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jamesonquave.com\/blog\/sirikit-swift-3-resolutions-sirikit-tutorial-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jamesonquave.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SiriKit Resolutions with Swift 3 and iOS 10 &#8211; SiriKit Tutorial (Part 2)"}]},{"@type":"WebSite","@id":"https:\/\/jamesonquave.com\/blog\/#website","url":"https:\/\/jamesonquave.com\/blog\/","name":"Jameson Quave","description":"Using computer technology to educate, and improve lives.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jamesonquave.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/db6184f355c7f4e3b876d0f228c2fcfc","name":"Jameson Quave","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jamesonquave.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d9786c83345117d560bbeab0e1f26814?s=96&d=retro&r=pg","caption":"Jameson Quave"},"sameAs":["http:\/\/jamesonquave.com"],"url":"https:\/\/jamesonquave.com\/blog\/author\/jquave\/"}]}},"_links":{"self":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/2096"}],"collection":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/comments?post=2096"}],"version-history":[{"count":7,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/2096\/revisions"}],"predecessor-version":[{"id":2105,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/posts\/2096\/revisions\/2105"}],"wp:attachment":[{"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/media?parent=2096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/categories?post=2096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jamesonquave.com\/blog\/wp-json\/wp\/v2\/tags?post=2096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}