মতামত ও পরামর্শ নিয়ে কাজ করুন

গুগল ডক্স ব্যবহারকারীদের মন্তব্য লেখা এবং পরামর্শ দেওয়ার মাধ্যমে একসাথে কাজ করার সুযোগ দেয়, যা অনুমোদনের অপেক্ষায় থাকা স্থগিত সম্পাদনা হিসেবে কাজ করে।

আপনি এপিআই ব্যবহার করে ডকুমেন্টের টেক্সটের মধ্যেই প্রস্তাবিত পরিবর্তনগুলো দেখতে পারেন। ডেভেলপার প্রিভিউতে, আপনি প্রোগ্রাম্যাটিকভাবে কমেন্ট এবং সাজেশন থ্রেড পড়তে, তৈরি করতে, উত্তর দিতে, আপডেট করতে বা মুছে ফেলতে পারেন।

যখন আপনি ডকুমেন্টের বিষয়বস্তু আনার জন্য documents.get মেথড ব্যবহার করেন, তখন সেই বিষয়বস্তুতে অমীমাংসিত সাজেশন অন্তর্ভুক্ত থাকতে পারে। documents.get কীভাবে সাজেশনগুলো উপস্থাপন করবে তা নিয়ন্ত্রণ করতে, ঐচ্ছিক SuggestionsViewMode প্যারামিটারটি ব্যবহার করুন। এই প্যারামিটারটির সাথে নিম্নলিখিত ফিল্টার শর্তগুলো উপলব্ধ রয়েছে:

  • SUGGESTIONS_INLINE সহ কন্টেন্ট নিন, যাতে মুছে ফেলা বা যোগ করার জন্য অপেক্ষাধীন টেক্সট ডকুমেন্টে প্রদর্শিত হয়।
  • সমস্ত পরামর্শ গৃহীত হলে কন্টেন্টটি প্রিভিউ হিসেবে দেখুন।
  • সমস্ত পরামর্শ প্রত্যাখ্যান করে, কোনো সাজেশন ছাড়া কন্টেন্টের প্রিভিউ পান।

আপনি যদি SuggestionsViewMode প্রদান না করেন, তাহলে Google Docs API বর্তমান ব্যবহারকারীর বিশেষাধিকার অনুযায়ী একটি ডিফল্ট সেটিং ব্যবহার করে।

পরামর্শ ও সূচক

SuggestionsViewMode গুরুত্বপূর্ণ হওয়ার একটি কারণ হলো, সাজেশন আছে কি নেই তার ওপর নির্ভর করে রেসপন্সের ইনডেক্সগুলো পরিবর্তিত হতে পারে, যেমনটা নিচে দেখানো হয়েছে।

