स्टैटिक कार्ड

आसान REST API का इस्तेमाल करके, स्टैटिक कार्ड जोड़े, अपडेट किए, पढ़े, और मिटाए जा सकते हैं. इसके अलावा, किसी स्टैटिक कार्ड में ऑब्जेक्ट अटैच किए जा सकते हैं. जैसे, कोई जगह या मीडिया.

इनके काम करने का तरीका

स्टैटिक कार्ड, डिफ़ॉल्ट रूप से Glass की घड़ी के दाईं ओर दिखते हैं. साथ ही, डिलीवरी के समय उपयोगकर्ता को काम की जानकारी दिखाते हैं. हालांकि, इन पर तुरंत ध्यान देने की ज़रूरत नहीं होती. जैसे, लाइव कार्ड. साथ ही, उपयोगकर्ता अपनी सुविधा के हिसाब से कार्ड को पढ़ सकते हैं या उस पर कार्रवाई कर सकते हैं.

जब Glassware, टाइमलाइन में स्टैटिक कार्ड डालता है, तो Glass उपयोगकर्ताओं को सूचना देने के लिए सूचना की आवाज़ चला सकता है. सभी पुराने स्टैटिक कार्ड भी दाईं ओर चले जाते हैं. ये कार्ड, सात दिनों के बाद या 200 नए कार्ड होने पर टाइमलाइन से हट जाते हैं.

इनका इस्तेमाल कब करना चाहिए

स्टैटिक कार्ड, उपयोगकर्ताओं को समय-समय पर सूचनाएं देने के लिए बेहतरीन होते हैं. इससे उन्हें ज़रूरी चीज़ों के बारे में जानकारी मिलती रहती है. उदाहरण के लिए, खबर देने वाली ऐसी सेवा जो बड़ी खबरों के बारे में तुरंत सूचना देती है. Mirror API के स्टैटिक कार्ड, लाइव कार्ड या इमर्शन भी शुरू कर सकते हैं. इसके लिए, OPEN_URI मेन्यू आइटम का इस्तेमाल करें. इससे आपको हाइब्रिड इंटरैक्शन बनाने की सुविधा मिलती है. इसमें सूचनाओं के लिए स्टैटिक कार्ड और ज़्यादा इंटरैक्टिव अनुभव के लिए लाइव कार्ड या इमर्शन का इस्तेमाल किया जाता है.

टाइमलाइन आइटम के लिए, संभावित कार्रवाइयों की पूरी सूची देखने के लिए, रेफ़रंस दस्तावेज़ देखें.

स्टैटिक कार्ड शामिल करना

स्थैतिक कार्ड (टाइमलाइन आइटम) डालने के लिए, REST एंडपॉइंट पर टाइमलाइन आइटम का JSON फ़ॉर्मैट पोस्ट करें.

टाइमलाइन आइटम में ज़्यादातर फ़ील्ड वैकल्पिक होते हैं. सबसे आसान शब्दों में कहें, तो टाइमलाइन आइटम में सिर्फ़ एक छोटा टेक्स्ट मैसेज होता है. जैसे, इस उदाहरण में दिखाया गया है:

रॉ एचटीटीपी

POST /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Content-Type: application/json
Content-Length: 26

{ "text": "Hello world" }

Java

TimelineItem timelineItem = new TimelineItem();
timelineItem.setText("Hello world");
service.timeline().insert(timelineItem).execute();

Python

timeline_item = {'text': 'Hello world'}
service.timeline().insert(body=timeline_item).execute()

लेन-देन पूरा होने पर, आपको 201 Created रिस्पॉन्स कोड मिलेगा. साथ ही, बनाए गए आइटम की पूरी कॉपी भी मिलेगी. पिछले उदाहरण के लिए, एक कामयाब जवाब ऐसा दिख सकता है:

रॉ एचटीटीपी

HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303

