ইভেন্ট তৈরি করুন

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

এই নিবন্ধটি ব্যাখ্যা করে কিভাবে ক্যালেন্ডার ইভেন্ট তৈরি করবেন এবং আপনার ব্যবহারকারীর ক্যালেন্ডারে সেগুলি যোগ করবেন।

একটি ইভেন্ট যোগ করুন

একটি ইভেন্ট তৈরি করতে, events.insert() পদ্ধতিটি কল করুন যাতে কমপক্ষে এই পরামিতিগুলি প্রদান করা হয়:

  • calendarId হল ক্যালেন্ডার শনাক্তকারী এবং এটি সেই ক্যালেন্ডারের ইমেল ঠিকানা হতে পারে যেখানে ইভেন্ট তৈরি করা হবে অথবা একটি বিশেষ কীওয়ার্ড 'primary' যা লগ ইন করা ব্যবহারকারীর প্রাথমিক ক্যালেন্ডার ব্যবহার করবে। আপনি যে ক্যালেন্ডারটি ব্যবহার করতে চান তার ইমেল ঠিকানা যদি না জানেন, তাহলে আপনি Google Calendar ওয়েব UI এর ক্যালেন্ডার সেটিংসে ("Calendar Address" বিভাগে) এটি পরীক্ষা করতে পারেন অথবা আপনি calendarList.list() কলের ফলাফলে এটি খুঁজে পেতে পারেন।
  • event হলো এমন একটি ইভেন্ট যা শুরু এবং শেষের মতো প্রয়োজনীয় সমস্ত বিবরণ দিয়ে তৈরি করা হয়। শুধুমাত্র দুটি প্রয়োজনীয় ক্ষেত্র হল start এবং end সময়। ইভেন্ট ফিল্ডের সম্পূর্ণ সেটের জন্য event রেফারেন্স দেখুন।

সফলভাবে ইভেন্ট তৈরি করতে, আপনার প্রয়োজন:

  • আপনার OAuth স্কোপটি https://www.googleapis.com/auth/calendar এ সেট করুন যাতে আপনার ব্যবহারকারীর ক্যালেন্ডারে সম্পাদনা অ্যাক্সেস থাকে।
  • নিশ্চিত করুন যে প্রমাণিত ব্যবহারকারীর আপনার প্রদত্ত calendarId ব্যবহার করে ক্যালেন্ডারে লেখার অ্যাক্সেস আছে (উদাহরণস্বরূপ calendarId এর জন্য calendarList.get() কল করে এবং accessRole পরীক্ষা করে)।

ইভেন্ট মেটাডেটা যোগ করুন

ক্যালেন্ডার ইভেন্ট তৈরি করার সময় আপনি ঐচ্ছিকভাবে ইভেন্ট মেটাডেটা যোগ করতে পারেন। যদি আপনি তৈরির সময় মেটাডেটা যোগ না করতে চান, তাহলে আপনি events.update() ব্যবহার করে অনেক ক্ষেত্র আপডেট করতে পারেন; তবে, কিছু ক্ষেত্র, যেমন ইভেন্ট আইডি, শুধুমাত্র events.insert() অপারেশনের সময় সেট করা যেতে পারে।

