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

এজেন্ট- এবং অবস্থান-স্তরের সেটিংস
আপনি এজেন্ট বা অবস্থান পর্যায়ে কথোপকথনের সেটিংস নির্দিষ্ট করতে পারেন।
এজেন্ট স্তর: এই কথোপকথনমূলক সেটিংসগুলি সমস্ত এন্ট্রি পয়েন্টে এজেন্টের সাথে সমস্ত কথোপকথনের ক্ষেত্রে প্রযোজ্য।
এজেন্ট-স্তরের একটি স্বাগত বার্তা এভাবে শুরু হতে পারে, "ব্রিজপয়েন্ট রানার্সের সাথে যোগাযোগ করার জন্য ধন্যবাদ..."। কথোপকথনের সূচনা কোম্পানি-ব্যাপী কার্যক্রম বা তথ্যের উপর কেন্দ্র করে হতে পারে।
অবস্থান-স্তরের: এই সেটিংস এজেন্ট-স্তরের সেটিংসকে অগ্রাহ্য করে এবং শুধুমাত্র
PLACESHEETওMAPSএন্ট্রি পয়েন্টের মাধ্যমে সেই অবস্থানের সাথে হওয়া কথোপকথনের ক্ষেত্রে প্রযোজ্য হয়।অবস্থান-ভিত্তিক একটি স্বাগত বার্তা এভাবে শুরু হতে পারে, "অ্যাম্ফিথিয়েটার পার্কওয়েতে অবস্থিত ব্রিজপয়েন্ট রানার্সের সাথে যোগাযোগ করার জন্য ধন্যবাদ..."। কথোপকথনের সূচনা স্থান-ভিত্তিক কাজ বা তথ্যের উপর কেন্দ্র করে হতে পারে। একটি অফলাইন বার্তায় উল্লেখ করা থাকতে পারে যে কেন্দ্রটি পরবর্তীতে কখন খোলা হবে।
স্থানীয়
এজেন্ট এবং লোকেশনগুলো তাদের সমর্থিত লোকেলগুলোর জন্য আলাদা সেটিংস নির্দিষ্ট করতে পারে। উদাহরণস্বরূপ, একজন এজেন্ট "en" লোকেলের জন্য ইংরেজিতে একটি স্বাগত বার্তা এবং "es" লোকেলের জন্য স্প্যানিশ ভাষায় একই স্বাগত বার্তা নির্দিষ্ট করতে পারেন। বিজনেস মেসেজেস ব্যবহারকারীর ডিভাইসের রিপোর্ট করা লোকেল এবং কোনো এজেন্ট বা লোকেশনের কথোপকথনমূলক সেটিংস থাকা লোকেলগুলোর মধ্যে মিল খুঁজে বের করে।
এই লোকেল ম্যাচটি প্রতিটি মেসেজের ' resolvedLocale ফিল্ডে রিপোর্ট করা হয়। আপনি কোনো এজেন্ট বা লোকেশনের ' defaultLocale ' নির্দিষ্ট করে দিতে পারেন, যা রিজলভড লোকেল ম্যাচিংকে গুরুত্ব দেয়। 'লোকালাইজেশন এবং লোকেলসমূহ' দেখুন।
বিজনেস মেসেজেস কোন কথোপকথনমূলক সেটিংস প্রয়োগ করতে হবে তা নির্ধারণ করার জন্য নির্ধারিত লোকেল ব্যবহার করে।
স্বাগতম বার্তা
একজন এজেন্ট এবং একজন ব্যবহারকারীর মধ্যে কথোপকথনের প্রথম বার্তাটি হলো এজেন্টের স্বাগত বার্তা। ব্যবহারকারী একটি নতুন কথোপকথন শুরু করার পর স্বাগত বার্তাটি স্বয়ংক্রিয়ভাবে প্রদর্শিত হয়। একটি ভালো স্বাগত বার্তা এজেন্টের সাথে আলাপচারিতার বিষয়ে ব্যবহারকারীর প্রত্যাশা তৈরি করে। স্বাগত বার্তাটি সম্পাদনা করতে, ‘কথোপকথনের সেটিংস আপডেট করুন ’ দেখুন।
কথোপকথন শুরু করার উপায়
একটি ভালো স্বাগত বার্তা এজেন্টের কার্যকারিতা সম্পর্কে উচ্চস্তরে ধারণা দেয় এবং এর কোনো শেষ থাকে না, অন্যদিকে ভালো কথোপকথনের সূচনা ব্যবহারকারীদের প্রায়শই জিজ্ঞাসিত প্রশ্ন বা পরিচিত কার্যকারিতার দিকে পরিচালিত করে।
কথোপকথন শুরু করার অপশনগুলো উল্লম্বভাবে সাজানো প্রস্তাবিত উত্তর হিসেবে স্বাগত বার্তার ঠিক পরেই প্রদর্শিত হয়। যখন কোনো ব্যবহারকারী কথোপকথন শুরু করার কোনো অপশনে ট্যাপ করেন, তখন এজেন্ট পূর্বনির্ধারিত কন্টেন্ট এবং পোস্টব্যাক ডেটা গ্রহণ করে, যা আপনি অপশনটি নির্দিষ্ট করার সময় সেট করে দেন।
যদি কোনো এজেন্ট নির্দিষ্ট কিছু অনুরোধের জন্য স্বয়ংক্রিয় কার্যকারিতা সমর্থন করে, তাহলে কথোপকথন শুরুর উপাদানগুলো সেই অনুরোধগুলোর সাথে সংযুক্ত হতে পারে। এর ফলে আপনি অটোমেশনের জন্য পরিচিত ইনপুটের উপর নির্ভর করতে পারবেন এবং উত্তর দেওয়ার জন্য প্রস্তুত লাইভ এজেন্টদের কাছে ব্যবহারকারীর মুক্ত প্রশ্ন পাঠাতে পারবেন।
একজন এজেন্টের সর্বোচ্চ ৫টি কথোপকথন শুরুর উপায় থাকতে পারে এবং প্রতিটি উপায় সর্বোচ্চ ৩৫টি অক্ষরের হতে পারে।
কথোপকথন শুরু করার উপাদান যোগ করতে বা সম্পাদনা করতে, ‘কথোপকথন সেটিংস আপডেট করুন ’ দেখুন।
অফলাইন বার্তা
যখন কোনো ব্যবহারকারী এজেন্টের কর্মঘণ্টার বাইরে ( MessagingAvailability দ্বারা সংজ্ঞায়িত) তার সাথে কথোপকথন শুরু করেন, তখন তিনি এজেন্টের অফলাইন বার্তাটি পান। অফলাইন বার্তা পাঠানোর ক্ষেত্রে শুধুমাত্র মানব প্রতিনিধির প্রাপ্যতা বিবেচনা করা হয়। যেসব এজেন্টের শুধুমাত্র বট প্রতিনিধি রয়েছে, তারা সর্বদা একটি স্বাগত বার্তা পাঠান। একটি ভালো অফলাইন বার্তা হলো...
- এজেন্ট কেন অনুপলব্ধ তার কারণ জানায়
- ব্যবহারকারীকে পরবর্তী উপযুক্ত পদক্ষেপ বা বিকল্প যোগাযোগের মাধ্যম সম্পর্কে নির্দেশনা দেয়।
- স্বাগত বার্তা এবং কথোপকথন শুরুর সুরের সাথে মেলে
খারাপ অফলাইন বার্তা
দুঃখিত, আমরা বন্ধ আছি।
ভালো অফলাইন বার্তা
এই মুহূর্তে আমরা বন্ধ আছি, তবে আগামীকাল সকাল ৮টায় আবার চালু হব। আপনার যদি জরুরি সহায়তার প্রয়োজন হয়, তাহলে +12223334444 নম্বরে অথবা support@gtb.com-এ সাপোর্টে যোগাযোগ করুন।
অফলাইন বার্তা সম্পাদনা করতে, কথোপকথনের সেটিংস আপডেট করুন দেখুন।
কথোপকথনের সেটিংস আপডেট করুন
স্বাগত বার্তা বা কথোপকথন শুরুর বিষয়গুলো পরিচালনা করতে, কোনো এজেন্ট বা অবস্থানের conversationalSettings ফিল্ড আপডেট করার জন্য আপনাকে বিজনেস কমিউনিকেশনস এপিআই (Business Communications API)- এর মাধ্যমে একটি PATCH অনুরোধ পাঠাতে হয়।
যখন আপনি conversationalSettings ফিল্ডটি আপডেট করেন, তখন আপনাকে অবশ্যই ConversationalSetting অবজেক্টের সমস্ত ফিল্ডের জন্য ভ্যালু অন্তর্ভুক্ত করতে হবে। আপডেট রিকোয়েস্ট আপনার এডিট করা সমস্ত ফিল্ডের বিষয়বস্তু ওভাররাইট করে দেয়, যার মধ্যে যেকোনো চাইল্ড ফিল্ডও অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ, যদি আপনি একটি ওয়েলকাম মেসেজ পরিবর্তন করার জন্য রিকোয়েস্ট করেন কিন্তু কনভারসেশন স্টার্টার অন্তর্ভুক্ত না করেন, তাহলে রিকোয়েস্টটি পূর্ববর্তী সমস্ত কনভারসেশন স্টার্টার মুছে ফেলবে।
পূর্বশর্ত
কথোপকথনের সেটিংস আপডেট করার আগে, আপনার নিম্নলিখিত আইটেমগুলি প্রয়োজন:
- আপনার ডেভেলপমেন্ট মেশিনে আপনার GCP প্রোজেক্টের সার্ভিস অ্যাকাউন্ট কী-এর পাথ
- যে অঞ্চলের জন্য আপনি সেটিংস আপডেট করতে চান
এজেন্ট-স্তরের সেটিংসের জন্য, এজেন্টের
name(উদাহরণস্বরূপ, "brands/12345/agents/67890")আপনি যদি এজেন্টের
nameনা জানেন, তাহলে ‘একটি ব্র্যান্ডের সকল এজেন্টের তালিকা’ দেখুন।অবস্থান-ভিত্তিক সেটিংসের জন্য, অবস্থানের
name(উদাহরণস্বরূপ, "brands/12345/locations/67890")আপনি যদি অবস্থানটির
nameনা জানেন, তাহলে একটি ব্র্যান্ডের সমস্ত অবস্থানের তালিকা দেখুন।আপডেট করার জন্য লোকেল, একটি দুই-অক্ষরের ISO 639-1 ভাষা কোড হিসাবে।
নতুন স্বাগত বার্তা
গোপনীয়তা নীতির ইউআরএল
(ঐচ্ছিক) কথোপকথন শুরুর জন্য লেখা
(ঐচ্ছিক) কথোপকথন শুরু করার জন্য পোস্টব্যাক ডেটা
(ঐচ্ছিক) নতুন অফলাইন বার্তা
আপনি যদি বর্তমান conversationalSettings মানগুলো না জানেন, তাহলে ‘এজেন্টের তথ্য জানুন’ এবং ‘অবস্থানের তথ্য জানুন’ দেখুন।
আপডেট অনুরোধ পাঠান
এজেন্ট বা অবস্থান আপডেট করতে, নিম্নলিখিত কমান্ডটি চালান। পূর্বশর্ত অংশে আপনি যে মানগুলো চিহ্নিত করেছেন, সেগুলোর সাথে ভেরিয়েবলগুলো প্রতিস্থাপন করুন।
আপনি যদি কথোপকথন শুরু করার উপাদান না চান, তাহলে conversationStarters এবং এর অন্তর্ভুক্ত সমস্ত ফিল্ড বাদ দিন।
এজেন্ট-স্তরের সেটিংস
cURL
# This code updates the conversational settings of a Business Messages agent. # Read more: https://developers.google.com/business-communications/business-messages/reference/business-communications/rest/v1/brands.agents/patch # Replace the __BRAND_ID__, __AGENT_ID__ and __LOCALE__ # Make sure a service account key file exists at ./service_account_key.json curl -X PATCH \ "https://businesscommunications.googleapis.com/v1/brands/__BRAND_ID__/agents/__AGENT_ID__?updateMask=businessMessagesAgent.conversationalSettings.__LOCALE__" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-communications" \ -H "$(oauth2l header --json ./service_account_key.json businesscommunications)" \ -d '{ "businessMessagesAgent": { "conversationalSettings": { "__LOCALE__": { "welcomeMessage": { "text": "My first welcome message" }, "offlineMessage": { "text": "My first offline message" }, "privacyPolicy": { "url": "https://www.your-company-website.com/privacy" }, "conversationStarters": [ { "suggestion": { "reply": { "text": "Suggestion 1", "postbackData": "post_back_suggestion_1" } } } ] } } } }'
নোড.জেএস
/** * This code snippet updates the conversationalSettings of a Business Messages agent. * Read more: https://developers.google.com/business-communications/business-messages/reference/business-communications/rest/v1/brands.agents/patch * * This code is based on the https://github.com/google-business-communications/nodejs-businesscommunications Node.js * Business Communications client library. */ /** * Edit the values below: */ const BRAND_ID = 'EDIT_HERE'; const AGENT_ID = 'EDIT_HERE'; const LOCALE = 'en'; const PATH_TO_SERVICE_ACCOUNT_KEY = './service_account_key.json'; const businesscommunications = require('businesscommunications'); const {google} = require('googleapis'); // Initialize the Business Communications API const bcApi = new businesscommunications.businesscommunications_v1.Businesscommunications({}); // Set the scope that we need for the Business Communications API const scopes = [ 'https://www.googleapis.com/auth/businesscommunications', ]; // Set the private key to the service account file const privatekey = require(PATH_TO_SERVICE_ACCOUNT_KEY); async function main() { const authClient = await initCredentials(); const agentName = 'brands/' + BRAND_ID + '/agents/' + AGENT_ID; if (authClient) { // Setup the parameters for the API call const apiParams = { auth: authClient, name: agentName, updateMask: 'businessMessagesAgent.conversationalSettings.' + LOCALE, resource: { businessMessagesAgent: { conversationalSettings: { [LOCALE]: { privacyPolicy: { url: 'https://www.your-company-website.com/privacy' }, welcomeMessage: { text: 'My updated welcome message' }, offlineMessage: { text: 'My updated offline message' }, conversationStarters: [ { suggestion: { reply: { 'text': 'Suggestion 2', 'postbackData': 'post_back_suggestion_2', }, }, } ], }, } } } }; bcApi.brands.agents.patch(apiParams, {}, (err, response) => { if (err !== undefined && err !== null) { console.dir(err); } else { // Agent found console.log(response.data); } }); } else { console.log('Authentication failure.'); } } /** * Initializes the Google credentials for calling the * Business Messages API. */ async function initCredentials() { // Configure a JWT auth client const authClient = new google.auth.JWT( privatekey.client_email, null, privatekey.private_key, scopes, ); return new Promise(function(resolve, reject) { // Authenticate request authClient.authorize(function(err, tokens) { if (err) { reject(false); } else { resolve(authClient); } }); }); } main();
জাভা
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.services.businesscommunications.v1.BusinessCommunications; import com.google.api.services.businesscommunications.v1.model.*; import com.google.common.collect.ImmutableMap; import java.io.FileInputStream; import java.util.Arrays; class Main { /** * Initializes credentials used by the Business Communications API. */ private static BusinessCommunications.Builder getBusinessCommunicationsBuilder() { BusinessCommunications.Builder builder = null; try { GoogleCredential credential = GoogleCredential .fromStream(new FileInputStream("PATH_TO_SERVICE_ACCOUNT_KEY")); credential = credential.createScoped(Arrays.asList( "https://www.googleapis.com/auth/businesscommunications")); credential.refreshToken(); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); JacksonFactory jsonFactory = JacksonFactory.getDefaultInstance(); // Create instance of the Business Communications API builder = new BusinessCommunications .Builder(httpTransport, jsonFactory, null) .setApplicationName(credential.getServiceAccountProjectId()); // Set the API credentials and endpoint builder.setHttpRequestInitializer(credential); } catch (Exception e) { e.printStackTrace(); } return builder; } public static void main(String args[]) { try { // Create client library reference BusinessCommunications.Builder builder = getBusinessCommunicationsBuilder(); String agentName = "brands/BRAND_ID/agents/AGENT_ID"; Agent agent = new Agent().setBusinessMessagesAgent( new BusinessMessagesAgent().setConversationalSettings(ImmutableMap.of("LOCALE", new ConversationalSetting() .setPrivacyPolicy(new PrivacyPolicy().setUrl("PRIVACY_POLICY_URL")) .setWelcomeMessage(new WelcomeMessage().setText("WELCOME_MESSAGE")) .setOfflineMessage(new OfflineMessage().setText("OFFLINE_MESSAGE")) .setConversationStarters(Arrays.asList( new ConversationStarters().setSuggestion(new Suggestion() .setReply(new SuggestedReply() .setText("REPLY_TEXT") .setPostbackData("POSTBACK_DATA"))), ))))); BusinessCommunications.Brands.Agents.Patch request = builder .build().brands().agents().patch(agentName, agent); request.setUpdateMask("businessMessagesAgent.conversationalSettings.LOCALE"); Agent updatedAgent = request.execute(); System.out.println(updatedAgent.toPrettyString()); } catch (Exception e) { e.printStackTrace(); } } }
পাইথন
"""This code updates the conversational settings of a Business Messages agent. Read more: https://developers.google.com/business-communications/business-messages/reference/business-communications/rest/v1/brands.agents/patch This code is based on the https://github.com/google-business-communications/python-businessmessages Python Business Messages client library. """ from oauth2client.service_account import ServiceAccountCredentials from businesscommunications.businesscommunications_v1_client import BusinesscommunicationsV1 from businesscommunications.businesscommunications_v1_messages import ( Agent, BusinessMessagesAgent, ConversationStarters, ConversationalSetting, OfflineMessage, PrivacyPolicy, WelcomeMessage, NegativeBotFeedbackMessage, BusinesscommunicationsBrandsAgentsPatchRequest, ) # Edit the values below: BRAND_ID = 'EDIT_HERE' AGENT_ID = 'EDIT_HERE' SCOPES = ['https://www.googleapis.com/auth/businesscommunications'] SERVICE_ACCOUNT_FILE = './service_account_key.json' credentials = ServiceAccountCredentials.from_json_keyfile_name( SERVICE_ACCOUNT_FILE, scopes=SCOPES) client = BusinesscommunicationsV1(credentials=credentials) agents_service = BusinesscommunicationsV1.BrandsAgentsService(client) agent_name = 'brands/' + BRAND_ID + '/agents/' + AGENT_ID agent=Agent( businessMessagesAgent=BusinessMessagesAgent( conversationalSettings=BusinessMessagesAgent.ConversationalSettingsValue( additionalProperties=[BusinessMessagesAgent.ConversationalSettingsValue.AdditionalProperty( key='en', value=ConversationalSetting( privacyPolicy=PrivacyPolicy(url='https://www.your-company-website.com/privacy'), welcomeMessage=WelcomeMessage(text='Welcome to Business Messages'), offlineMessage=OfflineMessage(text='This is an offline message'), conversationStarters=[ ConversationStarters( suggestion=Suggestion( reply=SuggestedReply(text='Option 1', postbackData='option_1') ) )] ) ) ] ) ) ) updated_agent = agents_service.Patch( BusinesscommunicationsBrandsAgentsPatchRequest( agent=agent, name=agent_name, updateMask='businessMessagesAgent.conversationalSettings.en' ) ) print(updated_agent)
অবস্থান-স্তরের সেটিংস
# This code updates the agent interaction of a bot and human representatives. # Read more: https://developers.google.com/business-communications/business-messages/reference/business-communications/rest/v1/brands.locations/patch # Replace the __BRAND_ID__, __AGENT_ID__, __LOCATION_ID__, __LOCALE__ # Make sure a service account key file exists at ./service_account_key.json curl -X PATCH \ "https://businesscommunications.googleapis.com/v1/brands/__BRAND_ID__/locations/__LOCATION_ID__?updateMask=conversationalSettings.__LOCALE__" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/business-communications" \ -H "$(oauth2l header --json ./service_account_key.json businesscommunications)" \ -d '{ "conversationalSettings": { "__LOCALE__": { "welcomeMessage": { "text": "My second welcome message" }, "offlineMessage": { "text": "My second offline message" }, "privacyPolicy": { "url": "https://www.your-company-website.com/privacy" }, "conversationStarters": [ { "suggestion": { "reply": { "text": "Suggestion 2", "postbackData": "post_back_suggestion_2" } } } ] } } }'
ফরম্যাটিং এবং মান সম্পর্কিত তথ্যের জন্য brands.agents.patch , brands.locations.patch , এবং ConversationalSetting দেখুন।
উদাহরণ
এজেন্ট-স্তরের সেটিংস
curl -X PATCH \
"https://businesscommunications.googleapis.com/v1/brands/BRAND_ID/agents/AGENT_ID?updateMask=businessMessagesAgent.conversationalSettings.en" \
-H "Content-Type: application/json" \
-H "User-Agent: curl/business-communications" \
-H "$(oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY businesscommunications)" \
-d "{
'businessMessagesAgent': {
'conversationalSettings': {
'en': {
'welcomeMessage': {
'text': 'Thanks for contacting Growing Tree Bank. What can I help with today?',
},
'offlineMessage': {
'text': 'We\'re closed for the night. Please reach out to us again tomorrow.',
},
'privacyPolicy': {
'url': 'https://www.growingtreebank.com/privacy',
},
'conversationStarters': [
{
'suggestion': {
'reply': {
'text': 'Set up an account',
'postbackData': 'new-account',
},
},
},
{
'suggestion': {
'reply': {
'text': 'Look up account information',
'postbackData': 'account-lookup',
},
},
},
],
},
},
},
}"অবস্থান-স্তরের সেটিংস
curl -X PATCH \
"https://businesscommunications.googleapis.com/v1/brands/12345/locations/67890?updateMask=conversationalSettings.en" \
-H "Content-Type: application/json" \
-H "User-Agent: curl/business-communications" \
-H "$(oauth2l header --json /path/to/service/account/key businesscommunications)" \
-d "{
'conversationalSettings': {
'en': {
'welcomeMessage': {
'text': 'Thanks for contacting Growing Tree Bank on Amphitheatre Pkwy. What can I help with today?',
},
'offlineMessage': {
'text': 'We\'re closed for the night. Please reach out to us again tomorrow.',
},
'privacyPolicy': {
'url': 'https://www.growingtreebank.com/privacy',
},
'conversationStarters': [
{
'suggestion': {
'reply': {
'text': 'What are your hours?',
'postbackData': 'hours',
},
},
},
{
'suggestion': {
'reply': {
'text': 'Set up an account',
'postbackData': 'new-account',
},
},
},
{
'suggestion': {
'reply': {
'text': 'Look up account information',
'postbackData': 'account-lookup',
},
},
},
{
'suggestion': {
'action': {
'text': 'Call us',
'postbackData': 'call',
'dialAction': {
'phoneNumber': '+12223334444',
},
},
},
},
],
},
},
}"