{
 "kind": "glass#timelineItem",
 "id": "1234567890",
 "selfLink": "https://www.googleapis.com/mirror/v1/timeline/1234567890",
 "created": "2012-09-25T23:28:43.192Z",
 "updated": "2012-09-25T23:28:43.192Z",
 "etag": "\"G5BI0RWvj-0jWdBrdWrPZV7xPKw/t25selcGS3uDEVT6FB09hAG-QQ\"",
 "text": "Hello world"
}

उपयोगकर्ता की टाइमलाइन में दिखने वाला आइटम ऐसा दिखता है:

अटैचमेंट के साथ टाइमलाइन आइटम जोड़ना

एक तस्वीर का असर, हज़ारों शब्दों से भी ज़्यादा होता है. यह टाइमलाइन आइटम में शामिल किए जा सकने वाले शब्दों की संख्या से कहीं ज़्यादा है. इसके लिए, टाइमलाइन आइटम में इमेज और वीडियो भी अटैच किए जा सकते हैं. यहां फ़ोटो अटैचमेंट के साथ टाइमलाइन आइटम डालने का एक उदाहरण दिया गया है:

रॉ एचटीटीपी

POST /upload/mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}
Content-Type: multipart/related; boundary="mymultipartboundary"
Content-Length: {length}

--mymultipartboundary
Content-Type: application/json; charset=UTF-8

{ "text": "A solar eclipse of Saturn. Earth is also in this photo. Can you find it?" }
--mymultipartboundary
Content-Type: image/jpeg
Content-Transfer-Encoding: binary

[binary image data]
--mymultipartboundary--

Java

TimelineItem timelineItem = new TimelineItem();
timelineItem.setText("Hello world");
InputStreamContent mediaContent = new InputStreamContent(contentType, attachment);
service.timeline().insert(timelineItem, mediaContent).execute();

Python

timeline_item = {'text': 'Hello world'}
media_body = MediaIoBaseUpload(
    io.BytesIO(attachment), mimetype=content_type, resumable=True)
service.timeline().insert(body=timeline_item, media_body=media_body).execute()

Glass पर, अटैच की गई इमेज वाला टाइमलाइन आइटम कुछ ऐसा दिखता है:

वीडियो अटैच किया जा रहा है

अगर आपको टाइमलाइन आइटम में वीडियो फ़ाइलें अटैच करनी हैं, तो हमारा सुझाव है कि आप एक साथ पूरा पेलोड अपलोड करने के बजाय, वीडियो को स्ट्रीम करें. Google Mirror API, एचटीटीपी लाइव स्ट्रीमिंग, प्रोग्रेसिव डाउनलोड, और रीयल टाइम स्ट्रीमिंग प्रोटोकॉल (आरटीएसपी) के साथ स्ट्रीमिंग की सुविधा देता है. RTSP को अक्सर फ़ायरवॉल ब्लॉक कर देते हैं. इसलिए, जब भी हो सके, अन्य विकल्पों का इस्तेमाल करें.

वीडियो स्ट्रीम करने के लिए, PLAY_VIDEO बिल्ट-इन मेन्यू आइटम का इस्तेमाल करें. साथ ही, मेन्यू आइटम के payload के तौर पर, वीडियो का यूआरएल डालें. ज़्यादा जानकारी के लिए, पहले से मौजूद मेन्यू आइटम जोड़ना और सपोर्ट किए गए मीडिया फ़ॉर्मैट देखें.

पेज पर नंबर डालना

टाइमलाइन के उन आइटम को पेज में बांटा जा सकता है जो एक टाइमलाइन कार्ड में फ़िट नहीं होते. हालांकि, उन्हें एक ही कार्ड से जोड़ा जाना चाहिए. पेज नंबर वाले सभी आइटम में एक ही timeline.id होता है. इसलिए, उनमें मेन्यू आइटम का एक ही सेट होता है. जब कोई उपयोगकर्ता पेज के हिसाब से बांटे गए टाइमलाइन आइटम पर टैप करता है, तो ज़्यादा पढ़ें मेन्यू आइटम दिखता है.

Glass, टाइमलाइन में दिखने वाले text आइटम को अपने-आप पेज में बदल देता है. Glass में अपने-आप पेज नंबर डालने की सुविधा html चालू करने के लिए, article टैग का इस्तेमाल करें. साथ ही, इसकी क्लास प्रॉपर्टी को auto-paginate पर सेट करें. उदाहरण के लिए:

<article class="auto-paginate">
 <h3>Very long list</h3>
 <ul>
   <li>First item</li>
   <li>Second item</li>
   <li>Third item</li>
   <li>Fourth item</li>
   <li>Fifth item</li>
   <li>Sixth item</li>
   <li>...</li>
 </ul>
<article>

मैन्युअल तरीके से पेज नंबर डालने के लिए, उस कॉन्टेंट के लिए article टैग का इस्तेमाल करें जिसे आपको हर कार्ड पर दिखाना है. Glass, हर article टैग के कॉन्टेंट को अलग सब-टाइमलाइन कार्ड में दिखाता है. उदाहरण के लिए, यहां दिए गए एचटीएमएल का इस्तेमाल करके, पेज नंबर के साथ टाइमलाइन आइटम बनाया जा सकता है:

<article>
 <section>
   <p>First page</p>
 </section>
</article>

<article>
 <section>
   <p>Second page</p>
 </section>
</article>

<article>
 <section>
   <p>Third page</p>
 </section>
</article>

पेज नंबर वाली टाइमलाइन के आइटम का पहला कार्ड, डिफ़ॉल्ट रूप से कवर कार्ड के तौर पर दिखता है. साथ ही, जब उपयोगकर्ता ज़्यादा पढ़ें मेन्यू आइटम चुनता है, तब भी यह कार्ड दिखता है. ज़्यादा पढ़ें पर टैप करने के बाद, पहले कार्ड को फिर से दिखने से रोकने के लिए, cover-only सीएसएस क्लास <article> टैग के लिए तय की जा सकती है:

<article class="cover-only">
...

cover-only क्लास, अपने-आप पेज नंबर डालने की सुविधा के साथ काम करने वाले टाइमलाइन आइटम के साथ भी काम करती है:

<article class="auto-paginate cover-only">
...

बंडलिंग

बंडलिंग की सुविधा की मदद से, मिलते-जुलते लेकिन अलग-अलग आइटम को एक साथ ग्रुप किया जा सकता है. जैसे, ईमेल थ्रेड में मौजूद अलग-अलग मैसेज. बंडल में एक मुख्य कवर कार्ड होता है. इस पर टैप करने से, उपयोगकर्ता को एक सब-टाइमलाइन दिखती है. इसमें बंडल के अन्य कार्ड शामिल होते हैं. बंडल को सामान्य टाइमलाइन कार्ड से अलग दिखाने के लिए, बंडल के कवर कार्ड के ऊपर दाएं कोने में एक फ़ोल्ड होता है.

टाइमलाइन आइटम को बंडल करने के लिए, उन्हें bundleId एट्रिब्यूट की एक ही वैल्यू के साथ बनाएं. हाल ही में जोड़ा गया आइटम, बंडल का कवर कार्ड होता है.

यहां दी गई इमेज में, बंडल के कवर कार्ड को दिखाया गया है. इसके सबसे ऊपर दाएं कोने पर फ़ोल्ड किया गया है. इसके नीचे, बंडल किए गए दो कार्ड दिखाए गए हैं.

टाइमलाइन में मौजूद आइटम पढ़ना

आपकी सेवा, टाइमलाइन में जोड़े गए उन सभी आइटम को ऐक्सेस कर सकती है जिन्हें उसने बनाया है. साथ ही, उन सभी आइटम को भी ऐक्सेस कर सकती है जिन्हें उसके साथ शेयर किया गया है. यहां बताया गया है कि आपकी सेवा को दिखने वाले टाइमलाइन आइटम की सूची कैसे बनाएं.

रॉ एचटीटीपी

GET /mirror/v1/timeline HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}

Java

TimelineItem timelineItem = new TimelineItem();
service.timeline().list().execute();

Python

service.timeline().list().execute()

टाइमलाइन आइटम को पाने, अपडेट करने, और मिटाने के लिए, अन्य REST ऑपरेशन का इस्तेमाल किया जा सकता है.