স্থান
অবস্থান ক্ষেত্রে একটি ঠিকানা যোগ করলে "যাওয়ার সময়" বা দিকনির্দেশ সহ একটি মানচিত্র প্রদর্শনের মতো বৈশিষ্ট্যগুলি সক্ষম হয়।
ইভেন্ট আইডি
কোনও ইভেন্ট তৈরি করার সময়, আপনি আমাদের ফর্ম্যাটের প্রয়োজনীয়তা অনুসারে আপনার নিজস্ব ইভেন্ট আইডি তৈরি করতে পারেন। এটি আপনাকে আপনার স্থানীয় ডাটাবেসের এন্টিটিগুলিকে Google ক্যালেন্ডারের ইভেন্টগুলির সাথে সিঙ্ক করতে সক্ষম করে। ক্যালেন্ডার ব্যাকএন্ডে সফলভাবে সম্পাদন করার পরে কোনও সময়ে অপারেশনটি ব্যর্থ হলে এটি ডুপ্লিকেট ইভেন্ট তৈরি প্রতিরোধ করে। যদি কোনও ইভেন্ট আইডি সরবরাহ না করা হয়, তবে সার্ভার আপনার জন্য একটি তৈরি করে। আরও তথ্যের জন্য ইভেন্ট আইডি রেফারেন্স দেখুন।
অংশগ্রহণকারীরা
আপনার তৈরি করা ইভেন্টটি আপনার অন্তর্ভুক্ত সকল অংশগ্রহণকারীদের একই ইভেন্ট আইডি সহ প্রাথমিক Google ক্যালেন্ডারে প্রদর্শিত হবে। যদি আপনি আপনার সন্নিবেশ অনুরোধে "all" বা "externalOnly" তে sendUpdates সেট করেন, তাহলে সংশ্লিষ্ট অংশগ্রহণকারীরা আপনার ইভেন্টের জন্য একটি ইমেল বিজ্ঞপ্তি পাবেন। আরও জানতে, একাধিক অংশগ্রহণকারী সহ ইভেন্টগুলি দেখুন।

নিম্নলিখিত উদাহরণগুলি একটি ইভেন্ট তৈরি এবং এর মেটাডেটা সেট করার পদ্ধতি প্রদর্শন করে:

যাও

// Refer to the Go quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/go
// Change the scope to calendar.CalendarScope and delete any stored credentials.

event := &calendar.Event{
  Summary: "Google I/O 2015",
  Location: "800 Howard St., San Francisco, CA 94103",
  Description: "A chance to hear more about Google's developer products.",
  Start: &calendar.EventDateTime{
    DateTime: "2015-05-28T09:00:00-07:00",
    TimeZone: "America/Los_Angeles",
  },
  End: &calendar.EventDateTime{
    DateTime: "2015-05-28T17:00:00-07:00",
    TimeZone: "America/Los_Angeles",
  },
  Recurrence: []string{"RRULE:FREQ=DAILY;COUNT=2"},
  Attendees: []*calendar.EventAttendee{
    &calendar.EventAttendee{Email:"lpage@example.com"},
    &calendar.EventAttendee{Email:"sbrin@example.com"},
  },
}

calendarId := "primary"
event, err = srv.Events.Insert(calendarId, event).Do()
if err != nil {
  log.Fatalf("Unable to create event. %v\n", err)
}
fmt.Printf("Event created: %s\n", event.HtmlLink)

জাভা

// Refer to the Java quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/java
// Change the scope to CalendarScopes.CALENDAR and delete any stored
// credentials.

Event event = new Event()
    .setSummary("Google I/O 2015")
    .setLocation("800 Howard St., San Francisco, CA 94103")
    .setDescription("A chance to hear more about Google's developer products.");

DateTime startDateTime = new DateTime("2015-05-28T09:00:00-07:00");
EventDateTime start = new EventDateTime()
    .setDateTime(startDateTime)
    .setTimeZone("America/Los_Angeles");
event.setStart(start);

DateTime endDateTime = new DateTime("2015-05-28T17:00:00-07:00");
EventDateTime end = new EventDateTime()
    .setDateTime(endDateTime)
    .setTimeZone("America/Los_Angeles");
event.setEnd(end);

String[] recurrence = new String[] {"RRULE:FREQ=DAILY;COUNT=2"};
event.setRecurrence(Arrays.asList(recurrence));

EventAttendee[] attendees = new EventAttendee[] {
    new EventAttendee().setEmail("lpage@example.com"),
    new EventAttendee().setEmail("sbrin@example.com"),
};
event.setAttendees(Arrays.asList(attendees));

EventReminder[] reminderOverrides = new EventReminder[] {
    new EventReminder().setMethod("email").setMinutes(24 * 60),
    new EventReminder().setMethod("popup").setMinutes(10),
};
Event.Reminders reminders = new Event.Reminders()
    .setUseDefault(false)
    .setOverrides(Arrays.asList(reminderOverrides));
event.setReminders(reminders);

