2016-08-04 9 views
1

Ich erstellte Rails Web App. Wenn der Nutzer einige Aktionen ausführt, muss meine App ein neues Ereignis in meinem Google Kalender erstellen. Für meine Aufgabe wähle ich die Server-zu-Server-Autorisierung.Rails + Google Kalender-API-Ereignisse nicht erstellt

Ich schrieb neben Ruby-Code:

client = Google::APIClient.new({:application_name => "Rails calendar", 
         :application_version => "1.0"}) 

    keypath = Rails.root.join('config','google_secrets.p12').to_s 
    key = Google::APIClient::PKCS12.load_key(keypath, "notasecret") 

# generate request body for authorization 
    client.authorization = Signet::OAuth2::Client.new(
     :token_credential_uri => 'https://accounts.google.com/o/oauth2/token', 
     :audience    => 'https://accounts.google.com/o/oauth2/token', 
     :scope    => 'https://www.googleapis.com/auth/calendar', 
     :issuer    => '***', 
     :signing_key   => key).tap{ |auth| auth.fetch_access_token! } 


    api_method = client.discovered_api('calendar','v3').events.insert 
    @meeting_data = { 
     guests: [{email: '***@gmail.com'}, {email: '***@gmail.com'}], 
     start_time: "2016-08-10T19:00:00+03:00", 
     end_time: "2016-08-10T20:00:00+03:00", 
     topic: "Test meeting", 
     messages_thread_id: 2 
    } 

    event = { 
     summary: @meeting_data[:topic], 
     start: { 
      dateTime: @meeting_data[:start_time], 
      time_zone: 'Asia/Jerusalem' 
     }, 
     end: { 
      dateTime: @meeting_data[:end_time], 
      time_zone: 'Asia/Jerusalem' 
     }, 
     attendees: @meeting_data[:guests], 
     visibility: 'private', 
     reminders: { 
      useDefault: true, 
     } 
    } 

    result = client.execute(:api_method => api_method, 
          :parameters => {calendarId: 'primary'}, 
          :body => JSON.dump(event), 
          :headers => {'Content-Type' => 'application/json'}) 

    puts result.data.as_json 

Aber wenn ich versuche, dass Code und Server zu verwenden zurückzukehren mich als JSON zur Folge haben, wenn ich auf URL von „erstellt“ Ereignis gehen, zeigen google mir Nachricht, dass Ereignis ist nicht vorhanden.

{"kind"=>"calendar#event", "etag"=>"***", "id"=>"***", "status"=>"confirmed", "htmlLink"=>"https://www.google.com/calendar/event?eid=***", "created"=>"2016-08-04T11:54:46.000Z", "updated"=>"2016-08-04T11:54:46.327Z", "summary"=>"Test meeting", "creator"=>{"email"=>"***", "self"=>true}, "organizer"=>{"email"=>"***", "self"=>true}, "start"=>{"dateTime"=>"2016-08-10T16:00:00Z", "timeZone"=>"Asia/Jerusalem"}, "end"=>{"dateTime"=>"2016-08-10T17:00:00Z", "timeZone"=>"Asia/Jerusalem"}, "visibility"=>"private", "iCalUID"=>"***", "sequence"=>0, "attendees"=>[{"email"=>"***@gmail.com", "displayName"=>"***", "responseStatus"=>"needsAction"}, {"email"=>"***@gmail.com", "displayName"=>"***", "responseStatus"=>"needsAction"}], "reminders"=>{"useDefault"=>true}} 

Antwort

2

Ich konfrontiert mit dem gleichen Problem. Benötigt Schreibregeln für "client_email" für Kalender.

Sie verwenden Organisationskalender. Deshalb kann nur der Organisationsadministrator das tun.

Verwandte Themen