अटैचमेंट ऐक्सेस करना

टाइमलाइन आइटम से जुड़े अटैचमेंट को attachments नाम की ऐरे प्रॉपर्टी के ज़रिए ऐक्सेस किया जा सकता है. इसके बाद, अटैचमेंट के बाइनरी डेटा को अटैचमेंट की contentUrl प्रॉपर्टी या attachments एंडपॉइंट की मदद से हासिल किया जा सकता है.

रॉ एचटीटीपी

GET /mirror/v1/timeline/{itemId}/attachments/{attachmentId} HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer {auth token}

Java

TimelineItem item = service.timeline().get(itemId).execute();
String attachmentId = item.getAttachments().get(0).getId();
service.attachments().get(itemId, attachmentId).executeAsInputStream();

मेन्यू आइटम बनाना

मेन्यू आइटम की मदद से, उपयोगकर्ता टाइमलाइन कार्ड से जुड़ी कार्रवाइयों का अनुरोध कर सकते हैं. ये दो तरह के होते हैं: पहले से मौजूद मेन्यू आइटम और कस्टम मेन्यू आइटम.

इन-बिल्ट मेन्यू आइटम से, Glass की खास सुविधाओं को ऐक्सेस किया जा सकता है. जैसे, टाइमलाइन कार्ड को तेज़ आवाज़ में पढ़ना, किसी जगह पर नेविगेट करना, कोई इमेज शेयर करना या किसी मैसेज का जवाब देना:

कस्टम मेन्यू आइटम की मदद से, अपने ऐप्लिकेशन के लिए खास तौर पर तैयार किए गए Glassware के व्यवहार को दिखाया जा सकता है. साथ ही, ब्रैंडिंग से मेल खाने वाला मेन्यू आइटम आइकॉन भी दिया जा सकता है.

पहले से मौजूद मेन्यू आइटम जोड़ना

टाइमलाइन आइटम में, पहले से मौजूद मेन्यू आइटम जोड़े जा सकते हैं. इसके लिए, उन्हें डालते समय menuItems array भरें. पहले से मौजूद मेन्यू आइटम का इस्तेमाल करने के लिए, आपको सिर्फ़ हर menuItem के action को पॉप्युलेट करना होगा.

रॉ एचटीटीपी

HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303

{
  "text": "Hello world",
  "menuItems": [
    {
      "action": "REPLY"
    }
  ]
}

पसंद के मुताबिक मेन्यू आइटम तय करना

अगर आपको मेन्यू में पहले से मौजूद आइटम पसंद नहीं हैं, तो अपनी पसंद के मुताबिक मेन्यू आइटम बनाए जा सकते हैं. इसके लिए, टाइमलाइन आइटम डालते या अपडेट करते समय यह तरीका अपनाएं:

  • menuItem.action के लिए CUSTOM की जानकारी दें.
  • menuItem.id की जानकारी दें. जब उपयोगकर्ता कस्टम मेन्यू आइटम पर टैप करते हैं, तो आपके Glassware को menuItem.id के साथ एक सूचना मिलती है. इससे आपको सूचना के सोर्स का पता चलता है.
  • Glass पर दिखने वाले iconUrl और displayName को जोड़ने के लिए, menuItem.values एट्रिब्यूट की वैल्यू दें. iconUrl के लिए, 50 x 50 वाली ऐसी PNG इमेज का इस्तेमाल करें जो सफ़ेद रंग की हो और जिसका बैकग्राउंड पारदर्शी हो.
  • displayTime की जानकारी दें. अगर आपने displayTime तय नहीं किया है, तो टाइमलाइन आइटम, टाइमलाइन में सबसे ऊपर चला जाता है. ऐसा तब होता है, जब उपयोगकर्ता कस्टम मेन्यू आइटम पर टैप करते हैं.

रॉ एचटीटीपी

HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303