String calendarId = "primary";
event = service.events().insert(calendarId, event).execute();
System.out.printf("Event created: %s\n", event.getHtmlLink());

জাভাস্ক্রিপ্ট

// Refer to the JavaScript quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/js
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.

const event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': 'lpage@example.com'},
    {'email': 'sbrin@example.com'}
  ],
  'reminders': {
    'useDefault': false,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10}
    ]
  }
};

const request = gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

request.execute(function(event) {
  appendPre('Event created: ' + event.htmlLink);
});

নোড.জেএস

// Refer to the Node.js quickstart on how to setup the environment:
// https://developers.google.com/workspace/calendar/quickstart/node
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.

const event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': 'lpage@example.com'},
    {'email': 'sbrin@example.com'},
  ],
  'reminders': {
    'useDefault': false,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10},
    ],
  },
};

calendar.events.insert({
  auth: auth,
  calendarId: 'primary',
  resource: event,
}, function(err, event) {
  if (err) {
    console.log('There was an error contacting the Calendar service: ' + err);
    return;
  }
  console.log('Event created: %s', event.htmlLink);
});

পিএইচপি

$event = new Google_Service_Calendar_Event(array(
  'summary' => 'Google I/O 2015',
  'location' => '800 Howard St., San Francisco, CA 94103',
  'description' => 'A chance to hear more about Google\'s developer products.',
  'start' => array(
    'dateTime' => '2015-05-28T09:00:00-07:00',
    'timeZone' => 'America/Los_Angeles',
  ),
  'end' => array(
    'dateTime' => '2015-05-28T17:00:00-07:00',
    'timeZone' => 'America/Los_Angeles',
  ),
  'recurrence' => array(
    'RRULE:FREQ=DAILY;COUNT=2'
  ),
  'attendees' => array(
    array('email' => 'lpage@example.com'),
    array('email' => 'sbrin@example.com'),
  ),
  'reminders' => array(
    'useDefault' => FALSE,
    'overrides' => array(
      array('method' => 'email', 'minutes' => 24 * 60),
      array('method' => 'popup', 'minutes' => 10),
    ),
  ),
));

$calendarId = 'primary';
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);

পাইথন

# Refer to the Python quickstart on how to setup the environment:
# https://developers.google.com/workspace/calendar/quickstart/python
# Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
# stored credentials.

event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles',
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': 'lpage@example.com'},
    {'email': 'sbrin@example.com'},
  ],
  'reminders': {
    'useDefault': False,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10},
    ],
  },
}

event = service.events().insert(calendarId='primary', body=event).execute()
print 'Event created: %s' % (event.get('htmlLink'))

রুবি