পরামর্শ সহ বিষয়বস্তু পরামর্শ ছাড়া বিষয়বস্তু
{
 "tabs": [
  {
   "documentTab": {
    "body": {
     "content": [
      {
       "startIndex": 1,
       "endIndex": 31,
       "paragraph": {
        "elements": [
         {
          "startIndex": 1,
          "endIndex": 31,
          "textRun": {
           "content": "Text preceding the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 31,
       "endIndex": 51,
       "paragraph": {
        "elements": [
         {
          "startIndex": 31,
          "endIndex": 50,
          "textRun": {
           "content": "Suggested insertion",
           "suggestedInsertionIds": [
            "suggest.vcti8ewm4mww"
           ],
           "textStyle": {}
          }
         },
         {
          "startIndex": 50,
          "endIndex": 51,
          "textRun": {
           "content": "\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 51,
       "endIndex": 81,
       "paragraph": {
        "elements": [
         {
          "startIndex": 51,
          "endIndex": 81,
          "textRun": {
           "content": "Text following the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

{
 "tabs": [
  {
   "documentTab": {
    "body": {
     "content": [
      {
       "startIndex": 1,
       "endIndex": 31,
       "paragraph": {
        "elements": [
         {
          "startIndex": 1,
          "endIndex": 31,
          "textRun": {
           "content": "Text preceding the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 31,
       "endIndex": 32,
       "paragraph": {
        "elements": [
         {
          "startIndex": 31,
          "endIndex": 32,
          "textRun": {
           "content": "\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      },
      {
       "startIndex": 32,
       "endIndex": 62,
       "paragraph": {
        "elements": [
         {
          "startIndex": 32,
          "endIndex": 62,
          "textRun": {
           "content": "Text following the suggestion\n",
           "textStyle": {}
          }
         }
        ],
        "paragraphStyle": {
         "namedStyleType": "NORMAL_TEXT",
         "direction": "LEFT_TO_RIGHT"
        }
       }
      }
     ]
    }
   }
  }
 ]
},

উপরের উত্তরে, "Text following the suggestion" লাইনটি সম্বলিত প্যারাগ্রাফটি SuggestionsViewMode ব্যবহার করার ফলে সৃষ্ট পার্থক্যটি দেখায়। এর মান SUGGESTIONS_INLINE সেট করা থাকলে, ParagraphElement এর startIndex ৫১ থেকে শুরু হয় এবং endIndex ৮১-তে শেষ হয়। সাজেশন ছাড়া, startIndex এবং endIndex পরিসর ৩২ থেকে ৬২-এর মধ্যে থাকে।

পরামর্শ ছাড়াই কন্টেন্ট পান

নিম্নলিখিত আংশিক কোড নমুনাটি দেখায় যে কীভাবে SuggestionsViewMode প্যারামিটারটিকে PREVIEW_WITHOUT_SUGGESTIONS এ সেট করে সমস্ত সাজেশন (যদি থাকে) বাতিল করে একটি ডকুমেন্টকে প্রিভিউ হিসাবে পাওয়া যায়।

জাভা

final string SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS";
Document doc =
    service
        .documents()
        .get(DOCUMENT_ID)
        .setIncludeTabsContent(true)
        .setSuggestionsViewMode(SUGGEST_MODE)
        .execute();

পাইথন

SUGGEST_MODE = "PREVIEW_WITHOUT_SUGGESTIONS"
result = (
  service.documents()
  .get(
      documentId=DOCUMENT_ID,
      includeTabsContent=True,
      suggestionsViewMode=SUGGEST_MODE,
  )
  .execute()
)

SuggestionsViewMode প্যারামিটারটি বাদ দেওয়া, প্যারামিটারের মান হিসেবে DEFAULT_FOR_CURRENT_ACCESS প্রদান করার সমতুল্য।

শৈলীর পরামর্শ

ডকুমেন্টে স্টাইল সাজেশনও থাকতে পারে। এগুলো হলো ফরম্যাটিং এবং উপস্থাপনার জন্য প্রস্তাবিত পরিবর্তন, বিষয়বস্তুর কোনো পরিবর্তন নয়।

টেক্সট সংযোজন বা অপসারণের মতো নয়, এগুলো ইনডেক্সগুলোকে স্থানান্তরিত করে না—যদিও এগুলো একটি TextRun ছোট ছোট খণ্ডে বিভক্ত করতে পারে—বরং প্রস্তাবিত স্টাইল পরিবর্তন সম্পর্কে শুধু টীকা যোগ করে।

এরকম একটি অ্যানোটেশন হলো SuggestedTextStyle , যা দুটি অংশ নিয়ে গঠিত:

  • textStyle বর্ণনা করে যে প্রস্তাবিত পরিবর্তনের পর টেক্সটটি কীভাবে স্টাইল করা হবে, কিন্তু কী পরিবর্তন হয়েছে তা বলে না।

  • textStyleSuggestionState , যা নির্দেশ করে যে সাজেশনটি textStyle এর ফিল্ডগুলোকে কীভাবে পরিবর্তন করবে।

আপনি নিম্নলিখিত ডকুমেন্ট ট্যাবের উদ্ধৃতাংশে এটি দেখতে পারেন, যেখানে একটি প্রস্তাবিত শৈলী পরিবর্তন অন্তর্ভুক্ত রয়েছে:

[01] "paragraph": {
[02]    "elements": [
[03]        {
[04]            "endIndex": 106,
[05]            "startIndex": 82,
[06]            "textRun": {
[07]                "content": "Some text that does not ",
[08]                "textStyle": {}
[09]            }
[10]        },
[11]        {
[12]            "endIndex": 115,
[13]            "startIndex": 106,
[14]            "textRun": {
[15]                "content": "initially",
[16]                "suggestedTextStyleChanges": {
[17]                    "suggest.xymysbs9zldp": {
[18]                        "textStyle": {
[19]                            "backgroundColor": {},
[20]                            "baselineOffset": "NONE",
[21]                            "bold": true,
[22]                            "fontSize": {
[23]                                "magnitude": 11,
[24]                                "unit": "PT"
[25]                            },
[26]                            "foregroundColor": {
[27]                                "color": {
[28]                                    "rgbColor": {}
[29]                                }
[30]                            },
[31]                            "italic": false,
[32]                            "smallCaps": false,
[33]                            "strikethrough": false,
[34]                            "underline": false
[35]                        },
[36]                        "textStyleSuggestionState": {
[37]                            "boldSuggested": true,
[38]                            "weightedFontFamilySuggested": true
[39]                        }
[40]                    }
[41]                },
[42]                "textStyle": {
[43]                    "italic": true
[44]                }
[45]            }
[46]        },
[47]        {
[48]            "endIndex": 143,
[49]            "startIndex": 115,
[50]            "textRun": {
[51]                "content": " contain any boldface text.\n",
[52]                "textStyle": {}
[53]            }
[54]        }
[55]    ],
[56]    "paragraphStyle": {
[57]        "direction": "LEFT_TO_RIGHT",
[58]        "namedStyleType": "NORMAL_TEXT"
[59]    }
[60] }

উপরের নমুনাটিতে, অনুচ্ছেদটি ৩টি টেক্সট রান নিয়ে গঠিত, যা যথাক্রমে ৬, ১৪ এবং ৫০ নম্বর লাইন থেকে শুরু হয়েছে। মাঝের টেক্সট রানটি পরীক্ষা করুন:

  • লাইন ১৬: একটি suggestedTextStyleChanges অবজেক্ট আছে।
  • লাইন ১৮: textStyle বিভিন্ন ফরম্যাটিং নির্দিষ্ট করে।
  • লাইন ৩৬: textStyleSuggestionState আপনাকে জানায় যে, এই স্পেসিফিকেশনের শুধুমাত্র বোল্ড অংশটিই সাজেশন ছিল।
  • লাইন ৪২: এই টেক্সট রানের ইটালিক স্টাইলিং বর্তমান ডকুমেন্টেরই একটি অংশ (এবং সাজেশন দ্বারা প্রভাবিত নয়)।

শুধুমাত্র textStyleSuggestionStatetrue সেট করা স্টাইল ফিচারগুলোই সাজেশনের অংশ।

মন্তব্য তৈরি ও পরিচালনা করুন

আপনি documents.batchUpdate মেথডটি ব্যবহার করে প্রোগ্রাম্যাটিকভাবে কমেন্ট ও রিপ্লাই যোগ করতে, কমেন্ট এডিট করতে এবং কমেন্ট বা রিপ্লাই ডিলিট করতে পারেন।

মন্তব্য বা পরামর্শ সম্বলিত ব্যাচ আপডেট করার সময়, সম্ভাব্য আংশিক ব্যর্থতার জন্য নজর রাখা উচিত। আরও তথ্যের জন্য, ‘মন্তব্য এবং পরামর্শ আপডেটের অবস্থা’ দেখুন।

একটি মন্তব্য লিখুন

একটি মন্তব্য থ্রেড যুক্ত করতে, InsertCommentRequest অবজেক্টটি ব্যবহার করুন। আপনাকে অবশ্যই মন্তব্যের মূল লেখা এবং মন্তব্যটি সংযুক্ত করার জন্য একটি অ্যাঙ্কর লোকেশন (যেমন একটি রেঞ্জ) প্রদান করতে হবে।

নিম্নলিখিত JSON উদাহরণটি নির্দিষ্ট পরিসরে একটি অনির্বাচিত মন্তব্য থ্রেড যোগ করে:

{
  "requests": [
    {
      "insertComment": {
        "content": "This is a comment added via the API.",
        "range": {
          "startIndex": 10,
          "endIndex": 25
        }
      }
    }
  ]
}

assigneeEmailAddress ফিল্ডে কোনো নির্দিষ্ট ব্যবহারকারীর ইমেল দিয়ে আপনি তাকে একটি মন্তব্য বরাদ্দ করতে পারেন:

{
  "requests": [
    {
      "insertComment": {
        "content": "Please review this paragraph.",
        "assigneeEmailAddress": "user@example.com",
        "range": {
          "startIndex": 10,
          "endIndex": 25
        }
      }
    }
  ]
}

একটি উত্তর যোগ করুন অথবা পদক্ষেপ নিন

কোনো মন্তব্য বা পরামর্শ থ্রেডের উত্তর দিতে, অথবা কোনো থ্রেড সমাধান বা পুনরায় খুলতে, AddCommentReplyRequest ব্যবহার করুন।

একটি উত্তর একটি Post অবজেক্ট দ্বারা উপস্থাপিত হয়। Post অবজেক্টটিতে উত্তরের content থাকে এবং এতে ঐচ্ছিকভাবে একটি commentAction (থ্রেডটি RESOLVE বা REOPEN জন্য) নির্দিষ্ট করা যায়।

একটি বিদ্যমান মন্তব্য থ্রেডের নিম্নলিখিত নমুনা উত্তরগুলো দেওয়া হলো:

{
  "requests": [
    {
      "addCommentReply": {
        "commentId": "comment_thread_id",
        "post": {
          "content": "Replying to the comment thread."
        }
      }
    }
  ]
}

নিম্নলিখিত নমুনাটি একটি মন্তব্য থ্রেড সমাধান করে, যার জন্য কোনো বিষয়বস্তুর প্রয়োজন নেই:

{
  "requests": [
    {
      "addCommentReply": {
        "commentId": "comment_thread_id",
        "post": {
          "commentAction": "RESOLVE"
        }
      }
    }
  ]
}

একটি পোস্ট সম্পাদনা করুন

আপনার লেখা কোনো পোস্টের টেক্সট কন্টেন্ট সম্পাদনা করতে, UpdateCommentPostRequest ব্যবহার করুন। আপনাকে অবশ্যই থ্রেড আইডি ( commentId অথবা suggestionId ), যে পোস্টটি সম্পাদনা করতে চান তার postId এবং নতুন প্লেইন টেক্সট content উল্লেখ করতে হবে।

মনে রাখবেন যে আপনি কোনো সাজেশন থ্রেডের মূল পোস্টটি সম্পাদনা করতে পারবেন না (কারণ সেগুলি সাজেস্ট-মোড সম্পাদনার মাধ্যমে তৈরি হয়)।

{
  "requests": [
    {
      "updateCommentPost": {
        "commentId": "comment_thread_id",
        "postId": "post_id",
        "content": "This is the updated comment text."
      }
    }
  ]
}

মন্তব্য এবং উত্তরগুলো মুছে ফেলুন

  • মন্তব্য থ্রেড মুছুন: সম্পূর্ণ মন্তব্য থ্রেডটি মুছে ফেলার জন্য, DeleteCommentRequest ব্যবহার করুন। আপনি শুধুমাত্র তখনই একটি মন্তব্য থ্রেড মুছতে পারবেন, যদি আপনি থ্রেডটির প্রধান পোস্টের লেখক হন।
  • একটি উত্তর মুছুন: একটি নির্দিষ্ট উত্তর পোস্ট মুছতে, DeleteCommentReplyRequest ব্যবহার করুন। আপনি শুধুমাত্র আপনার নিজের লেখা উত্তরগুলোই মুছতে পারবেন। যে উত্তর পোস্টগুলোতে কোনো কাজ বা দায়িত্বপ্রাপ্ত ব্যক্তি (assignee) রয়েছে, সেগুলো আপনি মুছতে পারবেন না।

নিম্নলিখিত নমুনাটি একটি মন্তব্য থ্রেড মুছে দেয়:

{
  "requests": [
    {
      "deleteComment": {
        "commentId": "comment_thread_id"
      }
    }
  ]
}

পরামর্শ লিখুন এবং পরামর্শের থ্রেডগুলি পরিচালনা করুন

আপনি সরাসরি সম্পাদনার পরিবর্তে পরামর্শ হিসেবে সম্পাদনা লিখতে পারেন এবং প্রোগ্রামগতভাবে পরামর্শের থ্রেড গ্রহণ, প্রত্যাখ্যান বা মুছে ফেলতে পারেন।

সাজেশন-ভিত্তিক ব্যাচ আপডেট করার সময়, সম্ভাব্য আংশিক ব্যর্থতার দিকে নজর রাখা উচিত। আরও তথ্যের জন্য, ‘কমেন্ট এবং সাজেশন আপডেটের অবস্থা’ দেখুন।

সাজেস্ট মোড ব্যবহার করে সাজেশন তৈরি করুন

সম্পাদনাগুলোকে সাজেশন হিসেবে প্রয়োগ করতে, আপনার ব্যাচ আপডেট রিকোয়েস্টে WriteControl অবজেক্টের writeMode ফিল্ডটিকে SUGGEST এ সেট করুন। রিকোয়েস্টের সমস্ত আপডেট সাজেশন হিসেবেই প্রক্রিয়াজাত করা হয়।

{
  "requests": [
    {
      "insertText": {
        "text": "suggested insertion text",
        "location": {
          "index": 1
        }
      }
    }
  ],
  "writeControl": {
    "writeMode": "SUGGEST"
  }
}

সাজেস্ট মোডে অসমর্থিত অনুরোধ

WriteMode.SUGGEST ব্যবহার করার সময়, নিম্নলিখিত অনুরোধের ধরণগুলি সমর্থিত নয় এবং একটি ত্রুটি দেখাবে:

  • AddDocumentTab
  • CreateNamedRange
  • DeleteFooter
  • DeleteHeader
  • DeleteNamedRange
  • DeleteTab
  • UpdateDocumentTabProperties
  • UpdateTableColumnProperties

এছাড়াও, আপনি ডকুমেন্ট ফরম্যাট বা হেডার/ফুটার সেটিংসে পরিবর্তনের পরামর্শ দিতে পারবেন না। UpdateDocumentStyle এ, নিম্নলিখিত স্টাইল টাইপগুলির জন্য পরামর্শ সমর্থিত নয়:

  • documentFormat
  • useEvenPageHeaderFooter
  • useFirstPageHeaderFooter

পরামর্শ থ্রেডগুলি গ্রহণ, প্রত্যাখ্যান বা মুছে ফেলুন

আপনি নিম্নলিখিত অনুরোধগুলি ব্যবহার করে সাজেশন থ্রেডগুলি পরিচালনা করতে পারেন:

  • পরামর্শ গ্রহণ করুন: পরামর্শটি গ্রহণ করতে AcceptSuggestionRequest ব্যবহার করুন। এর জন্য ডকুমেন্টটি সম্পাদনা করার অনুমতি প্রয়োজন।
  • পরামর্শ প্রত্যাখ্যান করুন: পরামর্শটি প্রত্যাখ্যান করতে RejectSuggestionRequest ব্যবহার করুন। এর জন্য ডকুমেন্টটিতে সম্পাদনার অ্যাক্সেস অথবা পরামর্শটির লেখক হওয়া প্রয়োজন।
  • সাজেশন মুছুন: সাজেশনটি মুছতে DeleteSuggestionRequest ব্যবহার করুন। এর জন্য আপনাকে সাজেশনটির লেখক হতে হবে।

নিম্নলিখিত নমুনাটি একটি পরামর্শ থ্রেড গ্রহণ করে:

{
  "requests": [
    {
      "acceptSuggestion": {
        "suggestionId": "suggestion_thread_id"
      }
    }
  ]
}

মন্তব্য এবং পরামর্শের স্ট্যাটাস আপডেট করুন

যেসব অনুরোধের জন্য মন্তব্য বা পরামর্শের থ্রেড সংরক্ষণ করার প্রয়োজন হয় (যেমন মন্তব্য যোগ করা, উত্তর দেওয়া বা পরামর্শ দেওয়া), সেগুলোতে আংশিক ব্যর্থতা দেখা দিতে পারে। এই ক্ষেত্রে, ডকুমেন্ট মডেলের পরিবর্তনগুলো (যেমন টেক্সট যোগ করা বা মুছে ফেলা) ডকস মডেলে সফলভাবে কমিট হলেও, এর সাথে যুক্ত মন্তব্য বা পরামর্শগুলো সংরক্ষিত নাও হতে পারে।

BatchUpdateDocumentResponse এর commentUpdateState ফিল্ডটি পরীক্ষা করে আপনি যাচাই করতে পারেন যে মন্তব্য বা পরামর্শের আপডেটগুলি সফলভাবে প্রয়োগ করা হয়েছে কিনা।

CommentUpdateState এ নিম্নলিখিত স্টেটগুলো ফেরত দেওয়া হয়:

  • ব্যাচ অপারেশনে কোনো মন্তব্য বা পরামর্শমূলক আপডেটের অনুরোধ করা NO_UPDATES_REQUESTED
  • ALL_SAVED : অনুরোধ করা সমস্ত মন্তব্য বা পরামর্শের আপডেট সফলভাবে প্রয়োগ করা হয়েছে।
  • ALL_FAILED_UNKNOWN_REASON : অনুরোধ করা সমস্ত মন্তব্য বা পরামর্শের আপডেট সেভ হতে ব্যর্থ হয়েছে, যদিও ডক্স মডেলের পরিবর্তনগুলো কমিট করা হয়ে থাকতে পারে।