{
  "text": "Hello world",
  "displayTime": "2013-08-08T22:47:31-07:00",
  "menuItems": [
    {
      "action": "CUSTOM",
      "id": "complete"
      "values": [{
        "displayName": "Complete",
        "iconUrl": "http://example.com/icons/complete.png"
      }]
    }
  ]
}

लोगों को आपकी टाइमलाइन का कार्ड पिन करने की अनुमति देना

आपके पास एक मेन्यू आइटम बनाने का विकल्प होता है. इससे आपके उपयोगकर्ता, टाइमलाइन कार्ड को पिन कर सकते हैं. इससे टाइमलाइन कार्ड, मुख्य घड़ी वाले कार्ड के बाईं ओर हमेशा दिखता है. उपयोगकर्ता, उसी मेन्यू आइटम का इस्तेमाल करके कार्ड को अनपिन भी कर सकते हैं.

पिन करने का मेन्यू आइटम, पहले से मौजूद मेन्यू आइटम होता है. इसलिए, आपको सिर्फ़ menuItem के लिए TOGGLE_PINNED action देना होगा.

रॉ एचटीटीपी

HTTP/1.1 201 Created
Date: Tue, 25 Sep 2012 23:30:11 GMT
Content-Type: application/json
Content-Length: 303

{
  "text": "You can pin or unpin this card.",
 "menuItems": [
    {
      "action": "TOGGLE_PINNED"
    }
  ...
 ]
}

सदस्यताएं

Mirror API की मदद से, सूचनाएं पाने के लिए सदस्यता ली जा सकती है. ये सूचनाएं तब भेजी जाती हैं, जब उपयोगकर्ता किसी टाइमलाइन आइटम पर कोई कार्रवाई करता है या जब उपयोगकर्ता की जगह की जानकारी अपडेट की जाती है. किसी सूचना की सदस्यता लेने पर, आपको एक कॉलबैक यूआरएल देना होता है. यह यूआरएल सूचना को प्रोसेस करता है.

सूचनाएं पाना

Mirror API से सूचना, POST अनुरोध के तौर पर भेजी जाती है. यह अनुरोध, सदस्यता लिए गए एंडपॉइंट को भेजा जाता है. इसमें JSON अनुरोध बॉडी शामिल होती है.

रॉ एचटीटीपी

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "<TYPE>",
      "payload": "<PAYLOAD>"
    }
  ]
}

Java

import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.mirror.model.Notification;

import java.io.IOException;
import java.io.InputStream;
// ...

public class MyClass {
  // ...

  /**
    * Parse a request body into a Notification object.
    *
    * @param requestBody The notification payload sent by the Mirror API.
    * @return Parsed notification payload if successful, {@code null} otherwise.
    */
  static Notification parseNotification(InputStream requestBody) {
    try {
      JsonFactory jsonFactory = new JacksonFactory();

      return jsonFactory.fromInputStream(requetBody, Notification.class);
    } catch (IOException e) {
      System.out.println("An error occurred: " + e);
      return null;
    }
  }

  // ...
}

Python

import json

def parse_notification(request_body):
  """Parse a request body into a notification dict.

  Params:
    request_body: The notification payload sent by the Mirror API as a string.
  Returns:
    Dict representing the notification payload.
  """
  return json.load(request_body)

अगर कोई गड़बड़ी नहीं हुई है, तो आपकी सेवा को एपीआई को 200 OK एचटीटीपी स्टेटस कोड के साथ जवाब देना होगा. अगर आपकी सेवा गड़बड़ी कोड के साथ जवाब देती है, तो Mirror API आपकी सेवा को सूचना फिर से भेज सकता है.

नोटिफ़िकेशन प्रकार

Mirror API, अलग-अलग इवेंट के लिए अलग-अलग सूचना पेलोड भेजता है.

जवाब दें

उपयोगकर्ता ने REPLY मेन्यू आइटम का इस्तेमाल करके, आपकी टाइमलाइन पर मौजूद आइटम का जवाब दिया है:

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "INSERT",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "REPLY"
    }
  ]
}