event = Google::Apis::CalendarV3::Event.new(
  summary: 'Google I/O 2015',
  location: '800 Howard St., San Francisco, CA 94103',
  description: 'A chance to hear more about Google\'s developer products.',
  start: Google::Apis::CalendarV3::EventDateTime.new(
    date_time: '2015-05-28T09:00:00-07:00',
    time_zone: 'America/Los_Angeles'
  ),
  end: Google::Apis::CalendarV3::EventDateTime.new(
    date_time: '2015-05-28T17:00:00-07:00',
    time_zone: 'America/Los_Angeles'
  ),
  recurrence: [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  attendees: [
    Google::Apis::CalendarV3::EventAttendee.new(
      email: 'lpage@example.com'
    ),
    Google::Apis::CalendarV3::EventAttendee.new(
      email: 'sbrin@example.com'
    )
  ],
  reminders: Google::Apis::CalendarV3::Event::Reminders.new(
    use_default: false,
    overrides: [
      Google::Apis::CalendarV3::EventReminder.new(
        reminder_method: 'email',
        minutes: 24 * 60
      ),
      Google::Apis::CalendarV3::EventReminder.new(
        reminder_method: 'popup',
        minutes: 10
      )
    ]
  )
)

result = client.insert_event('primary', event)
puts "Event created: #{result.html_link}"

ইভেন্টগুলিতে ড্রাইভ অ্যাটাচমেন্ট যোগ করুন

আপনি আপনার ক্যালেন্ডার ইভেন্টগুলিতে Google Drive ফাইল যেমন Docs-এ মিটিং নোট, Sheets-এ বাজেট, Slides-এ প্রেজেন্টেশন, অথবা অন্য কোনও প্রাসঙ্গিক Google Drive ফাইল সংযুক্ত করতে পারেন। events.insert() বা later দিয়ে ইভেন্ট তৈরি করার সময় আপনি events.patch() এর মতো আপডেটের অংশ হিসেবে এই অ্যাটাচমেন্টটি যোগ করতে পারেন।

কোনও ইভেন্টে গুগল ড্রাইভ ফাইল সংযুক্ত করার দুটি অংশ হল:

  1. সাধারণত files.get() পদ্ধতি ব্যবহার করে Drive API Files রিসোর্স থেকে alternateLink URL, title এবং mimeType ফাইলটি পান।
  2. অনুরোধের বডিতে attachments ক্ষেত্রগুলি সেট করে এবং supportsAttachments প্যারামিটারটি true তে সেট করে একটি ইভেন্ট তৈরি বা আপডেট করুন।

নিম্নলিখিত কোড উদাহরণটি দেখায় যে কীভাবে একটি বিদ্যমান ইভেন্ট আপডেট করে একটি সংযুক্তি যোগ করতে হয়:

জাভা

public static void addAttachment(Calendar calendarService, Drive driveService, String calendarId,
    String eventId, String fileId) throws IOException {
  File file = driveService.files().get(fileId).execute();
  Event event = calendarService.events().get(calendarId, eventId).execute();

  List<EventAttachment> attachments = event.getAttachments();
  if (attachments == null) {
    attachments = new ArrayList<EventAttachment>();
  }
  attachments.add(new EventAttachment()
      .setFileUrl(file.getAlternateLink())
      .setMimeType(file.getMimeType())
      .setTitle(file.getTitle()));

  Event changes = new Event()
      .setAttachments(attachments);
  calendarService.events().patch(calendarId, eventId, changes)
      .setSupportsAttachments(true)
      .execute();
}

পিএইচপি

function addAttachment($calendarService, $driveService, $calendarId, $eventId, $fileId) {
  $file = $driveService->files->get($fileId);
  $event = $calendarService->events->get($calendarId, $eventId);
  $attachments = $event->attachments;

  $attachments[] = array(
    'fileUrl' => $file->alternateLink,
    'mimeType' => $file->mimeType,
    'title' => $file->title
  );
  $changes = new Google_Service_Calendar_Event(array(
    'attachments' => $attachments
  ));

  $calendarService->events->patch($calendarId, $eventId, $changes, array(
    'supportsAttachments' => TRUE
  ));
}

পাইথন

def add_attachment(calendarService, driveService, calendarId, eventId, fileId):
    file = driveService.files().get(fileId=fileId).execute()
    event = calendarService.events().get(calendarId=calendarId,
                                         eventId=eventId).execute()

    attachments = event.get('attachments', [])
    attachments.append({
        'fileUrl': file['alternateLink'],
        'mimeType': file['mimeType'],
        'title': file['title']
    })

    changes = {
        'attachments': attachments
    }
    calendarService.events().patch(calendarId=calendarId, eventId=eventId,
                                   body=changes,
                                   supportsAttachments=True).execute()

ইভেন্টগুলিতে ভিডিও এবং ফোন কনফারেন্স যোগ করুন

আপনার ব্যবহারকারীদের ফোন কল বা ভিডিও কলের মাধ্যমে দূরবর্তীভাবে দেখা করার সুযোগ দেওয়ার জন্য আপনি ইভেন্টগুলিকে Hangouts এবং Google Meet কনফারেন্সের সাথে সংযুক্ত করতে পারেন।

conferenceData ফিল্ডটি বিদ্যমান কনফারেন্সের বিবরণ পড়তে, কপি করতে এবং মুছে ফেলতে ব্যবহার করা যেতে পারে; এটি নতুন কনফারেন্স তৈরির অনুরোধ করতেও ব্যবহার করা যেতে পারে। কনফারেন্সের বিবরণ তৈরি এবং পরিবর্তন করার জন্য, conferenceDataVersion অনুরোধ প্যারামিটারটি 1 এ সেট করুন।

বর্তমানে তিন ধরণের conferenceData সমর্থিত, যা conferenceData.conferenceSolution.key.type দ্বারা নির্দেশিত:

  1. গ্রাহকদের জন্য Hangouts ( eventHangout )
  2. Google Workspace ব্যবহারকারীদের জন্য ক্লাসিক Hangouts (অবহেলিত; eventNamedHangout )
  3. গুগল মিট ( hangoutsMeet )

calendars এবং calendarList সংগ্রহে conferenceProperties.allowedConferenceSolutionTypes দেখে আপনি জানতে পারবেন কোন ব্যবহারকারীর ক্যালেন্ডারের জন্য কোন কনফারেন্স টাইপ সমর্থিত। সেটিংস সংগ্রহে autoAddHangouts সেটিং পরীক্ষা করে আপনি জানতে পারবেন যে ব্যবহারকারী তাদের নতুন তৈরি সমস্ত ইভেন্টের জন্য Hangouts তৈরি করতে settings করেন কিনা।

type ছাড়াও, conferenceSolution name এবং iconUri ক্ষেত্রগুলিও প্রদান করে যা আপনি নীচে দেখানো হিসাবে কনফারেন্স সমাধান উপস্থাপন করতে ব্যবহার করতে পারেন:

জাভাস্ক্রিপ্ট

const solution = event.conferenceData.conferenceSolution;

const content = document.getElementById("content");
const text = document.createTextNode("Join " + solution.name);
const icon = document.createElement("img");
icon.src = solution.iconUri;

content.appendChild(icon);
content.appendChild(text);

আপনি একটি ইভেন্টের জন্য একটি নতুন কনফারেন্স তৈরি করতে পারেন, একটি নতুন জেনারেট করা requestId সহ একটি createRequest প্রদান করে যা একটি র‍্যান্ডম string হতে পারে। কনফারেন্সগুলি অ্যাসিঙ্ক্রোনাসভাবে তৈরি করা হয়, তবে আপনি সর্বদা আপনার অনুরোধের স্থিতি পরীক্ষা করে আপনার ব্যবহারকারীদের কী ঘটছে তা জানাতে পারেন।

উদাহরণস্বরূপ, একটি বিদ্যমান ইভেন্টের জন্য কনফারেন্স জেনারেশনের অনুরোধ করতে:

জাভাস্ক্রিপ্ট

const eventPatch = {
  conferenceData: {
    createRequest: {requestId: "7qxalsvy0e"}
  }
};

gapi.client.calendar.events.patch({
  calendarId: "primary",
  eventId: "7cbh8rpc10lrc0ckih9tafss99",
  resource: eventPatch,
  sendUpdates: "all",
  conferenceDataVersion: 1
}).execute(function(event) {
  console.log("Conference created for event: %s", event.htmlLink);
});

এই কলের তাৎক্ষণিক প্রতিক্রিয়ায় এখনও সম্পূর্ণরূপে জনবহুল conferenceData নাও থাকতে পারে; এটি স্ট্যাটাস ফিল্ডে pending এর একটি স্ট্যাটাস কোড দ্বারা নির্দেশিত। কনফারেন্সের তথ্য পূরণ করার পরে স্ট্যাটাস কোডটি success পরিবর্তিত হয়। entryPoints ফিল্ডে আপনার ব্যবহারকারীদের জন্য কোন ভিডিও এবং ফোন URI গুলি ডায়াল করার জন্য উপলব্ধ সে সম্পর্কে তথ্য রয়েছে।

আপনি যদি একই কনফারেন্সের বিবরণ সহ একাধিক ক্যালেন্ডার ইভেন্টের সময়সূচী নির্ধারণ করতে চান, তাহলে আপনি সম্পূর্ণ conferenceData এক ইভেন্ট থেকে অন্য ইভেন্টে কপি করতে পারেন।

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