itemId एट्रिब्यूट को, इस आइटम के ID पर सेट किया गया है:

  • inReplyTo एट्रिब्यूट को उस टाइमलाइन आइटम के ID पर सेट किया जाता है जिसका जवाब दिया जा रहा है.
  • text एट्रिब्यूट को टेक्स्ट ट्रांसक्रिप्शन पर सेट किया गया हो.
  • recipients एट्रिब्यूट को टाइमलाइन आइटम के creator पर सेट किया जाता है. यह उस आइटम का जवाब होता है.

उदाहरण:

{
  "kind": "glass#timelineItem",
  "id": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "inReplyTo": "3236e5b0-b282-4e00-9d7b-6b80e2f47f3d",
  "text": "This is a text reply",
  "recipients": [
    {
      "id": "CREATOR_ID",
      "displayName": "CREATOR_DISPLAY_NAME",
      "imageUrls": [
        "CREATOR_IMAGE_URL"
      ]
    }
  ]
}

मिटाएं

उपयोगकर्ता ने टाइमलाइन का कोई आइटम मिटा दिया है:

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "DELETE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer",
  "userActions": [
    {
      "type": "DELETE"
    }
  ]
}

itemId एट्रिब्यूट को मिटाए गए आइटम के आईडी पर सेट किया गया है. प्रॉडक्ट में, आईडी और isDeleted प्रॉपर्टी के अलावा कोई और मेटाडेटा नहीं होना चाहिए.

पसंद के मुताबिक बनाया गया मेन्यू आइटम चुना गया

उपयोगकर्ता ने आपकी सेवा के ज़रिए सेट किया गया कस्टम मेन्यू आइटम चुना है:

{
  "collection": "timeline",
  "itemId": "3hidvm0xez6r8_dacdb3103b8b604_h8rpllg",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "userActions": [
    {
      "type": "CUSTOM",
      "payload": "PING"
    }
  ]
}

itemId एट्रिब्यूट को उस मेन्यू आइटम के आईडी पर सेट किया जाता है जिसे उपयोगकर्ता ने चुना है.

userActions कैटगरी में, उन कस्टम कार्रवाइयों की सूची होती है जो उपयोगकर्ता ने इस आइटम पर की हैं. आपकी सेवा को उन कार्रवाइयों को उसी हिसाब से हैंडल करना चाहिए.

जगह की जानकारी का अपडेट

मौजूदा उपयोगकर्ता के लिए नई जगह की जानकारी उपलब्ध है:

{
  "collection": "locations",
  "itemId": "latest",
  "operation": "UPDATE",
  "userToken": "harold_penguin",
  "verifyToken": "random_hash_to_verify_referer"
}

जब आपके Glassware को जगह की जानकारी का अपडेट मिलता है, तब glass.locations.get एंडपॉइंट को अनुरोध भेजें, ताकि जगह की सबसे नई जानकारी मिल सके. आपके Glassware को हर दस मिनट में जगह की जानकारी के अपडेट मिलते हैं.

बोला गया निर्देश

उपयोगकर्ता ने कोई वॉइस कमांड चालू की है. उदाहरण के लिए: "Ok Glass, take a note, Cat Stream, Chipotle's birthday is tomorrow". आपके Glassware पर यह सूचना भेजी जाती है:

{
  "collection": "timeline",
  "operation": "INSERT",
  "userToken": "chipotle's_owner",
  "verifyToken": "mew mew mew",
  "itemId": "<ITEM_ID>",
  "userActions": [
    {type: "LAUNCH"}
  ]
}

इस सूचना को अन्य सूचनाओं से अलग करने के लिए, userActions प्रॉपर्टी में LAUNCH वैल्यू का इस्तेमाल किया जाता है.

इसके बाद, टाइमलाइन आइटम को फ़ेच करने के लिए, itemId में मौजूद वैल्यू का इस्तेमाल किया जा सकता है:

{
  "id": "<ITEM_ID>",
  "text": "Chipotle's birthday is tomorrow",
  "recipients": [
    {"id": "CAT_STREAM"}
  ]
}

recipients प्रॉपर्टी में, संपर्क का id होता है. यह इस्तेमाल किए गए वॉइस कमांड को दिखाता है.